<?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>201569</bug_id>
          
          <creation_ts>2019-09-06 17:11:17 -0700</creation_ts>
          <short_desc>OSR entry into wasm misses some contexts</short_desc>
          <delta_ts>2019-09-16 09:56:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1568774</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-06 17:11:17 -0700</bug_when>
    <thetext>OSR entry into wasm misses some contexts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568777</commentid>
    <comment_count>1</comment_count>
      <attachid>378256</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-06 17:20:54 -0700</bug_when>
    <thetext>Created attachment 378256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568782</commentid>
    <comment_count>2</comment_count>
      <attachid>378257</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-06 17:36:07 -0700</bug_when>
    <thetext>Created attachment 378257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568783</commentid>
    <comment_count>3</comment_count>
      <attachid>378258</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-06 17:37:25 -0700</bug_when>
    <thetext>Created attachment 378258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568790</commentid>
    <comment_count>4</comment_count>
      <attachid>378258</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-06 18:32:24 -0700</bug_when>
    <thetext>Comment on attachment 378258
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1685
&gt; +    for (unsigned controlIndex = 0; controlIndex &lt; m_parser-&gt;controlStack().size(); ++controlIndex) {
&gt; +        ExpressionList&amp; expressionStack = m_parser-&gt;controlStack()[controlIndex].enclosedExpressionStack;

NIce!

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1691
&gt; +        const auto&amp; results = m_parser-&gt;controlStack()[controlIndex].controlData.result;
&gt; +        for (auto&amp; value : results)
&gt; +            patchArgs.append(ConstrainedTmp(value, B3::ValueRep::ColdAny));

This is not necessary.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1237
&gt; +            // For each stack entry underneath us we need to replace the value with a phi so we can fill it on OSR entry.
&gt; +            BasicBlock* sourceBlock = expressionStack.size() ? expressionStack[0]-&gt;owner : nullptr;
&gt; +            unsigned blockIndex = 0;
&gt; +            B3::InsertionSet insertionSet(m_proc);
&gt; +            for (unsigned i = 0; i &lt; expressionStack.size(); i++) {
&gt; +                auto* value = expressionStack[i];
&gt; +                while (sourceBlock-&gt;at(blockIndex) != value)
&gt; +                    blockIndex++;

Why can we use the same `sourceBlock` for all B3::Value in enclosedExpressionStack?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1238
&gt; +                auto* phi = data.continuation-&gt;appendNew&lt;Value&gt;(m_proc, Phi,  value-&gt;type(), value-&gt;origin());

Is `data.continuation` correct? OSR entry block and original block will go to the loop-body block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568810</commentid>
    <comment_count>5</comment_count>
      <attachid>378258</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-09-06 19:43:18 -0700</bug_when>
    <thetext>Comment on attachment 378258
Patch

Attachment 378258 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/13008076

New failing tests:
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-slow-memory
stress/test-out-of-memory.js.ftl-eager-no-cjit
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-eager-jettison
stress/test-out-of-memory.js.no-cjit-collect-continuously
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-default-wasm
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-default-wasm
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-collect-continuously
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-slow-memory
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-no-tls-context
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-no-tls-context
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-default-wasm
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-eager
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-no-call-ic
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-default-wasm
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-no-air
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(memory.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(sum.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(start.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(constant.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-collect-continuously
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(sum.wasm)-wasm-no-cjit-yes-tls-context
stress/test-out-of-memory.js.dfg-eager
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-default-wasm
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-no-air
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/default-import-star-error.js.(memory.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(table.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(sum.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-no-air
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/js-wasm-start.js.(start.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-air
wasm.yaml/wasm/modules/js-wasm-cycle.js.(start.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-wasm-eager
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-collect-continuously
stress/test-out-of-memory.js.dfg-eager-no-cjit-validate
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/js-wasm-start.js.(table.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(run-from-wasm.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(run-from-wasm.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/default-import-star-error.js.(constant.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-default-wasm
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(constant.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(start.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(sum.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/default-import-star-error.js.(start.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/wasm-import-wasm-export-i64-error.js.(constant.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/js-wasm-start.js.(memory.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(table.wasm)-default-wasm
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(memory.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/js-wasm-cycle.js.(memory.wasm)-wasm-eager
wasm.yaml/wasm/modules/js-wasm-start.js.(run-from-wasm.wasm)-wasm-no-call-ic
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(table.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(sum.wasm)-wasm-no-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(run-from-wasm.wasm)-wasm-collect-continuously
wasm.yaml/wasm/modules/default-import-star-error.js.(table.wasm)-wasm-slow-memory
wasm.yaml/wasm/modules/wasm-wasm-cycle.js.(constant.wasm)-wasm-eager-jettison
wasm.yaml/wasm/modules/js-wasm-cycle.js.(run-from-wasm.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/stress/streaming-basic.js.(nameSection.wasm)-wasm-no-tls-context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568993</commentid>
    <comment_count>6</comment_count>
      <attachid>378258</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-07 23:18:22 -0700</bug_when>
    <thetext>Comment on attachment 378258
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1691
&gt;&gt; +            patchArgs.append(ConstrainedTmp(value, B3::ValueRep::ColdAny));
&gt; 
&gt; This is not necessary.

Yeah, in fact I think it&apos;s incorrect to do so! I though I deleted it... I&apos;ll add a test.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1237
&gt;&gt; +                    blockIndex++;
&gt; 
&gt; Why can we use the same `sourceBlock` for all B3::Value in enclosedExpressionStack?

True, if you had something like

i32.const
i32.const
if ...
...
end
...
loop

It would be wrong. I&apos;ll add a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568994</commentid>
    <comment_count>7</comment_count>
      <attachid>378258</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-07 23:21:31 -0700</bug_when>
    <thetext>Comment on attachment 378258
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1238
&gt;&gt; +                auto* phi = data.continuation-&gt;appendNew&lt;Value&gt;(m_proc, Phi,  value-&gt;type(), value-&gt;origin());
&gt; 
&gt; Is `data.continuation` correct? OSR entry block and original block will go to the loop-body block.

Yeah, I think it&apos;s sufficient. I could believe there&apos;s a better location for the Phi, I just didn&apos;t think it mattered? The next use of the value must be in the continuation block anyway (continuation is always the fall through block).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568995</commentid>
    <comment_count>8</comment_count>
      <attachid>378320</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-07 23:25:34 -0700</bug_when>
    <thetext>Created attachment 378320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568996</commentid>
    <comment_count>9</comment_count>
      <attachid>378320</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-09-08 01:44:58 -0700</bug_when>
    <thetext>Comment on attachment 378320
Patch

Attachment 378320 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/13012752

New failing tests:
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-eager-jettison
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-air
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-slow-memory
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-eager
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-default-wasm
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-call-ic
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-collect-continuously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569202</commentid>
    <comment_count>10</comment_count>
      <attachid>378386</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-09 11:11:03 -0700</bug_when>
    <thetext>Created attachment 378386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569269</commentid>
    <comment_count>11</comment_count>
      <attachid>378258</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-09 13:29:47 -0700</bug_when>
    <thetext>Comment on attachment 378258
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1238
&gt;&gt;&gt; +                auto* phi = data.continuation-&gt;appendNew&lt;Value&gt;(m_proc, Phi,  value-&gt;type(), value-&gt;origin());
&gt;&gt; 
&gt;&gt; Is `data.continuation` correct? OSR entry block and original block will go to the loop-body block.
&gt; 
&gt; Yeah, I think it&apos;s sufficient. I could believe there&apos;s a better location for the Phi, I just didn&apos;t think it mattered? The next use of the value must be in the continuation block anyway (continuation is always the fall through block).

Ah, right!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569270</commentid>
    <comment_count>12</comment_count>
      <attachid>378386</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-09 13:29:58 -0700</bug_when>
    <thetext>Comment on attachment 378386
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569271</commentid>
    <comment_count>13</comment_count>
      <attachid>378386</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-09 13:32:31 -0700</bug_when>
    <thetext>Comment on attachment 378386
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1251
&gt; +                if (value-&gt;owner != sourceBlock) {
&gt; +                    insertionSet.execute(sourceBlock);
&gt; +                    ASSERT(insertionSet.isEmpty());
&gt; +                    dataLogLnIf(WasmB3IRGeneratorInternal::verbose &amp;&amp; sourceBlock, &quot;Executed insertion set into: &quot;, *sourceBlock);
&gt; +                    blockIndex = 0;
&gt; +                    sourceBlock = value-&gt;owner;
&gt; +                }
&gt; +
&gt; +                while (sourceBlock-&gt;at(blockIndex++) != value)
&gt; +                    ASSERT(blockIndex &lt; sourceBlock-&gt;size());
&gt; +                ASSERT(sourceBlock-&gt;at(blockIndex - 1) == value);

Is this true for constant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569273</commentid>
    <comment_count>14</comment_count>
      <attachid>378386</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-09 13:33:55 -0700</bug_when>
    <thetext>Comment on attachment 378386
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1251
&gt;&gt; +                ASSERT(sourceBlock-&gt;at(blockIndex - 1) == value);
&gt; 
&gt; Is this true for constant?

We skip constants because they are always located in the root block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569274</commentid>
    <comment_count>15</comment_count>
      <attachid>378386</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-09 13:34:52 -0700</bug_when>
    <thetext>Comment on attachment 378386
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1251
&gt;&gt;&gt; +                ASSERT(sourceBlock-&gt;at(blockIndex - 1) == value);
&gt;&gt; 
&gt;&gt; Is this true for constant?
&gt; 
&gt; We skip constants because they are always located in the root block.

Ah, I missed `if (value-&gt;isConstant())` check. Looks correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571138</commentid>
    <comment_count>16</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-16 09:50:40 -0700</bug_when>
    <thetext>This already landed in r249661. Closing this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378256</attachid>
            <date>2019-09-06 17:20:54 -0700</date>
            <delta_ts>2019-09-06 17:36:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201569-20190906172047.patch</filename>
            <type>text/plain</type>
            <size>29267</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY4ZDQyZDQxNzE3ZjM0MjIyOTNlNDM1MDNmYWE3MmQ5ODYwYWI2Li5kOWQ5ODk1MTk1YzJkNTYz
ZTA4YWJlNjE3YTRlYTdjNTkyNTU5ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxOS0wOS0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGZhaWwgdG8gY2FwdHVyZSBzb21lIG9m
CisgICAgICAgIG91ciBjb250ZXh0cyB3aGVuIE9TUiBlbnRlcmluZyBpbnRvIHdhc20gY29kZS4g
QmVmb3JlIHdlIHdvdWxkCisgICAgICAgIG9ubHkgY2FwdHVyZSB0aGUgc3RhdGUgb2YgdGhlIGJs
b2NrIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZQorICAgICAgICBlbnRyYW5jZSBsb29wIGJs
b2NrIGhlYWRlci4gV2UgYWN0dWFsbHkgbmVlZCB0byBjYXB0dXJlIGFsbAorICAgICAgICBlbmNs
b3NlZCBzdGFja3MuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB2YXJpYWJsZXMgZm9yIGFsbCB0aGUgY2FwdHVyZWQKKyAgICAgICAgdmFsdWVzLiBXZSBjYW4g
dXNlIGEgUGhpIGFuZCBpbnNlcnQgYW4gdXBzaWxvbiBqdXN0IGJlbG93IHRoZQorICAgICAgICBj
YXB0dXJlZCB2YWx1ZS4KKworICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZCk6CisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmNyZWF0ZVN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpT
dGFjazo6U3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpTdGFjazo6YXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6U3RhY2s6OnRha2VMYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6U3RhY2s6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpTdGFjazo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OmNvbnZlcnRUb0V4cHJlc3Np
b25MaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3Rh
Y2s6OmF0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6U3RhY2s6OnZhcmlhYmxlQXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI6OmNvbnRyb2xTdGFjayk6CisKIDIwMTktMDktMDUgIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTGF6eUNsYXNzU3RydWN0dXJlOjpzZXRD
b25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRoZSBjb25zdHJ1Y3RvciB0byB0aGUgZ2xvYmFs
IG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CmluZGV4IGE0NjcwM2RjZTlhYzljZjYwYjBhMGZhNDNmODQ2YzgwZDFkOTY1OWQuLmRkMjAwZTFh
MzUxMDczMTJkMWQwNWUyNTIyMjQzMzc1YTQ5NDUyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTEzMiw3ICsxMzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHdhc21Bd2FyZUxleGljYWxHbG9i
YWxPYmplY3QoVk0mKTsKIAotICAgICAgICBib29sIGlzQW55V2FzbUNhbGxlZSgpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQW55V2FzbUNhbGxlZSgpOwogCiAgICAgICAgIC8v
IEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29kZSB3YXMg
ZGVmaW5lZC4KICAgICAgICAgLy8gRGlmZmVycyBmcm9tIFZNOjp2bUVudHJ5R2xvYmFsT2JqZWN0
KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCmluZGV4IGViMTFhMjU5YTJjOTgzYjhlMTU4NDA2OWI0NDAyYzg3ZjZjNzc3
MDkuLmJlNWVkOWFlMzY1ZDQwN2JhY2NkZGE1N2MzMjU4ZWEzZTc3YzU0YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJv
ci5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0z
MjAsNiArMzIxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob0ZUTChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3Rh
dGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVy
T2ZERkdDb21waWxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSopOwpAQCAtNTQx
LDYgKzU0Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIs
IGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1
enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMiLCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMs
IDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5j
dGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImpz
Y09wdGlvbnMiLCBmdW5jdGlvbkpTQ09wdGlvbnMsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgIm9wdGltaXplTmV4dEludm9jYXRpb24iLCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRp
b24sIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dCIsIGZ1bmN0aW9uUmVvcHRpbWl6YXRpb25SZXRyeUNvdW50LCAxKTsKQEAgLTE3MjcsNiArMTcz
MCwzMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdD
b21waWxlcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1i
ZXJPZkRGR0NvbXBpbGVzKGV4ZWMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgaWYgKCFPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworCisgICAgQ2FsbGVyRnVu
Y3RvciB3YXNtVG9KU0ZyYW1lOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoZXhlYywgJnZtLCB3
YXNtVG9KU0ZyYW1lKTsKKyAgICBpZiAoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+aXNB
bnlXYXNtQ2FsbGVlKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJjYWxsZXIgaXMgbm90IGEgd2FzbS0+anMgaW1wb3J0IGZ1bmN0aW9uIik7CisKKyAgICAvLyBX
ZSBoYXZlIGEgd3JhcHBlciBmcmFtZSB0aGF0IHdlIGdlbmVyYXRlIGZvciBpbXBvcnRzLiBJZiB3
ZSBldmVyIGNhbiBkaXJlY3QgY2FsbCBmcm9tIHdhc20gd2Ugd291bGQgbmVlZCB0byBjaGFuZ2Ug
dGhpcy4KKyAgICBBU1NFUlQoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCku
aXNXYXNtKCkpOworICAgIENhbGxlckZ1bmN0b3Igd2FzbUZyYW1lOworICAgIFN0YWNrVmlzaXRv
cjo6dmlzaXQod2FzbVRvSlNGcmFtZS5jYWxsZXJGcmFtZSgpLCAmdm0sIHdhc21GcmFtZSk7Cisg
ICAgQVNTRVJUKHdhc21GcmFtZS5jYWxsZXJGcmFtZSgpLT5jYWxsZWUoKS5pc1dhc20oKSk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGF1dG8gbW9kZSA9IHdhc21GcmFtZS5jYWxsZXJG
cmFtZSgpLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKS0+Y29tcGlsYXRpb25Nb2RlKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obW9kZSA9PSBXYXNtOjpDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUgfHwgbW9kZSA9PSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogTWVzc2FnZTo6TWVzc2FnZShBcnJheUJ1ZmZlckNvbnRlbnRzJiYgY29udGVudHMsIGlu
dDMyX3QgaW5kZXgpCiAgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29udGVudHMpKQogICAgICwg
bV9pbmRleChpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhMTVlYzg0Yzg3NjEwNmNhNDNhNDJkZjFiMjAwNjAzYTAz
OWU2ZmMuLjJiYjc0YTZjOWQ0ZDk5ZDY5NjY4YmEzOTc5ZGNiZjRkYTI1NzllMzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAt
MTY1MCw3ICsxNjUwLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hl
Y2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbiBvcmkKICAgICBlbWl0UGF0Y2hw
b2ludChwYXRjaCwgVG1wKCksIGNvdW50ZG93blB0cik7CiB9CiAKLXZvaWQgQWlySVJHZW5lcmF0
b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4LCB1aW50MzJfdCBvdXRlckxv
b3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9v
cFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiwgdWludDMy
X3QgbG9vcEluZGV4LCB1aW50MzJfdCBvdXRlckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4p
CiB7CiAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CiAKQEAgLTE2ODAsMTQgKzE2ODAsMTYgQEAg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVu
dENvdW50LCBjb25zdCBTdGFjayYgZXgKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNo
QXJnczsKICAgICBwYXRjaEFyZ3MuYXBwZW5kKGNvdW50ZG93blB0cik7CiAKLSAgICBWZWN0b3I8
QjM6OlR5cGU+IHR5cGVzOwotICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykgeworICAg
IGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChD
b25zdHJhaW5lZFRtcChsb2NhbCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgICAgIHR5
cGVzLmFwcGVuZCh0b0IzVHlwZShsb2NhbC50eXBlKCkpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRv
JiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAoZXhwcmVzc2lvbiwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZCh0b0IzVHlwZShleHByZXNzaW9uLnR5cGUoKSkpOworICAgIGZv
ciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9s
SW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGF1dG8mIHZhbHVl
IDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh2YWx1ZSwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7CisKKyAgICAgICAgY29uc3Qg
YXV0byYgcmVzdWx0cyA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNv
bnRyb2xEYXRhLnJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHJlc3VsdHMpCisg
ICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKICAgICB9CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNv
biogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkubGFz
dCgpKTsKQEAgLTE3MDAsOCArMTcwMiw5IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKIAog
ICAgICAgICBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSA9IG1fdGllclVwLT5hZGRPU1JFbnRy
eURhdGEobV9mdW5jdGlvbkluZGV4LCBsb29wSW5kZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBv
c3JFbnRyeURhdGEudmFsdWVzKCkuY29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpbmRleCArIDFd
LCB0eXBlc1tpbmRleF0pOworICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCBpcyB0aGUgY291bnRk
b3duIGxvY2F0aW9uLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMTsgaW5kZXggPCBw
YXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKTsgKytpbmRleCkKKyAgICAgICAgICAgIG9zckVu
dHJ5RGF0YS52YWx1ZXMoKS5jb25zdHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2luZGV4XSwgcGFyYW1z
LnZhbHVlKCktPmNoaWxkKGluZGV4KS0+dHlwZSgpKTsKICAgICAgICAgT1NSRW50cnlEYXRhKiBv
c3JFbnRyeURhdGFQdHIgPSAmb3NyRW50cnlEYXRhOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRl
UGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODBlODQ4ODdkYjBlMTIxNWViOGJk
ZDRmZWEyOTViNThjY2Y5YWVhMy4uNTM0OTA2Y2U4MWNkMTcyZGNlZGU1ZTk0MzQ5YTAzOTY0ZTBi
MjYxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcApAQCAtMTYxLDEwNyArMTYxLDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgVmFsdWUq
IEV4cHJlc3Npb25UeXBlOwogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiBF
eHByZXNzaW9uTGlzdDsKIAotICAgIGZyaWVuZCBjbGFzcyBTdGFjazsKLSAgICBjbGFzcyBTdGFj
ayB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFjayhCM0lSR2VuZXJhdG9yKiBnZW5lcmF0b3Ip
Ci0gICAgICAgICAgICA6IG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQoRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvbikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9
PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAgICAgICAgICAg
IFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fZ2VuZXJhdG9yLT5tX3Byb2MuYWRkVmFyaWFibGUoZXhw
cmVzc2lvbi0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBtX2dlbmVyYXRvci0+bV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX2dlbmVyYXRvci0+bV9wcm9jLCBTZXQs
IG1fZ2VuZXJhdG9yLT5vcmlnaW4oKSwgdmFyaWFibGUsIGV4cHJlc3Npb24pOwotICAgICAgICAg
ICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2RhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFrZUxhc3QoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2dlbmVyYXRvci0+bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX2dl
bmVyYXRvci0+bV9wcm9jLCBCMzo6R2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCksIG1fc3RhY2su
dGFrZUxhc3QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhLnRha2VMYXN0KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBFeHByZXNzaW9uVHlwZSBsYXN0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1v
ZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0
b3ItPm1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9nZW5lcmF0b3It
Pm1fcHJvYywgQjM6OkdldCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCBtX3N0YWNrLmxhc3QoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhLmxhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5l
cmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50
cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLnNpemUoKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9Ci0KLSAgICAgICAgRXhwcmVzc2lvbkxp
c3QgY29udmVydFRvRXhwcmVzc2lvbkxpc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9y
T1NSRW50cnlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgRXhwcmVzc2lvbkxpc3QgcmVzdWx0czsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdGFjay5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXQoaSkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIGF0KHVuc2ln
bmVkIGkpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9j
b21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5tX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KG1fZ2VuZXJhdG9yLT5tX3Byb2MsIEIzOjpHZXQsIG1fZ2VuZXJh
dG9yLT5vcmlnaW4oKSwgbV9zdGFjay5hdChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRh
LmF0KGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlQXQodW5zaWdu
ZWQgaSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2Nv
bXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9zdGFjay5hdChpKTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzaHJpbmsodW5zaWduZWQgaSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9
PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAgICAgICAgICAg
IG1fc3RhY2suc2hyaW5rKGkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fZGF0YS5zaHJpbmsoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIHN3YXAoU3RhY2smIHN0YWNrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAo
bV9nZW5lcmF0b3IsIHN0YWNrLm1fZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgIG1fZGF0YS5zd2Fw
KHN0YWNrLm1fZGF0YSk7Ci0gICAgICAgICAgICBtX3N0YWNrLnN3YXAoc3RhY2subV9zdGFjayk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOwotICAgICAgICAgICAgZGF0YUxv
Zyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRv
ci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1v
ZGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhYmxlIDogbV9zdGFj
aykKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKnZhcmlhYmxlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGV4cHJlc3Npb24gOiBtX2RhdGEpCi0gICAgICAgICAgICAgICAgZGF0YUxvZyhjb21t
YSwgKmV4cHJlc3Npb24pOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBCM0lS
R2VuZXJhdG9yKiBtX2dlbmVyYXRvciB7IG51bGxwdHIgfTsKLSAgICAgICAgRXhwcmVzc2lvbkxp
c3QgbV9kYXRhOwotICAgICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX3N0YWNrOwotICAgIH07Ci0g
ICAgU3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjayh0aGlzKTsgfQorICAgIHVzaW5n
IFN0YWNrID0gRXhwcmVzc2lvbkxpc3Q7CisgICAgU3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVy
biB7IH07IH0KIAogICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CiAgICAgdXNp
bmcgUmVzdWx0TGlzdCA9IENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0OwpAQCAtMTIzMyw3ICsxMTM0
LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayhpbnQzMl90IGlu
Y3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQogICAgIH0pOwogfQogCi12b2lkIEIzSVJHZW5l
cmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3Qg
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4LCB1aW50MzJfdCBvdXRl
ckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRM
b29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smLCB1aW50
MzJfdCBsb29wSW5kZXgsIHVpbnQzMl90IG91dGVyTG9vcEluZGV4LCBCMzo6T3JpZ2luIG9yaWdp
bikKIHsKICAgICBpZiAoIW1fdGllclVwKQogICAgICAgICByZXR1cm47CkBAIC0xMjQ3LDE2ICsx
MTQ4LDE0IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90
IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXhwCiAgICAgVmFsdWUqIGNvdW50RG93bkxv
Y2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRf
dD4oJm1fdGllclVwLT5tX2NvdW50ZXIpLCBvcmlnaW4pOwogCiAgICAgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiBzdGFja21hcDsKLSAgICBWZWN0b3I8QjM6OlR5cGU+IHR5cGVzOwogICAgIGZvciAo
YXV0byYgbG9jYWwgOiBtX2xvY2FscykgewogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6Okdl
dCwgb3JpZ2luLCBsb2NhbCk7CiAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwotICAg
ICAgICB0eXBlcy5hcHBlbmQocmVzdWx0LT50eXBlKCkpOwogICAgIH0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdCA9IGV4cHJlc3Npb25TdGFjay5hdChpKTsKLSAgICAgICAgc3Rh
Y2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChyZXN1bHQtPnR5cGUo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAg
ICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJv
bEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFs
dWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUp
OwogICAgIH0KIAogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKTsKQEAg
LTEyODUsOCArMTE4NCw5IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVj
ayhpbnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXhwCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICBP
U1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSA9IG1fdGllclVwLT5hZGRPU1JFbnRyeURhdGEobV9m
dW5jdGlvbkluZGV4LCBsb29wSW5kZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCB0eXBlcy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBvc3JFbnRyeURh
dGEudmFsdWVzKCkuY29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpbmRleCArIDFdLCB0eXBlc1tp
bmRleF0pOworICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCBpcyB0aGUgY291bnRkb3duIGxvY2F0
aW9uLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcGFyYW1zLnZhbHVlKCktPm51
bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS52YWx1ZXMoKS5jb25z
dHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2ldLCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQoaSktPnR5cGUo
KSk7CiAgICAgICAgIE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhUHRyID0gJm9zckVudHJ5RGF0
YTsKIAogICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
ewpAQCAtMTMwOSwzMyArMTIwOSw0MSBAQCBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lS
R2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlLCBjb25zdCBTdGFjayYgcwogICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgYm9keSk7CiAgICAgaWYgKGxvb3BJbmRleCA9PSBtX2xvb3BJbmRleEZvck9TUkVudHJ5KSB7
CiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2s7Ci0gICAgICAgIG1fb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIHN0YWNrLnNpemUoKTsKICAg
ICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RCbG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAKLSAgICAg
ICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUsIHVuc2ln
bmVkIGluZGV4KSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90
KSAqIGluZGV4OwotICAgICAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgewotICAgICAgICAg
ICAgY2FzZSBCMzo6SW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGNhc2UgQjM6OkZsb2F0OgotICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpGbG9hdCwgb3JpZ2lu
KCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgQjM6OkRvdWJsZSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAg
IHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworICAgICAgICBhdXRvIGxvYWRGcm9tU2NyYXRj
aEJ1ZmZlciA9IFsmXSAoQjM6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgc2l6ZV90IG9mZnNl
dCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyKys7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICB9OwogCi0gICAgICAgIHVuc2lnbmVkIGlu
ZGV4SW5CdWZmZXIgPSAwOwogICAgICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCi0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJv
YywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2NhbC0+dHlw
ZSgpLCBpbmRleEluQnVmZmVyKyspKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvKiB2YXJpYWJsZSA9IHN0YWNr
LnZhcmlhYmxlQXQoaSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFyaWFibGUsIGxvYWRGcm9tU2Ny
YXRjaEJ1ZmZlcih2YXJpYWJsZS0+dHlwZSgpLCBpbmRleEluQnVmZmVyKyspKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQs
IE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsLT50eXBlKCkpKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sg
PSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjazsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50cnkgdW5kZXJuZWF0
aCB1cyB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBwaGkgc28gd2UgY2FuIGZp
bGwgaXQgb24gT1NSIGVudHJ5LgorICAgICAgICAgICAgQmFzaWNCbG9jayogc291cmNlQmxvY2sg
PSBleHByZXNzaW9uU3RhY2suc2l6ZSgpID8gZXhwcmVzc2lvblN0YWNrWzBdLT5vd25lciA6IG51
bGxwdHI7CisgICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsKKyAgICAgICAgICAg
IEIzOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJvYyk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgYXV0byogdmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4KSAhPSB2YWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgYmxvY2tJbmRleCsrOworICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9
IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uU3Rh
Y2tbaV0gPSBwaGk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxV
cHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBzb3VyY2VV
cHNpbG9uID0gbV9wcm9jLmFkZDxVcHNpbG9uVmFsdWU+KHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUs
IHBoaSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKGJsb2NrSW5k
ZXgsIHNvdXJjZVVwc2lsb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoc291cmNlQmxvY2spOwogICAgICAgICB9CisKKyAgICAgICAgbV9vc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplID0gaW5kZXhJbkJ1ZmZlcjsKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsK
ICAgICAgICAgYm9keS0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIH0KQEAg
LTE0NjcsNyArMTM3NSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJs
ZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAvLyBUb3BMZXZl
bCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1
cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5
cGU6OlRvcExldmVsKQotICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGVudHJ5LmNvbnRyb2xEYXRh
LCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb252ZXJ0VG9FeHByZXNzaW9uTGlzdCgp
KTsKKyAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2spOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE3MzksNiAr
MTY0NywxMyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0
IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TAogICAgICAgICB1bmlmeShyZXN1bHRb
cmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVzdWx0U3RhY2suYXQocmVzdWx0U3RhY2suc2l6ZSgp
IC0gMSAtIGkpKTsKIH0KIAorc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBD
b21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uTGlzdCYg
ZXhwcmVzc2lvblN0YWNrKQoreworICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3RhY2s6
Iik7CisgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQor
ICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lvbik7Cit9CisKIHZvaWQgQjNJUkdlbmVy
YXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25z
dCBTdGFjayogZXhwcmVzc2lvblN0YWNrKQogewogICAgIGRhdGFMb2dMbigiQ29uc3RhbnRzOiIp
OwpAQCAtMTc1Miw3ICsxNjY3LDggQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKgogICAgIEFTU0VS
VChjb250cm9sU3RhY2suc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gY29udHJvbFN0YWNr
LnNpemUoKTsgaS0tOykgewogICAgICAgICBkYXRhTG9nKCIgICIsIGNvbnRyb2xTdGFja1tpXS5j
b250cm9sRGF0YSwgIjogIik7Ci0gICAgICAgIGV4cHJlc3Npb25TdGFjay0+ZHVtcCgpOworICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOworICAgICAgICBkdW1wRXhwcmVzc2lv
blN0YWNrKGNvbW1hLCAqZXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgZXhwcmVzc2lvblN0YWNr
ID0gJmNvbnRyb2xTdGFja1tpXS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZGF0
YUxvZ0xuKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25QYXJzZXIuaAppbmRleCBhMTM4NDEwYWNlMDBhM2VjNTk2NTk3MTIzOTNmMWFiZDdlNmNl
NzYwLi43MmZkYWZmZjk3MzkyMzZjZTVlMmQwYTY4ZGU4MThjN2QwMzhiODVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNjAsNiAr
NjAsOCBAQCBwdWJsaWM6CiAgICAgT3BUeXBlIGN1cnJlbnRPcGNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRPcGNvZGU7IH0KICAgICBzaXplX3QgY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQ7IH0KIAor
ICAgIFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRy
b2xTdGFjazsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDgwYzNkYjI3ZDdlMGZjNWU3MjczZTc5YWM4MjhmMjlmNjNjYTJjYWUuLjMwYzFjZDgxMWUy
OTFjYWEwOTdjYWUzMDI3ZDkxOGI2YTM4MmVjMzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOS0wNiAgS2Vp
dGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBPU1IgZW50cnkg
aW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRlc3QgaGFybmVzcyBtb2RlIGZvciB0ZXN0
cyBjcmVhdGVkIGZyb20gd2FzdCBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHM6CisKIDIwMTktMDktMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoaU9TIDEzKTogQnVsbGV0ZWQgbGlzdCBjb3BpZWQg
ZnJvbSBOb3RlcyB0byBNYWlsIHJlc3VsdHMgaW4gVGltZXMgTmV3IFJvbWFuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0cwppbmRleCBhMzg5Y2EwMDMyYjE2MmQyYTdjNzRhMjk1M2FhMTNhYWZi
ZGNiMjU0Li40ZTcyZDdjMmI0OGFiODIxZTFmMWFlMzEzNzc2YzJiOGRlMDg3NmNiIDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1Njcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTExMTQsNiArMTExNCwzNiBAQCBkZWYgcnVuV2Vi
QXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIGVuZAogZW5k
CiAKK2RlZiBydW5XZWJBc3NlbWJseVdpdGhIYXJuZXNzKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCisgICAgcmFpc2UgdW5sZXNzICRiZW5jaG1hcmsudG9fcyA9fiAvaGFybmVzc1wubT9q
cy8KKyAgICByZXR1cm4gaWYgISRqaXRUZXN0cworICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZv
cm0KKworICAgIHdhc21GaWxlcyA9IGFsbFdhc21GaWxlcygkY29sbGVjdGlvbikKKyAgICBwcmVw
YXJlRXh0cmFSZWxhdGl2ZUZpbGVzKHdhc21GaWxlcy5tYXAgeyB8ZnwgZi5iYXNlbmFtZSB9LCAk
Y29sbGVjdGlvbikKKworICAgIGRlZiBydW4oa2luZCwgKm9wdGlvbnMpCisgICAgICAgIHdhc21G
aWxlcyA9IGFsbFdhc21GaWxlcygkY29sbGVjdGlvbikKKyAgICAgICAgd2FzbUZpbGVzLmVhY2gg
eworICAgICAgICAgICAgfCBmaWxlIHwKKyAgICAgICAgICAgIGJhc2VuYW1lID0gZmlsZS5iYXNl
bmFtZS50b19zCisgICAgICAgICAgICBhZGRSdW5Db21tYW5kKCIoIiArIGJhc2VuYW1lICsgIikt
IiArIGtpbmQsIFtwYXRoVG9WTS50b19zXSArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMg
KyBvcHRpb25zICsgWyRiZW5jaG1hcmsudG9fcywgIi0tIiwgYmFzZW5hbWVdLCBzaWxlbnRPdXRw
dXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIpCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
IHJ1bigiZGVmYXVsdC13YXNtIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgaWYgJG1vZGUgIT0gInF1aWNrIgorICAgICAgICBydW4oIndhc20tbm8t
Y2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2Fz
bS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdl
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAg
ICAgICAgcnVuKCJ3YXNtLW5vLWNhbGwtaWMiLCAiLS11c2VDYWxsSUNzRm9yV2ViQXNzZW1ibHlU
b0pTQ2FsbHM9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zv
cldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tYWlyIiwgIi0td2FzbUJCUVVzZXNBaXI9
ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAg
ICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVv
dXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
IGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldl
YkFzc2VtYmx5RW1zY3JpcHRlbihtb2RlKQogICAgIGNhc2UgbW9kZQogICAgIHdoZW4gOnNraXAK
QEAgLTE0ODMsNiArMTUxMywyMSBAQCBkZWYgc2tpcAogICAgIHB1dHMgIlNraXBwaW5nICN7JGNv
bGxlY3Rpb25OYW1lfS8jeyRiZW5jaG1hcmt9IgogZW5kCiAKK2RlZiBhbGxXYXNtRmlsZXMocGF0
aCkKKyAgICBpZiBwYXRoLmZpbGU/CisgICAgICAgIFtwYXRoXQorICAgIGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gW10KKyAgICAgICAgRGlyLmZvcmVhY2gocGF0aCkgeworICAgICAgICAgICAgfCBm
aWxlbmFtZSB8CisgICAgICAgICAgICBuZXh0IHVubGVzcyBmaWxlbmFtZSA9fiAvXC5tP3dhc20k
LworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKHBhdGggKyBmaWxlbmFtZSkuZmlsZT8KKyAgICAg
ICAgICAgIHJlc3VsdCA8PCBwYXRoICsgZmlsZW5hbWUKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQKKyAgICBlbmQKK2VuZAorCiBkZWYgYWxsSlNGaWxlcyhwYXRoKQogICAgIGlmIHBhdGguZmls
ZT8KICAgICAgICAgW3BhdGhdCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGVkMzQ3ZDg2MjJmNTRkNmViNjFiN2QxMTgwZGYyOGJlYjQ0M2M0
MGUuLjMzNDEwZTZjMDZhOTBiMDM2NjA0NTMyZTAzYjdlMTdmNzM3NGU0MzkgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTktMDktMDYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisK
KyAgICAgICAgT1NSIGVudHJ5IGludG8gd2FzbSBtaXNzZXMgc29tZSBjb250ZXh0cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTY5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IGhhcm5l
c3MgYW5kIHdhc3QgYW5kIHRoZSBnZW5lcmF0ZWQgd2FzbSBmaWxlIGZvciB0ZXN0aW5nLgorCisg
ICAgICAgIFRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0IG1vcmUgdGVzdHMgd2lsbCBmb2xsb3cu
CisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL2hhcm5l
c3MuanM6IEFkZGVkLgorICAgICAgICAoYXN5bmMucnVuV2FzbUZpbGUpOgorICAgICAgICAqIHdh
c20vd2FzdC10ZXN0cy90ZXN0Lndhc206IEFkZGVkLgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0
cy90ZXN0Lndhc3Q6IEFkZGVkLgorCiAyMDE5LTA5LTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2Fs
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExhenlDbGFzc1N0cnVjdHVyZTo6c2V0Q29uc3RydWN0
b3Igc2hvdWxkIG5vdCBzdG9yZSB0aGUgY29uc3RydWN0b3IgdG8gdGhlIGdsb2JhbCBvYmplY3QK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwKaW5kZXgg
Zjg3MTFmNzRiYWVlZDQzYzdmMjMzODE1MWQ3MWExNmRhZDY1ZTk2Yi4uNjk3ZjEyYWExZjg5Mjg2
NjcyMjBkNTQ5YmQyY2JmYjIwNDVlMTY4OSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtLnlhbWwK
KysrIGIvSlNUZXN0cy93YXNtLnlhbWwKQEAgLTIxLDggKzIxLDggQEAKICMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCiAjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKLS0gcGF0aDogd2FzbS9zZWxmLXRlc3QvCi0gIGNtZDogcnVuV2Vi
QXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL3dhc3Qt
dGVzdHMvCisgIGNtZDogcnVuV2ViQXNzZW1ibHlXaXRoSGFybmVzcwogLSBwYXRoOiB3YXNtL2pz
LWFwaS8KICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRz
CiAtIHBhdGg6IHdhc20vbm9KSVQvCkBAIC00Myw2ICs0Myw4IEBACiAgIGNtZDogcnVuV2ViQXNz
ZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL21vZHVsZXMv
CiAgIGNtZDogcnVuV2ViQXNzZW1ibHkgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDog
d2FzbS9zZWxmLXRlc3QvCisgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VS
dW5Db21tYW5kcwogCiAtIHBhdGg6IHdhc20vc3BlYy10ZXN0cy9hZGRyZXNzLndhc3QuanMKICAg
Y21kOiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKQEAgLTE4NSwzICsxODcsNCBAQAog
CiAtIHBhdGg6IHdhc20vbW9kdWxlcy9ydW4tZnJvbS13YXNtLndhc20KICAgY21kOiBydW5XZWJB
c3NlbWJseQorCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9oYXJuZXNzLmpz
IGIvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2QyOTAw
YWZiODNhMzQ5NWE3MDlhYzA3MDFiZGUxZTM5MDE0MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwpAQCAtMCwwICsxLDIzIEBACithc3luY1Rl
c3RTdGFydCgxKTsKK2xldCBjb250ZXh0ID0geworICAgIGVudjogZ2xvYmFsVGhpcywKK307CisK
K2dsb2JhbFRoaXMuX19saW5lYXJfbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGlu
aXRpYWw6IDEgfSk7CisKK2FzeW5jIGZ1bmN0aW9uIHJ1bldhc21GaWxlKGZpbGVQYXRoKSB7Cisg
ICAgbGV0IGJsb2IgPSByZWFkRmlsZShmaWxlUGF0aCwgImJpbmFyeSIpOworICAgIGxldCBjb21w
aWxlZDsKKyAgICB0cnkgeworICAgICAgICBjb21waWxlZCA9IGF3YWl0IFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlKGJsb2IsIGNvbnRleHQpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcHJp
bnQoZSk7CisgICAgICAgIHRocm93IGU7CisgICAgfQorICAgIGNvbXBpbGVkLmluc3RhbmNlLmV4
cG9ydHMudGVzdCgpOworICAgIHByaW50KCJmaW5pc2hlZCIpOworICAgIGFzeW5jVGVzdFBhc3Nl
ZCgpOworfQorCitmb3IgKHdhc21GaWxlIG9mIGFyZ3VtZW50cykKKyAgICBydW5XYXNtRmlsZSh3
YXNtRmlsZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy90ZXN0Lndhc20g
Yi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy90ZXN0Lndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2MTdkZTAw
MmY2ZWU4ZjU0ZTZjZDE1M2IzYzZjODM5ZDc2M2EyNApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MTcwCnpjbVlqfXU/b1U0NmgtZlEyYEhBTDsxOWZQJkpOQkVCSHwjNUtoUEc8KDIlcyE3UXJkTXU2
MSVkOTFhS2Q1RDVTKwp6eFN+WDwwd3Z6RWFfd3RibVo1MX4tSXZrRHU3NUt5PkdpITEhUyQhJWF6
NV82Xy11bEVmRHt2RWJKQys1I18jTSMKdFNKRndhVk9hSm44MisoUTdEalUrb01SJFkydC0qR2Jf
fiYkeXdRS0hARjdRKmlUMHY9XzVuaD85KjYoewoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvdGVzdC53YXN0IGIvSlNUZXN0cy93YXNt
L3dhc3QtdGVzdHMvdGVzdC53YXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMTBmZTYxODRiOTE5OWU5OGY1MmQy
ODI1N2Q4NzhjMTc4MzcxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10
ZXN0cy90ZXN0Lndhc3QKQEAgLTAsMCArMSw0NyBAQAorKG1vZHVsZQorICAodHlwZSAoOzA7KSAo
ZnVuYyAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocmVz
dWx0IGkzMikpKQorICAoaW1wb3J0ICJlbnYiICJfX2xpbmVhcl9tZW1vcnkiIChtZW1vcnkgKDsw
OykgMCkpCisgIChpbXBvcnQgImVudiIgImNhbGxlcklzT01HQ29tcGlsZWQiIChmdW5jICg7MDsp
ICh0eXBlIDEpKSkKKyAgKGZ1bmMgKGV4cG9ydCAidGVzdCIpICh0eXBlIDApIChwYXJhbSBpMzIp
IChyZXN1bHQgaTMyKQorICAgIChsb2NhbCBpMzIgaTMyIGkzMiBpMzIpCisgICAgZ2V0X2xvY2Fs
IDAKKyAgICBpMzIubG9hZAorICAgIGkzMi5jb25zdCAyCisgICAgaTMyLmFkZAorICAgIGNhbGwg
MAorICAgIHNldF9sb2NhbCAyCisgICAgZ2V0X2xvY2FsIDAKKyAgICBpMzIubG9hZAorICAgIHNl
dF9sb2NhbCAzCisgICAgaTMyLmNvbnN0IDAKKyAgICBzZXRfbG9jYWwgNAorICAgIGJsb2NrICA7
OyBsYWJlbCA9IEAxCisgICAgICBnZXRfbG9jYWwgMgorICAgICAgYnJfaWYgMCAoO0AxOykKKyAg
ICAgIGkzMi5jb25zdCAwCisgICAgICBzZXRfbG9jYWwgNAorICAgICAgbG9vcCAgOzsgbGFiZWwg
PSBAMgorICAgICAgICBnZXRfbG9jYWwgMAorICAgICAgICBnZXRfbG9jYWwgMworICAgICAgICBp
MzIuY29uc3QgMworICAgICAgICBpMzIubXVsCisgICAgICAgIGkzMi5zdG9yZQorICAgICAgICBn
ZXRfbG9jYWwgNAorICAgICAgICBpMzIuY29uc3QgMQorICAgICAgICBpMzIuYWRkCisgICAgICAg
IHNldF9sb2NhbCA0CisgICAgICAgIGNhbGwgMAorICAgICAgICBzZXRfbG9jYWwgMgorICAgICAg
ICBnZXRfbG9jYWwgMAorICAgICAgICBpMzIubG9hZAorICAgICAgICBzZXRfbG9jYWwgMworICAg
ICAgICBnZXRfbG9jYWwgMgorICAgICAgICBpMzIuZXF6CisgICAgICAgIGJyX2lmIDAgKDtAMjsp
CisgICAgICBlbmQKKyAgICBlbmQKKyAgICBnZXRfbG9jYWwgNAorICAgIGkzMi5hZGQKKyAgICBn
ZXRfbG9jYWwgMworICAgIGkzMi5hZGQpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378257</attachid>
            <date>2019-09-06 17:36:07 -0700</date>
            <delta_ts>2019-09-06 17:37:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201569-20190906173602.patch</filename>
            <type>text/plain</type>
            <size>37216</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY4ZDQyZDQxNzE3ZjM0MjIyOTNlNDM1MDNmYWE3MmQ5ODYwYWI2Li5kOWQ5ODk1MTk1YzJkNTYz
ZTA4YWJlNjE3YTRlYTdjNTkyNTU5ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxOS0wOS0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGZhaWwgdG8gY2FwdHVyZSBzb21lIG9m
CisgICAgICAgIG91ciBjb250ZXh0cyB3aGVuIE9TUiBlbnRlcmluZyBpbnRvIHdhc20gY29kZS4g
QmVmb3JlIHdlIHdvdWxkCisgICAgICAgIG9ubHkgY2FwdHVyZSB0aGUgc3RhdGUgb2YgdGhlIGJs
b2NrIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZQorICAgICAgICBlbnRyYW5jZSBsb29wIGJs
b2NrIGhlYWRlci4gV2UgYWN0dWFsbHkgbmVlZCB0byBjYXB0dXJlIGFsbAorICAgICAgICBlbmNs
b3NlZCBzdGFja3MuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB2YXJpYWJsZXMgZm9yIGFsbCB0aGUgY2FwdHVyZWQKKyAgICAgICAgdmFsdWVzLiBXZSBjYW4g
dXNlIGEgUGhpIGFuZCBpbnNlcnQgYW4gdXBzaWxvbiBqdXN0IGJlbG93IHRoZQorICAgICAgICBj
YXB0dXJlZCB2YWx1ZS4KKworICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZCk6CisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmNyZWF0ZVN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpT
dGFjazo6U3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpTdGFjazo6YXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6U3RhY2s6OnRha2VMYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6U3RhY2s6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpTdGFjazo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OmNvbnZlcnRUb0V4cHJlc3Np
b25MaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3Rh
Y2s6OmF0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6U3RhY2s6OnZhcmlhYmxlQXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI6OmNvbnRyb2xTdGFjayk6CisKIDIwMTktMDktMDUgIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTGF6eUNsYXNzU3RydWN0dXJlOjpzZXRD
b25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRoZSBjb25zdHJ1Y3RvciB0byB0aGUgZ2xvYmFs
IG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CmluZGV4IGE0NjcwM2RjZTlhYzljZjYwYjBhMGZhNDNmODQ2YzgwZDFkOTY1OWQuLmRkMjAwZTFh
MzUxMDczMTJkMWQwNWUyNTIyMjQzMzc1YTQ5NDUyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTEzMiw3ICsxMzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHdhc21Bd2FyZUxleGljYWxHbG9i
YWxPYmplY3QoVk0mKTsKIAotICAgICAgICBib29sIGlzQW55V2FzbUNhbGxlZSgpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQW55V2FzbUNhbGxlZSgpOwogCiAgICAgICAgIC8v
IEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29kZSB3YXMg
ZGVmaW5lZC4KICAgICAgICAgLy8gRGlmZmVycyBmcm9tIFZNOjp2bUVudHJ5R2xvYmFsT2JqZWN0
KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCmluZGV4IGViMTFhMjU5YTJjOTgzYjhlMTU4NDA2OWI0NDAyYzg3ZjZjNzc3
MDkuLmJlNWVkOWFlMzY1ZDQwN2JhY2NkZGE1N2MzMjU4ZWEzZTc3YzU0YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJv
ci5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0z
MjAsNiArMzIxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob0ZUTChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3Rh
dGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVy
T2ZERkdDb21waWxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSopOwpAQCAtNTQx
LDYgKzU0Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIs
IGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1
enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMiLCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMs
IDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5j
dGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImpz
Y09wdGlvbnMiLCBmdW5jdGlvbkpTQ09wdGlvbnMsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgIm9wdGltaXplTmV4dEludm9jYXRpb24iLCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRp
b24sIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dCIsIGZ1bmN0aW9uUmVvcHRpbWl6YXRpb25SZXRyeUNvdW50LCAxKTsKQEAgLTE3MjcsNiArMTcz
MCwzMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdD
b21waWxlcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1i
ZXJPZkRGR0NvbXBpbGVzKGV4ZWMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgaWYgKCFPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworCisgICAgQ2FsbGVyRnVu
Y3RvciB3YXNtVG9KU0ZyYW1lOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoZXhlYywgJnZtLCB3
YXNtVG9KU0ZyYW1lKTsKKyAgICBpZiAoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+aXNB
bnlXYXNtQ2FsbGVlKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJjYWxsZXIgaXMgbm90IGEgd2FzbS0+anMgaW1wb3J0IGZ1bmN0aW9uIik7CisKKyAgICAvLyBX
ZSBoYXZlIGEgd3JhcHBlciBmcmFtZSB0aGF0IHdlIGdlbmVyYXRlIGZvciBpbXBvcnRzLiBJZiB3
ZSBldmVyIGNhbiBkaXJlY3QgY2FsbCBmcm9tIHdhc20gd2Ugd291bGQgbmVlZCB0byBjaGFuZ2Ug
dGhpcy4KKyAgICBBU1NFUlQoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCku
aXNXYXNtKCkpOworICAgIENhbGxlckZ1bmN0b3Igd2FzbUZyYW1lOworICAgIFN0YWNrVmlzaXRv
cjo6dmlzaXQod2FzbVRvSlNGcmFtZS5jYWxsZXJGcmFtZSgpLCAmdm0sIHdhc21GcmFtZSk7Cisg
ICAgQVNTRVJUKHdhc21GcmFtZS5jYWxsZXJGcmFtZSgpLT5jYWxsZWUoKS5pc1dhc20oKSk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGF1dG8gbW9kZSA9IHdhc21GcmFtZS5jYWxsZXJG
cmFtZSgpLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKS0+Y29tcGlsYXRpb25Nb2RlKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obW9kZSA9PSBXYXNtOjpDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUgfHwgbW9kZSA9PSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogTWVzc2FnZTo6TWVzc2FnZShBcnJheUJ1ZmZlckNvbnRlbnRzJiYgY29udGVudHMsIGlu
dDMyX3QgaW5kZXgpCiAgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29udGVudHMpKQogICAgICwg
bV9pbmRleChpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhMTVlYzg0Yzg3NjEwNmNhNDNhNDJkZjFiMjAwNjAzYTAz
OWU2ZmMuLmM4NjY0ZmE3ZGM5MjAyNDBhMmRjZWQ3MWFjZmZjOGQ0NzE5YTU3YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAt
NTkxLDggKzU5MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRUaHJvd0V4Y2VwdGlvbihD
Q2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAotICAgIHZvaWQgZW1pdEVudHJ5VGllclVw
Q2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7Ci0gICAgdm9pZCBlbWl0
TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiwgdWlu
dDMyX3QsIHVpbnQzMl90LCBCMzo6T3JpZ2luKTsKKyAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENo
ZWNrKCk7CisgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCk7
CiAKICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICBFeHByZXNz
aW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKQEAgLTg1Miw3ICs4NTIsNyBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBlbWl0
RW50cnlUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpLCBC
Mzo6T3JpZ2luKCkpOworICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiB9CiAKIHZvaWQgQWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYgbWVtb3J5LCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCkBAIC0xNjAz
LDEwICsxNjAzLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywKICAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayhpbnQzMl90IGlu
Y3JlbWVudENvdW50LCBCMzo6T3JpZ2luIG9yaWdpbikKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVt
aXRFbnRyeVRpZXJVcENoZWNrKCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKLQogICAg
IGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYyNCw3ICsxNjIyLDcgQEAg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1l
bnRDb3VudCwgQjM6Ok9yaWdpbiBvcmkKICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hB
ZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQz
MihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHRp
ZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xNjUwLDkgKzE2NDgsMTAgQEAgdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwg
QjM6Ok9yaWdpbiBvcmkKICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIGNvdW50ZG93
blB0cik7CiB9CiAKLXZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50
MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgdWludDMy
X3QgbG9vcEluZGV4LCB1aW50MzJfdCBvdXRlckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4p
Cit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJ
bmRleCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICB1aW50MzJfdCBvdXRlckxv
b3BJbmRleCA9IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7CisgICAgbV9vdXRlckxvb3BzLmFwcGVu
ZChsb29wSW5kZXgpOwogCiAgICAgaWYgKCFtX3RpZXJVcCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTY4MCwxNCArMTY3OSwxNiBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENo
ZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBleAogICAgIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwogICAgIHBhdGNoQXJncy5hcHBlbmQoY291bnRkb3du
UHRyKTsKIAotICAgIFZlY3RvcjxCMzo6VHlwZT4gdHlwZXM7Ci0gICAgZm9yIChhdXRvJiBsb2Nh
bCA6IG1fbG9jYWxzKSB7CisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQogICAgICAg
ICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGxvY2FsLCBCMzo6VmFsdWVSZXA6OkNv
bGRBbnkpKTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHRvQjNUeXBlKGxvY2FsLnR5cGUoKSkpOwot
ICAgIH0KLSAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spIHsKLSAg
ICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChleHByZXNzaW9uLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHRvQjNUeXBlKGV4cHJlc3Np
b24udHlwZSgpKSk7CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9s
SW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkg
eworICAgICAgICBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAg
ICAgIGZvciAoYXV0byYgdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkp
KTsKKworICAgICAgICBjb25zdCBhdXRvJiByZXN1bHRzID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGEucmVzdWx0OworICAgICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogcmVzdWx0cykKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWlu
ZWRUbXAodmFsdWUsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIH0KIAogICAgIFRpZXJV
cENvdW50OjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9z
ckVudHJ5VHJpZ2dlcnMoKS5sYXN0KCkpOwpAQCAtMTY5NiwxMiArMTY5NywxMyBAQCB2b2lkIEFp
cklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQs
IGNvbnN0IFN0YWNrJiBleAogICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZvcmNlT1NSRW50cnkgPSBqaXQuYnJhbmNoVGVz
dDgoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhm
b3JjZUVudHJ5VHJpZ2dlcikpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGllclVwID0g
aml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGluY3JlbWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGllclVwID0gaml0
LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKFRpZXJVcENvdW50Ojpsb29wSW5jcmVtZW50KCkpLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICBPU1JFbnRyeURhdGEmIG9z
ckVudHJ5RGF0YSA9IG1fdGllclVwLT5hZGRPU1JFbnRyeURhdGEobV9mdW5jdGlvbkluZGV4LCBs
b29wSW5kZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0eXBl
cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCkuY29u
c3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpbmRleCArIDFdLCB0eXBlc1tpbmRleF0pOworICAgICAg
ICAvLyBGaXJzdCBhcmd1bWVudCBpcyB0aGUgY291bnRkb3duIGxvY2F0aW9uLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMTsgaW5kZXggPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRy
ZW4oKTsgKytpbmRleCkKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS52YWx1ZXMoKS5jb25zdHJ1
Y3RBbmRBcHBlbmQocGFyYW1zW2luZGV4XSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGluZGV4KS0+
dHlwZSgpKTsKICAgICAgICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFQdHIgPSAmb3NyRW50
cnlEYXRhOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CkBAIC0xNzE4LDcgKzE3MjAsNyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9v
cFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBleAogICAg
IGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKIH0KIAot
QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUg
c2lnbmF0dXJlLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1aW50MzJfdCBsb29wSW5k
ZXgpCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3Ao
VHlwZSBzaWduYXR1cmUsIGNvbnN0IFN0YWNrJiwgdWludDMyX3QgbG9vcEluZGV4KQogewogICAg
IEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTE3MjYsMTAgKzE3MjgsOCBAQCBB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBz
aWduYXR1cmUsIGNvbnN0IFN0YWNrJgogICAgIGFwcGVuZChKdW1wKTsKICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKIAotICAgIHVpbnQzMl90IG91dGVyTG9vcEluZGV4
ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKLSAgICBtX291dGVyTG9vcHMuYXBwZW5kKGxvb3BJ
bmRleCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIGVtaXRMb29wVGllclVwQ2hl
Y2soVGllclVwQ291bnQ6Omxvb3BJbmNyZW1lbnQoKSwgZXhwcmVzc2lvblN0YWNrLCBsb29wSW5k
ZXgsIG91dGVyTG9vcEluZGV4LCBvcmlnaW4oKSk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhs
b29wSW5kZXgpOwogCiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUs
IHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJv
ZHkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCmluZGV4IDgwZTg0ODg3ZGIwZTEyMTVlYjhiZGQ0ZmVhMjk1YjU4Y2NmOWFlYTMuLjk3
MWM1ZWFkYzU2MzE1NmVlNjgwOTczM2MxM2E1MzZhMjMxZmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE2MSwxMDcgKzE2
MSw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKICAgICB0
eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICBm
cmllbmQgY2xhc3MgU3RhY2s7Ci0gICAgY2xhc3MgU3RhY2sgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgU3RhY2soQjNJUkdlbmVyYXRvciogZ2VuZXJhdG9yKQotICAgICAgICAgICAgOiBtX2dlbmVy
YXRvcihnZW5lcmF0b3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBw
ZW5kKEV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBt
X2dlbmVyYXRvci0+bV9wcm9jLmFkZFZhcmlhYmxlKGV4cHJlc3Npb24tPnR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9nZW5lcmF0b3ItPm1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgU2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCks
IHZhcmlhYmxlLCBleHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9kYXRhLmFwcGVuZChleHByZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHRha2VMYXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2Vu
ZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3ItPm1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgQjM6Okdl
dCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCBtX3N0YWNrLnRha2VMYXN0KCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YS50YWtlTGFzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgbGFzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+
bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5tX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fZ2VuZXJhdG9yLT5tX3Byb2MsIEIzOjpHZXQsIG1fZ2Vu
ZXJhdG9yLT5vcmlnaW4oKSwgbV9zdGFjay5sYXN0KCkpOwotICAgICAgICAgICAgcmV0dXJuIG1f
ZGF0YS5sYXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9k
ZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9zdGFjay5zaXplKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUo
KTsKLSAgICAgICAgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXpl
KCkgPT0gMDsgfQotCi0gICAgICAgIEV4cHJlc3Npb25MaXN0IGNvbnZlcnRUb0V4cHJlc3Npb25M
aXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0
aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAg
ICAgICAgICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKGF0KGkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtX2RhdGE7Ci0gICAgICAgIH0K
LQotICAgICAgICBFeHByZXNzaW9uVHlwZSBhdCh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2dlbmVyYXRvci0+bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX2dl
bmVyYXRvci0+bV9wcm9jLCBCMzo6R2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCksIG1fc3RhY2su
YXQoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5hdChpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZUF0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
c3RhY2suYXQoaSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgc2hyaW5rKHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBtX3N0YWNrLnNocmluayhpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2RhdGEu
c2hyaW5rKGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzd2FwKFN0YWNrJiBzdGFjaykK
LSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1fZ2VuZXJhdG9yLCBzdGFjay5tX2dl
bmVyYXRvcik7Ci0gICAgICAgICAgICBtX2RhdGEuc3dhcChzdGFjay5tX2RhdGEpOwotICAgICAg
ICAgICAgbV9zdGFjay5zd2FwKHN0YWNrLm1fc3RhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBkdW1wKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIsICIsICIiKTsKLSAgICAgICAgICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3Rh
Y2s6Iik7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09
IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiB2YXJpYWJsZSA6IG1fc3RhY2spCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coY29tbWEsICp2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogbV9k
YXRhKQotICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNzaW9uKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQjNJUkdlbmVyYXRvciogbV9nZW5lcmF0b3Ig
eyBudWxscHRyIH07Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IG1fZGF0YTsKLSAgICAgICAgVmVj
dG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKLSAgICB9OwotICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkg
eyByZXR1cm4gU3RhY2sodGhpcyk7IH0KKyAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0
OworICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICB1c2luZyBD
b250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwogICAgIHVzaW5nIFJlc3VsdExpc3QgPSBDb250cm9s
RGF0YTo6UmVzdWx0TGlzdDsKQEAgLTM1MSw4ICsyNTIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUp
OwogCi0gICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVudENvdW50
LCBCMzo6T3JpZ2luKTsKLSAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNy
ZW1lbnRDb3VudCwgY29uc3QgU3RhY2smLCB1aW50MzJfdCwgdWludDMyX3QsIEIzOjpPcmlnaW4p
OworICAgIHZvaWQgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKKyAgICB2b2lkIGVtaXRMb29wVGll
clVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KTsKIAogICAgIHZvaWQgZW1pdFdyaXRlQmFycmll
ckZvckpTV3JhcHBlcigpOwogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQ
b2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
c2l6ZU9mT3ApOwpAQCAtNTg0LDcgKzQ4NSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAg
ICAgICAgIH0pOwogICAgIH0KIAotICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKFRpZXJVcENvdW50
OjpmdW5jdGlvbkVudHJ5SW5jcmVtZW50KCksIE9yaWdpbigpKTsKKyAgICBlbWl0RW50cnlUaWVy
VXBDaGVjaygpOwogCiAgICAgaWYgKG1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlKQogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5h
ZGRCbG9jaygpOwpAQCAtMTE5MCwxNSArMTA5MSwxNSBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bAogICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi12b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291
bnQsIE9yaWdpbiBvcmlnaW4pCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENo
ZWNrKCkKIHsKICAgICBpZiAoIW1fdGllclVwKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQobV90aWVyVXApOwotICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBv
aW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZtX3RpZXJVcC0+bV9jb3Vu
dGVyKSwgb3JpZ2luKTsKKyAgICBWYWx1ZSogY291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChw
b2ludGVyVHlwZSgpLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PigmbV90aWVyVXAtPm1fY291
bnRlciksIE9yaWdpbigpKTsKIAotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3Jp
Z2luKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgbW9yZSBwcmVjaXNlIGhlYXAgcmFuZ2UgZm9yIHRoZSB0aWVyIHVwIGNvdW50Lgog
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKQEAgLTEyMDksNyArMTEx
MCw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBp
bmNyZW1lbnRDb3VudCwgT3JpZ2luIG9yaWdpbikKICAgICBwYXRjaC0+YXBwZW5kKGNvdW50RG93
bkxvY2F0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5i
cmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNb
MF0uZ3ByKCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFu
Y2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRl
UGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xMjMzLDEzICsxMTM0LDE1IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRD
b3VudCwgT3JpZ2luIG9yaWdpbikKICAgICB9KTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBl
eHByZXNzaW9uU3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCwgdWludDMyX3Qgb3V0ZXJMb29wSW5k
ZXgsIEIzOjpPcmlnaW4gb3JpZ2luKQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJV
cENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCkKIHsKKyAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRl
eCA9IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7CisgICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29w
SW5kZXgpOworCiAgICAgaWYgKCFtX3RpZXJVcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT
RVJUKG1fdGllclVwKTsKLQorICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKICAg
ICBBU1NFUlQobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMoKS5zaXplKCkgPT0gbG9vcEluZGV4
KTsKICAgICBtX3RpZXJVcC0+b3NyRW50cnlUcmlnZ2VycygpLmFwcGVuZChUaWVyVXBDb3VudDo6
VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXIpOwogICAgIG1fdGllclVwLT5vdXRlckxvb3BzKCku
YXBwZW5kKG91dGVyTG9vcEluZGV4KTsKQEAgLTEyNDcsMTYgKzExNTAsMTQgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNv
bnN0IFN0YWNrJiBleHAKICAgICBWYWx1ZSogY291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChw
b2ludGVyVHlwZSgpLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PigmbV90aWVyVXAtPm1fY291
bnRlciksIG9yaWdpbik7CiAKICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IHN0YWNrbWFwOwot
ICAgIFZlY3RvcjxCMzo6VHlwZT4gdHlwZXM7CiAgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9j
YWxzKSB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2FsKTsK
ICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChy
ZXN1bHQtPnR5cGUoKSk7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
ID0gZXhwcmVzc2lvblN0YWNrLmF0KGkpOwotICAgICAgICBzdGFja21hcC5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHJlc3VsdC0+dHlwZSgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFj
aykKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogCiAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4pOwpAQCAtMTI4MSwxMiArMTE4MiwxMyBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1l
bnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZm9yY2VPU1JFbnRyeSA9IGppdC5icmFu
Y2hUZXN0OChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRy
ZXNzKGZvcmNlRW50cnlUcmlnZ2VyKSk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCB0aWVy
VXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3NpdGl2ZU9yWmVybywgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5jcmVtZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocGFyYW1zWzBdLmdwcigpKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCB0aWVyVXAg
PSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3NpdGl2ZU9yWmVybywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoVGllclVwQ291bnQ6Omxvb3BJbmNyZW1lbnQoKSksIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIE9TUkVudHJ5RGF0
YSYgb3NyRW50cnlEYXRhID0gbV90aWVyVXAtPmFkZE9TUkVudHJ5RGF0YShtX2Z1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IHR5cGVzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIG9zckVudHJ5RGF0YS52YWx1ZXMo
KS5jb25zdHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2luZGV4ICsgMV0sIHR5cGVzW2luZGV4XSk7Cisg
ICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb3VudGRvd24gbG9jYXRpb24uCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4o
KTsgKytpKQorICAgICAgICAgICAgb3NyRW50cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFw
cGVuZChwYXJhbXNbaV0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpKS0+dHlwZSgpKTsKICAgICAg
ICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFQdHIgPSAmb3NyRW50cnlEYXRhOwogCiAgICAg
ICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xMzAx
LDcgKzEyMDMsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50
MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIH0pOwogfQogCi1CM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0
dXJlLCBjb25zdCBTdGFjayYgc3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkKK0IzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUsIGNv
bnN0IFN0YWNrJiwgdWludDMyX3QgbG9vcEluZGV4KQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkg
PSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3By
b2MuYWRkQmxvY2soKTsKQEAgLTEzMDksNDEgKzEyMTEsNDcgQEAgQjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSwgY29uc3QgU3Rh
Y2smIHMKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
SnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgIGlmIChsb29wSW5kZXggPT0gbV9sb29wSW5kZXhG
b3JPU1JFbnRyeSkgewogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOwotICAg
ICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBtX2xvY2Fscy5zaXplKCkgKyBzdGFj
ay5zaXplKCk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2stPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogCi0gICAgICAgIGF1dG8gbG9hZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChCMzo6VHlw
ZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNp
emVvZih1aW50NjRfdCkgKiBpbmRleDsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQjM6OkludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMy
LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGNhc2UgQjM6OkludDY0
OgotICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBjYXNlIEIzOjpGbG9hdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6
RmxvYXQsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICAgICAgY2FzZSBCMzo6
RG91YmxlOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpEb3VibGUsIG9yaWdpbigpLCBwb2ludGVy
LCBvZmZzZXQpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKyAgICAgICAgYXV0byBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAg
IHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisrOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgfTsKIAotICAgICAg
ICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKICAgICAgICAgZm9yIChhdXRvJiBsb2NhbCA6
IG1fbG9jYWxzKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIobG9jYWwtPnR5cGUoKSwgaW5kZXhJbkJ1ZmZlcisrKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byogdmFy
aWFibGUgPSBzdGFjay52YXJpYWJsZUF0KGkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxl
LCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFyaWFibGUtPnR5cGUoKSwgaW5kZXhJbkJ1ZmZlcisr
KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2Nh
bC0+dHlwZSgpKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBj
b250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJ
bmRleCkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICAgICAgYXV0byYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIHN0YWNrIGVu
dHJ5IHVuZGVybmVhdGggdXMgd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhp
IHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKSA/IGV4cHJlc3Npb25TdGFja1sw
XS0+b3duZXIgOiBudWxscHRyOworICAgICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IDA7
CisgICAgICAgICAgICBCMzo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8qIHZhbHVlID0gZXhwcmVzc2lvblN0YWNrW2ld
OworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCkgIT0g
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBwaGkgPSBkYXRhLmNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFBoaSwgIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvblN0YWNrW2ldID0gcGhpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZy
b21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOworCisgICAgICAgICAgICAgICAg
YXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLCBwaGkpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRW
YWx1ZShibG9ja0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKICAgICAgICAgfQorCisgICAg
ICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5CdWZmZXI7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgYm9keSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICB9CiAKLSAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRleCA9IHRoaXMtPm91dGVyTG9v
cEluZGV4KCk7Ci0gICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29wSW5kZXgpOwogICAgIG1fY3Vy
cmVudEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojps
b29wSW5jcmVtZW50KCksIHN0YWNrLCBsb29wSW5kZXgsIG91dGVyTG9vcEluZGV4LCBvcmlnaW4o
KSk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgpOwogCiAgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBj
b250aW51YXRpb24sIGJvZHkpOwogfQpAQCAtMTQ2Nyw3ICsxMzc1LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRp
YWxSZXN1bHQKIAogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIg
dGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCiAgICAg
aWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCi0gICAgICAgIHJldHVybiBh
ZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
LmNvbnZlcnRUb0V4cHJlc3Npb25MaXN0KCkpOworICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGVu
dHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtMTczOSw2ICsxNjQ3LDEzIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1
bHRMCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRT
dGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCitzdGF0aWMgdm9pZCBk
dW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJH
ZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCit7CisgICAgZGF0YUxv
Zyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJl
c3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNz
aW9uKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9s
RW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAg
ICAgZGF0YUxvZ0xuKCJDb25zdGFudHM6Iik7CkBAIC0xNzUyLDcgKzE2NjcsOCBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFj
aywgY29uc3QgU3RhY2sqCiAgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGRhdGFM
b2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKLSAgICAgICAgZXhw
cmVzc2lvblN0YWNrLT5kdW1wKCk7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAi
Iik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpleHByZXNzaW9uU3RhY2sp
OwogICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOwogICAgICAgICBkYXRhTG9nTG4oKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGExMzg0MTBhY2Uw
MGEzZWM1OTY1OTcxMjM5M2YxYWJkN2U2Y2U3NjAuLjcyZmRhZmZmOTczOTIzNmNlNWUyZDBhNjhk
ZTgxOGM3ZDAzOGI4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICBPcFR5cGUgY3Vy
cmVudE9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsgfQogICAgIHNpemVf
dCBjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRP
cGNvZGVTdGFydGluZ09mZnNldDsgfQogCisgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRy
b2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisKIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODBjM2RiMjdkN2UwZmM1ZTcyNzNlNzlhYzgy
OGYyOWY2M2NhMmNhZS4uMzBjMWNkODExZTI5MWNhYTA5N2NhZTMwMjdkOTE4YjZhMzgyZWMzMSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE5LTA5LTA2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIE9TUiBlbnRyeSBpbnRvIHdhc20gbWlzc2VzIHNvbWUgY29udGV4dHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcg
dGVzdCBoYXJuZXNzIG1vZGUgZm9yIHRlc3RzIGNyZWF0ZWQgZnJvbSB3YXN0IGZpbGVzLgorCisg
ICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wOS0wNSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChpT1Mg
MTMpOiBCdWxsZXRlZCBsaXN0IGNvcGllZCBmcm9tIE5vdGVzIHRvIE1haWwgcmVzdWx0cyBpbiBU
aW1lcyBOZXcgUm9tYW4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3Mt
dGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGEzODljYTAw
MzJiMTYyZDJhN2M3NGEyOTUzYWExM2FhZmJkY2IyNTQuLjRlNzJkN2MyYjQ4YWI4MjFlMWYxYWUz
MTM3NzZjMmI4ZGUwODc2Y2IgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTEx
NCw2ICsxMTE0LDM2IEBAIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCiAgICAgZW5kCiBlbmQKIAorZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5l
c3MoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICByYWlzZSB1bmxlc3MgJGJlbmNo
bWFyay50b19zID1+IC9oYXJuZXNzXC5tP2pzLworICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisg
ICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgd2FzbUZpbGVzID0gYWxsV2FzbUZp
bGVzKCRjb2xsZWN0aW9uKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMod2FzbUZpbGVz
Lm1hcCB7IHxmfCBmLmJhc2VuYW1lIH0sICRjb2xsZWN0aW9uKQorCisgICAgZGVmIHJ1bihraW5k
LCAqb3B0aW9ucykKKyAgICAgICAgd2FzbUZpbGVzID0gYWxsV2FzbUZpbGVzKCRjb2xsZWN0aW9u
KQorICAgICAgICB3YXNtRmlsZXMuZWFjaCB7CisgICAgICAgICAgICB8IGZpbGUgfAorICAgICAg
ICAgICAgYmFzZW5hbWUgPSBmaWxlLmJhc2VuYW1lLnRvX3MKKyAgICAgICAgICAgIGFkZFJ1bkNv
bW1hbmQoIigiICsgYmFzZW5hbWUgKyAiKS0iICsga2luZCwgW3BhdGhUb1ZNLnRvX3NdICsgJHRl
c3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucyArIG9wdGlvbnMgKyBbJGJlbmNobWFyay50b19zLCAi
LS0iLCBiYXNlbmFtZV0sIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlcikK
KyAgICAgICAgfQorICAgIGVuZAorCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBpZiAkbW9kZSAhPSAicXVp
Y2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1lYWdl
ciIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tY2FsbC1pYyIsICIt
LXVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscz1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tdGxz
LWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLXNs
b3ctbWVtb3J5IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1u
by1haXIiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51
b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8K
KyAgICBlbmQKK2VuZAorCiBkZWYgcnVuV2ViQXNzZW1ibHlFbXNjcmlwdGVuKG1vZGUpCiAgICAg
Y2FzZSBtb2RlCiAgICAgd2hlbiA6c2tpcApAQCAtMTQ4Myw2ICsxNTEzLDIxIEBAIGRlZiBza2lw
CiAgICAgcHV0cyAiU2tpcHBpbmcgI3skY29sbGVjdGlvbk5hbWV9LyN7JGJlbmNobWFya30iCiBl
bmQKIAorZGVmIGFsbFdhc21GaWxlcyhwYXRoKQorICAgIGlmIHBhdGguZmlsZT8KKyAgICAgICAg
W3BhdGhdCisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBEaXIuZm9yZWFj
aChwYXRoKSB7CisgICAgICAgICAgICB8IGZpbGVuYW1lIHwKKyAgICAgICAgICAgIG5leHQgdW5s
ZXNzIGZpbGVuYW1lID1+IC9cLm0/d2FzbSQvCisgICAgICAgICAgICBuZXh0IHVubGVzcyAocGF0
aCArIGZpbGVuYW1lKS5maWxlPworICAgICAgICAgICAgcmVzdWx0IDw8IHBhdGggKyBmaWxlbmFt
ZQorICAgICAgICB9CisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKIGRlZiBhbGxKU0Zp
bGVzKHBhdGgpCiAgICAgaWYgcGF0aC5maWxlPwogICAgICAgICBbcGF0aF0KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWQzNDdkODYyMmY1
NGQ2ZWI2MWI3ZDExODBkZjI4YmViNDQzYzQwZS4uMzM0MTBlNmMwNmE5MGIwMzY2MDQ1MzJlMDNi
N2UxN2Y3Mzc0ZTQzOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wOS0wNiAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1p
c3NlcyBzb21lIGNvbnRleHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDE1NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgYSBuZXcgaGFybmVzcyBhbmQgd2FzdCBhbmQgdGhlIGdlbmVyYXRlZCB3
YXNtIGZpbGUgZm9yIHRlc3RpbmcuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHRl
c3QgbW9yZSB0ZXN0cyB3aWxsIGZvbGxvdy4KKworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAg
ICAgKiB3YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qczogQWRkZWQuCisgICAgICAgIChhc3luYy5y
dW5XYXNtRmlsZSk6CisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzbTogQWRkZWQu
CisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzdDogQWRkZWQuCisKIDIwMTktMDkt
MDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTGF6eUNs
YXNzU3RydWN0dXJlOjpzZXRDb25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRoZSBjb25zdHJ1
Y3RvciB0byB0aGUgZ2xvYmFsIG9iamVjdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtLnlhbWwg
Yi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCBmODcxMWY3NGJhZWVkNDNjN2YyMzM4MTUxZDcxYTE2
ZGFkNjVlOTZiLi42OTdmMTJhYTFmODkyODY2NzIyMGQ1NDliZDJjYmZiMjA0NWUxNjg5IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtMjEs
OCArMjEsOCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotLSBwYXRoOiB3YXNt
L3NlbGYtdGVzdC8KLSAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNv
bW1hbmRzCistIHBhdGg6IHdhc20vd2FzdC10ZXN0cy8KKyAgY21kOiBydW5XZWJBc3NlbWJseVdp
dGhIYXJuZXNzCiAtIHBhdGg6IHdhc20vanMtYXBpLwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3Vp
dGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9ub0pJVC8KQEAgLTQzLDYg
KzQzLDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1h
bmRzCiAtIHBhdGg6IHdhc20vbW9kdWxlcy8KICAgY21kOiBydW5XZWJBc3NlbWJseSB1bmxlc3Mg
cGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL3NlbGYtdGVzdC8KKyAgY21kOiBydW5XZWJB
c3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAKIC0gcGF0aDogd2FzbS9zcGVj
LXRlc3RzL2FkZHJlc3Mud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOm5v
cm1hbApAQCAtMTg1LDMgKzE4Nyw0IEBACiAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9t
LXdhc20ud2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9oYXJu
ZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYzZDI5MDBhZmI4M2EzNDk1YTcwOWFjMDcwMWJkZTFlMzkwMTQy
NDkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9oYXJuZXNzLmpz
CkBAIC0wLDAgKzEsMjMgQEAKK2FzeW5jVGVzdFN0YXJ0KDEpOworbGV0IGNvbnRleHQgPSB7Cisg
ICAgZW52OiBnbG9iYWxUaGlzLAorfTsKKworZ2xvYmFsVGhpcy5fX2xpbmVhcl9tZW1vcnkgPSBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogMSB9KTsKKworYXN5bmMgZnVuY3Rpb24g
cnVuV2FzbUZpbGUoZmlsZVBhdGgpIHsKKyAgICBsZXQgYmxvYiA9IHJlYWRGaWxlKGZpbGVQYXRo
LCAiYmluYXJ5Iik7CisgICAgbGV0IGNvbXBpbGVkOworICAgIHRyeSB7CisgICAgICAgIGNvbXBp
bGVkID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmxvYiwgY29udGV4dCk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBwcmludChlKTsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9
CisgICAgY29tcGlsZWQuaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCk7CisgICAgcHJpbnQoImZpbmlz
aGVkIik7CisgICAgYXN5bmNUZXN0UGFzc2VkKCk7Cit9CisKK2ZvciAod2FzbUZpbGUgb2YgYXJn
dW1lbnRzKQorICAgIHJ1bldhc21GaWxlKHdhc21GaWxlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzbSBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL3Rlc3Qu
d2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MjYxN2RlMDAyZjZlZThmNTRlNmNkMTUzYjNjNmM4MzlkNzYzYTI0
CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzAKemNtWWp9dT9vVTQ2aC1mUTJgSEFMOzE5ZlAm
Sk5CRUJIfCM1S2hQRzwoMiVzITdRcmRNdTYxJWQ5MWFLZDVENVMrCnp4U35YPDB3dnpFYV93dGJt
WjUxfi1JdmtEdTc1S3k+R2khMSFTJCElYXo1XzZfLXVsRWZEe3ZFYkpDKzUjXyNNIwp0U0pGd2FW
T2FKbjgyKyhRN0RqVStvTVIkWTJ0LSpHYl9+JiR5d1FLSEBGN1EqaVQwdj1fNW5oPzkqNih7Cgps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0
cy90ZXN0Lndhc3QgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy90ZXN0Lndhc3QKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmMxMGZlNjE4NGI5MTk5ZTk4ZjUyZDI4MjU3ZDg3OGMxNzgzNzE0ZgotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzdApAQCAtMCwwICsxLDQ3IEBA
CisobW9kdWxlCisgICh0eXBlICg7MDspIChmdW5jIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSkp
CisgICh0eXBlICg7MTspIChmdW5jIChyZXN1bHQgaTMyKSkpCisgIChpbXBvcnQgImVudiIgIl9f
bGluZWFyX21lbW9yeSIgKG1lbW9yeSAoOzA7KSAwKSkKKyAgKGltcG9ydCAiZW52IiAiY2FsbGVy
SXNPTUdDb21waWxlZCIgKGZ1bmMgKDswOykgKHR5cGUgMSkpKQorICAoZnVuYyAoZXhwb3J0ICJ0
ZXN0IikgKHR5cGUgMCkgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpCisgICAgKGxvY2FsIGkzMiBp
MzIgaTMyIGkzMikKKyAgICBnZXRfbG9jYWwgMAorICAgIGkzMi5sb2FkCisgICAgaTMyLmNvbnN0
IDIKKyAgICBpMzIuYWRkCisgICAgY2FsbCAwCisgICAgc2V0X2xvY2FsIDIKKyAgICBnZXRfbG9j
YWwgMAorICAgIGkzMi5sb2FkCisgICAgc2V0X2xvY2FsIDMKKyAgICBpMzIuY29uc3QgMAorICAg
IHNldF9sb2NhbCA0CisgICAgYmxvY2sgIDs7IGxhYmVsID0gQDEKKyAgICAgIGdldF9sb2NhbCAy
CisgICAgICBicl9pZiAwICg7QDE7KQorICAgICAgaTMyLmNvbnN0IDAKKyAgICAgIHNldF9sb2Nh
bCA0CisgICAgICBsb29wICA7OyBsYWJlbCA9IEAyCisgICAgICAgIGdldF9sb2NhbCAwCisgICAg
ICAgIGdldF9sb2NhbCAzCisgICAgICAgIGkzMi5jb25zdCAzCisgICAgICAgIGkzMi5tdWwKKyAg
ICAgICAgaTMyLnN0b3JlCisgICAgICAgIGdldF9sb2NhbCA0CisgICAgICAgIGkzMi5jb25zdCAx
CisgICAgICAgIGkzMi5hZGQKKyAgICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAgY2FsbCAwCisg
ICAgICAgIHNldF9sb2NhbCAyCisgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgIGkzMi5sb2Fk
CisgICAgICAgIHNldF9sb2NhbCAzCisgICAgICAgIGdldF9sb2NhbCAyCisgICAgICAgIGkzMi5l
cXoKKyAgICAgICAgYnJfaWYgMCAoO0AyOykKKyAgICAgIGVuZAorICAgIGVuZAorICAgIGdldF9s
b2NhbCA0CisgICAgaTMyLmFkZAorICAgIGdldF9sb2NhbCAzCisgICAgaTMyLmFkZCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378258</attachid>
            <date>2019-09-06 17:37:25 -0700</date>
            <delta_ts>2019-09-07 23:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201569-20190906173719.patch</filename>
            <type>text/plain</type>
            <size>37192</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY4ZDQyZDQxNzE3ZjM0MjIyOTNlNDM1MDNmYWE3MmQ5ODYwYWI2Li5kOWQ5ODk1MTk1YzJkNTYz
ZTA4YWJlNjE3YTRlYTdjNTkyNTU5ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxOS0wOS0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGZhaWwgdG8gY2FwdHVyZSBzb21lIG9m
CisgICAgICAgIG91ciBjb250ZXh0cyB3aGVuIE9TUiBlbnRlcmluZyBpbnRvIHdhc20gY29kZS4g
QmVmb3JlIHdlIHdvdWxkCisgICAgICAgIG9ubHkgY2FwdHVyZSB0aGUgc3RhdGUgb2YgdGhlIGJs
b2NrIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZQorICAgICAgICBlbnRyYW5jZSBsb29wIGJs
b2NrIGhlYWRlci4gV2UgYWN0dWFsbHkgbmVlZCB0byBjYXB0dXJlIGFsbAorICAgICAgICBlbmNs
b3NlZCBzdGFja3MuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB2YXJpYWJsZXMgZm9yIGFsbCB0aGUgY2FwdHVyZWQKKyAgICAgICAgdmFsdWVzLiBXZSBjYW4g
dXNlIGEgUGhpIGFuZCBpbnNlcnQgYW4gdXBzaWxvbiBqdXN0IGJlbG93IHRoZQorICAgICAgICBj
YXB0dXJlZCB2YWx1ZS4KKworICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZCk6CisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmNyZWF0ZVN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpT
dGFjazo6U3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpTdGFjazo6YXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6U3RhY2s6OnRha2VMYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6U3RhY2s6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpTdGFjazo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OmNvbnZlcnRUb0V4cHJlc3Np
b25MaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3Rh
Y2s6OmF0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6U3RhY2s6OnZhcmlhYmxlQXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpTdGFjazo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVu
Y3Rpb25QYXJzZXI6OmNvbnRyb2xTdGFjayk6CisKIDIwMTktMDktMDUgIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTGF6eUNsYXNzU3RydWN0dXJlOjpzZXRD
b25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRoZSBjb25zdHJ1Y3RvciB0byB0aGUgZ2xvYmFs
IG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CmluZGV4IGE0NjcwM2RjZTlhYzljZjYwYjBhMGZhNDNmODQ2YzgwZDFkOTY1OWQuLmRkMjAwZTFh
MzUxMDczMTJkMWQwNWUyNTIyMjQzMzc1YTQ5NDUyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTEzMiw3ICsxMzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHdhc21Bd2FyZUxleGljYWxHbG9i
YWxPYmplY3QoVk0mKTsKIAotICAgICAgICBib29sIGlzQW55V2FzbUNhbGxlZSgpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQW55V2FzbUNhbGxlZSgpOwogCiAgICAgICAgIC8v
IEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29kZSB3YXMg
ZGVmaW5lZC4KICAgICAgICAgLy8gRGlmZmVycyBmcm9tIFZNOjp2bUVudHJ5R2xvYmFsT2JqZWN0
KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCmluZGV4IGViMTFhMjU5YTJjOTgzYjhlMTU4NDA2OWI0NDAyYzg3ZjZjNzc3
MDkuLmJlNWVkOWFlMzY1ZDQwN2JhY2NkZGE1N2MzMjU4ZWEzZTc3YzU0YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJv
ci5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0z
MjAsNiArMzIxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob0ZUTChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3Rh
dGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVy
T2ZERkdDb21waWxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSopOwpAQCAtNTQx
LDYgKzU0Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIs
IGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1
enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMiLCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMs
IDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5j
dGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImpz
Y09wdGlvbnMiLCBmdW5jdGlvbkpTQ09wdGlvbnMsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgIm9wdGltaXplTmV4dEludm9jYXRpb24iLCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRp
b24sIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dCIsIGZ1bmN0aW9uUmVvcHRpbWl6YXRpb25SZXRyeUNvdW50LCAxKTsKQEAgLTE3MjcsNiArMTcz
MCwzMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdD
b21waWxlcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1i
ZXJPZkRGR0NvbXBpbGVzKGV4ZWMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgaWYgKCFPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworCisgICAgQ2FsbGVyRnVu
Y3RvciB3YXNtVG9KU0ZyYW1lOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoZXhlYywgJnZtLCB3
YXNtVG9KU0ZyYW1lKTsKKyAgICBpZiAoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+aXNB
bnlXYXNtQ2FsbGVlKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJjYWxsZXIgaXMgbm90IGEgd2FzbS0+anMgaW1wb3J0IGZ1bmN0aW9uIik7CisKKyAgICAvLyBX
ZSBoYXZlIGEgd3JhcHBlciBmcmFtZSB0aGF0IHdlIGdlbmVyYXRlIGZvciBpbXBvcnRzLiBJZiB3
ZSBldmVyIGNhbiBkaXJlY3QgY2FsbCBmcm9tIHdhc20gd2Ugd291bGQgbmVlZCB0byBjaGFuZ2Ug
dGhpcy4KKyAgICBBU1NFUlQoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCku
aXNXYXNtKCkpOworICAgIENhbGxlckZ1bmN0b3Igd2FzbUZyYW1lOworICAgIFN0YWNrVmlzaXRv
cjo6dmlzaXQod2FzbVRvSlNGcmFtZS5jYWxsZXJGcmFtZSgpLCAmdm0sIHdhc21GcmFtZSk7Cisg
ICAgQVNTRVJUKHdhc21GcmFtZS5jYWxsZXJGcmFtZSgpLT5jYWxsZWUoKS5pc1dhc20oKSk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGF1dG8gbW9kZSA9IHdhc21GcmFtZS5jYWxsZXJG
cmFtZSgpLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKS0+Y29tcGlsYXRpb25Nb2RlKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obW9kZSA9PSBXYXNtOjpDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUgfHwgbW9kZSA9PSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogTWVzc2FnZTo6TWVzc2FnZShBcnJheUJ1ZmZlckNvbnRlbnRzJiYgY29udGVudHMsIGlu
dDMyX3QgaW5kZXgpCiAgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29udGVudHMpKQogICAgICwg
bV9pbmRleChpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhMTVlYzg0Yzg3NjEwNmNhNDNhNDJkZjFiMjAwNjAzYTAz
OWU2ZmMuLmM4NjY0ZmE3ZGM5MjAyNDBhMmRjZWQ3MWFjZmZjOGQ0NzE5YTU3YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAt
NTkxLDggKzU5MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRUaHJvd0V4Y2VwdGlvbihD
Q2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAotICAgIHZvaWQgZW1pdEVudHJ5VGllclVw
Q2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7Ci0gICAgdm9pZCBlbWl0
TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiwgdWlu
dDMyX3QsIHVpbnQzMl90LCBCMzo6T3JpZ2luKTsKKyAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENo
ZWNrKCk7CisgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCk7
CiAKICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICBFeHByZXNz
aW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKQEAgLTg1Miw3ICs4NTIsNyBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBlbWl0
RW50cnlUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpLCBC
Mzo6T3JpZ2luKCkpOworICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiB9CiAKIHZvaWQgQWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYgbWVtb3J5LCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCkBAIC0xNjAz
LDEwICsxNjAzLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywKICAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayhpbnQzMl90IGlu
Y3JlbWVudENvdW50LCBCMzo6T3JpZ2luIG9yaWdpbikKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVt
aXRFbnRyeVRpZXJVcENoZWNrKCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKLQogICAg
IGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYyNCw3ICsxNjIyLDcgQEAg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1l
bnRDb3VudCwgQjM6Ok9yaWdpbiBvcmkKICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hB
ZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQz
MihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHRp
ZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xNjUwLDkgKzE2NDgsMTAgQEAgdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwg
QjM6Ok9yaWdpbiBvcmkKICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIGNvdW50ZG93
blB0cik7CiB9CiAKLXZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50
MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgdWludDMy
X3QgbG9vcEluZGV4LCB1aW50MzJfdCBvdXRlckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4p
Cit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJ
bmRleCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICB1aW50MzJfdCBvdXRlckxv
b3BJbmRleCA9IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7CisgICAgbV9vdXRlckxvb3BzLmFwcGVu
ZChsb29wSW5kZXgpOwogCiAgICAgaWYgKCFtX3RpZXJVcCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTY4MCwxNCArMTY3OSwxNiBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENo
ZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBleAogICAgIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwogICAgIHBhdGNoQXJncy5hcHBlbmQoY291bnRkb3du
UHRyKTsKIAotICAgIFZlY3RvcjxCMzo6VHlwZT4gdHlwZXM7Ci0gICAgZm9yIChhdXRvJiBsb2Nh
bCA6IG1fbG9jYWxzKSB7CisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQogICAgICAg
ICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGxvY2FsLCBCMzo6VmFsdWVSZXA6OkNv
bGRBbnkpKTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHRvQjNUeXBlKGxvY2FsLnR5cGUoKSkpOwot
ICAgIH0KLSAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spIHsKLSAg
ICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChleHByZXNzaW9uLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHRvQjNUeXBlKGV4cHJlc3Np
b24udHlwZSgpKSk7CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9s
SW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkg
eworICAgICAgICBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAg
ICAgIGZvciAoYXV0byYgdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkp
KTsKKworICAgICAgICBjb25zdCBhdXRvJiByZXN1bHRzID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGEucmVzdWx0OworICAgICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogcmVzdWx0cykKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWlu
ZWRUbXAodmFsdWUsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIH0KIAogICAgIFRpZXJV
cENvdW50OjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9z
ckVudHJ5VHJpZ2dlcnMoKS5sYXN0KCkpOwpAQCAtMTY5NiwxMiArMTY5NywxMyBAQCB2b2lkIEFp
cklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQs
IGNvbnN0IFN0YWNrJiBleAogICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZvcmNlT1NSRW50cnkgPSBqaXQuYnJhbmNoVGVz
dDgoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhm
b3JjZUVudHJ5VHJpZ2dlcikpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGllclVwID0g
aml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGluY3JlbWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGllclVwID0gaml0
LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKFRpZXJVcENvdW50Ojpsb29wSW5jcmVtZW50KCkpLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICBPU1JFbnRyeURhdGEmIG9z
ckVudHJ5RGF0YSA9IG1fdGllclVwLT5hZGRPU1JFbnRyeURhdGEobV9mdW5jdGlvbkluZGV4LCBs
b29wSW5kZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0eXBl
cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCkuY29u
c3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpbmRleCArIDFdLCB0eXBlc1tpbmRleF0pOworICAgICAg
ICAvLyBGaXJzdCBhcmd1bWVudCBpcyB0aGUgY291bnRkb3duIGxvY2F0aW9uLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMTsgaW5kZXggPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRy
ZW4oKTsgKytpbmRleCkKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS52YWx1ZXMoKS5jb25zdHJ1
Y3RBbmRBcHBlbmQocGFyYW1zW2luZGV4XSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGluZGV4KS0+
dHlwZSgpKTsKICAgICAgICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFQdHIgPSAmb3NyRW50
cnlEYXRhOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CkBAIC0xNzE4LDcgKzE3MjAsNyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9v
cFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBleAogICAg
IGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKIH0KIAot
QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUg
c2lnbmF0dXJlLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1aW50MzJfdCBsb29wSW5k
ZXgpCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3Ao
VHlwZSBzaWduYXR1cmUsIGNvbnN0IFN0YWNrJiwgdWludDMyX3QgbG9vcEluZGV4KQogewogICAg
IEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTE3MjYsMTAgKzE3MjgsOCBAQCBB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBz
aWduYXR1cmUsIGNvbnN0IFN0YWNrJgogICAgIGFwcGVuZChKdW1wKTsKICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKIAotICAgIHVpbnQzMl90IG91dGVyTG9vcEluZGV4
ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKLSAgICBtX291dGVyTG9vcHMuYXBwZW5kKGxvb3BJ
bmRleCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIGVtaXRMb29wVGllclVwQ2hl
Y2soVGllclVwQ291bnQ6Omxvb3BJbmNyZW1lbnQoKSwgZXhwcmVzc2lvblN0YWNrLCBsb29wSW5k
ZXgsIG91dGVyTG9vcEluZGV4LCBvcmlnaW4oKSk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhs
b29wSW5kZXgpOwogCiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUs
IHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJv
ZHkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCmluZGV4IDgwZTg0ODg3ZGIwZTEyMTVlYjhiZGQ0ZmVhMjk1YjU4Y2NmOWFlYTMuLjk3
MWM1ZWFkYzU2MzE1NmVlNjgwOTczM2MxM2E1MzZhMjMxZmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE2MSwxMDcgKzE2
MSw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKICAgICB0
eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICBm
cmllbmQgY2xhc3MgU3RhY2s7Ci0gICAgY2xhc3MgU3RhY2sgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgU3RhY2soQjNJUkdlbmVyYXRvciogZ2VuZXJhdG9yKQotICAgICAgICAgICAgOiBtX2dlbmVy
YXRvcihnZW5lcmF0b3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBw
ZW5kKEV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBt
X2dlbmVyYXRvci0+bV9wcm9jLmFkZFZhcmlhYmxlKGV4cHJlc3Npb24tPnR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9nZW5lcmF0b3ItPm1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgU2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCks
IHZhcmlhYmxlLCBleHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9kYXRhLmFwcGVuZChleHByZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHRha2VMYXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2Vu
ZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3ItPm1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgQjM6Okdl
dCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCBtX3N0YWNrLnRha2VMYXN0KCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YS50YWtlTGFzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgbGFzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+
bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5tX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fZ2VuZXJhdG9yLT5tX3Byb2MsIEIzOjpHZXQsIG1fZ2Vu
ZXJhdG9yLT5vcmlnaW4oKSwgbV9zdGFjay5sYXN0KCkpOwotICAgICAgICAgICAgcmV0dXJuIG1f
ZGF0YS5sYXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9k
ZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9zdGFjay5zaXplKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUo
KTsKLSAgICAgICAgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXpl
KCkgPT0gMDsgfQotCi0gICAgICAgIEV4cHJlc3Npb25MaXN0IGNvbnZlcnRUb0V4cHJlc3Npb25M
aXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0
aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAg
ICAgICAgICAgIEV4cHJlc3Npb25MaXN0IHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKGF0KGkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtX2RhdGE7Ci0gICAgICAgIH0K
LQotICAgICAgICBFeHByZXNzaW9uVHlwZSBhdCh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2dlbmVyYXRvci0+bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX2dl
bmVyYXRvci0+bV9wcm9jLCBCMzo6R2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCksIG1fc3RhY2su
YXQoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5hdChpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZUF0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
c3RhY2suYXQoaSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgc2hyaW5rKHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBtX3N0YWNrLnNocmluayhpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2RhdGEu
c2hyaW5rKGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzd2FwKFN0YWNrJiBzdGFjaykK
LSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1fZ2VuZXJhdG9yLCBzdGFjay5tX2dl
bmVyYXRvcik7Ci0gICAgICAgICAgICBtX2RhdGEuc3dhcChzdGFjay5tX2RhdGEpOwotICAgICAg
ICAgICAgbV9zdGFjay5zd2FwKHN0YWNrLm1fc3RhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBkdW1wKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIsICIsICIiKTsKLSAgICAgICAgICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3Rh
Y2s6Iik7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09
IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiB2YXJpYWJsZSA6IG1fc3RhY2spCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coY29tbWEsICp2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogbV9k
YXRhKQotICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNzaW9uKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQjNJUkdlbmVyYXRvciogbV9nZW5lcmF0b3Ig
eyBudWxscHRyIH07Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0IG1fZGF0YTsKLSAgICAgICAgVmVj
dG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKLSAgICB9OwotICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkg
eyByZXR1cm4gU3RhY2sodGhpcyk7IH0KKyAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0
OworICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICB1c2luZyBD
b250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwogICAgIHVzaW5nIFJlc3VsdExpc3QgPSBDb250cm9s
RGF0YTo6UmVzdWx0TGlzdDsKQEAgLTM1MSw4ICsyNTIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUp
OwogCi0gICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVudENvdW50
LCBCMzo6T3JpZ2luKTsKLSAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNy
ZW1lbnRDb3VudCwgY29uc3QgU3RhY2smLCB1aW50MzJfdCwgdWludDMyX3QsIEIzOjpPcmlnaW4p
OworICAgIHZvaWQgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKKyAgICB2b2lkIGVtaXRMb29wVGll
clVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KTsKIAogICAgIHZvaWQgZW1pdFdyaXRlQmFycmll
ckZvckpTV3JhcHBlcigpOwogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQ
b2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
c2l6ZU9mT3ApOwpAQCAtNTg0LDcgKzQ4NSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAg
ICAgICAgIH0pOwogICAgIH0KIAotICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKFRpZXJVcENvdW50
OjpmdW5jdGlvbkVudHJ5SW5jcmVtZW50KCksIE9yaWdpbigpKTsKKyAgICBlbWl0RW50cnlUaWVy
VXBDaGVjaygpOwogCiAgICAgaWYgKG1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlKQogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5h
ZGRCbG9jaygpOwpAQCAtMTE5MCwxNSArMTA5MSwxNSBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bAogICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi12b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291
bnQsIE9yaWdpbiBvcmlnaW4pCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENo
ZWNrKCkKIHsKICAgICBpZiAoIW1fdGllclVwKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQobV90aWVyVXApOwotICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBv
aW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZtX3RpZXJVcC0+bV9jb3Vu
dGVyKSwgb3JpZ2luKTsKKyAgICBWYWx1ZSogY291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChw
b2ludGVyVHlwZSgpLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PigmbV90aWVyVXAtPm1fY291
bnRlciksIE9yaWdpbigpKTsKIAotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3Jp
Z2luKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgbW9yZSBwcmVjaXNlIGhlYXAgcmFuZ2UgZm9yIHRoZSB0aWVyIHVwIGNvdW50Lgog
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKQEAgLTEyMDksNyArMTEx
MCw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBp
bmNyZW1lbnRDb3VudCwgT3JpZ2luIG9yaWdpbikKICAgICBwYXRjaC0+YXBwZW5kKGNvdW50RG93
bkxvY2F0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5i
cmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNb
MF0uZ3ByKCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFu
Y2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3JlbWVudCgpKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIHBhcmFtcy5hZGRMYXRl
UGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xMjMzLDEzICsxMTM0LDE1IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRD
b3VudCwgT3JpZ2luIG9yaWdpbikKICAgICB9KTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBl
eHByZXNzaW9uU3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCwgdWludDMyX3Qgb3V0ZXJMb29wSW5k
ZXgsIEIzOjpPcmlnaW4gb3JpZ2luKQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJV
cENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCkKIHsKKyAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRl
eCA9IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7CisgICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29w
SW5kZXgpOworCiAgICAgaWYgKCFtX3RpZXJVcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT
RVJUKG1fdGllclVwKTsKLQorICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKICAg
ICBBU1NFUlQobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMoKS5zaXplKCkgPT0gbG9vcEluZGV4
KTsKICAgICBtX3RpZXJVcC0+b3NyRW50cnlUcmlnZ2VycygpLmFwcGVuZChUaWVyVXBDb3VudDo6
VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXIpOwogICAgIG1fdGllclVwLT5vdXRlckxvb3BzKCku
YXBwZW5kKG91dGVyTG9vcEluZGV4KTsKQEAgLTEyNDcsMTYgKzExNTAsMTQgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNv
bnN0IFN0YWNrJiBleHAKICAgICBWYWx1ZSogY291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChw
b2ludGVyVHlwZSgpLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PigmbV90aWVyVXAtPm1fY291
bnRlciksIG9yaWdpbik7CiAKICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IHN0YWNrbWFwOwot
ICAgIFZlY3RvcjxCMzo6VHlwZT4gdHlwZXM7CiAgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9j
YWxzKSB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2FsKTsK
ICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChy
ZXN1bHQtPnR5cGUoKSk7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
ID0gZXhwcmVzc2lvblN0YWNrLmF0KGkpOwotICAgICAgICBzdGFja21hcC5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgdHlwZXMuYXBwZW5kKHJlc3VsdC0+dHlwZSgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFj
aykKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogCiAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4pOwpAQCAtMTI4MSwxMiArMTE4MiwxMyBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1l
bnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZm9yY2VPU1JFbnRyeSA9IGppdC5icmFu
Y2hUZXN0OChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRy
ZXNzKGZvcmNlRW50cnlUcmlnZ2VyKSk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCB0aWVy
VXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3NpdGl2ZU9yWmVybywgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5jcmVtZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocGFyYW1zWzBdLmdwcigpKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCB0aWVyVXAg
PSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3NpdGl2ZU9yWmVybywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoVGllclVwQ291bnQ6Omxvb3BJbmNyZW1lbnQoKSksIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgIE9TUkVudHJ5RGF0
YSYgb3NyRW50cnlEYXRhID0gbV90aWVyVXAtPmFkZE9TUkVudHJ5RGF0YShtX2Z1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IHR5cGVzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIG9zckVudHJ5RGF0YS52YWx1ZXMo
KS5jb25zdHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2luZGV4ICsgMV0sIHR5cGVzW2luZGV4XSk7Cisg
ICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb3VudGRvd24gbG9jYXRpb24uCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4o
KTsgKytpKQorICAgICAgICAgICAgb3NyRW50cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFw
cGVuZChwYXJhbXNbaV0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpKS0+dHlwZSgpKTsKICAgICAg
ICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFQdHIgPSAmb3NyRW50cnlEYXRhOwogCiAgICAg
ICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CkBAIC0xMzAx
LDcgKzEyMDMsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50
MzJfdCBpbmNyZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIH0pOwogfQogCi1CM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0
dXJlLCBjb25zdCBTdGFjayYgc3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkKK0IzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUsIGNv
bnN0IFN0YWNrJiwgdWludDMyX3QgbG9vcEluZGV4KQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkg
PSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3By
b2MuYWRkQmxvY2soKTsKQEAgLTEzMDksNDEgKzEyMTEsNDcgQEAgQjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSwgY29uc3QgU3Rh
Y2smIHMKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
SnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgIGlmIChsb29wSW5kZXggPT0gbV9sb29wSW5kZXhG
b3JPU1JFbnRyeSkgewogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOwotICAg
ICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBtX2xvY2Fscy5zaXplKCkgKyBzdGFj
ay5zaXplKCk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2stPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogCi0gICAgICAgIGF1dG8gbG9hZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChCMzo6VHlw
ZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNp
emVvZih1aW50NjRfdCkgKiBpbmRleDsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQjM6OkludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMy
LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGNhc2UgQjM6OkludDY0
OgotICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBjYXNlIEIzOjpGbG9hdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6
RmxvYXQsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICAgICAgY2FzZSBCMzo6
RG91YmxlOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpEb3VibGUsIG9yaWdpbigpLCBwb2ludGVy
LCBvZmZzZXQpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKyAgICAgICAgYXV0byBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAg
IHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisrOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKICAgICAgICAgfTsKIAotICAgICAg
ICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKICAgICAgICAgZm9yIChhdXRvJiBsb2NhbCA6
IG1fbG9jYWxzKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIobG9jYWwtPnR5cGUoKSwgaW5kZXhJbkJ1ZmZlcisrKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byogdmFy
aWFibGUgPSBzdGFjay52YXJpYWJsZUF0KGkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxl
LCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFyaWFibGUtPnR5cGUoKSwgaW5kZXhJbkJ1ZmZlcisr
KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2Nh
bC0+dHlwZSgpKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBj
b250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJ
bmRleCkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICAgICAgYXV0byYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIHN0YWNrIGVu
dHJ5IHVuZGVybmVhdGggdXMgd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhp
IHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKSA/IGV4cHJlc3Npb25TdGFja1sw
XS0+b3duZXIgOiBudWxscHRyOworICAgICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IDA7
CisgICAgICAgICAgICBCMzo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8qIHZhbHVlID0gZXhwcmVzc2lvblN0YWNrW2ld
OworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCkgIT0g
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBwaGkgPSBkYXRhLmNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFBoaSwgIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvblN0YWNrW2ldID0gcGhpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZy
b21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOworCisgICAgICAgICAgICAgICAg
YXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLCBwaGkpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRW
YWx1ZShibG9ja0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKICAgICAgICAgfQorCisgICAg
ICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5CdWZmZXI7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgYm9keSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICB9CiAKLSAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRleCA9IHRoaXMtPm91dGVyTG9v
cEluZGV4KCk7Ci0gICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29wSW5kZXgpOwogICAgIG1fY3Vy
cmVudEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojps
b29wSW5jcmVtZW50KCksIHN0YWNrLCBsb29wSW5kZXgsIG91dGVyTG9vcEluZGV4LCBvcmlnaW4o
KSk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgpOwogCiAgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBj
b250aW51YXRpb24sIGJvZHkpOwogfQpAQCAtMTQ2Nyw3ICsxMzc1LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRp
YWxSZXN1bHQKIAogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIg
dGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCiAgICAg
aWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCi0gICAgICAgIHJldHVybiBh
ZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
LmNvbnZlcnRUb0V4cHJlc3Npb25MaXN0KCkpOworICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGVu
dHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtMTczOSw2ICsxNjQ3LDEzIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1
bHRMCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRT
dGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCitzdGF0aWMgdm9pZCBk
dW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJH
ZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCit7CisgICAgZGF0YUxv
Zyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJl
c3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNz
aW9uKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9s
RW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAg
ICAgZGF0YUxvZ0xuKCJDb25zdGFudHM6Iik7CkBAIC0xNzUyLDcgKzE2NjcsOCBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFj
aywgY29uc3QgU3RhY2sqCiAgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGRhdGFM
b2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKLSAgICAgICAgZXhw
cmVzc2lvblN0YWNrLT5kdW1wKCk7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAi
Iik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpleHByZXNzaW9uU3RhY2sp
OwogICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOwogICAgICAgICBkYXRhTG9nTG4oKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGExMzg0MTBhY2Uw
MGEzZWM1OTY1OTcxMjM5M2YxYWJkN2U2Y2U3NjAuLjcyZmRhZmZmOTczOTIzNmNlNWUyZDBhNjhk
ZTgxOGM3ZDAzOGI4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICBPcFR5cGUgY3Vy
cmVudE9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsgfQogICAgIHNpemVf
dCBjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRP
cGNvZGVTdGFydGluZ09mZnNldDsgfQogCisgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRy
b2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisKIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODBjM2RiMjdkN2UwZmM1ZTcyNzNlNzlhYzgy
OGYyOWY2M2NhMmNhZS4uMzBjMWNkODExZTI5MWNhYTA5N2NhZTMwMjdkOTE4YjZhMzgyZWMzMSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE5LTA5LTA2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIE9TUiBlbnRyeSBpbnRvIHdhc20gbWlzc2VzIHNvbWUgY29udGV4dHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcg
dGVzdCBoYXJuZXNzIG1vZGUgZm9yIHRlc3RzIGNyZWF0ZWQgZnJvbSB3YXN0IGZpbGVzLgorCisg
ICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wOS0wNSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChpT1Mg
MTMpOiBCdWxsZXRlZCBsaXN0IGNvcGllZCBmcm9tIE5vdGVzIHRvIE1haWwgcmVzdWx0cyBpbiBU
aW1lcyBOZXcgUm9tYW4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3Mt
dGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGEzODljYTAw
MzJiMTYyZDJhN2M3NGEyOTUzYWExM2FhZmJkY2IyNTQuLjRlNzJkN2MyYjQ4YWI4MjFlMWYxYWUz
MTM3NzZjMmI4ZGUwODc2Y2IgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTEx
NCw2ICsxMTE0LDM2IEBAIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCiAgICAgZW5kCiBlbmQKIAorZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5l
c3MoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKKyAgICByYWlzZSB1bmxlc3MgJGJlbmNo
bWFyay50b19zID1+IC9oYXJuZXNzXC5tP2pzLworICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisg
ICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgd2FzbUZpbGVzID0gYWxsV2FzbUZp
bGVzKCRjb2xsZWN0aW9uKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMod2FzbUZpbGVz
Lm1hcCB7IHxmfCBmLmJhc2VuYW1lIH0sICRjb2xsZWN0aW9uKQorCisgICAgZGVmIHJ1bihraW5k
LCAqb3B0aW9ucykKKyAgICAgICAgd2FzbUZpbGVzID0gYWxsV2FzbUZpbGVzKCRjb2xsZWN0aW9u
KQorICAgICAgICB3YXNtRmlsZXMuZWFjaCB7CisgICAgICAgICAgICB8IGZpbGUgfAorICAgICAg
ICAgICAgYmFzZW5hbWUgPSBmaWxlLmJhc2VuYW1lLnRvX3MKKyAgICAgICAgICAgIGFkZFJ1bkNv
bW1hbmQoIigiICsgYmFzZW5hbWUgKyAiKS0iICsga2luZCwgW3BhdGhUb1ZNLnRvX3NdICsgJHRl
c3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucyArIG9wdGlvbnMgKyBbJGJlbmNobWFyay50b19zLCAi
LS0iLCBiYXNlbmFtZV0sIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlcikK
KyAgICAgICAgfQorICAgIGVuZAorCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBpZiAkbW9kZSAhPSAicXVp
Y2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1lYWdl
ciIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tY2FsbC1pYyIsICIt
LXVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscz1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tdGxz
LWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLXNs
b3ctbWVtb3J5IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1u
by1haXIiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51
b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8K
KyAgICBlbmQKK2VuZAorCiBkZWYgcnVuV2ViQXNzZW1ibHlFbXNjcmlwdGVuKG1vZGUpCiAgICAg
Y2FzZSBtb2RlCiAgICAgd2hlbiA6c2tpcApAQCAtMTQ4Myw2ICsxNTEzLDIxIEBAIGRlZiBza2lw
CiAgICAgcHV0cyAiU2tpcHBpbmcgI3skY29sbGVjdGlvbk5hbWV9LyN7JGJlbmNobWFya30iCiBl
bmQKIAorZGVmIGFsbFdhc21GaWxlcyhwYXRoKQorICAgIGlmIHBhdGguZmlsZT8KKyAgICAgICAg
W3BhdGhdCisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBEaXIuZm9yZWFj
aChwYXRoKSB7CisgICAgICAgICAgICB8IGZpbGVuYW1lIHwKKyAgICAgICAgICAgIG5leHQgdW5s
ZXNzIGZpbGVuYW1lID1+IC9cLm0/d2FzbSQvCisgICAgICAgICAgICBuZXh0IHVubGVzcyAocGF0
aCArIGZpbGVuYW1lKS5maWxlPworICAgICAgICAgICAgcmVzdWx0IDw8IHBhdGggKyBmaWxlbmFt
ZQorICAgICAgICB9CisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKIGRlZiBhbGxKU0Zp
bGVzKHBhdGgpCiAgICAgaWYgcGF0aC5maWxlPwogICAgICAgICBbcGF0aF0KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWQzNDdkODYyMmY1
NGQ2ZWI2MWI3ZDExODBkZjI4YmViNDQzYzQwZS4uMzM0MTBlNmMwNmE5MGIwMzY2MDQ1MzJlMDNi
N2UxN2Y3Mzc0ZTQzOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wOS0wNiAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1p
c3NlcyBzb21lIGNvbnRleHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDE1NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgYSBuZXcgaGFybmVzcyBhbmQgd2FzdCBhbmQgdGhlIGdlbmVyYXRlZCB3
YXNtIGZpbGUgZm9yIHRlc3RpbmcuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHRl
c3QgbW9yZSB0ZXN0cyB3aWxsIGZvbGxvdy4KKworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAg
ICAgKiB3YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qczogQWRkZWQuCisgICAgICAgIChhc3luYy5y
dW5XYXNtRmlsZSk6CisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzbTogQWRkZWQu
CisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzdDogQWRkZWQuCisKIDIwMTktMDkt
MDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTGF6eUNs
YXNzU3RydWN0dXJlOjpzZXRDb25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRoZSBjb25zdHJ1
Y3RvciB0byB0aGUgZ2xvYmFsIG9iamVjdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtLnlhbWwg
Yi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCBmODcxMWY3NGJhZWVkNDNjN2YyMzM4MTUxZDcxYTE2
ZGFkNjVlOTZiLi42OTdmMTJhYTFmODkyODY2NzIyMGQ1NDliZDJjYmZiMjA0NWUxNjg5IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtMjEs
OCArMjEsOCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotLSBwYXRoOiB3YXNt
L3NlbGYtdGVzdC8KLSAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNv
bW1hbmRzCistIHBhdGg6IHdhc20vd2FzdC10ZXN0cy8KKyAgY21kOiBydW5XZWJBc3NlbWJseVdp
dGhIYXJuZXNzCiAtIHBhdGg6IHdhc20vanMtYXBpLwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3Vp
dGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9ub0pJVC8KQEAgLTQzLDYg
KzQzLDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1h
bmRzCiAtIHBhdGg6IHdhc20vbW9kdWxlcy8KICAgY21kOiBydW5XZWJBc3NlbWJseSB1bmxlc3Mg
cGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL3NlbGYtdGVzdC8KKyAgY21kOiBydW5XZWJB
c3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAKIC0gcGF0aDogd2FzbS9zcGVj
LXRlc3RzL2FkZHJlc3Mud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOm5v
cm1hbApAQCAtMTg1LDMgKzE4Nyw0IEBACiAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9t
LXdhc20ud2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9oYXJu
ZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBjYzM1OWMwNDEzYTNmMTM1NzU2YzAzNTM2ZmRhYjZmNGI0ZDcx
MTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9oYXJuZXNzLmpz
CkBAIC0wLDAgKzEsMjIgQEAKK2FzeW5jVGVzdFN0YXJ0KDEpOworbGV0IGNvbnRleHQgPSB7Cisg
ICAgZW52OiBnbG9iYWxUaGlzLAorfTsKKworZ2xvYmFsVGhpcy5fX2xpbmVhcl9tZW1vcnkgPSBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogMSB9KTsKKworYXN5bmMgZnVuY3Rpb24g
cnVuV2FzbUZpbGUoZmlsZVBhdGgpIHsKKyAgICBsZXQgYmxvYiA9IHJlYWRGaWxlKGZpbGVQYXRo
LCAiYmluYXJ5Iik7CisgICAgbGV0IGNvbXBpbGVkOworICAgIHRyeSB7CisgICAgICAgIGNvbXBp
bGVkID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmxvYiwgY29udGV4dCk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBwcmludChlKTsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9
CisgICAgY29tcGlsZWQuaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCk7CisgICAgYXN5bmNUZXN0UGFz
c2VkKCk7Cit9CisKK2ZvciAod2FzbUZpbGUgb2YgYXJndW1lbnRzKQorICAgIHJ1bldhc21GaWxl
KHdhc21GaWxlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2Fz
bSBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL3Rlc3Qud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjYxN2Rl
MDAyZjZlZThmNTRlNmNkMTUzYjNjNmM4MzlkNzYzYTI0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAxNzAKemNtWWp9dT9vVTQ2aC1mUTJgSEFMOzE5ZlAmSk5CRUJIfCM1S2hQRzwoMiVzITdRcmRN
dTYxJWQ5MWFLZDVENVMrCnp4U35YPDB3dnpFYV93dGJtWjUxfi1JdmtEdTc1S3k+R2khMSFTJCEl
YXo1XzZfLXVsRWZEe3ZFYkpDKzUjXyNNIwp0U0pGd2FWT2FKbjgyKyhRN0RqVStvTVIkWTJ0LSpH
Yl9+JiR5d1FLSEBGN1EqaVQwdj1fNW5oPzkqNih7CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy90ZXN0Lndhc3QgYi9KU1Rlc3RzL3dh
c20vd2FzdC10ZXN0cy90ZXN0Lndhc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmMxMGZlNjE4NGI5MTk5ZTk4ZjUy
ZDI4MjU3ZDg3OGMxNzgzNzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS93YXN0
LXRlc3RzL3Rlc3Qud2FzdApAQCAtMCwwICsxLDQ3IEBACisobW9kdWxlCisgICh0eXBlICg7MDsp
IChmdW5jIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSkpCisgICh0eXBlICg7MTspIChmdW5jIChy
ZXN1bHQgaTMyKSkpCisgIChpbXBvcnQgImVudiIgIl9fbGluZWFyX21lbW9yeSIgKG1lbW9yeSAo
OzA7KSAwKSkKKyAgKGltcG9ydCAiZW52IiAiY2FsbGVySXNPTUdDb21waWxlZCIgKGZ1bmMgKDsw
OykgKHR5cGUgMSkpKQorICAoZnVuYyAoZXhwb3J0ICJ0ZXN0IikgKHR5cGUgMCkgKHBhcmFtIGkz
MikgKHJlc3VsdCBpMzIpCisgICAgKGxvY2FsIGkzMiBpMzIgaTMyIGkzMikKKyAgICBnZXRfbG9j
YWwgMAorICAgIGkzMi5sb2FkCisgICAgaTMyLmNvbnN0IDIKKyAgICBpMzIuYWRkCisgICAgY2Fs
bCAwCisgICAgc2V0X2xvY2FsIDIKKyAgICBnZXRfbG9jYWwgMAorICAgIGkzMi5sb2FkCisgICAg
c2V0X2xvY2FsIDMKKyAgICBpMzIuY29uc3QgMAorICAgIHNldF9sb2NhbCA0CisgICAgYmxvY2sg
IDs7IGxhYmVsID0gQDEKKyAgICAgIGdldF9sb2NhbCAyCisgICAgICBicl9pZiAwICg7QDE7KQor
ICAgICAgaTMyLmNvbnN0IDAKKyAgICAgIHNldF9sb2NhbCA0CisgICAgICBsb29wICA7OyBsYWJl
bCA9IEAyCisgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgIGdldF9sb2NhbCAzCisgICAgICAg
IGkzMi5jb25zdCAzCisgICAgICAgIGkzMi5tdWwKKyAgICAgICAgaTMyLnN0b3JlCisgICAgICAg
IGdldF9sb2NhbCA0CisgICAgICAgIGkzMi5jb25zdCAxCisgICAgICAgIGkzMi5hZGQKKyAgICAg
ICAgc2V0X2xvY2FsIDQKKyAgICAgICAgY2FsbCAwCisgICAgICAgIHNldF9sb2NhbCAyCisgICAg
ICAgIGdldF9sb2NhbCAwCisgICAgICAgIGkzMi5sb2FkCisgICAgICAgIHNldF9sb2NhbCAzCisg
ICAgICAgIGdldF9sb2NhbCAyCisgICAgICAgIGkzMi5lcXoKKyAgICAgICAgYnJfaWYgMCAoO0Ay
OykKKyAgICAgIGVuZAorICAgIGVuZAorICAgIGdldF9sb2NhbCA0CisgICAgaTMyLmFkZAorICAg
IGdldF9sb2NhbCAzCisgICAgaTMyLmFkZCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378320</attachid>
            <date>2019-09-07 23:25:34 -0700</date>
            <delta_ts>2019-09-09 11:11:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201569-20190907232524.patch</filename>
            <type>text/plain</type>
            <size>45703</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY4ZDQyZDQxNzE3ZjM0MjIyOTNlNDM1MDNmYWE3MmQ5ODYwYWI2Li5jOWRhNThmN2U3YTEzNGVh
MjYzOWJmYzE4ZTJkN2NhNWYyNTkwZGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxOS0wOS0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGZhaWwgdG8gY2FwdHVyZSBzb21lIG9m
CisgICAgICAgIG91ciBjb250ZXh0cyB3aGVuIE9TUiBlbnRlcmluZyBpbnRvIHdhc20gY29kZS4g
QmVmb3JlIHdlIHdvdWxkCisgICAgICAgIG9ubHkgY2FwdHVyZSB0aGUgc3RhdGUgb2YgdGhlIGJs
b2NrIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZQorICAgICAgICBlbnRyYW5jZSBsb29wIGJs
b2NrIGhlYWRlci4gV2UgYWN0dWFsbHkgbmVlZCB0byBjYXB0dXJlIGFsbAorICAgICAgICBlbmNs
b3NlZCBzdGFja3MuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB2YXJpYWJsZXMgZm9yIGFsbCB0aGUgY2FwdHVyZWQKKyAgICAgICAgdmFsdWVzLiBXZSBjYW4g
dXNlIGEgUGhpIGFuZCBpbnNlcnQgYW4gdXBzaWxvbiBqdXN0IGJlbG93IHRoZQorICAgICAgICBj
YXB0dXJlZCB2YWx1ZS4KKworICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZCk6CisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1pdEVudHJ5VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRMb29wKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Y3JlYXRlU3RhY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHBy
ZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OlN0YWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OmFwcGVuZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjp0YWtlTGFz
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjps
YXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6
OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpTdGFjazo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OlN0YWNrOjpjb252ZXJ0VG9FeHByZXNzaW9uTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjphdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjp2YXJpYWJsZUF0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3Rh
Y2s6OnNocmluayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OlN0YWNrOjpzd2FwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6U3RhY2s6OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpjb250cm9s
U3RhY2spOgorCiAyMDE5LTA5LTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29t
PgogCiAgICAgICAgIExhenlDbGFzc1N0cnVjdHVyZTo6c2V0Q29uc3RydWN0b3Igc2hvdWxkIG5v
dCBzdG9yZSB0aGUgY29uc3RydWN0b3IgdG8gdGhlIGdsb2JhbCBvYmplY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCBhNDY3MDNkY2U5YWM5
Y2Y2MGIwYTBmYTQzZjg0NmM4MGQxZDk2NTlkLi5kZDIwMGUxYTM1MTA3MzEyZDFkMDVlMjUyMjI0
MzM3NWE0OTQ1MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCkBAIC0xMzIsNyArMTMyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiB3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJik7CiAKLSAg
ICAgICAgYm9vbCBpc0FueVdhc21DYWxsZWUoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc0FueVdhc21DYWxsZWUoKTsKIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdo
aWNoIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2FzIGRlZmluZWQuCiAgICAgICAgIC8v
IERpZmZlcnMgZnJvbSBWTTo6dm1FbnRyeUdsb2JhbE9iamVjdCgpIGR1cmluZyBmdW5jdGlvbiBj
YWxscyBhY3Jvc3Mgd2ViIGJyb3dzZXIgZnJhbWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBl
YjExYTI1OWEyYzk4M2I4ZTE1ODQwNjliNDQwMmM4N2Y2Yzc3NzA5Li5iZTVlZDlhZTM2NWQ0MDdi
YWNjZGRhNTdjMzI1OGVhM2U3N2M1NGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMzIwLDYgKzMyMSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRlKik7
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vT1NSRXhpdEZ1
enppbmcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxl
cklzT01HQ29tcGlsZWQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkpTQ09wdGlvbnMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVj
U3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJh
bnNmZXJBcnJheUJ1ZmZlcihFeGVjU3RhdGUqKTsKQEAgLTU0MSw2ICs1NDMsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibm9GVEwiLCBmdW5jdGlvbk5vRlRMLCAxKTsK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJub09TUkV4aXRGdXp6aW5nIiwgZnVuY3Rpb25Ob09T
UkV4aXRGdXp6aW5nLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZkRGR0Nv
bXBpbGVzIiwgZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBpbGVzLCAxKTsKKyAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjYWxsZXJJc09NR0NvbXBpbGVkIiwgZnVuY3Rpb25DYWxsZXJJc09NR0NvbXBp
bGVkLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJqc2NPcHRpb25zIiwgZnVuY3Rpb25K
U0NPcHRpb25zLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uIiwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uLCAxKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJyZW9wdGltaXphdGlvblJldHJ5Q291bnQiLCBmdW5jdGlvblJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudCwgMSk7CkBAIC0xNzI3LDYgKzE3MzAsMzEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhlY1N0YXRlKiBl
eGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyT2ZERkdDb21waWxlcyhleGVj
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJJc09N
R0NvbXBpbGVkKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghT3B0
aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKTsKKworICAgIENhbGxlckZ1bmN0b3Igd2FzbVRvSlNGcmFtZTsK
KyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGV4ZWMsICZ2bSwgd2FzbVRvSlNGcmFtZSk7CisgICAg
aWYgKCF3YXNtVG9KU0ZyYW1lLmNhbGxlckZyYW1lKCktPmlzQW55V2FzbUNhbGxlZSgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiY2FsbGVyIGlzIG5vdCBhIHdh
c20tPmpzIGltcG9ydCBmdW5jdGlvbiIpOworCisgICAgLy8gV2UgaGF2ZSBhIHdyYXBwZXIgZnJh
bWUgdGhhdCB3ZSBnZW5lcmF0ZSBmb3IgaW1wb3J0cy4gSWYgd2UgZXZlciBjYW4gZGlyZWN0IGNh
bGwgZnJvbSB3YXNtIHdlIHdvdWxkIG5lZWQgdG8gY2hhbmdlIHRoaXMuCisgICAgQVNTRVJUKCF3
YXNtVG9KU0ZyYW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICBDYWxs
ZXJGdW5jdG9yIHdhc21GcmFtZTsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHdhc21Ub0pTRnJh
bWUuY2FsbGVyRnJhbWUoKSwgJnZtLCB3YXNtRnJhbWUpOworICAgIEFTU0VSVCh3YXNtRnJhbWUu
Y2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCkuaXNXYXNtKCkpOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICBhdXRvIG1vZGUgPSB3YXNtRnJhbWUuY2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCkuYXNX
YXNtQ2FsbGVlKCktPmNvbXBpbGF0aW9uTW9kZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKG1vZGUgPT0gV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlIHx8IG1v
ZGUgPT0gV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpKTsKKyNlbmRp
ZgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIE1lc3NhZ2U6Ok1lc3Nh
Z2UoQXJyYXlCdWZmZXJDb250ZW50cyYmIGNvbnRlbnRzLCBpbnQzMl90IGluZGV4KQogICAgIDog
bV9jb250ZW50cyhXVEZNb3ZlKGNvbnRlbnRzKSkKICAgICAsIG1faW5kZXgoaW5kZXgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRl
eCBmYTE1ZWM4NGM4NzYxMDZjYTQzYTQyZGYxYjIwMDYwM2EwMzllNmZjLi5jODY2NGZhN2RjOTIw
MjQwYTJkY2VkNzFhY2ZmYzhkNDcxOWE1N2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTU5MSw4ICs1OTEsOCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0
aW9uVHlwZSk7CiAKLSAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVt
ZW50Q291bnQsIEIzOjpPcmlnaW4pOwotICAgIHZvaWQgZW1pdExvb3BUaWVyVXBDaGVjayhpbnQz
Ml90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYsIHVpbnQzMl90LCB1aW50MzJfdCwgQjM6
Ok9yaWdpbik7CisgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjaygpOworICAgIHZvaWQgZW1p
dExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpOwogCiAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcCk7CkBAIC04NTIsNyArODUyLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFp
cklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJl
JiBwcm8KICAgICAgICAgfQogICAgIH0pOwogCi0gICAgZW1pdEVudHJ5VGllclVwQ2hlY2soVGll
clVwQ291bnQ6OmZ1bmN0aW9uRW50cnlJbmNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKKyAgICBl
bWl0RW50cnlUaWVyVXBDaGVjaygpOwogfQogCiB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVHlwZWRUbXAg
aW5zdGFuY2UsIEJhc2ljQmxvY2sqIGJsb2NrKQpAQCAtMTYwMywxMCArMTYwMyw4IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJl
c3Npb25UeXBlIG5vblplcm8sCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9y
aWdpbiBvcmlnaW4pCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjaygp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7Ci0KICAgICBpZiAoIW1fdGllclVwKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE2MjQsNyArMTYyMiw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6
OmVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIEIzOjpPcmlnaW4g
b3JpCiAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogCi0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQ
b3NpdGl2ZU9yWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5jcmVtZW50Q291bnQp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3Np
dGl2ZU9yWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoVGllclVwQ291bnQ6OmZ1bmN0
aW9uRW50cnlJbmNyZW1lbnQoKSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCkpKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFi
ZWwoKTsKIAogICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgewpAQCAtMTY1MCw5ICsxNjQ4LDEwIEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRFbnRy
eVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpCiAgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpLCBjb3VudGRvd25QdHIpOwogfQogCi12b2lkIEFp
cklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQs
IGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCwgdWludDMy
X3Qgb3V0ZXJMb29wSW5kZXgsIEIzOjpPcmlnaW4gb3JpZ2luKQordm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKG9yaWdpbik7CisgICAgdWludDMyX3Qgb3V0ZXJMb29wSW5kZXggPSB0aGlzLT5vdXRl
ckxvb3BJbmRleCgpOworICAgIG1fb3V0ZXJMb29wcy5hcHBlbmQobG9vcEluZGV4KTsKIAogICAg
IGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVybjsKQEAgLTE2ODAsMTQgKzE2NzksMTYgQEAg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVu
dENvdW50LCBjb25zdCBTdGFjayYgZXgKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNo
QXJnczsKICAgICBwYXRjaEFyZ3MuYXBwZW5kKGNvdW50ZG93blB0cik7CiAKLSAgICBWZWN0b3I8
QjM6OlR5cGU+IHR5cGVzOwotICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykgeworICAg
IGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChD
b25zdHJhaW5lZFRtcChsb2NhbCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgICAgIHR5
cGVzLmFwcGVuZCh0b0IzVHlwZShsb2NhbC50eXBlKCkpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRv
JiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAoZXhwcmVzc2lvbiwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZCh0b0IzVHlwZShleHByZXNzaW9uLnR5cGUoKSkpOworICAgIGZv
ciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9s
SW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGF1dG8mIHZhbHVl
IDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh2YWx1ZSwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7CisKKyAgICAgICAgY29uc3Qg
YXV0byYgcmVzdWx0cyA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNv
bnRyb2xEYXRhLnJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHJlc3VsdHMpCisg
ICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKICAgICB9CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNv
biogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkubGFz
dCgpKTsKQEAgLTE2OTYsMTIgKzE2OTcsMTMgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExv
b3BUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXgKICAg
ICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBmb3JjZU9TUkVudHJ5ID0gaml0LmJyYW5jaFRlc3Q4KENDYWxsSGVscGVyczo6Tm9u
WmVybywgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoZm9yY2VFbnRyeVRyaWdnZXIpKTsK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2Fs
bEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmNy
ZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhl
bHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihUaWVyVXBD
b3VudDo6bG9vcEluY3JlbWVudCgpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5n
cHIoKSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0
LmxhYmVsKCk7CiAKICAgICAgICAgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEgPSBtX3RpZXJV
cC0+YWRkT1NSRW50cnlEYXRhKG1fZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4KTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyArK2luZGV4KQot
ICAgICAgICAgICAgb3NyRW50cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFwcGVuZChwYXJh
bXNbaW5kZXggKyAxXSwgdHlwZXNbaW5kZXhdKTsKKyAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQg
aXMgdGhlIGNvdW50ZG93biBsb2NhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDE7IGluZGV4IDwgcGFyYW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCk7ICsraW5kZXgpCisgICAg
ICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCkuY29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tp
bmRleF0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpbmRleCktPnR5cGUoKSk7CiAgICAgICAgIE9T
UkVudHJ5RGF0YSogb3NyRW50cnlEYXRhUHRyID0gJm9zckVudHJ5RGF0YTsKIAogICAgICAgICBw
YXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewpAQCAtMTcxOCw3ICsx
NzIwLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90
IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXgKICAgICBlbWl0UGF0Y2hwb2ludChwYXRj
aCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CiB9CiAKLUFpcklSR2VuZXJhdG9yOjpDb250
cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSwgY29uc3QgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4KQorQWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlLCBjb25z
dCBTdGFjayYsIHVpbnQzMl90IGxvb3BJbmRleCkKIHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0g
bV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CkBAIC0xNzI2LDEwICsxNzI4LDggQEAgQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlLCBjb25zdCBTdGFj
ayYKICAgICBhcHBlbmQoSnVtcCk7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
Ym9keSk7CiAKLSAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRleCA9IHRoaXMtPm91dGVyTG9vcElu
ZGV4KCk7Ci0gICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29wSW5kZXgpOwogICAgIG1fY3VycmVu
dEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojpsb29w
SW5jcmVtZW50KCksIGV4cHJlc3Npb25TdGFjaywgbG9vcEluZGV4LCBvdXRlckxvb3BJbmRleCwg
b3JpZ2luKCkpOworICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcEluZGV4KTsKIAogICAgIHJl
dHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVy
ZSksIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA4MGU4NDg4
N2RiMGUxMjE1ZWI4YmRkNGZlYTI5NWI1OGNjZjlhZWEzLi5kNDI5Y2EwZGNhMmVjZjU4MTBjODg2
MzEwYmM5NDcyNTRjNjE3MjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0xNjEsMTA3ICsxNjEsOCBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBWYWx1ZSogRXhwcmVzc2lvblR5cGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogCi0gICAgZnJpZW5kIGNsYXNzIFN0YWNrOwot
ICAgIGNsYXNzIFN0YWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0YWNrKEIzSVJHZW5lcmF0
b3IqIGdlbmVyYXRvcikKLSAgICAgICAgICAgIDogbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGVuZChFeHByZXNzaW9uVHlwZSBl
eHByZXNzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29t
cGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gbV9nZW5lcmF0b3ItPm1fcHJvYy5h
ZGRWYXJpYWJsZShleHByZXNzaW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG1fZ2VuZXJh
dG9yLT5tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fZ2VuZXJhdG9y
LT5tX3Byb2MsIFNldCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCB2YXJpYWJsZSwgZXhwcmVzc2lv
bik7Ci0gICAgICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQo
ZXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWtlTGFz
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlv
bk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KG1fZ2VuZXJhdG9yLT5tX3Byb2MsIEIzOjpHZXQsIG1fZ2VuZXJhdG9yLT5vcmln
aW4oKSwgbV9zdGFjay50YWtlTGFzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGEudGFr
ZUxhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIGxhc3QoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09
IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2dlbmVyYXRvci0+bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX2dlbmVyYXRvci0+bV9wcm9jLCBCMzo6R2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCksIG1f
c3RhY2subGFzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGEubGFzdCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2Rl
OjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhY2suc2l6
ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KLQotICAgICAg
ICBFeHByZXNzaW9uTGlzdCBjb252ZXJ0VG9FeHByZXNzaW9uTGlzdCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRp
b25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBFeHByZXNzaW9u
TGlzdCByZXN1bHRzOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3N0YWNrLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChh
dChpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbV9kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgYXQodW5zaWduZWQgaSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
Z2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3ItPm1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgQjM6
OkdldCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCBtX3N0YWNrLmF0KGkpKTsKLSAgICAgICAgICAg
IHJldHVybiBtX2RhdGEuYXQoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICBWYXJpYWJsZSogdmFy
aWFibGVBdCh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9n
ZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLmF0KGkpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNocmluayh1
bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29t
cGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdGFjay5zaHJpbmsoaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9kYXRhLnNocmluayhpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc3dhcChTdGFjayYgc3RhY2spCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0ZDo6c3dhcChtX2dlbmVyYXRvciwgc3RhY2subV9nZW5lcmF0b3IpOwotICAgICAgICAg
ICAgbV9kYXRhLnN3YXAoc3RhY2subV9kYXRhKTsKLSAgICAgICAgICAgIG1fc3RhY2suc3dhcChz
dGFjay5tX3N0YWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7Ci0gICAg
ICAgICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwotICAgICAgICAgICAg
aWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9N
R0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFy
aWFibGUgOiBtX3N0YWNrKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqdmFy
aWFibGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IG1fZGF0YSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIEIzSVJHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yIHsgbnVsbHB0ciB9OwotICAgICAg
ICBFeHByZXNzaW9uTGlzdCBtX2RhdGE7Ci0gICAgICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fc3Rh
Y2s7Ci0gICAgfTsKLSAgICBTdGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKHRoaXMp
OyB9CisgICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKKyAgICBTdGFjayBjcmVhdGVT
dGFjaygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9s
RGF0YTsKICAgICB1c2luZyBSZXN1bHRMaXN0ID0gQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CkBA
IC0zNTEsOCArMjUyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGVtaXRFeGNlcHRp
b25DaGVjayhDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAotICAgIHZvaWQgZW1pdEVu
dHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7Ci0gICAg
dm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0
YWNrJiwgdWludDMyX3QsIHVpbnQzMl90LCBCMzo6T3JpZ2luKTsKKyAgICB2b2lkIGVtaXRFbnRy
eVRpZXJVcENoZWNrKCk7CisgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxv
b3BJbmRleCk7CiAKICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAg
ICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKQEAgLTU4NCw3
ICs0ODUsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBlbWl0RW50cnlUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3Jl
bWVudCgpLCBPcmlnaW4oKSk7CisgICAgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKIAogICAgIGlm
IChtX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZSkKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTExODcs
MTggKzEwODgsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLAogCiBCM0lSR2VuZXJhdG9yOjpF
eHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2
NF90IHZhbHVlKQogeworCiAgICAgcmV0dXJuIGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJf
dCBpbmNyZW1lbnRDb3VudCwgT3JpZ2luIG9yaWdpbikKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dEVudHJ5VGllclVwQ2hlY2soKQogewogICAgIGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChtX3RpZXJVcCk7Ci0gICAgVmFsdWUqIGNvdW50RG93bkxvY2F0aW9u
ID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oJm1f
dGllclVwLT5tX2NvdW50ZXIpLCBvcmlnaW4pOworICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlv
biA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZt
X3RpZXJVcC0+bV9jb3VudGVyKSwgT3JpZ2luKCkpOwogCi0gICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3Jp
Z2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIHByZWNpc2UgaGVhcCByYW5nZSBmb3IgdGhlIHRp
ZXIgdXAgY291bnQuCiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwpA
QCAtMTIwOSw3ICsxMTExLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBD
aGVjayhpbnQzMl90IGluY3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQogICAgIHBhdGNoLT5h
cHBlbmQoY291bnREb3duTG9jYXRpb24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBh
dGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
dGllclVwID0gaml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGluY3JlbWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGll
clVwID0gaml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5SW5jcmVtZW50
KCkpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CiAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAg
cGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKQEAgLTEyMzMsMTMg
KzExMzUsMTUgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayhpbnQz
Ml90IGluY3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQogICAgIH0pOwogfQogCi12b2lkIEIz
SVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwg
Y29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4LCB1aW50MzJf
dCBvdXRlckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KQogeworICAgIHVpbnQzMl90
IG91dGVyTG9vcEluZGV4ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKKyAgICBtX291dGVyTG9v
cHMuYXBwZW5kKGxvb3BJbmRleCk7CisKICAgICBpZiAoIW1fdGllclVwKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV90aWVyVXApOwotCisgICAgT3JpZ2luIG9yaWdpbiA9IHRoaXMt
Pm9yaWdpbigpOwogICAgIEFTU0VSVChtX3RpZXJVcC0+b3NyRW50cnlUcmlnZ2VycygpLnNpemUo
KSA9PSBsb29wSW5kZXgpOwogICAgIG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkuYXBwZW5k
KFRpZXJVcENvdW50OjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlcik7CiAgICAgbV90aWVyVXAt
Pm91dGVyTG9vcHMoKS5hcHBlbmQob3V0ZXJMb29wSW5kZXgpOwpAQCAtMTI0NywxNiArMTE1MSwx
NCBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNy
ZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlv
biA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZt
X3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAogICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gc3RhY2ttYXA7Ci0gICAgVmVjdG9yPEIzOjpUeXBlPiB0eXBlczsKICAgICBmb3IgKGF1dG8m
IGxvY2FsIDogbV9sb2NhbHMpIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9y
aWdpbiwgbG9jYWwpOwogICAgICAgICBzdGFja21hcC5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAg
dHlwZXMuYXBwZW5kKHJlc3VsdC0+dHlwZSgpKTsKICAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQgPSBleHByZXNzaW9uU3RhY2suYXQoaSk7Ci0gICAgICAgIHN0YWNrbWFw
LmFwcGVuZChyZXN1bHQpOwotICAgICAgICB0eXBlcy5hcHBlbmQocmVzdWx0LT50eXBlKCkpOwor
ICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0
byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRl
eF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
ZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKICAg
ICB9CiAKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CkBAIC0xMjgx
LDEyICsxMTgzLDEzIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhp
bnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXhwCiAgICAgcGF0Y2gtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBmb3JjZU9TUkVu
dHJ5ID0gaml0LmJyYW5jaFRlc3Q4KENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0NhbGxIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoZm9yY2VFbnRyeVRyaWdnZXIpKTsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZl
T3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3Ja
ZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihUaWVyVXBDb3VudDo6bG9vcEluY3JlbWVu
dCgpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CiAKICAgICAg
ICAgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEgPSBtX3RpZXJVcC0+YWRkT1NSRW50cnlEYXRh
KG1fZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgb3NyRW50
cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFwcGVuZChwYXJhbXNbaW5kZXggKyAxXSwgdHlw
ZXNbaW5kZXhdKTsKKyAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvdW50ZG93biBs
b2NhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHBhcmFtcy52YWx1ZSgp
LT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCku
Y29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50
eXBlKCkpOwogICAgICAgICBPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YVB0ciA9ICZvc3JFbnRy
eURhdGE7CiAKICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKQEAgLTEzMDEsNyArMTIwNCw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BU
aWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXhwCiAgICAg
fSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZExv
b3AoVHlwZSBzaWduYXR1cmUsIGNvbnN0IFN0YWNrJiBzdGFjaywgdWludDMyX3QgbG9vcEluZGV4
KQorQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBl
IHNpZ25hdHVyZSwgY29uc3QgU3RhY2smLCB1aW50MzJfdCBsb29wSW5kZXgpCiB7CiAgICAgQmFz
aWNCbG9jayogYm9keSA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwpAQCAtMTMwOSw0MSArMTIxMiw1NyBAQCBCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0
dXJlLCBjb25zdCBTdGFjayYgcwogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgaWYgKGxvb3BJbmRleCA9
PSBtX2xvb3BJbmRleEZvck9TUkVudHJ5KSB7CiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9y
b290QmxvY2s7Ci0gICAgICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG1fbG9jYWxz
LnNpemUoKSArIHN0YWNrLnNpemUoKTsKICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RC
bG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKLSAgICAgICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIg
PSBbJl0gKEIzOjpUeXBlIHR5cGUsIHVuc2lnbmVkIGluZGV4KSB7Ci0gICAgICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4OwotICAgICAgICAgICAgc3dpdGNo
ICh0eXBlLmtpbmQoKSkgewotICAgICAgICAgICAgY2FzZSBCMzo6SW50MzI6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICAgICAg
Y2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwg
cG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGNhc2UgQjM6OkZsb2F0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEIzOjpGbG9hdCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkRvdWJsZSwgb3Jp
Z2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOwor
ICAgICAgICBhdXRvIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoQjM6OlR5cGUgdHlwZSkg
eworICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleElu
QnVmZmVyKys7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAg
ICB9OwogCi0gICAgICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOwogICAgICAgICBmb3Ig
KGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRG
cm9tU2NyYXRjaEJ1ZmZlcihsb2NhbC0+dHlwZSgpLCBpbmRleEluQnVmZmVyKyspKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBhdXRvKiB2YXJpYWJsZSA9IHN0YWNrLnZhcmlhYmxlQXQoaSk7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmln
aW4oKSwgdmFyaWFibGUsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YXJpYWJsZS0+dHlwZSgpLCBp
bmRleEluQnVmZmVyKyspKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3Jh
dGNoQnVmZmVyKGxvY2FsLT50eXBlKCkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRy
b2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXpl
KCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBkYXRhID0gbV9w
YXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAg
ICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKworICAgICAgICAgICAgLy8gRm9y
IGVhY2ggc3RhY2sgZW50cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFj
ZSB0aGUgdmFsdWUgd2l0aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG51bGxwdHI7CisgICAgICAgICAg
ICB1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsKKyAgICAgICAgICAgIEIzOjpJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KG1fcHJvYyk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byog
dmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLT5vd25lciAhPSBzb3VyY2VCbG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBibG9ja0luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlQmxvY2sgPSB2
YWx1ZS0+b3duZXI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2hpbGUg
KHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4KyspICE9IHZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmxvY2tJbmRleCA8IHNvdXJjZUJsb2NrLT5zaXplKCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsK
KworICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsK
KyAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBwaGk7CisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUt
Pm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7CisK
KyAgICAgICAgICAgICAgICBhdXRvKiBzb3VyY2VVcHNpbG9uID0gbV9wcm9jLmFkZDxVcHNpbG9u
VmFsdWU+KHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIHBoaSk7CisgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydFZhbHVlKGJsb2NrSW5kZXgsIHNvdXJjZVVwc2lsb24pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc291cmNlQmxvY2spOwog
ICAgICAgICB9CisKKyAgICAgICAgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gaW5kZXhJ
bkJ1ZmZlcjsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKICAgICAgICAgYm9keS0+YWRkUHJlZGVjZXNz
b3IobV9jdXJyZW50QmxvY2spOwogICAgIH0KIAotICAgIHVpbnQzMl90IG91dGVyTG9vcEluZGV4
ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKLSAgICBtX291dGVyTG9vcHMuYXBwZW5kKGxvb3BJ
bmRleCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIGVtaXRMb29wVGllclVwQ2hl
Y2soVGllclVwQ291bnQ6Omxvb3BJbmNyZW1lbnQoKSwgc3RhY2ssIGxvb3BJbmRleCwgb3V0ZXJM
b29wSW5kZXgsIG9yaWdpbigpKTsKKyAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJbmRleCk7
CiAKICAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBC
bG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CiB9CkBAIC0xNDY3LDcgKzEzODYs
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2
ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSBy
ZXR1cm4gaGVyZS4KICAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkK
LSAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suY29udmVydFRvRXhwcmVzc2lvbkxpc3QoKSk7CisgICAgICAgIHJl
dHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNzM5LDYgKzE2NTgsMTMgQEAgdm9p
ZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0
U3RhY2ssIGNvbnN0IFJlc3VsdEwKICAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkg
LSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBpKSk7CiB9
CiAKK3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBj
b21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFj
aykKK3sKKyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAo
Y29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZGF0YUxv
Zyhjb21tYSwgKmV4cHJlc3Npb24pOworfQorCiB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29u
c3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJl
c3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9nTG4oIkNvbnN0YW50czoiKTsKQEAgLTE3NTIsNyAr
MTY3OCw4IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVu
dHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayoKICAgICBBU1NFUlQoY29udHJvbFN0YWNr
LnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgZGF0YUxvZygiICAiLCBjb250cm9sU3RhY2tbaV0uY29udHJvbERhdGEsICI6
ICIpOwotICAgICAgICBleHByZXNzaW9uU3RhY2stPmR1bXAoKTsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25TdGFjayhjb21tYSwg
KmV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIGV4cHJlc3Npb25TdGFjayA9ICZjb250cm9sU3Rh
Y2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CiAgICAgICAgIGRhdGFMb2dMbigpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgK
aW5kZXggYTEzODQxMGFjZTAwYTNlYzU5NjU5NzEyMzkzZjFhYmQ3ZTZjZTc2MC4uNzJmZGFmZmY5
NzM5MjM2Y2U1ZTJkMGE2OGRlODE4YzdkMDM4Yjg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGlj
OgogICAgIE9wVHlwZSBjdXJyZW50T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bj
b2RlOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0OyB9CiAKKyAgICBWZWN0b3I8Q29u
dHJvbEVudHJ5PiYgY29udHJvbFN0YWNrKCkgeyByZXR1cm4gbV9jb250cm9sU3RhY2s7IH0KKwog
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MGMzZGIyN2Q3
ZTBmYzVlNzI3M2U3OWFjODI4ZjI5ZjYzY2EyY2FlLi4xY2Q4NTZiOWRmYmMzNWRiYzk1NzE1Njhm
NGQ1MDE2MmIxMmE0ZDY4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDktMDcgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgT1NSIGVudHJ5IGludG8gd2FzbSBtaXNz
ZXMgc29tZSBjb250ZXh0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxNTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG5ldyB0ZXN0IGhhcm5lc3MgbW9kZSBmb3IgdGVzdHMgY3JlYXRlZCBmcm9t
IHdhc3QgZmlsZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgor
CiAyMDE5LTA5LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJFR1JFU1NJT04gKGlPUyAxMyk6IEJ1bGxldGVkIGxpc3QgY29waWVkIGZyb20gTm90ZXMgdG8g
TWFpbCByZXN1bHRzIGluIFRpbWVzIE5ldyBSb21hbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKaW5kZXggYTM4OWNhMDAzMmIxNjJkMmE3Yzc0YTI5NTNhYTEzYWFmYmRjYjI1NC4uYzQyMDg4
OWI1Mjc5NzM5YzVjYTczNmIwODRkOGQwMjRkY2MwMjgwMCAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCkBAIC0xMTE0LDYgKzExMTQsMzYgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBlbmQKIGVuZAogCitkZWYgcnVuSGFy
bmVzc1Rlc3Qoa2luZCwgKm9wdGlvbnMpCisgICAgd2FzbUZpbGVzID0gYWxsV2FzbUZpbGVzKCRj
b2xsZWN0aW9uKQorICAgIHdhc21GaWxlcy5lYWNoIHsKKyAgICAgICAgfCBmaWxlIHwKKyAgICAg
ICAgYmFzZW5hbWUgPSBmaWxlLmJhc2VuYW1lLnRvX3MKKyAgICAgICAgYWRkUnVuQ29tbWFuZCgi
KCIgKyBiYXNlbmFtZSArICIpLSIgKyBraW5kLCBbcGF0aFRvVk0udG9fc10gKyAkdGVzdFNwZWNp
ZmljUmVxdWlyZWRPcHRpb25zICsgb3B0aW9ucyArIFskYmVuY2htYXJrLnRvX3MsICItLSIsIGJh
c2VuYW1lXSwgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyKQorICAgIH0K
K2VuZAorCitkZWYgcnVuV2ViQXNzZW1ibHlXaXRoSGFybmVzcygqb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKQorICAgIHJhaXNlIHVubGVzcyAkYmVuY2htYXJrLnRvX3MgPX4gL2hhcm5lc3Nc
Lm0/anMvCisgICAgcmV0dXJuIGlmICEkaml0VGVzdHMKKyAgICByZXR1cm4gaWYgISRpc0ZUTFBs
YXRmb3JtCisKKyAgICB3YXNtRmlsZXMgPSBhbGxXYXNtRmlsZXMoJGNvbGxlY3Rpb24pCisgICAg
cHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyh3YXNtRmlsZXMubWFwIHsgfGZ8IGYuYmFzZW5hbWUg
fSwgJGNvbGxlY3Rpb24pCisKKyAgICBydW5IYXJuZXNzVGVzdCgiZGVmYXVsdC13YXNtIiwgKihG
VExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgaWYgJG1vZGUg
IT0gInF1aWNrIgorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby1jaml0LXllcy10bHMt
Y29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9O
UyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
ICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2VyIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNz
VGVzdCgid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1
ZVRvT2xkQWdlPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tbm8tY2FsbC1pYyIsICItLXVzZUNh
bGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscz1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1u
by10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRM
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJu
ZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1m
YWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAg
ICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby1haXIiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxz
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW5IYXJuZXNzVGVzdCgid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RD
b250aW51b3VzbHk9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PworICAgIGVuZAorZW5kCisKIGRl
ZiBydW5XZWJBc3NlbWJseUVtc2NyaXB0ZW4obW9kZSkKICAgICBjYXNlIG1vZGUKICAgICB3aGVu
IDpza2lwCkBAIC0xNDgzLDYgKzE1MTMsMjEgQEAgZGVmIHNraXAKICAgICBwdXRzICJTa2lwcGlu
ZyAjeyRjb2xsZWN0aW9uTmFtZX0vI3skYmVuY2htYXJrfSIKIGVuZAogCitkZWYgYWxsV2FzbUZp
bGVzKHBhdGgpCisgICAgaWYgcGF0aC5maWxlPworICAgICAgICBbcGF0aF0KKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIERpci5mb3JlYWNoKHBhdGgpIHsKKyAgICAgICAg
ICAgIHwgZmlsZW5hbWUgfAorICAgICAgICAgICAgbmV4dCB1bmxlc3MgZmlsZW5hbWUgPX4gL1wu
bT93YXNtJC8KKyAgICAgICAgICAgIG5leHQgdW5sZXNzIChwYXRoICsgZmlsZW5hbWUpLmZpbGU/
CisgICAgICAgICAgICByZXN1bHQgPDwgcGF0aCArIGZpbGVuYW1lCisgICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCitlbmQKKwogZGVmIGFsbEpTRmlsZXMocGF0aCkKICAgICBpZiBw
YXRoLmZpbGU/CiAgICAgICAgIFtwYXRoXQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBlZDM0N2Q4NjIyZjU0ZDZlYjYxYjdkMTE4MGRmMjhi
ZWI0NDNjNDBlLi5jNDFmNzc5Zjc5MmJhZDc2YjY1YzU3ZjNmMjZiNGU5NDcxNTVlZDhmIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDE5LTA5LTA3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIE9TUiBlbnRyeSBpbnRvIHdhc20gbWlzc2VzIHNvbWUgY29udGV4dHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5l
dyBoYXJuZXNzIGFuZCB3YXN0IGFuZCB0aGUgZ2VuZXJhdGVkIHdhc20gZmlsZSBmb3IKKyAgICAg
ICAgdGVzdGluZy4gVGhlIGlkZWEgbG9uZyB0ZXJtIGlzIHRvIG1ha2UgaXQgZWFzeSB0byB0ZXN0
IGJ5IGNyZWF0aW5nCisgICAgICAgIGEgQyBmaWxlIGFuZCBjb252ZXJ0aW5nIGl0IHRvIGEgd2Fz
dCB0aGVuIG1vZGlmeSB0aGF0IHRvIHByb2R1Y2UgYQorICAgICAgICB0ZXN0LgorCisgICAgICAg
ICogd2FzbS55YW1sOgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0cy9oYXJuZXNzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzeW5jLnJ1bldhc21GaWxlKToKKyAgICAgICAgKiB3YXNtL3dhc3QtdGVz
dHMvb3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3ZlLW5vLWNvbnN0cy53YXNtOiBBZGRl
ZC4KKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNo
LWFib3ZlLW5vLWNvbnN0cy53YXN0OiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMv
b3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3ZlLndhc206IEFkZGVkLgorICAgICAgICAq
IHdhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUud2FzdDog
QWRkZWQuCisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLndh
c206IEFkZGVkLgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9v
cC53YXN0OiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LW11bHRp
cGxlLWVuY2xvc2VkLWNvbnRleHRzLndhc206IEFkZGVkLgorICAgICAgICAqIHdhc20vd2FzdC10
ZXN0cy9vc3ItZW50cnktbXVsdGlwbGUtZW5jbG9zZWQtY29udGV4dHMud2FzdDogQWRkZWQuCisK
IDIwMTktMDktMDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgTGF6eUNsYXNzU3RydWN0dXJlOjpzZXRDb25zdHJ1Y3RvciBzaG91bGQgbm90IHN0b3JlIHRo
ZSBjb25zdHJ1Y3RvciB0byB0aGUgZ2xvYmFsIG9iamVjdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCBmODcxMWY3NGJhZWVkNDNjN2YyMzM4
MTUxZDcxYTE2ZGFkNjVlOTZiLi42OTdmMTJhYTFmODkyODY2NzIyMGQ1NDliZDJjYmZiMjA0NWUx
Njg5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFt
bApAQCAtMjEsOCArMjEsOCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICMgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotLSBw
YXRoOiB3YXNtL3NlbGYtdGVzdC8KLSAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBw
YXJzZVJ1bkNvbW1hbmRzCistIHBhdGg6IHdhc20vd2FzdC10ZXN0cy8KKyAgY21kOiBydW5XZWJB
c3NlbWJseVdpdGhIYXJuZXNzCiAtIHBhdGg6IHdhc20vanMtYXBpLwogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9ub0pJVC8K
QEAgLTQzLDYgKzQzLDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJz
ZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vbW9kdWxlcy8KICAgY21kOiBydW5XZWJBc3NlbWJs
eSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNtL3NlbGYtdGVzdC8KKyAgY21k
OiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAKIC0gcGF0aDog
d2FzbS9zcGVjLXRlc3RzL2FkZHJlc3Mud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3Bl
Y1Rlc3QgOm5vcm1hbApAQCAtMTg1LDMgKzE4Nyw0IEBACiAKIC0gcGF0aDogd2FzbS9tb2R1bGVz
L3J1bi1mcm9tLXdhc20ud2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CisKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMgYi9KU1Rlc3RzL3dhc20vd2FzdC10
ZXN0cy9oYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwZjg2ZTU1YmQ3NGJmNmEzODdhNjdmZjQ5ZjZm
OTVlZjk0NmJiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9o
YXJuZXNzLmpzCkBAIC0wLDAgKzEsMjIgQEAKK2FzeW5jVGVzdFN0YXJ0KDEpOworbGV0IGNvbnRl
eHQgPSB7CisgICAgZW52OiBnbG9iYWxUaGlzLAorfTsKKworZ2xvYmFsVGhpcy5fX2xpbmVhcl9t
ZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogMSB9KTsKKworYXN5bmMg
ZnVuY3Rpb24gcnVuV2FzbUZpbGUoZmlsZVBhdGgpIHsKKyAgICBsZXQgYmxvYiA9IHJlYWRGaWxl
KGZpbGVQYXRoLCAiYmluYXJ5Iik7CisgICAgbGV0IGNvbXBpbGVkOworICAgIHRyeSB7CisgICAg
ICAgIGNvbXBpbGVkID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmxvYiwgY29udGV4
dCk7CisgICAgICAgIGNvbXBpbGVkLmluc3RhbmNlLmV4cG9ydHMudGVzdCgpOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgcHJpbnQoZSk7CisgICAgICAgIHRocm93IGU7CisgICAgfQorICAg
IGFzeW5jVGVzdFBhc3NlZCgpOworfQorCitmb3IgKHdhc21GaWxlIG9mIGFyZ3VtZW50cykKKyAg
ICBydW5XYXNtRmlsZSh3YXNtRmlsZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzdC10
ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUtbm8tY29uc3RzLndhc20gYi9K
U1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUt
bm8tY29uc3RzLndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlkZjYyNWM4MWFkODgyYmNhZmUzNmUyZWEyNWI4
OGE5OTVlNGQ1MApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjAwCnpjbVhaVXU/b1U0Nm91aCla
ejc3TlNrTVBab1NZcTs4JF5uT196MU9WaEs4Z3FaNHNSTT5aWmA7NCZPY2VzRD9sUQp6WHY7NX1Y
bktKcktDYGdSY1VQOWFaZnc8OyFHXlp+Rik7Sn5VM3FXJmB8eH1lKkVWI3V3O3p5VCFnQG47dzhJ
ITwKejlXXjg7MSUocXNsVlF5VVQ4S1Blc1lyMnJAPTleU2Q0PzNUaWhQK0g7ViVwJjRMTDB7Kyle
Wm8pNFpnVmg8KzYyCk1QKCtfZyZNRTFWS05TOFZaMiRsTwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxv
b3AtYnJhbmNoLWFib3ZlLW5vLWNvbnN0cy53YXN0IGIvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMv
b3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3ZlLW5vLWNvbnN0cy53YXN0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM0ZTViMmQxYWM4ZmM3NGEwY2YxYTRmYjA0ZmU2MDAyYTk5NDRlODYKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFu
Y2gtYWJvdmUtbm8tY29uc3RzLndhc3QKQEAgLTAsMCArMSw2NSBAQAorKG1vZHVsZQorICAodHlw
ZSAoOzA7KSAoZnVuYyAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikpKQorICAodHlwZSAoOzE7KSAo
ZnVuYyAocmVzdWx0IGkzMikpKQorICAoaW1wb3J0ICJlbnYiICJfX2xpbmVhcl9tZW1vcnkiICht
ZW1vcnkgKDswOykgMCkpCisgIChpbXBvcnQgImVudiIgImNhbGxlcklzT01HQ29tcGlsZWQiIChm
dW5jICg7MDspICh0eXBlIDEpKSkKKyAgKGZ1bmMgKGV4cG9ydCAidGVzdCIpICh0eXBlIDApIChw
YXJhbSBpMzIpIChyZXN1bHQgaTMyKQorICAgIChsb2NhbCBpMzIgaTMyIGkzMiBpMzIpCisgICAg
Z2V0X2xvY2FsIDAKKyAgICBnZXRfbG9jYWwgMAorICAgIGkzMi5sb2FkCisgICAgc2V0X2xvY2Fs
IDEKKyAgICBpMzIuY29uc3QgMgorICAgIHNldF9sb2NhbCAyCisgICAgaTMyLmNvbnN0IDAKKyAg
ICBzZXRfbG9jYWwgMworICAgIGxvb3AgIDs7IGxhYmVsID0gQDEKKyAgICAgIGkzMi5jb25zdCAw
CisgICAgICBzZXRfbG9jYWwgNAorICAgICAgZ2V0X2xvY2FsIDEKKyAgICAgIGdldF9sb2NhbCAy
CisgICAgICBpZiBpMzIKKyAgICAgICAgZ2V0X2xvY2FsIDIKKyAgICAgIGVsc2UKKyAgICAgICAg
Z2V0X2xvY2FsIDIKKyAgICAgIGVuZAorICAgICAgYmxvY2sgIDs7IGxhYmVsID0gQDIKKyAgICAg
ICAgY2FsbCAwCisgICAgICAgIGJyX2lmIDAgKDtAMjspCisgICAgICAgIGkzMi5jb25zdCAwCisg
ICAgICAgIHNldF9sb2NhbCA0CisgICAgICAgIGxvb3AgIDs7IGxhYmVsID0gQDMKKyAgICAgICAg
ICBnZXRfbG9jYWwgMAorICAgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgICAgaTMyLmxvYWQK
KyAgICAgICAgICBpMzIuY29uc3QgMworICAgICAgICAgIGkzMi5tdWwKKyAgICAgICAgICBpMzIu
c3RvcmUKKyAgICAgICAgICBnZXRfbG9jYWwgNAorICAgICAgICAgIGkzMi5jb25zdCAxCisgICAg
ICAgICAgaTMyLmFkZAorICAgICAgICAgIHNldF9sb2NhbCA0CisgICAgICAgICAgY2FsbCAwCisg
ICAgICAgICAgaTMyLmVxegorICAgICAgICAgIGJyX2lmIDAgKDtAMzspCisgICAgICAgIGVuZAor
ICAgICAgZW5kCisgICAgICBpMzIuYWRkCisgICAgICBzZXRfbG9jYWwgMgorICAgICAgZ2V0X2xv
Y2FsIDAKKyAgICAgIGkzMi5sb2FkCisgICAgICBzZXRfbG9jYWwgMQorICAgICAgZ2V0X2xvY2Fs
IDMKKyAgICAgIGkzMi5jb25zdCAxCisgICAgICBpMzIuYWRkCisgICAgICB0ZWVfbG9jYWwgMwor
ICAgICAgaTMyLmNvbnN0IDIwCisgICAgICBpMzIubmUKKyAgICAgIGJyX2lmIDAgKDtAMTspCisg
ICAgZW5kCisgICAgZ2V0X2xvY2FsIDEKKyAgICBnZXRfbG9jYWwgMgorICAgIGkzMi5hZGQKKyAg
ICBpMzIuYWRkCisgICAgZ2V0X2xvY2FsIDQKKyAgICBpMzIuYWRkKSkKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLWJyYW5jaC1hYm92ZS53
YXNtIGIvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNo
LWFib3ZlLndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U2NDkzZDc1Y2ViODk2ZWZlOGRjYmI2ZmYwYjc2YWFj
NmE0N2UyYQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjIwCnpjbVhaVUYkPTtsNVFnRkpFKW01
ZDNPWUdtb1NZcTs2R2c7OXswWCZhMjFCYVNpcmBlaUtXLX1DX310eCNxQW0jbAp6XzQhQipIQWhn
eDNzKE82OU9pa3ZUenlnSHI3diZRaS1ESE1yeUBwUT9kcnBSeVN8bjhPWX49dVZuVmteYHIrJEcK
emloWVJRTTdqfE88X3RyUTRMY2E2dFJ2d3lWQ19sXjVAfGAwRjFhSXx1Xm5PWFEpVTBaUFFAaWR3
NC00MzIlNz0yCllFRXhXR01KMW1wSGB6fHhOeXwxRGc2TlFhMHBHJFRxV31OXgoKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVu
dHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3ZlLndhc3QgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0
cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUud2FzdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTk2
N2Y2OGNhNTNjYjg5NzM3MDViY2I1NmQ1MTM1YmM4NzQ3Y2M2Ci0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3Zl
Lndhc3QKQEAgLTAsMCArMSw4MCBAQAorKG1vZHVsZQorICAodHlwZSAoOzA7KSAoZnVuYyAocGFy
YW0gaTMyKSAocmVzdWx0IGkzMikpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocmVzdWx0IGkzMikp
KQorICAoaW1wb3J0ICJlbnYiICJfX2xpbmVhcl9tZW1vcnkiIChtZW1vcnkgKDswOykgMCkpCisg
IChpbXBvcnQgImVudiIgImNhbGxlcklzT01HQ29tcGlsZWQiIChmdW5jICg7MDspICh0eXBlIDEp
KSkKKyAgKGZ1bmMgKGV4cG9ydCAidGVzdCIpICh0eXBlIDApIChwYXJhbSBpMzIpIChyZXN1bHQg
aTMyKQorICAgIChsb2NhbCBpMzIgaTMyIGkzMiBpMzIpCisgICAgZ2V0X2xvY2FsIDAKKyAgICBn
ZXRfbG9jYWwgMAorICAgIGkzMi5sb2FkCisgICAgc2V0X2xvY2FsIDEKKyAgICBpMzIuY29uc3Qg
MgorICAgIHNldF9sb2NhbCAyCisgICAgaTMyLmNvbnN0IDAKKyAgICBzZXRfbG9jYWwgMworICAg
IGxvb3AgIDs7IGxhYmVsID0gQDEKKyAgICAgIDs7IGFkZCBhIGJ1bmNoIG9mIHZhbHVlcyBzbyB0
aGVyZSBpcyBhIGJpZ2dlciBzdGFjayBoZXJlIHRoYW4gaW4gdGhlIGlmIGJsb2NrLgorICAgICAg
aTMyLmNvbnN0IDEKKyAgICAgIGdldF9sb2NhbCAyCisgICAgICBmMzIuY29uc3QgMworICAgICAg
aTY0LmNvbnN0IDQKKyAgICAgIGdldF9sb2NhbCAwCisKKyAgICAgIDs7IHJlYWwgcHJvZ3JhbQor
ICAgICAgaTMyLmNvbnN0IDAKKyAgICAgIHNldF9sb2NhbCA0CisgICAgICBnZXRfbG9jYWwgMQor
ICAgICAgZ2V0X2xvY2FsIDIKKyAgICAgIGlmIGkzMgorICAgICAgICBnZXRfbG9jYWwgMgorICAg
ICAgZWxzZQorICAgICAgICBnZXRfbG9jYWwgMgorICAgICAgZW5kCisgICAgICBibG9jayAgOzsg
bGFiZWwgPSBAMgorICAgICAgICBjYWxsIDAKKyAgICAgICAgYnJfaWYgMCAoO0AyOykKKyAgICAg
ICAgaTMyLmNvbnN0IDAKKyAgICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAgbG9vcCAgOzsgbGFi
ZWwgPSBAMworICAgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgICAgZ2V0X2xvY2FsIDAKKyAg
ICAgICAgICBpMzIubG9hZAorICAgICAgICAgIGkzMi5jb25zdCAzCisgICAgICAgICAgaTMyLm11
bAorICAgICAgICAgIGkzMi5zdG9yZQorICAgICAgICAgIGdldF9sb2NhbCA0CisgICAgICAgICAg
aTMyLmNvbnN0IDEKKyAgICAgICAgICBpMzIuYWRkCisgICAgICAgICAgc2V0X2xvY2FsIDQKKyAg
ICAgICAgICBjYWxsIDAKKyAgICAgICAgICBpMzIuZXF6CisgICAgICAgICAgYnJfaWYgMCAoO0Az
OykKKyAgICAgICAgZW5kCisgICAgICBlbmQKKyAgICAgIGkzMi5hZGQKKyAgICAgIHNldF9sb2Nh
bCAyCisgICAgICBnZXRfbG9jYWwgMAorICAgICAgaTMyLmxvYWQKKyAgICAgIHNldF9sb2NhbCAx
CisgICAgICBnZXRfbG9jYWwgMworICAgICAgaTMyLmNvbnN0IDEKKyAgICAgIGkzMi5hZGQKKyAg
ICAgIHRlZV9sb2NhbCAzCisgICAgICBpMzIuY29uc3QgMjAKKyAgICAgIGkzMi5uZQorCisgICAg
ICA7OyBkcm9wIG91ciBleHRyYSB2YWx1ZXMgc28gd2UgY2FuIGNvbXBpbGUKKyAgICAgIGRyb3AK
KyAgICAgIGRyb3AKKyAgICAgIGRyb3AKKyAgICAgIGRyb3AKKyAgICAgIGRyb3AKKyAgICAgIGJy
X2lmIDAgKDtAMTspCisgICAgZW5kCisgICAgZ2V0X2xvY2FsIDEKKyAgICBnZXRfbG9jYWwgMgor
ICAgIGkzMi5hZGQKKyAgICBpMzIuYWRkCisgICAgZ2V0X2xvY2FsIDQKKyAgICBpMzIuYWRkKSkK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29w
Lndhc20gYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC53YXNt
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM2ZmNlNzYzMDc0NmQ2Nzk2NjY0NDM4ZDYwMDNkZGYwYjJhNGJlYjUKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE5Mgp6Y21YWXB1P29VNDZoLWZRMmBIOWdLfGRnSWEmflpU
NUdmQWdDJHZRKUhZQmFJTVI0a2BufVctUWRwSTFfTG0mWE8KejspKjdrRCR2OVM3UGtHWSVoRVRr
dEB8P0EoRGgjaVgxdXhBLXJOMiUrXilyYDMtODk7MlNfa3N1X1FVI1ZUYGRDCnpKeE5YcTNWVmhv
ITxyNFc1UDRqd05IT09iUXBgYH1mNldNZ1dHSEZLWF8/YGlCMXhSKWU/cDFLY2Z4Rm8kbWZEewpI
TzFrNiswVTtyVgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3Aud2FzdCBiL0pTVGVzdHMvd2FzbS93
YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLndhc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQxODhkMDZj
MWU4MWRmNDkwOGExMTMyYjg5Yzg1OTBlNWY3YTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLndhc3QKQEAgLTAsMCArMSw2
MCBAQAorKG1vZHVsZQorICAodHlwZSAoOzA7KSAoZnVuYyAocGFyYW0gaTMyKSAocmVzdWx0IGkz
MikpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocmVzdWx0IGkzMikpKQorICAoaW1wb3J0ICJlbnYi
ICJfX2xpbmVhcl9tZW1vcnkiIChtZW1vcnkgKDswOykgMCkpCisgIChpbXBvcnQgImVudiIgImNh
bGxlcklzT01HQ29tcGlsZWQiIChmdW5jICg7MDspICh0eXBlIDEpKSkKKyAgKGZ1bmMgKGV4cG9y
dCAidGVzdCIpICh0eXBlIDApIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKQorICAgIChsb2NhbCBp
MzIgaTMyIGkzMiBpMzIpCisgICAgZ2V0X2xvY2FsIDAKKyAgICBnZXRfbG9jYWwgMAorICAgIGkz
Mi5sb2FkCisgICAgc2V0X2xvY2FsIDEKKyAgICBpMzIuY29uc3QgMgorICAgIHNldF9sb2NhbCAy
CisgICAgaTMyLmNvbnN0IDAKKyAgICBzZXRfbG9jYWwgMworICAgIGxvb3AgIDs7IGxhYmVsID0g
QDEKKyAgICAgIGkzMi5jb25zdCAwCisgICAgICBzZXRfbG9jYWwgNAorICAgICAgZ2V0X2xvY2Fs
IDEKKyAgICAgIGdldF9sb2NhbCAyCisgICAgICBibG9jayAgOzsgbGFiZWwgPSBAMgorICAgICAg
ICBjYWxsIDAKKyAgICAgICAgYnJfaWYgMCAoO0AyOykKKyAgICAgICAgaTMyLmNvbnN0IDAKKyAg
ICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAgbG9vcCAgOzsgbGFiZWwgPSBAMworICAgICAgICAg
IGdldF9sb2NhbCAwCisgICAgICAgICAgZ2V0X2xvY2FsIDAKKyAgICAgICAgICBpMzIubG9hZAor
ICAgICAgICAgIGkzMi5jb25zdCAzCisgICAgICAgICAgaTMyLm11bAorICAgICAgICAgIGkzMi5z
dG9yZQorICAgICAgICAgIGdldF9sb2NhbCA0CisgICAgICAgICAgaTMyLmNvbnN0IDEKKyAgICAg
ICAgICBpMzIuYWRkCisgICAgICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAgICBjYWxsIDAKKyAg
ICAgICAgICBpMzIuZXF6CisgICAgICAgICAgYnJfaWYgMCAoO0AzOykKKyAgICAgICAgZW5kCisg
ICAgICBlbmQKKyAgICAgIGkzMi5hZGQKKyAgICAgIHNldF9sb2NhbCAyCisgICAgICBnZXRfbG9j
YWwgMAorICAgICAgaTMyLmxvYWQKKyAgICAgIHNldF9sb2NhbCAxCisgICAgICBnZXRfbG9jYWwg
MworICAgICAgaTMyLmNvbnN0IDEKKyAgICAgIGkzMi5hZGQKKyAgICAgIHRlZV9sb2NhbCAzCisg
ICAgICBpMzIuY29uc3QgMjAKKyAgICAgIGkzMi5uZQorICAgICAgYnJfaWYgMCAoO0AxOykKKyAg
ICBlbmQKKyAgICBnZXRfbG9jYWwgMQorICAgIGdldF9sb2NhbCAyCisgICAgaTMyLmFkZAorICAg
IGkzMi5hZGQKKyAgICBnZXRfbG9jYWwgNAorICAgIGkzMi5hZGQpKQpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LW11bHRpcGxlLWVuY2xvc2VkLWNvbnRleHRz
Lndhc20gYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktbXVsdGlwbGUtZW5jbG9z
ZWQtY29udGV4dHMud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjYxN2RlMDAyZjZlZThmNTRlNmNkMTUzYjNj
NmM4MzlkNzYzYTI0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzAKemNtWWp9dT9vVTQ2aC1m
UTJgSEFMOzE5ZlAmSk5CRUJIfCM1S2hQRzwoMiVzITdRcmRNdTYxJWQ5MWFLZDVENVMrCnp4U35Y
PDB3dnpFYV93dGJtWjUxfi1JdmtEdTc1S3k+R2khMSFTJCElYXo1XzZfLXVsRWZEe3ZFYkpDKzUj
XyNNIwp0U0pGd2FWT2FKbjgyKyhRN0RqVStvTVIkWTJ0LSpHYl9+JiR5d1FLSEBGN1EqaVQwdj1f
NW5oPzkqNih7CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vd2FzdC10ZXN0cy9vc3ItZW50cnktbXVsdGlwbGUtZW5jbG9zZWQtY29udGV4dHMud2FzdCBi
L0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1tdWx0aXBsZS1lbmNsb3NlZC1jb250
ZXh0cy53YXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMTBmZTYxODRiOTE5OWU5OGY1MmQyODI1N2Q4NzhjMTc4
MzcxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50
cnktbXVsdGlwbGUtZW5jbG9zZWQtY29udGV4dHMud2FzdApAQCAtMCwwICsxLDQ3IEBACisobW9k
dWxlCisgICh0eXBlICg7MDspIChmdW5jIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSkpCisgICh0
eXBlICg7MTspIChmdW5jIChyZXN1bHQgaTMyKSkpCisgIChpbXBvcnQgImVudiIgIl9fbGluZWFy
X21lbW9yeSIgKG1lbW9yeSAoOzA7KSAwKSkKKyAgKGltcG9ydCAiZW52IiAiY2FsbGVySXNPTUdD
b21waWxlZCIgKGZ1bmMgKDswOykgKHR5cGUgMSkpKQorICAoZnVuYyAoZXhwb3J0ICJ0ZXN0Iikg
KHR5cGUgMCkgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpCisgICAgKGxvY2FsIGkzMiBpMzIgaTMy
IGkzMikKKyAgICBnZXRfbG9jYWwgMAorICAgIGkzMi5sb2FkCisgICAgaTMyLmNvbnN0IDIKKyAg
ICBpMzIuYWRkCisgICAgY2FsbCAwCisgICAgc2V0X2xvY2FsIDIKKyAgICBnZXRfbG9jYWwgMAor
ICAgIGkzMi5sb2FkCisgICAgc2V0X2xvY2FsIDMKKyAgICBpMzIuY29uc3QgMAorICAgIHNldF9s
b2NhbCA0CisgICAgYmxvY2sgIDs7IGxhYmVsID0gQDEKKyAgICAgIGdldF9sb2NhbCAyCisgICAg
ICBicl9pZiAwICg7QDE7KQorICAgICAgaTMyLmNvbnN0IDAKKyAgICAgIHNldF9sb2NhbCA0Cisg
ICAgICBsb29wICA7OyBsYWJlbCA9IEAyCisgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgIGdl
dF9sb2NhbCAzCisgICAgICAgIGkzMi5jb25zdCAzCisgICAgICAgIGkzMi5tdWwKKyAgICAgICAg
aTMyLnN0b3JlCisgICAgICAgIGdldF9sb2NhbCA0CisgICAgICAgIGkzMi5jb25zdCAxCisgICAg
ICAgIGkzMi5hZGQKKyAgICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAgY2FsbCAwCisgICAgICAg
IHNldF9sb2NhbCAyCisgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgIGkzMi5sb2FkCisgICAg
ICAgIHNldF9sb2NhbCAzCisgICAgICAgIGdldF9sb2NhbCAyCisgICAgICAgIGkzMi5lcXoKKyAg
ICAgICAgYnJfaWYgMCAoO0AyOykKKyAgICAgIGVuZAorICAgIGVuZAorICAgIGdldF9sb2NhbCA0
CisgICAgaTMyLmFkZAorICAgIGdldF9sb2NhbCAzCisgICAgaTMyLmFkZCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378386</attachid>
            <date>2019-09-09 11:11:03 -0700</date>
            <delta_ts>2019-09-16 09:49:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201569-20190909111049.patch</filename>
            <type>text/plain</type>
            <size>46592</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY4ZDQyZDQxNzE3ZjM0MjIyOTNlNDM1MDNmYWE3MmQ5ODYwYWI2Li5jOWRhNThmN2U3YTEzNGVh
MjYzOWJmYzE4ZTJkN2NhNWYyNTkwZGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxOS0wOS0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHdlIGNvdWxkIGZhaWwgdG8gY2FwdHVyZSBzb21lIG9m
CisgICAgICAgIG91ciBjb250ZXh0cyB3aGVuIE9TUiBlbnRlcmluZyBpbnRvIHdhc20gY29kZS4g
QmVmb3JlIHdlIHdvdWxkCisgICAgICAgIG9ubHkgY2FwdHVyZSB0aGUgc3RhdGUgb2YgdGhlIGJs
b2NrIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZQorICAgICAgICBlbnRyYW5jZSBsb29wIGJs
b2NrIGhlYWRlci4gV2UgYWN0dWFsbHkgbmVlZCB0byBjYXB0dXJlIGFsbAorICAgICAgICBlbmNs
b3NlZCBzdGFja3MuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIHRvIHVz
ZSB2YXJpYWJsZXMgZm9yIGFsbCB0aGUgY2FwdHVyZWQKKyAgICAgICAgdmFsdWVzLiBXZSBjYW4g
dXNlIGEgUGhpIGFuZCBpbnNlcnQgYW4gdXBzaWxvbiBqdXN0IGJlbG93IHRoZQorICAgICAgICBj
YXB0dXJlZCB2YWx1ZS4KKworICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZCk6CisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1pdEVudHJ5VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRMb29wKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Y3JlYXRlU3RhY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHBy
ZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OlN0YWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6OmFwcGVuZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjp0YWtlTGFz
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjps
YXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3RhY2s6
OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpTdGFjazo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OlN0YWNrOjpjb252ZXJ0VG9FeHByZXNzaW9uTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjphdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OlN0YWNrOjp2YXJpYWJsZUF0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6U3Rh
Y2s6OnNocmluayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OlN0YWNrOjpzd2FwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6U3RhY2s6OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpjb250cm9s
U3RhY2spOgorCiAyMDE5LTA5LTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29t
PgogCiAgICAgICAgIExhenlDbGFzc1N0cnVjdHVyZTo6c2V0Q29uc3RydWN0b3Igc2hvdWxkIG5v
dCBzdG9yZSB0aGUgY29uc3RydWN0b3IgdG8gdGhlIGdsb2JhbCBvYmplY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCBhNDY3MDNkY2U5YWM5
Y2Y2MGIwYTBmYTQzZjg0NmM4MGQxZDk2NTlkLi5kZDIwMGUxYTM1MTA3MzEyZDFkMDVlMjUyMjI0
MzM3NWE0OTQ1MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCkBAIC0xMzIsNyArMTMyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiB3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJik7CiAKLSAg
ICAgICAgYm9vbCBpc0FueVdhc21DYWxsZWUoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc0FueVdhc21DYWxsZWUoKTsKIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdo
aWNoIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2FzIGRlZmluZWQuCiAgICAgICAgIC8v
IERpZmZlcnMgZnJvbSBWTTo6dm1FbnRyeUdsb2JhbE9iamVjdCgpIGR1cmluZyBmdW5jdGlvbiBj
YWxscyBhY3Jvc3Mgd2ViIGJyb3dzZXIgZnJhbWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBl
YjExYTI1OWEyYzk4M2I4ZTE1ODQwNjliNDQwMmM4N2Y2Yzc3NzA5Li5iZTVlZDlhZTM2NWQ0MDdi
YWNjZGRhNTdjMzI1OGVhM2U3N2M1NGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMzIwLDYgKzMyMSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRlKik7
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vT1NSRXhpdEZ1
enppbmcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxl
cklzT01HQ29tcGlsZWQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkpTQ09wdGlvbnMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVj
U3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJh
bnNmZXJBcnJheUJ1ZmZlcihFeGVjU3RhdGUqKTsKQEAgLTU0MSw2ICs1NDMsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibm9GVEwiLCBmdW5jdGlvbk5vRlRMLCAxKTsK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJub09TUkV4aXRGdXp6aW5nIiwgZnVuY3Rpb25Ob09T
UkV4aXRGdXp6aW5nLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZkRGR0Nv
bXBpbGVzIiwgZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBpbGVzLCAxKTsKKyAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjYWxsZXJJc09NR0NvbXBpbGVkIiwgZnVuY3Rpb25DYWxsZXJJc09NR0NvbXBp
bGVkLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJqc2NPcHRpb25zIiwgZnVuY3Rpb25K
U0NPcHRpb25zLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uIiwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uLCAxKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJyZW9wdGltaXphdGlvblJldHJ5Q291bnQiLCBmdW5jdGlvblJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudCwgMSk7CkBAIC0xNzI3LDYgKzE3MzAsMzEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhlY1N0YXRlKiBl
eGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyT2ZERkdDb21waWxlcyhleGVj
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJJc09N
R0NvbXBpbGVkKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghT3B0
aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKTsKKworICAgIENhbGxlckZ1bmN0b3Igd2FzbVRvSlNGcmFtZTsK
KyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGV4ZWMsICZ2bSwgd2FzbVRvSlNGcmFtZSk7CisgICAg
aWYgKCF3YXNtVG9KU0ZyYW1lLmNhbGxlckZyYW1lKCktPmlzQW55V2FzbUNhbGxlZSgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiY2FsbGVyIGlzIG5vdCBhIHdh
c20tPmpzIGltcG9ydCBmdW5jdGlvbiIpOworCisgICAgLy8gV2UgaGF2ZSBhIHdyYXBwZXIgZnJh
bWUgdGhhdCB3ZSBnZW5lcmF0ZSBmb3IgaW1wb3J0cy4gSWYgd2UgZXZlciBjYW4gZGlyZWN0IGNh
bGwgZnJvbSB3YXNtIHdlIHdvdWxkIG5lZWQgdG8gY2hhbmdlIHRoaXMuCisgICAgQVNTRVJUKCF3
YXNtVG9KU0ZyYW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICBDYWxs
ZXJGdW5jdG9yIHdhc21GcmFtZTsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHdhc21Ub0pTRnJh
bWUuY2FsbGVyRnJhbWUoKSwgJnZtLCB3YXNtRnJhbWUpOworICAgIEFTU0VSVCh3YXNtRnJhbWUu
Y2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCkuaXNXYXNtKCkpOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICBhdXRvIG1vZGUgPSB3YXNtRnJhbWUuY2FsbGVyRnJhbWUoKS0+Y2FsbGVlKCkuYXNX
YXNtQ2FsbGVlKCktPmNvbXBpbGF0aW9uTW9kZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKG1vZGUgPT0gV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlIHx8IG1v
ZGUgPT0gV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpKTsKKyNlbmRp
ZgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIE1lc3NhZ2U6Ok1lc3Nh
Z2UoQXJyYXlCdWZmZXJDb250ZW50cyYmIGNvbnRlbnRzLCBpbnQzMl90IGluZGV4KQogICAgIDog
bV9jb250ZW50cyhXVEZNb3ZlKGNvbnRlbnRzKSkKICAgICAsIG1faW5kZXgoaW5kZXgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRl
eCBmYTE1ZWM4NGM4NzYxMDZjYTQzYTQyZGYxYjIwMDYwM2EwMzllNmZjLi5jODY2NGZhN2RjOTIw
MjQwYTJkY2VkNzFhY2ZmYzhkNDcxOWE1N2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTU5MSw4ICs1OTEsOCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0
aW9uVHlwZSk7CiAKLSAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVt
ZW50Q291bnQsIEIzOjpPcmlnaW4pOwotICAgIHZvaWQgZW1pdExvb3BUaWVyVXBDaGVjayhpbnQz
Ml90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYsIHVpbnQzMl90LCB1aW50MzJfdCwgQjM6
Ok9yaWdpbik7CisgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjaygpOworICAgIHZvaWQgZW1p
dExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpOwogCiAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcCk7CkBAIC04NTIsNyArODUyLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFp
cklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJl
JiBwcm8KICAgICAgICAgfQogICAgIH0pOwogCi0gICAgZW1pdEVudHJ5VGllclVwQ2hlY2soVGll
clVwQ291bnQ6OmZ1bmN0aW9uRW50cnlJbmNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKKyAgICBl
bWl0RW50cnlUaWVyVXBDaGVjaygpOwogfQogCiB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVHlwZWRUbXAg
aW5zdGFuY2UsIEJhc2ljQmxvY2sqIGJsb2NrKQpAQCAtMTYwMywxMCArMTYwMyw4IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJl
c3Npb25UeXBlIG5vblplcm8sCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9y
aWdpbiBvcmlnaW4pCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjaygp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7Ci0KICAgICBpZiAoIW1fdGllclVwKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE2MjQsNyArMTYyMiw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6
OmVtaXRFbnRyeVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIEIzOjpPcmlnaW4g
b3JpCiAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogCi0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQ
b3NpdGl2ZU9yWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5jcmVtZW50Q291bnQp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoQWRkMzIoQ0NhbGxIZWxwZXJzOjpQb3Np
dGl2ZU9yWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoVGllclVwQ291bnQ6OmZ1bmN0
aW9uRW50cnlJbmNyZW1lbnQoKSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCkpKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFi
ZWwoKTsKIAogICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgewpAQCAtMTY1MCw5ICsxNjQ4LDEwIEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRFbnRy
eVRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpCiAgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpLCBjb3VudGRvd25QdHIpOwogfQogCi12b2lkIEFp
cklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQs
IGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCwgdWludDMy
X3Qgb3V0ZXJMb29wSW5kZXgsIEIzOjpPcmlnaW4gb3JpZ2luKQordm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKG9yaWdpbik7CisgICAgdWludDMyX3Qgb3V0ZXJMb29wSW5kZXggPSB0aGlzLT5vdXRl
ckxvb3BJbmRleCgpOworICAgIG1fb3V0ZXJMb29wcy5hcHBlbmQobG9vcEluZGV4KTsKIAogICAg
IGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVybjsKQEAgLTE2ODAsMTQgKzE2NzksMTYgQEAg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVu
dENvdW50LCBjb25zdCBTdGFjayYgZXgKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNo
QXJnczsKICAgICBwYXRjaEFyZ3MuYXBwZW5kKGNvdW50ZG93blB0cik7CiAKLSAgICBWZWN0b3I8
QjM6OlR5cGU+IHR5cGVzOwotICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykgeworICAg
IGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChD
b25zdHJhaW5lZFRtcChsb2NhbCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgICAgIHR5
cGVzLmFwcGVuZCh0b0IzVHlwZShsb2NhbC50eXBlKCkpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRv
JiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAoZXhwcmVzc2lvbiwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZCh0b0IzVHlwZShleHByZXNzaW9uLnR5cGUoKSkpOworICAgIGZv
ciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9s
SW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGF1dG8mIHZhbHVl
IDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh2YWx1ZSwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7CisKKyAgICAgICAgY29uc3Qg
YXV0byYgcmVzdWx0cyA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNv
bnRyb2xEYXRhLnJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHJlc3VsdHMpCisg
ICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKICAgICB9CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNv
biogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkubGFz
dCgpKTsKQEAgLTE2OTYsMTIgKzE2OTcsMTMgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExv
b3BUaWVyVXBDaGVjayhpbnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXgKICAg
ICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBmb3JjZU9TUkVudHJ5ID0gaml0LmJyYW5jaFRlc3Q4KENDYWxsSGVscGVyczo6Tm9u
WmVybywgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoZm9yY2VFbnRyeVRyaWdnZXIpKTsK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2Fs
bEhlbHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmNy
ZW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhl
bHBlcnM6OlBvc2l0aXZlT3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihUaWVyVXBD
b3VudDo6bG9vcEluY3JlbWVudCgpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5n
cHIoKSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0
LmxhYmVsKCk7CiAKICAgICAgICAgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEgPSBtX3RpZXJV
cC0+YWRkT1NSRW50cnlEYXRhKG1fZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4KTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyArK2luZGV4KQot
ICAgICAgICAgICAgb3NyRW50cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFwcGVuZChwYXJh
bXNbaW5kZXggKyAxXSwgdHlwZXNbaW5kZXhdKTsKKyAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQg
aXMgdGhlIGNvdW50ZG93biBsb2NhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDE7IGluZGV4IDwgcGFyYW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCk7ICsraW5kZXgpCisgICAg
ICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCkuY29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tp
bmRleF0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpbmRleCktPnR5cGUoKSk7CiAgICAgICAgIE9T
UkVudHJ5RGF0YSogb3NyRW50cnlEYXRhUHRyID0gJm9zckVudHJ5RGF0YTsKIAogICAgICAgICBw
YXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewpAQCAtMTcxOCw3ICsx
NzIwLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhpbnQzMl90
IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXgKICAgICBlbWl0UGF0Y2hwb2ludChwYXRj
aCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CiB9CiAKLUFpcklSR2VuZXJhdG9yOjpDb250
cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSwgY29uc3QgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4KQorQWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlLCBjb25z
dCBTdGFjayYsIHVpbnQzMl90IGxvb3BJbmRleCkKIHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0g
bV9jb2RlLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CkBAIC0xNzI2LDEwICsxNzI4LDggQEAgQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlLCBjb25zdCBTdGFj
ayYKICAgICBhcHBlbmQoSnVtcCk7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
Ym9keSk7CiAKLSAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRleCA9IHRoaXMtPm91dGVyTG9vcElu
ZGV4KCk7Ci0gICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29wSW5kZXgpOwogICAgIG1fY3VycmVu
dEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojpsb29w
SW5jcmVtZW50KCksIGV4cHJlc3Npb25TdGFjaywgbG9vcEluZGV4LCBvdXRlckxvb3BJbmRleCwg
b3JpZ2luKCkpOworICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcEluZGV4KTsKIAogICAgIHJl
dHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVy
ZSksIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA4MGU4NDg4
N2RiMGUxMjE1ZWI4YmRkNGZlYTI5NWI1OGNjZjlhZWEzLi5iMTY3ZGY1ZmZlOTdiNzZhOGY2NDZh
NTg1YjVkMjUyNzA0YzBhYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0xNjEsMTA3ICsxNjEsOCBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBWYWx1ZSogRXhwcmVzc2lvblR5cGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogCi0gICAgZnJpZW5kIGNsYXNzIFN0YWNrOwot
ICAgIGNsYXNzIFN0YWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0YWNrKEIzSVJHZW5lcmF0
b3IqIGdlbmVyYXRvcikKLSAgICAgICAgICAgIDogbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGVuZChFeHByZXNzaW9uVHlwZSBl
eHByZXNzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29t
cGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gbV9nZW5lcmF0b3ItPm1fcHJvYy5h
ZGRWYXJpYWJsZShleHByZXNzaW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG1fZ2VuZXJh
dG9yLT5tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fZ2VuZXJhdG9y
LT5tX3Byb2MsIFNldCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCB2YXJpYWJsZSwgZXhwcmVzc2lv
bik7Ci0gICAgICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQo
ZXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWtlTGFz
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlv
bk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlh
YmxlVmFsdWU+KG1fZ2VuZXJhdG9yLT5tX3Byb2MsIEIzOjpHZXQsIG1fZ2VuZXJhdG9yLT5vcmln
aW4oKSwgbV9zdGFjay50YWtlTGFzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGEudGFr
ZUxhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIGxhc3QoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09
IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2dlbmVyYXRvci0+bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX2dlbmVyYXRvci0+bV9wcm9jLCBCMzo6R2V0LCBtX2dlbmVyYXRvci0+b3JpZ2luKCksIG1f
c3RhY2subGFzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGEubGFzdCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2Rl
OjpPTUdGb3JPU1JFbnRyeU1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhY2suc2l6
ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KLQotICAgICAg
ICBFeHByZXNzaW9uTGlzdCBjb252ZXJ0VG9FeHByZXNzaW9uTGlzdCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtX2dlbmVyYXRvci0+bV9jb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRp
b25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgICAgICBFeHByZXNzaW9u
TGlzdCByZXN1bHRzOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3N0YWNrLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChh
dChpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbV9kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgYXQodW5zaWduZWQgaSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
Z2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3ItPm1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9nZW5lcmF0b3ItPm1fcHJvYywgQjM6
OkdldCwgbV9nZW5lcmF0b3ItPm9yaWdpbigpLCBtX3N0YWNrLmF0KGkpKTsKLSAgICAgICAgICAg
IHJldHVybiBtX2RhdGEuYXQoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICBWYXJpYWJsZSogdmFy
aWFibGVBdCh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9n
ZW5lcmF0b3ItPm1fY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLmF0KGkpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNocmluayh1
bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZW5lcmF0b3ItPm1fY29t
cGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdGFjay5zaHJpbmsoaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9kYXRhLnNocmluayhpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc3dhcChTdGFjayYgc3RhY2spCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0ZDo6c3dhcChtX2dlbmVyYXRvciwgc3RhY2subV9nZW5lcmF0b3IpOwotICAgICAgICAg
ICAgbV9kYXRhLnN3YXAoc3RhY2subV9kYXRhKTsKLSAgICAgICAgICAgIG1fc3RhY2suc3dhcChz
dGFjay5tX3N0YWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7Ci0gICAg
ICAgICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwotICAgICAgICAgICAg
aWYgKG1fZ2VuZXJhdG9yLT5tX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9N
R0Zvck9TUkVudHJ5TW9kZSkgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFy
aWFibGUgOiBtX3N0YWNrKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqdmFy
aWFibGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IG1fZGF0YSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIEIzSVJHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yIHsgbnVsbHB0ciB9OwotICAgICAg
ICBFeHByZXNzaW9uTGlzdCBtX2RhdGE7Ci0gICAgICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fc3Rh
Y2s7Ci0gICAgfTsKLSAgICBTdGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKHRoaXMp
OyB9CisgICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKKyAgICBTdGFjayBjcmVhdGVT
dGFjaygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9s
RGF0YTsKICAgICB1c2luZyBSZXN1bHRMaXN0ID0gQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CkBA
IC0zNTEsOCArMjUyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGVtaXRFeGNlcHRp
b25DaGVjayhDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAotICAgIHZvaWQgZW1pdEVu
dHJ5VGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7Ci0gICAg
dm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0
YWNrJiwgdWludDMyX3QsIHVpbnQzMl90LCBCMzo6T3JpZ2luKTsKKyAgICB2b2lkIGVtaXRFbnRy
eVRpZXJVcENoZWNrKCk7CisgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxv
b3BJbmRleCk7CiAKICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAg
ICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKQEAgLTU4NCw3
ICs0ODUsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBlbWl0RW50cnlUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeUluY3Jl
bWVudCgpLCBPcmlnaW4oKSk7CisgICAgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKIAogICAgIGlm
IChtX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZSkKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTExODcs
MTggKzEwODgsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLAogCiBCM0lSR2VuZXJhdG9yOjpF
eHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2
NF90IHZhbHVlKQogeworCiAgICAgcmV0dXJuIGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2soaW50MzJf
dCBpbmNyZW1lbnRDb3VudCwgT3JpZ2luIG9yaWdpbikKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dEVudHJ5VGllclVwQ2hlY2soKQogewogICAgIGlmICghbV90aWVyVXApCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChtX3RpZXJVcCk7Ci0gICAgVmFsdWUqIGNvdW50RG93bkxvY2F0aW9u
ID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oJm1f
dGllclVwLT5tX2NvdW50ZXIpLCBvcmlnaW4pOworICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlv
biA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZt
X3RpZXJVcC0+bV9jb3VudGVyKSwgT3JpZ2luKCkpOwogCi0gICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3Jp
Z2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIHByZWNpc2UgaGVhcCByYW5nZSBmb3IgdGhlIHRp
ZXIgdXAgY291bnQuCiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwpA
QCAtMTIwOSw3ICsxMTExLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBD
aGVjayhpbnQzMl90IGluY3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQogICAgIHBhdGNoLT5h
cHBlbmQoY291bnREb3duTG9jYXRpb24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBh
dGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
dGllclVwID0gaml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGluY3JlbWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgdGll
clVwID0gaml0LmJyYW5jaEFkZDMyKENDYWxsSGVscGVyczo6UG9zaXRpdmVPclplcm8sIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5SW5jcmVtZW50
KCkpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpKSk7CiAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAg
cGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKQEAgLTEyMzMsMTMg
KzExMzUsMTUgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjayhpbnQz
Ml90IGluY3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQogICAgIH0pOwogfQogCi12b2lkIEIz
SVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNyZW1lbnRDb3VudCwg
Y29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgdWludDMyX3QgbG9vcEluZGV4LCB1aW50MzJf
dCBvdXRlckxvb3BJbmRleCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KQogeworICAgIHVpbnQzMl90
IG91dGVyTG9vcEluZGV4ID0gdGhpcy0+b3V0ZXJMb29wSW5kZXgoKTsKKyAgICBtX291dGVyTG9v
cHMuYXBwZW5kKGxvb3BJbmRleCk7CisKICAgICBpZiAoIW1fdGllclVwKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV90aWVyVXApOwotCisgICAgT3JpZ2luIG9yaWdpbiA9IHRoaXMt
Pm9yaWdpbigpOwogICAgIEFTU0VSVChtX3RpZXJVcC0+b3NyRW50cnlUcmlnZ2VycygpLnNpemUo
KSA9PSBsb29wSW5kZXgpOwogICAgIG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkuYXBwZW5k
KFRpZXJVcENvdW50OjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlcik7CiAgICAgbV90aWVyVXAt
Pm91dGVyTG9vcHMoKS5hcHBlbmQob3V0ZXJMb29wSW5kZXgpOwpAQCAtMTI0NywxNiArMTE1MSwx
NCBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2soaW50MzJfdCBpbmNy
ZW1lbnRDb3VudCwgY29uc3QgU3RhY2smIGV4cAogICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlv
biA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KCZt
X3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAogICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gc3RhY2ttYXA7Ci0gICAgVmVjdG9yPEIzOjpUeXBlPiB0eXBlczsKICAgICBmb3IgKGF1dG8m
IGxvY2FsIDogbV9sb2NhbHMpIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9y
aWdpbiwgbG9jYWwpOwogICAgICAgICBzdGFja21hcC5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAg
dHlwZXMuYXBwZW5kKHJlc3VsdC0+dHlwZSgpKTsKICAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQgPSBleHByZXNzaW9uU3RhY2suYXQoaSk7Ci0gICAgICAgIHN0YWNrbWFw
LmFwcGVuZChyZXN1bHQpOwotICAgICAgICB0eXBlcy5hcHBlbmQocmVzdWx0LT50eXBlKCkpOwor
ICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0
byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRl
eF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
ZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKICAg
ICB9CiAKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CkBAIC0xMjgx
LDEyICsxMTgzLDEzIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayhp
bnQzMl90IGluY3JlbWVudENvdW50LCBjb25zdCBTdGFjayYgZXhwCiAgICAgcGF0Y2gtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBmb3JjZU9TUkVu
dHJ5ID0gaml0LmJyYW5jaFRlc3Q4KENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0NhbGxIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoZm9yY2VFbnRyeVRyaWdnZXIpKTsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZl
T3JaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmNyZW1lbnRDb3VudCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2hBZGQzMihDQ2FsbEhlbHBlcnM6OlBvc2l0aXZlT3Ja
ZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihUaWVyVXBDb3VudDo6bG9vcEluY3JlbWVu
dCgpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSkpOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CiAKICAgICAg
ICAgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEgPSBtX3RpZXJVcC0+YWRkT1NSRW50cnlEYXRh
KG1fZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgb3NyRW50
cnlEYXRhLnZhbHVlcygpLmNvbnN0cnVjdEFuZEFwcGVuZChwYXJhbXNbaW5kZXggKyAxXSwgdHlw
ZXNbaW5kZXhdKTsKKyAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvdW50ZG93biBs
b2NhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHBhcmFtcy52YWx1ZSgp
LT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICBvc3JFbnRyeURhdGEudmFsdWVzKCku
Y29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50
eXBlKCkpOwogICAgICAgICBPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YVB0ciA9ICZvc3JFbnRy
eURhdGE7CiAKICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKQEAgLTEzMDEsNDkgKzEyMDQsNjkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9v
cFRpZXJVcENoZWNrKGludDMyX3QgaW5jcmVtZW50Q291bnQsIGNvbnN0IFN0YWNrJiBleHAKICAg
ICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRk
TG9vcChUeXBlIHNpZ25hdHVyZSwgY29uc3QgU3RhY2smIHN0YWNrLCB1aW50MzJfdCBsb29wSW5k
ZXgpCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5
cGUgc2lnbmF0dXJlLCBjb25zdCBTdGFjayYsIHVpbnQzMl90IGxvb3BJbmRleCkKIHsKICAgICBC
YXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgIGlm
IChsb29wSW5kZXggPT0gbV9sb29wSW5kZXhGb3JPU1JFbnRyeSkgeworICAgICAgICBkYXRhTG9n
TG5JZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiU2V0dGluZyB1cCBmb3Ig
T1NSIGVudHJ5Iik7CiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2s7Ci0gICAg
ICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIHN0YWNr
LnNpemUoKTsKICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RCbG9jay0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CiAKLSAgICAgICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBl
IHR5cGUsIHVuc2lnbmVkIGluZGV4KSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6
ZW9mKHVpbnQ2NF90KSAqIGluZGV4OwotICAgICAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkg
ewotICAgICAgICAgICAgY2FzZSBCMzo6SW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIs
IG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICAgICAgY2FzZSBCMzo6SW50NjQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGNhc2UgQjM6OkZsb2F0OgotICAgICAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpG
bG9hdCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgICAgICBjYXNlIEIzOjpE
b3VibGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkRvdWJsZSwgb3JpZ2luKCksIHBvaW50ZXIs
IG9mZnNldCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworICAgICAgICBhdXRvIGxv
YWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoQjM6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyKys7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwogICAgICAgICB9OwogCi0gICAgICAg
IHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOwogICAgICAgICBmb3IgKGF1dG8mIGxvY2FsIDog
bV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZl
cihsb2NhbC0+dHlwZSgpLCBpbmRleEluQnVmZmVyKyspKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvKiB2YXJp
YWJsZSA9IHN0YWNrLnZhcmlhYmxlQXQoaSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFyaWFibGUs
IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YXJpYWJsZS0+dHlwZSgpLCBpbmRleEluQnVmZmVyKysp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
bV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2Fs
LT50eXBlKCkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xT
dGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgICAgICBhdXRvJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50
cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0
aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBzb3VyY2VCbG9jayA9IG51bGxwdHI7CisgICAgICAgICAgICB1bnNpZ25lZCBibG9j
a0luZGV4ID0gMDsKKyAgICAgICAgICAgIEIzOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
cHJvYyk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0
YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byogdmFsdWUgPSBleHByZXNz
aW9uU3RhY2tbaV07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LT5vd25lciAhPSBzb3VyY2VCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShzb3VyY2VCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbnNl
cnRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSAmJiBzb3VyY2VCbG9jaywgIkV4ZWN1dGVk
IGluc2VydGlvbiBzZXQgaW50bzogIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2tJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUJsb2NrID0gdmFs
dWUtPm93bmVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdoaWxlIChz
b3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCsrKSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJsb2NrSW5kZXggPCBzb3VyY2VCbG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc291cmNlQmxvY2stPmF0KGJsb2NrSW5kZXggLSAxKSA9PSB2YWx1ZSk7CisK
KyAgICAgICAgICAgICAgICBhdXRvKiBwaGkgPSBkYXRhLmNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFBoaSwgIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSk7Cisg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2ldID0gcGhpOworICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5v
cmlnaW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOworCisg
ICAgICAgICAgICAgICAgYXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZh
bHVlPih2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkpOworICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRWYWx1ZShibG9ja0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKICAg
ICAgICAgfQorCisgICAgICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5C
dWZmZXI7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9w
cm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCBvdXRlckxvb3BJbmRleCA9
IHRoaXMtPm91dGVyTG9vcEluZGV4KCk7Ci0gICAgbV9vdXRlckxvb3BzLmFwcGVuZChsb29wSW5k
ZXgpOwogICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKLSAgICBlbWl0TG9vcFRpZXJVcENoZWNr
KFRpZXJVcENvdW50Ojpsb29wSW5jcmVtZW50KCksIHN0YWNrLCBsb29wSW5kZXgsIG91dGVyTG9v
cEluZGV4LCBvcmlnaW4oKSk7CisgICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgpOwog
CiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOwogfQpAQCAtMTQ2Nyw3ICsxMzkwLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUg
YW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0
dXJuIGhlcmUuCiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCi0g
ICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmNvbnZlcnRUb0V4cHJlc3Npb25MaXN0KCkpOworICAgICAgICByZXR1
cm4gYWRkUmV0dXJuKGVudHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjayk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTczOSw2ICsxNjYyLDEzIEBAIHZvaWQg
QjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0
YWNrLCBjb25zdCBSZXN1bHRMCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0g
MSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQog
CitzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29t
bWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
Cit7CisgICAgZGF0YUxvZyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2co
Y29tbWEsICpleHByZXNzaW9uKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0
IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNz
aW9uU3RhY2spCiB7CiAgICAgZGF0YUxvZ0xuKCJDb25zdGFudHM6Iik7CkBAIC0xNzUyLDcgKzE2
ODIsOCBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqCiAgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgIGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAi
KTsKLSAgICAgICAgZXhwcmVzc2lvblN0YWNrLT5kdW1wKCk7CisgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpl
eHByZXNzaW9uU3RhY2spOwogICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNr
W2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwogICAgICAgICBkYXRhTG9nTG4oKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmlu
ZGV4IGExMzg0MTBhY2UwMGEzZWM1OTY1OTcxMjM5M2YxYWJkN2U2Y2U3NjAuLjcyZmRhZmZmOTcz
OTIzNmNlNWUyZDBhNjhkZTgxOGM3ZDAzOGI4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoK
ICAgICBPcFR5cGUgY3VycmVudE9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29k
ZTsgfQogICAgIHNpemVfdCBjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldDsgfQogCisgICAgVmVjdG9yPENvbnRy
b2xFbnRyeT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCmluZGV4IGM3ZmZj
NWQyYWQwNjU0NDU2YmY3ZDYyZTZiMTQ1OTM2OTIwNDVlYjkuLmI2YzVjMjc1NTMxMWIzZGUzNDAz
NTNlNzU5NDNkNjEzZGZmNmQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PcGNvZGVPcmlnaW4uY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgT3Bjb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7b3Bjb2RlOiAiLCBtYWtlU3RyaW5nKG9wY29k
ZSgpKSwgIiwgbG9jYXRpb246ICIsIGxvY2F0aW9uKCksICJ9Iik7CisgICAgb3V0LnByaW50KCJ7
b3Bjb2RlOiAiLCBtYWtlU3RyaW5nKG9wY29kZSgpKSwgIiwgbG9jYXRpb246ICIsIFJhd1BvaW50
ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9jYXRpb24oKSkpLCAifSIpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDgwYzNkYjI3ZDdlMGZjNWU3MjczZTc5YWM4MjhmMjlmNjNjYTJj
YWUuLjFjZDg1NmI5ZGZiYzM1ZGJjOTU3MTU2OGY0ZDUwMTYyYjEyYTRkNjggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wOS0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBPU1IgZW50cnkgaW50byB3YXNtIG1pc3NlcyBzb21lIGNvbnRleHRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE1NjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRlc3QgaGFybmVz
cyBtb2RlIGZvciB0ZXN0cyBjcmVhdGVkIGZyb20gd2FzdCBmaWxlcy4KKworICAgICAgICAqIFNj
cmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMDktMDUgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoaU9TIDEzKTogQnVsbGV0
ZWQgbGlzdCBjb3BpZWQgZnJvbSBOb3RlcyB0byBNYWlsIHJlc3VsdHMgaW4gVGltZXMgTmV3IFJv
bWFuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBhMzg5Y2EwMDMyYjE2MmQyYTdj
NzRhMjk1M2FhMTNhYWZiZGNiMjU0Li5jNDIwODg5YjUyNzk3MzljNWNhNzM2YjA4NGQ4ZDAyNGRj
YzAyODAwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisr
KyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTExMTQsNiArMTExNCwz
NiBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQogICAgIGVuZAogZW5kCiAKK2RlZiBydW5IYXJuZXNzVGVzdChraW5kLCAqb3B0aW9ucykKKyAg
ICB3YXNtRmlsZXMgPSBhbGxXYXNtRmlsZXMoJGNvbGxlY3Rpb24pCisgICAgd2FzbUZpbGVzLmVh
Y2ggeworICAgICAgICB8IGZpbGUgfAorICAgICAgICBiYXNlbmFtZSA9IGZpbGUuYmFzZW5hbWUu
dG9fcworICAgICAgICBhZGRSdW5Db21tYW5kKCIoIiArIGJhc2VuYW1lICsgIiktIiArIGtpbmQs
IFtwYXRoVG9WTS50b19zXSArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMgKyBvcHRpb25z
ICsgWyRiZW5jaG1hcmsudG9fcywgIi0tIiwgYmFzZW5hbWVdLCBzaWxlbnRPdXRwdXRIYW5kbGVy
LCBzaW1wbGVFcnJvckhhbmRsZXIpCisgICAgfQorZW5kCisKK2RlZiBydW5XZWJBc3NlbWJseVdp
dGhIYXJuZXNzKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCisgICAgcmFpc2UgdW5sZXNz
ICRiZW5jaG1hcmsudG9fcyA9fiAvaGFybmVzc1wubT9qcy8KKyAgICByZXR1cm4gaWYgISRqaXRU
ZXN0cworICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KKworICAgIHdhc21GaWxlcyA9IGFs
bFdhc21GaWxlcygkY29sbGVjdGlvbikKKyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKHdh
c21GaWxlcy5tYXAgeyB8ZnwgZi5iYXNlbmFtZSB9LCAkY29sbGVjdGlvbikKKworICAgIHJ1bkhh
cm5lc3NUZXN0KCJkZWZhdWx0LXdhc20iLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKKyAgICBpZiAkbW9kZSAhPSAicXVpY2siCisgICAgICAgIHJ1bkhhcm5l
c3NUZXN0KCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldh
c21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFn
ZXIiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwg
Ii0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVz
dCgid2FzbS1uby1jYWxsLWljIiwgIi0tdXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxz
PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisg
ICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLXNsb3ctbWVtb3J5Iiwg
Ii0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5v
LWFpciIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWNvbGxl
Y3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250
aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5RW1zY3JpcHRlbiht
b2RlKQogICAgIGNhc2UgbW9kZQogICAgIHdoZW4gOnNraXAKQEAgLTE0ODMsNiArMTUxMywyMSBA
QCBkZWYgc2tpcAogICAgIHB1dHMgIlNraXBwaW5nICN7JGNvbGxlY3Rpb25OYW1lfS8jeyRiZW5j
aG1hcmt9IgogZW5kCiAKK2RlZiBhbGxXYXNtRmlsZXMocGF0aCkKKyAgICBpZiBwYXRoLmZpbGU/
CisgICAgICAgIFtwYXRoXQorICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAg
RGlyLmZvcmVhY2gocGF0aCkgeworICAgICAgICAgICAgfCBmaWxlbmFtZSB8CisgICAgICAgICAg
ICBuZXh0IHVubGVzcyBmaWxlbmFtZSA9fiAvXC5tP3dhc20kLworICAgICAgICAgICAgbmV4dCB1
bmxlc3MgKHBhdGggKyBmaWxlbmFtZSkuZmlsZT8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBwYXRo
ICsgZmlsZW5hbWUKKyAgICAgICAgfQorICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiBk
ZWYgYWxsSlNGaWxlcyhwYXRoKQogICAgIGlmIHBhdGguZmlsZT8KICAgICAgICAgW3BhdGhdCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVk
MzQ3ZDg2MjJmNTRkNmViNjFiN2QxMTgwZGYyOGJlYjQ0M2M0MGUuLmM0MWY3NzlmNzkyYmFkNzZi
NjVjNTdmM2YyNmI0ZTk0NzE1NWVkOGYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMDktMDcgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgT1NSIGVudHJ5IGlu
dG8gd2FzbSBtaXNzZXMgc29tZSBjb250ZXh0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IGhhcm5lc3MgYW5kIHdhc3QgYW5kIHRoZSBn
ZW5lcmF0ZWQgd2FzbSBmaWxlIGZvcgorICAgICAgICB0ZXN0aW5nLiBUaGUgaWRlYSBsb25nIHRl
cm0gaXMgdG8gbWFrZSBpdCBlYXN5IHRvIHRlc3QgYnkgY3JlYXRpbmcKKyAgICAgICAgYSBDIGZp
bGUgYW5kIGNvbnZlcnRpbmcgaXQgdG8gYSB3YXN0IHRoZW4gbW9kaWZ5IHRoYXQgdG8gcHJvZHVj
ZSBhCisgICAgICAgIHRlc3QuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2Fz
bS93YXN0LXRlc3RzL2hhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAoYXN5bmMucnVuV2FzbUZp
bGUpOgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFu
Y2gtYWJvdmUtbm8tY29uc3RzLndhc206IEFkZGVkLgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0
cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUtbm8tY29uc3RzLndhc3Q6IEFkZGVk
LgorICAgICAgICAqIHdhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gt
YWJvdmUud2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1p
bm5lci1sb29wLWJyYW5jaC1hYm92ZS53YXN0OiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3dhc3Qt
dGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3Aud2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS93
YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLndhc3Q6IEFkZGVkLgorICAgICAgICAqIHdh
c20vd2FzdC10ZXN0cy9vc3ItZW50cnktbXVsdGlwbGUtZW5jbG9zZWQtY29udGV4dHMud2FzbTog
QWRkZWQuCisgICAgICAgICogd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1tdWx0aXBsZS1lbmNs
b3NlZC1jb250ZXh0cy53YXN0OiBBZGRlZC4KKwogMjAxOS0wOS0wNSAgVGFkZXUgWmFnYWxsbyAg
PHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnNldENv
bnN0cnVjdG9yIHNob3VsZCBub3Qgc3RvcmUgdGhlIGNvbnN0cnVjdG9yIHRvIHRoZSBnbG9iYWwg
b2JqZWN0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55YW1s
CmluZGV4IGY4NzExZjc0YmFlZWQ0M2M3ZjIzMzgxNTFkNzFhMTZkYWQ2NWU5NmIuLjY5N2YxMmFh
MWY4OTI4NjY3MjIwZDU0OWJkMmNiZmIyMDQ1ZTE2ODkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC0yMSw4ICsyMSw4IEBACiAjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgogIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0tIHBhdGg6IHdhc20vc2VsZi10ZXN0LwotICBjbWQ6
IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2Fz
bS93YXN0LXRlc3RzLworICBjbWQ6IHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3MKIC0gcGF0aDog
d2FzbS9qcy1hcGkvCiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5D
b21tYW5kcwogLSBwYXRoOiB3YXNtL25vSklULwpAQCAtNDMsNiArNDMsOCBAQAogICBjbWQ6IHJ1
bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9t
b2R1bGVzLwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCist
IHBhdGg6IHdhc20vc2VsZi10ZXN0LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNz
IHBhcnNlUnVuQ29tbWFuZHMKIAogLSBwYXRoOiB3YXNtL3NwZWMtdGVzdHMvYWRkcmVzcy53YXN0
LmpzCiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVzdCA6bm9ybWFsCkBAIC0xODUsMyArMTg3
LDQgQEAKIAogLSBwYXRoOiB3YXNtL21vZHVsZXMvcnVuLWZyb20td2FzbS53YXNtCiAgIGNtZDog
cnVuV2ViQXNzZW1ibHkKKwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFy
bmVzcy5qcyBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjBmODZlNTViZDc0YmY2YTM4N2E2N2ZmNDlmNmY5NWVmOTQ2YmI1YwotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMKQEAgLTAsMCArMSwyMiBAQAor
YXN5bmNUZXN0U3RhcnQoMSk7CitsZXQgY29udGV4dCA9IHsKKyAgICBlbnY6IGdsb2JhbFRoaXMs
Cit9OworCitnbG9iYWxUaGlzLl9fbGluZWFyX21lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1v
cnkoeyBpbml0aWFsOiAxIH0pOworCithc3luYyBmdW5jdGlvbiBydW5XYXNtRmlsZShmaWxlUGF0
aCkgeworICAgIGxldCBibG9iID0gcmVhZEZpbGUoZmlsZVBhdGgsICJiaW5hcnkiKTsKKyAgICBs
ZXQgY29tcGlsZWQ7CisgICAgdHJ5IHsKKyAgICAgICAgY29tcGlsZWQgPSBhd2FpdCBXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZShibG9iLCBjb250ZXh0KTsKKyAgICAgICAgY29tcGlsZWQuaW5zdGFu
Y2UuZXhwb3J0cy50ZXN0KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBwcmludChlKTsK
KyAgICAgICAgdGhyb3cgZTsKKyAgICB9CisgICAgYXN5bmNUZXN0UGFzc2VkKCk7Cit9CisKK2Zv
ciAod2FzbUZpbGUgb2YgYXJndW1lbnRzKQorICAgIHJ1bldhc21GaWxlKHdhc21GaWxlKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLWJy
YW5jaC1hYm92ZS1uby1jb25zdHMud2FzbSBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1l
bnRyeS1pbm5lci1sb29wLWJyYW5jaC1hYm92ZS1uby1jb25zdHMud2FzbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
OWRmNjI1YzgxYWQ4ODJiY2FmZTM2ZTJlYTI1Yjg4YTk5NWU0ZDUwCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAyMDAKemNtWFpVdT9vVTQ2b3VoKVp6NzdOU2tNUFpvU1lxOzgkXm5PX3oxT1ZoSzhn
cVo0c1JNPlpaYDs0Jk9jZXNEP2xRCnpYdjs1fVhuS0pyS0NgZ1JjVVA5YVpmdzw7IUdeWn5GKTtK
flUzcVcmYHx4fWUqRVYjdXc7enlUIWdAbjt3OEkhPAp6OVdeODsxJShxc2xWUXlVVDhLUGVzWXIy
ckA9OV5TZDQ/M1RpaFArSDtWJXAmNExMMHsrKV5abyk0WmdWaDwrNjIKTVAoK19nJk1FMVZLTlM4
VloyJGxPCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
d2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUtbm8tY29uc3RzLndh
c3QgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gt
YWJvdmUtbm8tY29uc3RzLndhc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRlNWIyZDFhYzhmYzc0YTBjZjFhNGZi
MDRmZTYwMDJhOTk0NGU4NgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS93YXN0LXRl
c3RzL29zci1lbnRyeS1pbm5lci1sb29wLWJyYW5jaC1hYm92ZS1uby1jb25zdHMud2FzdApAQCAt
MCwwICsxLDY1IEBACisobW9kdWxlCisgICh0eXBlICg7MDspIChmdW5jIChwYXJhbSBpMzIpIChy
ZXN1bHQgaTMyKSkpCisgICh0eXBlICg7MTspIChmdW5jIChyZXN1bHQgaTMyKSkpCisgIChpbXBv
cnQgImVudiIgIl9fbGluZWFyX21lbW9yeSIgKG1lbW9yeSAoOzA7KSAwKSkKKyAgKGltcG9ydCAi
ZW52IiAiY2FsbGVySXNPTUdDb21waWxlZCIgKGZ1bmMgKDswOykgKHR5cGUgMSkpKQorICAoZnVu
YyAoZXhwb3J0ICJ0ZXN0IikgKHR5cGUgMCkgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpCisgICAg
KGxvY2FsIGkzMiBpMzIgaTMyIGkzMikKKyAgICBnZXRfbG9jYWwgMAorICAgIGdldF9sb2NhbCAw
CisgICAgaTMyLmxvYWQKKyAgICBzZXRfbG9jYWwgMQorICAgIGkzMi5jb25zdCAyCisgICAgc2V0
X2xvY2FsIDIKKyAgICBpMzIuY29uc3QgMAorICAgIHNldF9sb2NhbCAzCisgICAgbG9vcCAgOzsg
bGFiZWwgPSBAMQorICAgICAgaTMyLmNvbnN0IDAKKyAgICAgIHNldF9sb2NhbCA0CisgICAgICBn
ZXRfbG9jYWwgMQorICAgICAgZ2V0X2xvY2FsIDIKKyAgICAgIGlmIGkzMgorICAgICAgICBnZXRf
bG9jYWwgMgorICAgICAgZWxzZQorICAgICAgICBnZXRfbG9jYWwgMgorICAgICAgZW5kCisgICAg
ICBibG9jayAgOzsgbGFiZWwgPSBAMgorICAgICAgICBjYWxsIDAKKyAgICAgICAgYnJfaWYgMCAo
O0AyOykKKyAgICAgICAgaTMyLmNvbnN0IDAKKyAgICAgICAgc2V0X2xvY2FsIDQKKyAgICAgICAg
bG9vcCAgOzsgbGFiZWwgPSBAMworICAgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgICAgZ2V0
X2xvY2FsIDAKKyAgICAgICAgICBpMzIubG9hZAorICAgICAgICAgIGkzMi5jb25zdCAzCisgICAg
ICAgICAgaTMyLm11bAorICAgICAgICAgIGkzMi5zdG9yZQorICAgICAgICAgIGdldF9sb2NhbCA0
CisgICAgICAgICAgaTMyLmNvbnN0IDEKKyAgICAgICAgICBpMzIuYWRkCisgICAgICAgICAgc2V0
X2xvY2FsIDQKKyAgICAgICAgICBjYWxsIDAKKyAgICAgICAgICBpMzIuZXF6CisgICAgICAgICAg
YnJfaWYgMCAoO0AzOykKKyAgICAgICAgZW5kCisgICAgICBlbmQKKyAgICAgIGkzMi5hZGQKKyAg
ICAgIHNldF9sb2NhbCAyCisgICAgICBnZXRfbG9jYWwgMAorICAgICAgaTMyLmxvYWQKKyAgICAg
IHNldF9sb2NhbCAxCisgICAgICBnZXRfbG9jYWwgMworICAgICAgaTMyLmNvbnN0IDEKKyAgICAg
IGkzMi5hZGQKKyAgICAgIHRlZV9sb2NhbCAzCisgICAgICBpMzIuY29uc3QgMjAKKyAgICAgIGkz
Mi5uZQorICAgICAgYnJfaWYgMCAoO0AxOykKKyAgICBlbmQKKyAgICBnZXRfbG9jYWwgMQorICAg
IGdldF9sb2NhbCAyCisgICAgaTMyLmFkZAorICAgIGkzMi5hZGQKKyAgICBnZXRfbG9jYWwgNAor
ICAgIGkzMi5hZGQpKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVu
dHJ5LWlubmVyLWxvb3AtYnJhbmNoLWFib3ZlLndhc20gYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0
cy9vc3ItZW50cnktaW5uZXItbG9vcC1icmFuY2gtYWJvdmUud2FzbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjAy
MmJlMzNhOTYzODhlZDY2MTcxMmYxNjZjNjQ3NmY3MTJjYjM4CkdJVCBiaW5hcnkgcGF0Y2gKbGl0
ZXJhbCAyMjAKemNtWFpVRi1ycU01WEpITFc+eXJKISs9KClYMDVDKHRhbDkoRVgwcCtJZHFGR2R4
X2l5IVJpRlJ4T2IyI2Y2ViklCno4KyF1YXdkXj0/K0pUY2lpc3ItalAyMU19QSRMUkQ9bChlUzIo
YSsmTV58ZWVVZFEqaD9kSTVqP1E4eDdSZngrZwp6eD5GdWNiTEB9JkNFYTgmSk9+MWwxVzU/MEcx
MGdJVmw7aHJHZFpLbHszI2JFVWc4UTM3Uyh2KENhcTViYkJRSW0KYzY8ISo2VXhKKndybkJFYHk0
eUJiRlh4d0JEZHZqKjJqNlRZcjJxZmAKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRyeS1pbm5lci1sb29wLWJyYW5jaC1h
Ym92ZS53YXN0IGIvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3At
YnJhbmNoLWFib3ZlLndhc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE2NDcxZmJjN2YyYWQ0MDdhNjJkZjU3ZjZi
NjQ2MTY3MGIwYmRkNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS93YXN0LXRlc3Rz
L29zci1lbnRyeS1pbm5lci1sb29wLWJyYW5jaC1hYm92ZS53YXN0CkBAIC0wLDAgKzEsODAgQEAK
Kyhtb2R1bGUKKyAgKHR5cGUgKDswOykgKGZ1bmMgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpKSkK
KyAgKHR5cGUgKDsxOykgKGZ1bmMgKHJlc3VsdCBpMzIpKSkKKyAgKGltcG9ydCAiZW52IiAiX19s
aW5lYXJfbWVtb3J5IiAobWVtb3J5ICg7MDspIDApKQorICAoaW1wb3J0ICJlbnYiICJjYWxsZXJJ
c09NR0NvbXBpbGVkIiAoZnVuYyAoOzA7KSAodHlwZSAxKSkpCisgIChmdW5jIChleHBvcnQgInRl
c3QiKSAodHlwZSAwKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikKKyAgICAobG9jYWwgaTMyIGkz
MiBpMzIgaTMyKQorICAgIGdldF9sb2NhbCAwCisgICAgZ2V0X2xvY2FsIDAKKyAgICBpMzIubG9h
ZAorICAgIHNldF9sb2NhbCAxCisgICAgaTMyLmNvbnN0IDIKKyAgICBzZXRfbG9jYWwgMgorICAg
IGkzMi5jb25zdCAwCisgICAgc2V0X2xvY2FsIDMKKyAgICBsb29wICA7OyBsYWJlbCA9IEAxCisg
ICAgICA7OyBhZGQgYSBidW5jaCBvZiB2YWx1ZXMgc28gdGhlcmUgaXMgYSBiaWdnZXIgc3RhY2sg
aGVyZSB0aGFuIGluIHRoZSBpZiBibG9jay4KKyAgICAgIGkzMi5jb25zdCAxCisgICAgICBnZXRf
bG9jYWwgMQorICAgICAgZjMyLmNvbnN0IDMKKyAgICAgIGdldF9sb2NhbCAzCisgICAgICBpNjQu
Y29uc3QgNAorCisgICAgICA7OyByZWFsIHByb2dyYW0KKyAgICAgIGkzMi5jb25zdCAwCisgICAg
ICBzZXRfbG9jYWwgNAorICAgICAgZ2V0X2xvY2FsIDEKKyAgICAgIGdldF9sb2NhbCAyCisgICAg
ICBpZiBpMzIKKyAgICAgICAgZ2V0X2xvY2FsIDIKKyAgICAgIGVsc2UKKyAgICAgICAgZ2V0X2xv
Y2FsIDIKKyAgICAgIGVuZAorICAgICAgYmxvY2sgIDs7IGxhYmVsID0gQDIKKyAgICAgICAgY2Fs
bCAwCisgICAgICAgIGJyX2lmIDAgKDtAMjspCisgICAgICAgIGkzMi5jb25zdCAwCisgICAgICAg
IHNldF9sb2NhbCA0CisgICAgICAgIGxvb3AgIDs7IGxhYmVsID0gQDMKKyAgICAgICAgICBnZXRf
bG9jYWwgMAorICAgICAgICAgIGdldF9sb2NhbCAwCisgICAgICAgICAgaTMyLmxvYWQKKyAgICAg
ICAgICBpMzIuY29uc3QgMworICAgICAgICAgIGkzMi5tdWwKKyAgICAgICAgICBpMzIuc3RvcmUK
KyAgICAgICAgICBnZXRfbG9jYWwgNAorICAgICAgICAgIGkzMi5jb25zdCAxCisgICAgICAgICAg
aTMyLmFkZAorICAgICAgICAgIHNldF9sb2NhbCA0CisgICAgICAgICAgY2FsbCAwCisgICAgICAg
ICAgaTMyLmVxegorICAgICAgICAgIGJyX2lmIDAgKDtAMzspCisgICAgICAgIGVuZAorICAgICAg
ZW5kCisgICAgICBpMzIuYWRkCisgICAgICBzZXRfbG9jYWwgMgorICAgICAgZ2V0X2xvY2FsIDAK
KyAgICAgIGkzMi5sb2FkCisgICAgICBzZXRfbG9jYWwgMQorICAgICAgZ2V0X2xvY2FsIDMKKyAg
ICAgIGkzMi5jb25zdCAxCisgICAgICBpMzIuYWRkCisgICAgICB0ZWVfbG9jYWwgMworICAgICAg
aTMyLmNvbnN0IDIwCisgICAgICBpMzIubmUKKyAgICAgIGJyX2lmIDAgKDtAMTspCisKKyAgICAg
IDs7IGRyb3Agb3VyIGV4dHJhIHZhbHVlcyBzbyB3ZSBjYW4gY29tcGlsZQorICAgICAgZHJvcAor
ICAgICAgZHJvcAorICAgICAgZHJvcAorICAgICAgZHJvcAorICAgICAgZHJvcAorICAgIGVuZAor
ICAgIGdldF9sb2NhbCAxCisgICAgZ2V0X2xvY2FsIDIKKyAgICBpMzIuYWRkCisgICAgaTMyLmFk
ZAorICAgIGdldF9sb2NhbCA0CisgICAgaTMyLmFkZCkpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5uZXItbG9vcC53YXNtIGIvSlNUZXN0cy93YXNtL3dh
c3QtdGVzdHMvb3NyLWVudHJ5LWlubmVyLWxvb3Aud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmZjZTc2MzA3
NDZkNjc5NjY2NDQzOGQ2MDAzZGRmMGIyYTRiZWI1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx
OTIKemNtWFlwdT9vVTQ2aC1mUTJgSDlnS3xkZ0lhJn5aVDVHZkFnQyR2USlIWUJhSU1SNGtgbn1X
LVFkcEkxX0xtJlhPCno7KSo3a0QkdjlTN1BrR1klaEVUa3RAfD9BKERoI2lYMXV4QS1yTjIlK14p
cmAzLTg5OzJTX2tzdV9RVSNWVGBkQwp6SnhOWHEzVlZobyE8cjRXNVA0andOSE9PYlFwYGB9ZjZX
TWdXR0hGS1hfP2BpQjF4UillP3AxS2NmeEZvJG1mRHsKSE8xazYrMFU7clYKCmxpdGVyYWwgMApI
Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29zci1lbnRy
eS1pbm5lci1sb29wLndhc3QgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3ItZW50cnktaW5u
ZXItbG9vcC53YXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MTg4ZDA2YzFlODFkZjQ5MDhhMTEzMmI4OWM4NTkw
ZTVmN2E0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0cy9vc3It
ZW50cnktaW5uZXItbG9vcC53YXN0CkBAIC0wLDAgKzEsNjAgQEAKKyhtb2R1bGUKKyAgKHR5cGUg
KDswOykgKGZ1bmMgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpKSkKKyAgKHR5cGUgKDsxOykgKGZ1
bmMgKHJlc3VsdCBpMzIpKSkKKyAgKGltcG9ydCAiZW52IiAiX19saW5lYXJfbWVtb3J5IiAobWVt
b3J5ICg7MDspIDApKQorICAoaW1wb3J0ICJlbnYiICJjYWxsZXJJc09NR0NvbXBpbGVkIiAoZnVu
YyAoOzA7KSAodHlwZSAxKSkpCisgIChmdW5jIChleHBvcnQgInRlc3QiKSAodHlwZSAwKSAocGFy
YW0gaTMyKSAocmVzdWx0IGkzMikKKyAgICAobG9jYWwgaTMyIGkzMiBpMzIgaTMyKQorICAgIGdl
dF9sb2NhbCAwCisgICAgZ2V0X2xvY2FsIDAKKyAgICBpMzIubG9hZAorICAgIHNldF9sb2NhbCAx
CisgICAgaTMyLmNvbnN0IDIKKyAgICBzZXRfbG9jYWwgMgorICAgIGkzMi5jb25zdCAwCisgICAg
c2V0X2xvY2FsIDMKKyAgICBsb29wICA7OyBsYWJlbCA9IEAxCisgICAgICBpMzIuY29uc3QgMAor
ICAgICAgc2V0X2xvY2FsIDQKKyAgICAgIGdldF9sb2NhbCAxCisgICAgICBnZXRfbG9jYWwgMgor
ICAgICAgYmxvY2sgIDs7IGxhYmVsID0gQDIKKyAgICAgICAgY2FsbCAwCisgICAgICAgIGJyX2lm
IDAgKDtAMjspCisgICAgICAgIGkzMi5jb25zdCAwCisgICAgICAgIHNldF9sb2NhbCA0CisgICAg
ICAgIGxvb3AgIDs7IGxhYmVsID0gQDMKKyAgICAgICAgICBnZXRfbG9jYWwgMAorICAgICAgICAg
IGdldF9sb2NhbCAwCisgICAgICAgICAgaTMyLmxvYWQKKyAgICAgICAgICBpMzIuY29uc3QgMwor
ICAgICAgICAgIGkzMi5tdWwKKyAgICAgICAgICBpMzIuc3RvcmUKKyAgICAgICAgICBnZXRfbG9j
YWwgNAorICAgICAgICAgIGkzMi5jb25zdCAxCisgICAgICAgICAgaTMyLmFkZAorICAgICAgICAg
IHNldF9sb2NhbCA0CisgICAgICAgICAgY2FsbCAwCisgICAgICAgICAgaTMyLmVxegorICAgICAg
ICAgIGJyX2lmIDAgKDtAMzspCisgICAgICAgIGVuZAorICAgICAgZW5kCisgICAgICBpMzIuYWRk
CisgICAgICBzZXRfbG9jYWwgMgorICAgICAgZ2V0X2xvY2FsIDAKKyAgICAgIGkzMi5sb2FkCisg
ICAgICBzZXRfbG9jYWwgMQorICAgICAgZ2V0X2xvY2FsIDMKKyAgICAgIGkzMi5jb25zdCAxCisg
ICAgICBpMzIuYWRkCisgICAgICB0ZWVfbG9jYWwgMworICAgICAgaTMyLmNvbnN0IDIwCisgICAg
ICBpMzIubmUKKyAgICAgIGJyX2lmIDAgKDtAMTspCisgICAgZW5kCisgICAgZ2V0X2xvY2FsIDEK
KyAgICBnZXRfbG9jYWwgMgorICAgIGkzMi5hZGQKKyAgICBpMzIuYWRkCisgICAgZ2V0X2xvY2Fs
IDQKKyAgICBpMzIuYWRkKSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXN0LXRlc3RzL29z
ci1lbnRyeS1tdWx0aXBsZS1lbmNsb3NlZC1jb250ZXh0cy53YXNtIGIvSlNUZXN0cy93YXNtL3dh
c3QtdGVzdHMvb3NyLWVudHJ5LW11bHRpcGxlLWVuY2xvc2VkLWNvbnRleHRzLndhc20KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjI2MTdkZTAwMmY2ZWU4ZjU0ZTZjZDE1M2IzYzZjODM5ZDc2M2EyNApHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMTcwCnpjbVlqfXU/b1U0NmgtZlEyYEhBTDsxOWZQJkpOQkVCSHwjNUto
UEc8KDIlcyE3UXJkTXU2MSVkOTFhS2Q1RDVTKwp6eFN+WDwwd3Z6RWFfd3RibVo1MX4tSXZrRHU3
NUt5PkdpITEhUyQhJWF6NV82Xy11bEVmRHt2RWJKQys1I18jTSMKdFNKRndhVk9hSm44MisoUTdE
alUrb01SJFkydC0qR2JffiYkeXdRS0hARjdRKmlUMHY9XzVuaD85KjYoewoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5
LW11bHRpcGxlLWVuY2xvc2VkLWNvbnRleHRzLndhc3QgYi9KU1Rlc3RzL3dhc20vd2FzdC10ZXN0
cy9vc3ItZW50cnktbXVsdGlwbGUtZW5jbG9zZWQtY29udGV4dHMud2FzdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
YzEwZmU2MTg0YjkxOTllOThmNTJkMjgyNTdkODc4YzE3ODM3MTRmCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvb3NyLWVudHJ5LW11bHRpcGxlLWVuY2xvc2VkLWNv
bnRleHRzLndhc3QKQEAgLTAsMCArMSw0NyBAQAorKG1vZHVsZQorICAodHlwZSAoOzA7KSAoZnVu
YyAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikpKQorICAodHlwZSAoOzE7KSAoZnVuYyAocmVzdWx0
IGkzMikpKQorICAoaW1wb3J0ICJlbnYiICJfX2xpbmVhcl9tZW1vcnkiIChtZW1vcnkgKDswOykg
MCkpCisgIChpbXBvcnQgImVudiIgImNhbGxlcklzT01HQ29tcGlsZWQiIChmdW5jICg7MDspICh0
eXBlIDEpKSkKKyAgKGZ1bmMgKGV4cG9ydCAidGVzdCIpICh0eXBlIDApIChwYXJhbSBpMzIpIChy
ZXN1bHQgaTMyKQorICAgIChsb2NhbCBpMzIgaTMyIGkzMiBpMzIpCisgICAgZ2V0X2xvY2FsIDAK
KyAgICBpMzIubG9hZAorICAgIGkzMi5jb25zdCAyCisgICAgaTMyLmFkZAorICAgIGNhbGwgMAor
ICAgIHNldF9sb2NhbCAyCisgICAgZ2V0X2xvY2FsIDAKKyAgICBpMzIubG9hZAorICAgIHNldF9s
b2NhbCAzCisgICAgaTMyLmNvbnN0IDAKKyAgICBzZXRfbG9jYWwgNAorICAgIGJsb2NrICA7OyBs
YWJlbCA9IEAxCisgICAgICBnZXRfbG9jYWwgMgorICAgICAgYnJfaWYgMCAoO0AxOykKKyAgICAg
IGkzMi5jb25zdCAwCisgICAgICBzZXRfbG9jYWwgNAorICAgICAgbG9vcCAgOzsgbGFiZWwgPSBA
MgorICAgICAgICBnZXRfbG9jYWwgMAorICAgICAgICBnZXRfbG9jYWwgMworICAgICAgICBpMzIu
Y29uc3QgMworICAgICAgICBpMzIubXVsCisgICAgICAgIGkzMi5zdG9yZQorICAgICAgICBnZXRf
bG9jYWwgNAorICAgICAgICBpMzIuY29uc3QgMQorICAgICAgICBpMzIuYWRkCisgICAgICAgIHNl
dF9sb2NhbCA0CisgICAgICAgIGNhbGwgMAorICAgICAgICBzZXRfbG9jYWwgMgorICAgICAgICBn
ZXRfbG9jYWwgMAorICAgICAgICBpMzIubG9hZAorICAgICAgICBzZXRfbG9jYWwgMworICAgICAg
ICBnZXRfbG9jYWwgMgorICAgICAgICBpMzIuZXF6CisgICAgICAgIGJyX2lmIDAgKDtAMjspCisg
ICAgICBlbmQKKyAgICBlbmQKKyAgICBnZXRfbG9jYWwgNAorICAgIGkzMi5hZGQKKyAgICBnZXRf
bG9jYWwgMworICAgIGkzMi5hZGQpKQo=
</data>
<flag name="review"
          id="394007"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>