<?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>176874</bug_id>
          
          <creation_ts>2017-09-13 13:05:43 -0700</creation_ts>
          <short_desc>AddressSanitizer: stack-buffer-underflow in JSC::Probe::Page::Page</short_desc>
          <delta_ts>2017-09-14 16:09:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=146297</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>175144</dependson>
          <blocked>116980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">hodovan</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>product-security</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348452</commentid>
    <comment_count>0</comment_count>
      <attachid>320681</attachid>
    <who name="Renata Hodovan">hodovan</who>
    <bug_when>2017-09-13 13:05:43 -0700</bug_when>
    <thetext>Created attachment 320681
Test

Load the attached test with debug ASAN WebKitTestRunner:

Checked version: 35511bd
OS: macOS Sierra (10.12.6)

&lt;audio controls=&quot;false&quot; onstalled=&quot;this.getElementsByTagName(&apos;input&apos;).prototype.getElementsByTagName(&apos;td&apos;)&quot;&gt;&lt;/audio&gt;

Backtrace:

=================================================================
==11989==ERROR: AddressSanitizer: stack-buffer-underflow on address 0x7fff5da6ad00 at pc 0x0001021df9eb bp 0x7fff5da68ce0 sp 0x7fff5da684a0
READ of size 1024 at 0x7fff5da6ad00 thread T0
    #0 0x1021df9ea in __asan_memcpy (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x419ea)
    #1 0x12ccae191 in JSC::Probe::Page::Page(void*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x2e77191)
    #2 0x12ccae1bc in JSC::Probe::Page::Page(void*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x2e771bc)
    #3 0x12ccaf3c8 in JSC::Probe::Stack::ensurePageFor(void*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x2e783c8)
    #4 0x12b4293c7 in JSC::Probe::Stack::pageFor(void*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x15f23c7)
    #5 0x12b439e76 in void JSC::Probe::Stack::set&lt;JSC::JSValue&gt;(void*, JSC::JSValue) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x1602e76)
    #6 0x12b439c94 in void JSC::Probe::Frame::set&lt;JSC::JSValue&gt;(long, JSC::JSValue) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x1602c94)
    #7 0x12b42352b in void JSC::Probe::Frame::setOperand&lt;JSC::JSValue&gt;(int, JSC::JSValue) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x15ec52b)
    #8 0x12b41f895 in JSC::DFG::OSRExit::executeOSRExit(JSC::Probe::Context&amp;) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x15e8895)
    #9 0x12ccac026 in JSC::Probe::executeProbe(JSC::Probe::State*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x2e75026)
    #10 0x12c8558ea in ctiMasmProbeTrampoline (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x2a1e8ea)
    #11 0x62f00000e3ff  (&lt;unknown module&gt;)

Address 0x7fff5da6ad00 is located in stack of thread T0 at offset 0 in frame
    #0 0x12c1fa55f in JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) (WebKit/WebKitBuild/Debug/JavaScriptCore.framework/Versions/A/JavaScriptCore+0x23c355f)

  This frame has 5 object(s):
    [32, 40) &apos;retval&apos; &lt;== Memory access at offset 0 partially underflows this variable
    [64, 112) &apos;scope&apos; &lt;== Memory access at offset 0 partially underflows this variable
    [144, 168) &apos;agg.tmp&apos; &lt;== Memory access at offset 0 partially underflows this variable
    [208, 216) &apos;coerce&apos; &lt;== Memory access at offset 0 partially underflows this variable
    [240, 248) &apos;result&apos; &lt;== Memory access at offset 0 partially underflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-underflow (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x419ea) in __asan_memcpy
Shadow bytes around the buggy address:
  0x1fffebb4d550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=&gt;0x1fffebb4d5a0:[f1]f1 f1 f1 00 f2 f2 f2 00 00 00 00 00 00 f2 f2
  0x1fffebb4d5b0: f2 f2 00 00 00 f2 f2 f2 f2 f2 00 f2 f2 f2 00 f3
  0x1fffebb4d5c0: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d5d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffebb4d5e0: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
  0x1fffebb4d5f0: 00 f2 f2 f2 00 f2 f2 f2 00 00 00 00 00 00 f2 f2
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==11989==ABORTING
#CRASHED - com.apple.WebKit.WebContent.Development (pid 11989)
LEAK: 1 WebProcessPool
LEAK: 1 WebPageProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348453</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-13 13:08:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/34417206&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348454</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 13:17:14 -0700</bug_when>
    <thetext>This is a false positive by ASan.  ASan does not like the Probe::Page code reading beyond the stackPointer.  Page is only constructed in Stack::ensurePageFor(), and Stack::ensurePageFor() already does a RELEASE_ASSERT that the requested address is within the stack bounds.  Since Page::size is 1K, and the stack is allocated in multiples of 1Ks (and is guaranteed to be 1K aligned in practice, this is not an issue at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348580</commentid>
    <comment_count>3</comment_count>
      <attachid>320712</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 17:17:12 -0700</bug_when>
    <thetext>Created attachment 320712
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348583</commentid>
    <comment_count>4</comment_count>
      <attachid>320712</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-09-13 17:22:53 -0700</bug_when>
    <thetext>Comment on attachment 320712
proposed patch.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348586</commentid>
    <comment_count>5</comment_count>
      <attachid>320715</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 17:27:32 -0700</bug_when>
    <thetext>Created attachment 320715
proposed patch.

Saam pointed out that I also need to suppress ASan on Page::flushWrites() as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348819</commentid>
    <comment_count>6</comment_count>
      <attachid>320715</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-14 10:09:32 -0700</bug_when>
    <thetext>Comment on attachment 320715
proposed patch.

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

r-, as this doesn&apos;t fix ASanified builds.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        I&apos;ve also added the SUPPRESS_ASAN attribute to tell ASan to ignore this
&gt; +        constructor function.  Unfortunately, Clang does not seem to honor that attribute
&gt; +        (see &lt;rdar://problem/34422508&gt;).  Regardless, this fix is correct and should be
&gt; +        landed.

The attribute only applies to the function it&apos;s on, and the violation occurs in a function called by it. It is expected behavior that SUPPRESS_ASAN doesn&apos;t help here, and we shouldn&apos;t be adding it.

We&apos;ve seen this before, the solution was to avoid using memcpy on poisoned memory (see for example copyMemory in MachineStackMarker.cpp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348822</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 10:12:56 -0700</bug_when>
    <thetext>The DFG OSR Exit patch has been rolled out in r222009: &lt;http://trac.webkit.org/r222009&gt; due to https://bugs.webkit.org/show_bug.cgi?id=176888.  I&apos;ll fix this when I re-land the DFG OSR patch.

*** This bug has been marked as a duplicate of bug 175144 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348842</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 10:35:16 -0700</bug_when>
    <thetext>Actually, this is a Probe implementation issue, and not a DFG OSR exit issue.  I&apos;ll fix it right away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348843</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 10:39:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/34436415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349013</commentid>
    <comment_count>10</comment_count>
      <attachid>320822</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 14:30:08 -0700</bug_when>
    <thetext>Created attachment 320822
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349019</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 14:32:46 -0700</bug_when>
    <thetext>Attachment 320822 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:40:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: vulnerab  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349022</commentid>
    <comment_count>12</comment_count>
      <attachid>320822</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-14 14:46:55 -0700</bug_when>
    <thetext>Comment on attachment 320822
proposed patch.

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

&gt; Source/JavaScriptCore/assembler/ProbeStack.h:77
&gt; +            size_t numberOfChunks = sizeof(T) / s_chunkSize;

I think you want to round up not down here, especially when s_chunkSize doesn&apos;t evenly divide sizeof(T).
Also, you could just static_assert(sizeof(T) % s_chunkSize == 0) if you want

&gt; Source/JavaScriptCore/assembler/ProbeStack.h:122
&gt; +    static constexpr size_t s_pageSize = is64Bit() ? 512 : 256; // 64 * sizeof(uintptr_t)

Why not just write 64 * sizeof(uintptr_t) here instead of the comment?

&gt; Source/JavaScriptCore/assembler/ProbeStack.h:132
&gt; +    static constexpr size_t s_chunkSizeShift = is64Bit() ? 3 : 2;

maybe add:
static_assert(1 &lt;&lt; chunkSizeShift == sizeof(uintptr_t), &quot;&quot;)?

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:603
&gt; +            stack.set&lt;double&gt;(p++, 1.234567);

why is this needed?

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:634
&gt; +            CHECK_EQ(stack.get&lt;double&gt;(p++), 1.234567);

ditto

&gt; Source/WTF/wtf/StdLibExtras.h:209
&gt; +    return reinterpret_cast&lt;T*&gt;(roundUpToMultipleOf&lt;divisor&gt;(reinterpret_cast&lt;size_t&gt;(x)));

Please add:
static_assert(sizeof(size_t) == sizeof(uintptr_t)
or
please use uintptr_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349024</commentid>
    <comment_count>13</comment_count>
      <attachid>320822</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 14:51:30 -0700</bug_when>
    <thetext>Comment on attachment 320822
proposed patch.

Will apply Saam&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349039</commentid>
    <comment_count>14</comment_count>
      <attachid>320822</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 15:20:26 -0700</bug_when>
    <thetext>Comment on attachment 320822
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/assembler/ProbeStack.h:77
&gt;&gt; +            size_t numberOfChunks = sizeof(T) / s_chunkSize;
&gt; 
&gt; I think you want to round up not down here, especially when s_chunkSize doesn&apos;t evenly divide sizeof(T).
&gt; Also, you could just static_assert(sizeof(T) % s_chunkSize == 0) if you want

Fixed.  I changed it to: roundUpToMultipleOf&lt;sizeof(T)&gt;(s_chunkSize) / s_chunkSize;

&gt;&gt; Source/JavaScriptCore/assembler/ProbeStack.h:122
&gt;&gt; +    static constexpr size_t s_pageSize = is64Bit() ? 512 : 256; // 64 * sizeof(uintptr_t)
&gt; 
&gt; Why not just write 64 * sizeof(uintptr_t) here instead of the comment?

Fixed.

&gt;&gt; Source/JavaScriptCore/assembler/ProbeStack.h:132
&gt;&gt; +    static constexpr size_t s_chunkSizeShift = is64Bit() ? 3 : 2;
&gt; 
&gt; maybe add:
&gt; static_assert(1 &lt;&lt; chunkSizeShift == sizeof(uintptr_t), &quot;&quot;)?

I already do &quot;static_assert(s_chunkSize == (1 &lt;&lt; s_chunkSizeShift), &quot;bad chunkSizeShift&quot;);&quot; below that covers this.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:603
&gt;&gt; +            stack.set&lt;double&gt;(p++, 1.234567);
&gt; 
&gt; why is this needed?

32-bit x86 rounding.  The verification on read back below fails because it reads 1.2345678 instead.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:634
&gt;&gt; +            CHECK_EQ(stack.get&lt;double&gt;(p++), 1.234567);
&gt; 
&gt; ditto

Answered above.

&gt;&gt; Source/WTF/wtf/StdLibExtras.h:209
&gt;&gt; +    return reinterpret_cast&lt;T*&gt;(roundUpToMultipleOf&lt;divisor&gt;(reinterpret_cast&lt;size_t&gt;(x)));
&gt; 
&gt; Please add:
&gt; static_assert(sizeof(size_t) == sizeof(uintptr_t)
&gt; or
&gt; please use uintptr_t

I think the 2 (size_t and uintptr_t) should be the same.  I&apos;m using size_t because the roundUpToMultipleOf() function it forwards to takes size_t.  I&apos;ll add the static_assert anyway just to be paranoid.

Actually, I&apos;ll assert that sizeof(T*) == sizeof(size_t), which is what we really need for this to be correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349040</commentid>
    <comment_count>15</comment_count>
      <attachid>320832</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 15:25:38 -0700</bug_when>
    <thetext>Created attachment 320832
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349041</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 15:26:50 -0700</bug_when>
    <thetext>Attachment 320832 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:40:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: vulnerab  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349069</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-14 16:09:31 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r222058: &lt;http://trac.webkit.org/r222058&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>320681</attachid>
            <date>2017-09-13 13:05:43 -0700</date>
            <delta_ts>2017-09-13 13:05:43 -0700</delta_ts>
            <desc>Test</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>117</size>
            <attacher name="Renata Hodovan">hodovan</attacher>
            
              <data encoding="base64">PGF1ZGlvIGNvbnRyb2xzPSJmYWxzZSIgb25zdGFsbGVkPSJ0aGlzLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdpbnB1dCcpLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKSI+PC9hdWRp
bz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320712</attachid>
            <date>2017-09-13 17:17:12 -0700</date>
            <delta_ts>2017-09-13 17:27:32 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176874.patch</filename>
            <type>text/plain</type>
            <size>2095</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE3LTA5LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRyZXNzU2FuaXRpemVyOiBzdGFjay1idWZmZXItdW5kZXJmbG93IGluIEpTQzo6UHJvYmU6OlBh
Z2U6OlBhZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzY4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NDE3MjA2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpc3N1ZSBpcyBhbiBBU2Fu
IGZhbHNlIHBvc2l0aXZlLiAgSSd2ZSBhZGRlZCBzb21lIFJFTEVBU0VfQVNTRVJUcyBpbiB0aGUK
KyAgICAgICAgUGFnZTo6UGFnZSgpIGNvbnN0cnVjdG9yIHRvIGJlIGV4dHJhIHBhcmFub2lkLCBh
bmQgcHJvdmUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20KKyAgICAgICAgYSByZWFsIHN0YWNrIHJl
Z2lvbi4KKworICAgICAgICBJJ3ZlIGFsc28gYWRkZWQgdGhlIFNVUFBSRVNTX0FTQU4gYXR0cmli
dXRlIHRvIHRlbGwgQVNhbiB0byBpZ25vcmUgdGhpcworICAgICAgICBjb25zdHJ1Y3RvciBmdW5j
dGlvbi4gIFVuZm9ydHVuYXRlbHksIENsYW5nIGRvZXMgbm90IHNlZW0gdG8gaG9ub3IgdGhhdCBh
dHRyaWJ1dGUKKyAgICAgICAgKHNlZSA8cmRhcjovL3Byb2JsZW0vMzQ0MjI1MDg+KS4gIFJlZ2Fy
ZGxlc3MsIHRoaXMgZml4IGlzIGNvcnJlY3QgYW5kIHNob3VsZCBiZQorICAgICAgICBsYW5kZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3QgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyB3aWxsIGlzc3Vl
IGlzIGFscmVhZHkgY292ZXJlZCBieSB0ZXN0bWFzbQorICAgICAgICB3aGVuIEFTYW4gaXMgZW5h
YmxlZC4KKworICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvYmU6OlBhZ2U6OlBhZ2UpOgorCiAyMDE3LTA5LTEzICBEZXZpbiBSb3Vzc28gIDx3ZWJr
aXRAZGV2aW5yb3Vzc28uY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV2ZW50IExpc3Rl
bmVycyBzZWN0aW9uIGRvZXMgbm90IHVwZGF0ZSB3aGVuIGxpc3RlbmVycyBhcmUgYWRkZWQvcmVt
b3ZlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3Rh
Y2suY3BwCShyZXZpc2lvbiAyMjE5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTQgQEAKIG5h
bWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIFByb2JlIHsKIAorU1VQUFJFU1NfQVNBTgogUGFnZTo6
UGFnZSh2b2lkKiBiYXNlQWRkcmVzcykKICAgICA6IG1fYmFzZUxvZ2ljYWxBZGRyZXNzKGJhc2VB
ZGRyZXNzKQogICAgICwgbV9waHlzaWNhbEFkZHJlc3NPZmZzZXQocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJm1fYnVmZmVyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJhc2VBZGRy
ZXNzKSkKIHsKKyAgICBhdXRvIHN0YWNrQm91bmRzID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChzdGFja0JvdW5kcy5jb250YWlucyhiYXNlQWRkcmVzcykp
OworICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrQm91bmRzLmNvbnRhaW5zKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGJhc2VBZGRyZXNzKSArIHNfcGFnZVNpemUgLSAxKSk7CiAgICAgbWVtY3B5
KCZtX2J1ZmZlciwgYmFzZUFkZHJlc3MsIHNfcGFnZVNpemUpOwogfQogCg==
</data>
<flag name="review"
          id="340805"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320715</attachid>
            <date>2017-09-13 17:27:32 -0700</date>
            <delta_ts>2017-09-14 14:30:08 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176874.patch</filename>
            <type>text/plain</type>
            <size>2174</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE3LTA5LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRyZXNzU2FuaXRpemVyOiBzdGFjay1idWZmZXItdW5kZXJmbG93IGluIEpTQzo6UHJvYmU6OlBh
Z2U6OlBhZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzY4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NDE3MjA2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpc3N1ZSBpcyBhbiBBU2Fu
IGZhbHNlIHBvc2l0aXZlLiAgSSd2ZSBhZGRlZCBzb21lIFJFTEVBU0VfQVNTRVJUcyBpbiB0aGUK
KyAgICAgICAgUGFnZTo6UGFnZSgpIGNvbnN0cnVjdG9yIHRvIGJlIGV4dHJhIHBhcmFub2lkLCBh
bmQgcHJvdmUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20KKyAgICAgICAgYSByZWFsIHN0YWNrIHJl
Z2lvbi4KKworICAgICAgICBJJ3ZlIGFsc28gYWRkZWQgdGhlIFNVUFBSRVNTX0FTQU4gYXR0cmli
dXRlIHRvIHRlbGwgQVNhbiB0byBpZ25vcmUgdGhpcworICAgICAgICBjb25zdHJ1Y3RvciBmdW5j
dGlvbi4gIFVuZm9ydHVuYXRlbHksIENsYW5nIGRvZXMgbm90IHNlZW0gdG8gaG9ub3IgdGhhdCBh
dHRyaWJ1dGUKKyAgICAgICAgKHNlZSA8cmRhcjovL3Byb2JsZW0vMzQ0MjI1MDg+KS4gIFJlZ2Fy
ZGxlc3MsIHRoaXMgZml4IGlzIGNvcnJlY3QgYW5kIHNob3VsZCBiZQorICAgICAgICBsYW5kZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3QgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpc3N1ZSBpcyBh
bHJlYWR5IGNvdmVyZWQgYnkgdGVzdG1hc20gd2hlbiBBU2FuCisgICAgICAgIGlzIGVuYWJsZWQu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHA6CisgICAgICAgIChKU0M6OlBy
b2JlOjpQYWdlOjpQYWdlKToKKwogMjAxNy0wOS0xMyAgRGV2aW4gUm91c3NvICA8d2Via2l0QGRl
dmlucm91c3NvLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFdmVudCBMaXN0ZW5lcnMg
c2VjdGlvbiBkb2VzIG5vdCB1cGRhdGUgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkL3JlbW92ZWQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNw
cAkocmV2aXNpb24gMjIxOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Q
cm9iZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDE4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIG5hbWVzcGFjZSBQcm9iZSB7CiAKK1NVUFBSRVNTX0FTQU4KIFBhZ2U6OlBhZ2Uo
dm9pZCogYmFzZUFkZHJlc3MpCiAgICAgOiBtX2Jhc2VMb2dpY2FsQWRkcmVzcyhiYXNlQWRkcmVz
cykKICAgICAsIG1fcGh5c2ljYWxBZGRyZXNzT2Zmc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KCZtX2J1ZmZlcikgLSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihiYXNlQWRkcmVzcykp
CiB7CisgICAgYXV0byBzdGFja0JvdW5kcyA9IFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tCb3VuZHMuY29udGFpbnMoYmFzZUFkZHJlc3MpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChzdGFja0JvdW5kcy5jb250YWlucyhyZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihiYXNlQWRkcmVzcykgKyBzX3BhZ2VTaXplIC0gMSkpOwogICAgIG1lbWNweSgmbV9i
dWZmZXIsIGJhc2VBZGRyZXNzLCBzX3BhZ2VTaXplKTsKIH0KIAorU1VQUFJFU1NfQVNBTgogdm9p
ZCBQYWdlOjpmbHVzaFdyaXRlcygpCiB7CiAgICAgdWludHB0cl90IGRpcnR5Qml0cyA9IG1fZGly
dHlCaXRzOwo=
</data>
<flag name="review"
          id="340808"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320822</attachid>
            <date>2017-09-14 14:30:08 -0700</date>
            <delta_ts>2017-09-14 15:25:38 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176874.patch</filename>
            <type>text/plain</type>
            <size>19882</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTA5LTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRyZXNzU2FuaXRpemVyOiBzdGFjay1idWZmZXItdW5kZXJmbG93IGluIEpTQzo6UHJvYmU6OlBh
Z2U6OlBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3Njg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQ0MzY0MTU+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gTWFrZSBQcm9iZTo6U3RhY2sg
cGxheSBuaWNlIHdpdGggQVNhbiBieToKKworICAgICAgICAgICBhLiB1c2luZyBhIGxvY2FsIG1l
bWNweSBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHByZXNzZXMgQVNhbiBvbiBBU2FuIGJ1aWxkcy4K
KyAgICAgICAgICAgICAgV2UgZG9uJ3Qgd2FudCB0byB1c2Ugc3RkOm1lbWNweSgpIHdoaWNoIHZh
bGlkYXRlcyBzdGFjayBtZW1vcnkgYmVjYXVzZQorICAgICAgICAgICAgICB3ZSBhcmUgaW50ZW50
aW9uYWxseSBjb3B5aW5nIHN0YWNrIG1lbW9yeSBiZXlvbmQgdGhlIGN1cnJlbnQgZnJhbWUuCisK
KyAgICAgICAgICAgYi4gY2hhbmdpbmcgU3RhY2s6OnNfY2h1bmtTaXplIHRvIGVxdWFsIHNpemVv
Zih1aW50cHRyX3QpIG9uIEFTYW4gYnVpbGRzLgorICAgICAgICAgICAgICBUaGlzIGVuc3VyZXMg
dGhhdCBQYWdlOjpmbHVzaFdyaXRlcygpIG9ubHkgd3JpdGVzIHN0YWNrIG1lbW9yeSB0aGF0IHdh
cworICAgICAgICAgICAgICBtb2RpZmllZCBieSBhIHByb2JlLiAgVGhlIHByb2JlcyBzaG91bGQg
b25seSBtb2RpZnkgc3RhY2sgbWVtb3J5IHRoYXQKKyAgICAgICAgICAgICAgYmVsb25ncyB0byBK
U0Mgc3RhY2sgZGF0YSBzdHJ1Y3R1cmVzLiAgV2UgZG9uJ3Qgd2FudCB0byBpbmFkdmVydGVudGx5
CisgICAgICAgICAgICAgIG1vZGlmeSBhZGphY2VudCB3b3JkcyB0aGF0IG1heSBiZWxvbmcgdG8g
QVNhbiAod2hpY2ggbWF5IGhhcHBlbiBpZgorICAgICAgICAgICAgICBzX2NodW5rU2l6ZSBpcyBs
YXJnZXIgdGhhbiBzaXplb2YodWludHB0cl90KSkuCisKKyAgICAgICAgICAgYy4gZml4aW5nIGEg
YnVnIGluIFBhZ2UgZGlydHlCaXRzIG1hbmFnZW1lbnQgZm9yIHdoZW4gdGhlIHNpemUgb2YgdGhl
IHZhbHVlIHRvCisgICAgICAgICAgICAgIHdyaXRlIGlzIGdyZWF0ZXIgdGhhbiBzX2NodW5rU2l6
ZS4gIFRoZSBmaXggaW4gZ2VuZXJpYywgYnV0IGluIHByYWN0aWNlLAorICAgICAgICAgICAgICB0
aGlzIGN1cnJlbnRseSBvbmx5IG1hbmlmZXN0cyBvbiAzMi1iaXQgQVNhbiBidWlsZHMgYmVjYXVz
ZQorICAgICAgICAgICAgICBzaXplb2YodWludHB0cl90KSBhbmQgc19jaHVua1NpemUgYXJlIDMy
LWJpdCwgYW5kIHdlIG1heSB3cml0ZSA2NC1iaXQKKyAgICAgICAgICAgICAgdmFsdWVzLgorCisg
ICAgICAgICAgIGQuIG1ha2luZyBQYWdlOjptX2RpcnR5Qml0cyA2NCBiaXRzIGFsd2F5cy4gIFRo
aXMgbWF4aW1pemVzIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgc19jaHVua3NQZXJQYWdl
IHdlIGNhbiBoYXZlIGV2ZW4gb24gQVNhbiBidWlsZHMuCisKKyAgICAgICAgMi4gRml4ZWQgdGhl
IGJvdHRvbSBtb3N0IFByb2JlOjpDb250ZXh0IGFuZCBQcm9iZTo6U3RhY2sgZ2V0L3NldCBtZXRo
b2RzIHRvIHVzZQorICAgICAgICAgICBzdGQ6Om1lbWNweSB0byBhdm9pZCBzdHJpY3QgYWxpYXNp
bmcgaXNzdWVzLgorCisgICAgICAgIDMuIE9wdGltaXplZCB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
UGFnZTo6cGh5c2ljYWxBZGRyZXNzRm9yKCkuCisKKyAgICAgICAgNC4gT3B0aW1pemVkIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiBTdGFjazo6c2V0KCkgaW4gdGhlIHJlY29yZGluZyBvZiB0aGUgbG93
CisgICAgICAgICAgIHdhdGVybWFyay4gIFdlIGp1c3QgcmVjb3JkIHRoZSBsb3dlc3QgcmF3IHBv
aW50ZXIgbm93LCBhbmQgb25seSBjb21wdXRlIHRoZQorICAgICAgICAgICBhbGlnbm1lbnQgdG8g
aXRzIGNodWNrIGJvdW5kYXJ5IGxhdGVyIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVxdWVz
dGVkLgorCisgICAgICAgIDUuIENoYW5nZWQgYSB2YWx1ZSBpbiB0ZXN0bWFzbSB0byBtYWtlIHRo
ZSB0ZXN0IGxlc3MgdnVsbmVyYWJsZSB0byByb3VuZGluZyBpc3N1ZXMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3QgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBhbHJlYWR5IGNvdmVyZWQgYnkgdGVzdG1h
c20gd2l0aCBBU2FuIGVuYWJsZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVDb250ZXh0
Lmg6CisgICAgICAgIChKU0M6OlByb2JlOjpDUFVTdGF0ZTo6Z3ByIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHJvYmU6OkNQVVN0YXRlOjpzcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9iZTo6
Q29udGV4dDo6Z3ByKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6OnNwcik6CisgICAg
ICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpmcHIpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29u
dGV4dDo6Z3ByTmFtZSk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpzcHJOYW1lKToK
KyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6OmZwck5hbWUpOgorICAgICAgICAoSlNDOjpQ
cm9iZTo6Q29udGV4dDo6Z3ByIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6
OnNwciBjb25zdCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpmcHIgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6cGMpOgorICAgICAgICAoSlNDOjpQcm9iZTo6
Q29udGV4dDo6ZnApOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6c3ApOgorICAgICAg
ICAoSlNDOjpQcm9iZTo6IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvUHJv
YmVTdGFjay5jcHA6CisgICAgICAgIChKU0M6OlByb2JlOjpjb3B5U3RhY2tQYWdlKToKKyAgICAg
ICAgKEpTQzo6UHJvYmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpQcm9iZTo6UGFnZTo6
Zmx1c2hXcml0ZXMpOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZVN0YWNrLmg6CisgICAgICAg
IChKU0M6OlByb2JlOjpQYWdlOjpnZXQpOgorICAgICAgICAoSlNDOjpQcm9iZTo6UGFnZTo6c2V0
KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OmRpcnR5Qml0Rm9yKToKKyAgICAgICAgKEpT
Qzo6UHJvYmU6OlBhZ2U6OnBoeXNpY2FsQWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OlByb2Jl
OjpTdGFjazo6bG93V2F0ZXJtYXJrKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlN0YWNrOjpnZXQp
OgorICAgICAgICAoSlNDOjpQcm9iZTo6U3RhY2s6OnNldCk6CisgICAgICAgICogYXNzZW1ibGVy
L3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFByb2JlTW9kaWZpZXNTdGFja1ZhbHVl
cyk6CisKIDIwMTctMDktMTQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgW0pTQ10gRGlzYWJsZSBBcml0eSBGaXh1cCBJbmxpbmluZyB1bnRpbCBjcmFz
aCBpbiBmYWNlYm9vay5jb20gaXMgZml4ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvUHJvYmVDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkocmV2aXNpb24gMjIyMDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsMTQgKzQ1LDggQEAgc3RydWN0IENQVVN0YXRlIHsKICAgICBpbmxpbmUgdWludHB0cl90
JiBzcHIoU1BSZWdpc3RlcklEKTsKICAgICBpbmxpbmUgZG91YmxlJiBmcHIoRlBSZWdpc3RlcklE
KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlPjo6dHlwZSogPSBudWxscHRyPgotICAgIFQgZ3ByKFJl
Z2lzdGVySUQpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+Ci0g
ICAgVCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKiA9
IG51bGxwdHI+Ci0gICAgVCBzcHIoU1BSZWdpc3RlcklEKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3BvaW50ZXI8VD46OnZh
bHVlPjo6dHlwZSogPSBudWxscHRyPgotICAgIFQgc3ByKFNQUmVnaXN0ZXJJRCkgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCBzcHIoU1BSZWdpc3RlcklEKSBjb25zdDsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVySUQpIGNvbnN0OwogCiAgICAgdm9pZComIHBj
KCk7CkBAIC04NSwzMiArNzksMjQgQEAgaW5saW5lIGRvdWJsZSYgQ1BVU3RhdGU6OmZwcihGUFJl
Z2lzdGVySQogICAgIHJldHVybiBmcHJzW2lkXTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBl
Kj4KLVQgQ1BVU3RhdGU6OmdwcihSZWdpc3RlcklEIGlkKSBjb25zdAotewotICAgIENQVVN0YXRl
KiBjcHUgPSBjb25zdF9jYXN0PENQVVN0YXRlKj4odGhpcyk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KGNwdS0+Z3ByKGlkKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKj4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBUIENQVVN0YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QKIHsK
ICAgICBDUFVTdGF0ZSogY3B1ID0gY29uc3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMpOwotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7CisgICAgYXV0byYgZnJvbSA9
IGNwdS0+Z3ByKGlkKTsKKyAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSB0
byB7IH07CisgICAgc3RkOjptZW1jcHkoJnRvLCAmZnJvbSwgc2l6ZW9mKHRvKSk7IC8vIFVzZSBz
dGQ6Om1lbWNweSB0byBhdm9pZCBzdHJpY3QgYWxpYXNpbmcgaXNzdWVzLgorICAgIHJldHVybiB0
bzsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKj4KLVQgQ1BVU3RhdGU6OnNwcihTUFJlZ2lz
dGVySUQgaWQpIGNvbnN0Ci17Ci0gICAgQ1BVU3RhdGUqIGNwdSA9IGNvbnN0X2Nhc3Q8Q1BVU3Rh
dGUqPih0aGlzKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oY3B1LT5zcHIoaWQpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19w
b2ludGVyPFQ+Ojp2YWx1ZT46OnR5cGUqPgordGVtcGxhdGU8dHlwZW5hbWUgVD4KIFQgQ1BVU3Rh
dGU6OnNwcihTUFJlZ2lzdGVySUQgaWQpIGNvbnN0CiB7CiAgICAgQ1BVU3RhdGUqIGNwdSA9IGNv
bnN0X2Nhc3Q8Q1BVU3RhdGUqPih0aGlzKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
PihjcHUtPnNwcihpZCkpOworICAgIGF1dG8mIGZyb20gPSBjcHUtPnNwcihpZCk7CisgICAgdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgdG8geyB9OworICAgIHN0ZDo6bWVtY3B5
KCZ0bywgJmZyb20sIHNpemVvZih0bykpOyAvLyBVc2Ugc3RkOjptZW1jcHkgdG8gYXZvaWQgc3Ry
aWN0IGFsaWFzaW5nIGlzc3Vlcy4KKyAgICByZXR1cm4gdG87CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CkBAIC0yMTAsMjAgKzE5NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICwgY3B1KHN0YXRl
LT5jcHUpCiAgICAgeyB9CiAKLSAgICB1aW50cHRyX3QmIGdwcihSZWdpc3RlcklEIGlkKSB7IHJl
dHVybiBtX3N0YXRlLT5jcHUuZ3ByKGlkKTsgfQotICAgIHVpbnRwdHJfdCYgc3ByKFNQUmVnaXN0
ZXJJRCBpZCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwcihpZCk7IH0KLSAgICBkb3VibGUmIGZw
cihGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5mcHIoaWQpOyB9Ci0gICAg
Y29uc3QgY2hhciogZ3ByTmFtZShSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUu
Z3ByTmFtZShpZCk7IH0KLSAgICBjb25zdCBjaGFyKiBzcHJOYW1lKFNQUmVnaXN0ZXJJRCBpZCkg
eyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwck5hbWUoaWQpOyB9Ci0gICAgY29uc3QgY2hhciogZnBy
TmFtZShGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5mcHJOYW1lKGlkKTsg
fQotCi0gICAgdm9pZComIHBjKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnBjKCk7IH0KLSAgICB2
b2lkKiYgZnAoKSB7IHJldHVybiBtX3N0YXRlLT5jcHUuZnAoKTsgfQotICAgIHZvaWQqJiBzcCgp
IHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5zcCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIHBjKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnBjPFQ+KCk7IH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGZwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LmZwPFQ+KCk7IH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHNwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwPFQ+KCk7
IH0KKyAgICB1aW50cHRyX3QmIGdwcihSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuZ3ByKGlk
KTsgfQorICAgIHVpbnRwdHJfdCYgc3ByKFNQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gY3B1LnNw
cihpZCk7IH0KKyAgICBkb3VibGUmIGZwcihGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5m
cHIoaWQpOyB9CisgICAgY29uc3QgY2hhciogZ3ByTmFtZShSZWdpc3RlcklEIGlkKSB7IHJldHVy
biBjcHUuZ3ByTmFtZShpZCk7IH0KKyAgICBjb25zdCBjaGFyKiBzcHJOYW1lKFNQUmVnaXN0ZXJJ
RCBpZCkgeyByZXR1cm4gY3B1LnNwck5hbWUoaWQpOyB9CisgICAgY29uc3QgY2hhciogZnByTmFt
ZShGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5mcHJOYW1lKGlkKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCBncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QgeyByZXR1cm4gY3B1
LmdwcjxUPihpZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHNwcihTUFJlZ2lzdGVy
SUQgaWQpIGNvbnN0IHsgcmV0dXJuIGNwdS5zcHI8VD4oaWQpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBmcHIoRlBSZWdpc3RlcklEIGlkKSBjb25zdCB7IHJldHVybiBjcHUuZnByPFQ+
KGlkKTsgfQorCisgICAgdm9pZComIHBjKCkgeyByZXR1cm4gY3B1LnBjKCk7IH0KKyAgICB2b2lk
KiYgZnAoKSB7IHJldHVybiBjcHUuZnAoKTsgfQorICAgIHZvaWQqJiBzcCgpIHsgcmV0dXJuIGNw
dS5zcCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHBjKCkgeyByZXR1cm4gY3B1
LnBjPFQ+KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwKCkgeyByZXR1cm4gY3B1
LmZwPFQ+KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHNwKCkgeyByZXR1cm4gY3B1
LnNwPFQ+KCk7IH0KIAogICAgIFN0YWNrJiBzdGFjaygpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suY3BwCShyZXZpc2lvbiAyMjIw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMSArMjcsMzkgQEAKICNpbmNsdWRlICJQcm9iZVN0YWNrLmgi
CiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAj
aWYgRU5BQkxFKE1BU01fUFJPQkUpCiAKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIFByb2Jl
IHsKIAorI2lmIEFTQU5fRU5BQkxFRAorU1VQUFJFU1NfQVNBTgorc3RhdGljIHZvaWQgY29weVN0
YWNrUGFnZSh2b2lkKiBkc3QsIHZvaWQqIHNyYywgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJU
KHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnRwdHJfdCk+KGRzdCkgPT0gZHN0KTsKKyAg
ICBBU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodWludHB0cl90KT4oc3JjKSA9PSBz
cmMpOworICAgIAorICAgIHVpbnRwdHJfdCogZHN0UG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oZHN0KTsKKyAgICB1aW50cHRyX3QqIHNyY1BvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KHNyYyk7CisgICAgZm9yICg7IHNpemU7IHNpemUgLT0gc2l6ZW9m
KHVpbnRwdHJfdCkpCisgICAgICAgICpkc3RQb2ludGVyKysgPSAqc3JjUG9pbnRlcisrOworfQor
I2Vsc2UKKyNkZWZpbmUgY29weVN0YWNrUGFnZShkc3QsIHNyYywgc2l6ZSkgc3RkOjptZW1jcHko
ZHN0LCBzcmMsIHNpemUpOworI2VuZGlmCisKIFBhZ2U6OlBhZ2Uodm9pZCogYmFzZUFkZHJlc3Mp
CiAgICAgOiBtX2Jhc2VMb2dpY2FsQWRkcmVzcyhiYXNlQWRkcmVzcykKKyAgICAsIG1fcGh5c2lj
YWxBZGRyZXNzT2Zmc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZtX2J1ZmZlcikgLSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCiB7Ci0gICAgbWVtY3B5KCZt
X2J1ZmZlciwgYmFzZUFkZHJlc3MsIHNfcGFnZVNpemUpOworICAgIGNvcHlTdGFja1BhZ2UoJm1f
YnVmZmVyLCBiYXNlQWRkcmVzcywgc19wYWdlU2l6ZSk7CiB9CiAKIHZvaWQgUGFnZTo6Zmx1c2hX
cml0ZXMoKQogewotICAgIHVpbnRwdHJfdCBkaXJ0eUJpdHMgPSBtX2RpcnR5Qml0czsKKyAgICB1
aW50NjRfdCBkaXJ0eUJpdHMgPSBtX2RpcnR5Qml0czsKICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsK
ICAgICB3aGlsZSAoZGlydHlCaXRzKSB7CiAgICAgICAgIC8vIEZpbmQgc3RhcnQuCkBAIC01Niw3
ICs3NCw3IEBAIHZvaWQgUGFnZTo6Zmx1c2hXcml0ZXMoKQogICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBvZmZzZXQgLSBzdGFydE9mZnNldDsKICAgICAgICAgICAgIHVpbnQ4X3QqIHNyYyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZtX2J1ZmZlcikgKyBzdGFydE9mZnNldDsKICAgICAg
ICAgICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fYmFzZUxv
Z2ljYWxBZGRyZXNzKSArIHN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgbWVtY3B5KGRzdCwgc3Jj
LCBzaXplKTsKKyAgICAgICAgICAgIGNvcHlTdGFja1BhZ2UoZHN0LCBzcmMsIHNpemUpOwogICAg
ICAgICB9CiAgICAgICAgIGRpcnR5Qml0cyA9IGRpcnR5Qml0cyA+PiAxOwogICAgICAgICBvZmZz
ZXQgKz0gc19jaHVua1NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1Byb2JlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1Byb2JlU3RhY2suaAkocmV2aXNpb24gMjIyMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDUFUuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CkBAIC01NiwxNCArNTcsMzUgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgVCBnZXQodm9pZCogbG9naWNhbEFkZHJlc3MpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9naWNhbEFkZHJlc3MpOworICAgICAgICB2
b2lkKiBmcm9tID0gcGh5c2ljYWxBZGRyZXNzRm9yKGxvZ2ljYWxBZGRyZXNzKTsKKyAgICAgICAg
dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgdG8geyB9OworICAgICAgICBzdGQ6
Om1lbWNweSgmdG8sIGZyb20sIHNpemVvZih0bykpOyAvLyBVc2Ugc3RkOjptZW1jcHkgdG8gYXZv
aWQgc3RyaWN0IGFsaWFzaW5nIGlzc3Vlcy4KKyAgICAgICAgcmV0dXJuIHRvOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0KHZvaWQqIGxvZ2ljYWxCYXNlQWRkcmVz
cywgcHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQ8VD4ocmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4obG9naWNhbEJhc2VBZGRyZXNzKSArIG9mZnNldCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIHNldCh2b2lkKiBsb2dpY2Fs
QWRkcmVzcywgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fZGlydHlCaXRzIHw9IGRpcnR5Qml0
Rm9yKGxvZ2ljYWxBZGRyZXNzKTsKLSAgICAgICAgKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9n
aWNhbEFkZHJlc3MpID0gdmFsdWU7CisgICAgICAgIGlmIChzaXplb2YoVCkgPD0gc19jaHVua1Np
emUpCisgICAgICAgICAgICBtX2RpcnR5Qml0cyB8PSBkaXJ0eUJpdEZvcihsb2dpY2FsQWRkcmVz
cyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZV90IG51bWJlck9mQ2h1bmtzID0g
c2l6ZW9mKFQpIC8gc19jaHVua1NpemU7CisgICAgICAgICAgICB1aW50OF90KiBkaXJ0eUFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQWRkcmVzcyk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2h1bmtzOyArK2ksIGRpcnR5QWRk
cmVzcyArPSBzX2NodW5rU2l6ZSkKKyAgICAgICAgICAgICAgICBtX2RpcnR5Qml0cyB8PSBkaXJ0
eUJpdEZvcihkaXJ0eUFkZHJlc3MpOworICAgICAgICB9CisgICAgICAgIHZvaWQqIHRvID0gcGh5
c2ljYWxBZGRyZXNzRm9yKGxvZ2ljYWxBZGRyZXNzKTsKKyAgICAgICAgc3RkOjptZW1jcHkodG8s
ICZ2YWx1ZSwgc2l6ZW9mKFQpKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBh
bGlhc2luZyBpc3N1ZXMuCisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBzZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2lj
YWxCYXNlQWRkcmVzcykgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIGhhc1dy
aXRlc1RvRmx1c2goKSBjb25zdCB7IHJldHVybiAhIW1fZGlydHlCaXRzOyB9CkBAIC03NCwzOSAr
OTYsNDYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB1aW50cHRyX3QgZGlydHlC
aXRGb3Iodm9pZCogbG9naWNhbEFkZHJlc3MpCisgICAgdWludDY0X3QgZGlydHlCaXRGb3Iodm9p
ZCogbG9naWNhbEFkZHJlc3MpCiAgICAgewogICAgICAgICB1aW50cHRyX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvZ2ljYWxBZGRyZXNzKSAmIHNfcGFnZU1hc2s7Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChvZmZzZXQgPj4gc19j
aHVua1NpemVTaGlmdCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkg
PDwgKG9mZnNldCA+PiBzX2NodW5rU2l6ZVNoaWZ0KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9p
bnRlcjxUPjo6dmFsdWU+Ojp0eXBlPgotICAgIFQgcGh5c2ljYWxBZGRyZXNzRm9yKHZvaWQqIGxv
Z2ljYWxBZGRyZXNzKQorICAgIHZvaWQqIHBoeXNpY2FsQWRkcmVzc0Zvcih2b2lkKiBsb2dpY2Fs
QWRkcmVzcykKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obG9naWNhbEFkZHJlc3MpICYgc19wYWdlTWFzazsKLSAgICAgICAgdm9p
ZCogcGh5c2ljYWxBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJm1fYnVmZmVy
KSArIG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4ocGh5c2ljYWxB
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2lj
YWxBZGRyZXNzKSArIG1fcGh5c2ljYWxBZGRyZXNzT2Zmc2V0OwogICAgIH0KIAogICAgIHZvaWQg
Zmx1c2hXcml0ZXMoKTsKIAogICAgIHZvaWQqIG1fYmFzZUxvZ2ljYWxBZGRyZXNzIHsgbnVsbHB0
ciB9OwotICAgIHVpbnRwdHJfdCBtX2RpcnR5Qml0cyB7IDAgfTsKKyAgICBwdHJkaWZmX3QgbV9w
aHlzaWNhbEFkZHJlc3NPZmZzZXQ7CisgICAgdWludDY0X3QgbV9kaXJ0eUJpdHMgeyAwIH07CiAK
KyNpZiBBU0FOX0VOQUJMRUQKKyAgICAvLyBUaGUgQVNhbiBzdGFjayBtYXkgY29udGFpbiBwb2lz
b25lZCB3b3JkcyB0aGF0IG1heSBiZSBtYW5pcHVsYXRlZCBhdCBBU2FuJ3MgZGlzY3JldGlvbi4K
KyAgICAvLyBXZSB3b3VsZCBuZXZlciB0b3VjaCB0aG9zZSB3b3JkcyBhbnl3YXksIGJ1dCBsZXQn
cyBlbnN1cmUgdGhhdCB0aGUgcGFnZSBzaXplIGlzIHNldAorICAgIC8vIHN1Y2ggdGhhdCB0aGUg
Y2h1bmsgc2l6ZSBpcyBndWFyYW50ZWVkIHRvIGJlIGV4YWN0bHkgc2l6ZW9mKHVpbnRwdHJfdCkg
c28gdGhhdCB3ZSB3b24ndAorICAgIC8vIGluYWR2ZXJ0ZW50bHkgb3ZlcndyaXRlIG9uZSBvZiBB
U2FuJ3Mgd29yZHMgb24gdGhlIHN0YWNrIHdoZW4gd2UgY29weSBiYWNrIHRoZSBkaXJ0eQorICAg
IC8vIGNodW5rcy4KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX3BhZ2VTaXplID0gaXM2
NEJpdCgpID8gNTEyIDogMjU2OyAvLyA2NCAqIHNpemVvZih1aW50cHRyX3QpCisjZWxzZSAvLyBu
b3QgQVNBTl9FTkFCTEVECiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19wYWdlU2l6ZSA9
IDEwMjQ7CisjZW5kaWYgLy8gQVNBTl9FTkFCTEVECiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
cHRyX3Qgc19wYWdlTWFzayA9IHNfcGFnZVNpemUgLSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IHNfY2h1bmtzUGVyUGFnZSA9IHNpemVvZih1aW50cHRyX3QpICogODsgLy8gc2l6ZW9m
KG1fZGlydHlCaXRzKSBpbiBiaXRzLgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfY2h1
bmtzUGVyUGFnZSA9IHNpemVvZihtX2RpcnR5Qml0cykgKiA4OyAvLyBudW1iZXIgb2YgYml0cyBp
biBtX2RpcnR5Qml0cy4KICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2NodW5rU2l6ZSA9
IHNfcGFnZVNpemUgLyBzX2NodW5rc1BlclBhZ2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
cHRyX3Qgc19jaHVua01hc2sgPSBzX2NodW5rU2l6ZSAtIDE7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
KyNpZiBBU0FOX0VOQUJMRUQKKyAgICBzdGF0aWNfYXNzZXJ0KHNfY2h1bmtTaXplID09IHNpemVv
Zih1aW50cHRyX3QpLCAiYmFkIGNodW5rU2l6ZVNoaWZ0Iik7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3Qgc19jaHVua1NpemVTaGlmdCA9IGlzNjRCaXQoKSA/IDMgOiAyOworI2Vsc2UgLy8g
bm8gQVNBTl9FTkFCTEVECiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19jaHVua1NpemVT
aGlmdCA9IDQ7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfY2h1bmtTaXpl
U2hpZnQgPSA1OwotI2VuZGlmCisjZW5kaWYgLy8gQVNBTl9FTkFCTEVECiAgICAgc3RhdGljX2Fz
c2VydChzX3BhZ2VTaXplID4gc19jaHVua1NpemUsICJiYWQgcGFnZVNpemUgb3IgY2h1bmtTaXpl
Iik7CiAgICAgc3RhdGljX2Fzc2VydChzX2NodW5rU2l6ZSA9PSAoMSA8PCBzX2NodW5rU2l6ZVNo
aWZ0KSwgImJhZCBjaHVua1NpemVTaGlmdCIpOwogCi0KICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6YWxpZ25lZF9zdG9yYWdlPHNfcGFnZVNpemUsIHN0ZDo6YWxpZ25tZW50X29mPHVpbnRwdHJf
dD46OnZhbHVlPjo6dHlwZSBCdWZmZXI7CiAgICAgQnVmZmVyIG1fYnVmZmVyOwogfTsKQEAgLTEy
MCw0MCArMTQ5LDQwIEBAIHB1YmxpYzoKICAgICB7IH0KICAgICBTdGFjayhTdGFjayYmIG90aGVy
KTsKIAotICAgIHZvaWQqIGxvd1dhdGVybWFyaygpIHsgcmV0dXJuIG1fbG93V2F0ZXJtYXJrOyB9
CisgICAgdm9pZCogbG93V2F0ZXJtYXJrKCkKKyAgICB7CisgICAgICAgIC8vIFdlIHVzZSB0aGUg
Y2h1bmtBZGRyZXNzIGZvciB0aGUgbG93IHdhdGVybWFyayBiZWNhdXNlIHdlJ2xsIGJlIGRvaW5n
IHdyaXRlIGJhY2tzCisgICAgICAgIC8vIHRvIHRoZSBzdGFjayBpbiBpbmNyZW1lbnRzIG9mIGNo
dW5rcy4gSGVuY2UsIHdlJ2xsIHRyZWF0IHRoZSBsb3dlc3QgYWRkcmVzcyBvZgorICAgICAgICAv
LyB0aGUgY2h1bmsgYXMgdGhlIGxvdyB3YXRlcm1hcmsgb2YgYW55IGdpdmVuIHNldCBhZGRyZXNz
LgorICAgICAgICByZXR1cm4gUGFnZTo6Y2h1bmtBZGRyZXNzRm9yKG1fbG93V2F0ZXJtYXJrKTsK
KyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPCFzdGQ6OmlzX3NhbWU8ZG91YmxlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6
dHlwZT46OnZhbHVlLCBUPjo6dHlwZSBnZXQodm9pZCogYWRkcmVzcykKKyAgICBUIGdldCh2b2lk
KiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgUGFnZSogcGFnZSA9IHBhZ2VGb3IoYWRkcmVzcyk7
CiAgICAgICAgIHJldHVybiBwYWdlLT5nZXQ8VD4oYWRkcmVzcyk7CiAgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCBnZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJk
aWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldDxUPihyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihsb2dpY2FsQmFzZUFkZHJlc3MpICsgb2Zmc2V0KTsKKyAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PCFzdGQ6OmlzX3NhbWU8ZG91YmxlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZT46
OnZhbHVlPjo6dHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgc2V0KHZv
aWQqIGFkZHJlc3MsIFQgdmFsdWUpCiAgICAgewogICAgICAgICBQYWdlKiBwYWdlID0gcGFnZUZv
cihhZGRyZXNzKTsKICAgICAgICAgcGFnZS0+c2V0PFQ+KGFkZHJlc3MsIHZhbHVlKTsKIAotICAg
ICAgICAvLyBXZSB1c2UgdGhlIGNodW5rQWRkcmVzcyBmb3IgdGhlIGxvdyB3YXRlcm1hcmsgYmVj
YXVzZSB3ZSdsbCBiZSBkb2luZyB3cml0ZSBiYWNrcwotICAgICAgICAvLyB0byB0aGUgc3RhY2sg
aW4gaW5jcmVtZW50cyBvZiBjaHVua3MuIEhlbmNlLCB3ZSdsbCB0cmVhdCB0aGUgbG93ZXN0IGFk
ZHJlc3Mgb2YKLSAgICAgICAgLy8gdGhlIGNodW5rIGFzIHRoZSBsb3cgd2F0ZXJtYXJrIG9mIGFu
eSBnaXZlbiBzZXQgYWRkcmVzcy4KLSAgICAgICAgdm9pZCogY2h1bmtBZGRyZXNzID0gUGFnZTo6
Y2h1bmtBZGRyZXNzRm9yKGFkZHJlc3MpOwotICAgICAgICBpZiAoY2h1bmtBZGRyZXNzIDwgbV9s
b3dXYXRlcm1hcmspCi0gICAgICAgICAgICBtX2xvd1dhdGVybWFyayA9IGNodW5rQWRkcmVzczsK
KyAgICAgICAgaWYgKGFkZHJlc3MgPCBtX2xvd1dhdGVybWFyaykKKyAgICAgICAgICAgIG1fbG93
V2F0ZXJtYXJrID0gYWRkcmVzczsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxkb3VibGUsIHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWUsIFQ+Ojp0eXBlIGdldCh2b2lkKiBhZGRy
ZXNzKQotICAgIHsKLSAgICAgICAgUGFnZSogcGFnZSA9IHBhZ2VGb3IoYWRkcmVzcyk7Ci0gICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihwYWdlLT5nZXQ8dWludDY0X3Q+KGFkZHJl
c3MpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxkb3VibGUsIHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlPgotICAgIHZvaWQgc2V0KHZvaWQqIGFkZHJl
c3MsIGRvdWJsZSB2YWx1ZSkKKyAgICB2b2lkIHNldCh2b2lkKiBsb2dpY2FsQmFzZUFkZHJlc3Ms
IHB0cmRpZmZfdCBvZmZzZXQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8dWludDY0X3Q+
KGFkZHJlc3MsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKKyAgICAgICAgc2V0PFQ+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykgKyBvZmZzZXQs
IHZhbHVlKTsKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBQYWdlKiBlbnN1cmVQYWdl
Rm9yKHZvaWQqIGFkZHJlc3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDIyMjAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAw
LDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1N0YWNrVmFsdWVzKCkKICAgICAgICAgICAgIC8v
IEZpbGwgdGhlIHN0YWNrIHdpdGggdmFsdWVzLgogICAgICAgICAgICAgdWludHB0cl90KiBwID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPihuZXdTUCk7CiAgICAgICAgICAgICBpbnQgY291
bnQgPSAwOwotICAgICAgICAgICAgc3RhY2suc2V0PGRvdWJsZT4ocCsrLCAxLjIzNDU2Nzg5KTsK
KyAgICAgICAgICAgIHN0YWNrLnNldDxkb3VibGU+KHArKywgMS4yMzQ1NjcpOwogICAgICAgICAg
ICAgaWYgKGlzMzJCaXQoKSkKICAgICAgICAgICAgICAgICBwKys7IC8vIE9uIDMyLWJpdCB0YXJn
ZXRzLCBhIGRvdWJsZSB0YWtlcyB1cCAyIHVpbnRwdHJfdC4KICAgICAgICAgICAgIHdoaWxlIChw
IDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPihvcmlnaW5hbFNQKSkKQEAgLTYzMSw3ICs2
MzEsNyBAQCB2b2lkIHRlc3RQcm9iZU1vZGlmaWVzU3RhY2tWYWx1ZXMoKQogICAgICAgICAgICAg
Ly8gVmFsaWRhdGUgdGhlIHN0YWNrIHZhbHVlcy4KICAgICAgICAgICAgIHVpbnRwdHJfdCogcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4obmV3U1ApOwogICAgICAgICAgICAgaW50IGNv
dW50ID0gMDsKLSAgICAgICAgICAgIENIRUNLX0VRKHN0YWNrLmdldDxkb3VibGU+KHArKyksIDEu
MjM0NTY3ODkpOworICAgICAgICAgICAgQ0hFQ0tfRVEoc3RhY2suZ2V0PGRvdWJsZT4ocCsrKSwg
MS4yMzQ1NjcpOwogICAgICAgICAgICAgaWYgKGlzMzJCaXQoKSkKICAgICAgICAgICAgICAgICBw
Kys7IC8vIE9uIDMyLWJpdCB0YXJnZXRzLCBhIGRvdWJsZSB0YWtlcyB1cCAyIHVpbnRwdHJfdC4K
ICAgICAgICAgICAgIHdoaWxlIChwIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPihvcmln
aW5hbFNQKSkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjIwMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA5LTE0ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRyZXNzU2FuaXRpemVyOiBzdGFjay1i
dWZmZXItdW5kZXJmbG93IGluIEpTQzo6UHJvYmU6OlBhZ2U6OlBhZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njg3NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzQ0MzY0MTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgYSBjb252ZW5pZW5jZSB2ZXJzaW9uIG9mIHJvdW5kVXBUb011bHRp
cGxlT2YoKSBzbyB0aGF0IGl0IGNhbiBiZSBhcHBsaWVkIHRvCisgICAgICAgIHBvaW50ZXJzIHdp
dGhvdXQgdGhlIGNsaWVudCBoYXZpbmcgdG8gY2FzdCBleHBsaWNpdGx5LgorCisgICAgICAgICog
d3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKToK
KwogMjAxNy0wOS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGEgbGFtYmRhLWJhc2VkIG1hcCBmb3IgVmVjdG9ycwpJbmRleDogU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0
cmFzLmgJKHJldmlzaW9uIDIyMjAzMSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMjA0LDYgKzIwNCwxMSBAQCB0ZW1wbGF0ZTxzaXplX3QgZGl2aXNvcj4gaW5s
aW5lIGNvbnN0ZXhwCiAgICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxlT2ZJbXBsKGRpdmlzb3Is
IHgpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5saW5lIFQq
IHJvdW5kVXBUb011bHRpcGxlT2YoVCogeCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUKj4ocm91bmRVcFRvTXVsdGlwbGVPZjxkaXZpc29yPihyZWludGVycHJldF9jYXN0PHNpemVf
dD4oeCkpKTsKK30KKwogZW51bSBCaW5hcnlTZWFyY2hNb2RlIHsKICAgICBLZXlNdXN0QmVQcmVz
ZW50SW5BcnJheSwKICAgICBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXksCg==
</data>
<flag name="review"
          id="340892"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="340893"
          type_id="3"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320832</attachid>
            <date>2017-09-14 15:25:38 -0700</date>
            <delta_ts>2017-09-14 15:25:38 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-176874.patch</filename>
            <type>text/plain</type>
            <size>20280</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTA5LTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRyZXNzU2FuaXRpemVyOiBzdGFjay1idWZmZXItdW5kZXJmbG93IGluIEpTQzo6UHJvYmU6OlBh
Z2U6OlBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3Njg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQ0MzY0MTU+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgMS4gTWFrZSBQcm9iZTo6U3RhY2sgcGxh
eSBuaWNlIHdpdGggQVNhbiBieToKKworICAgICAgICAgICBhLiB1c2luZyBhIGxvY2FsIG1lbWNw
eSBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHByZXNzZXMgQVNhbiBvbiBBU2FuIGJ1aWxkcy4KKyAg
ICAgICAgICAgICAgV2UgZG9uJ3Qgd2FudCB0byB1c2Ugc3RkOm1lbWNweSgpIHdoaWNoIHZhbGlk
YXRlcyBzdGFjayBtZW1vcnkgYmVjYXVzZQorICAgICAgICAgICAgICB3ZSBhcmUgaW50ZW50aW9u
YWxseSBjb3B5aW5nIHN0YWNrIG1lbW9yeSBiZXlvbmQgdGhlIGN1cnJlbnQgZnJhbWUuCisKKyAg
ICAgICAgICAgYi4gY2hhbmdpbmcgU3RhY2s6OnNfY2h1bmtTaXplIHRvIGVxdWFsIHNpemVvZih1
aW50cHRyX3QpIG9uIEFTYW4gYnVpbGRzLgorICAgICAgICAgICAgICBUaGlzIGVuc3VyZXMgdGhh
dCBQYWdlOjpmbHVzaFdyaXRlcygpIG9ubHkgd3JpdGVzIHN0YWNrIG1lbW9yeSB0aGF0IHdhcwor
ICAgICAgICAgICAgICBtb2RpZmllZCBieSBhIHByb2JlLiAgVGhlIHByb2JlcyBzaG91bGQgb25s
eSBtb2RpZnkgc3RhY2sgbWVtb3J5IHRoYXQKKyAgICAgICAgICAgICAgYmVsb25ncyB0byBKU0Mg
c3RhY2sgZGF0YSBzdHJ1Y3R1cmVzLiAgV2UgZG9uJ3Qgd2FudCB0byBpbmFkdmVydGVudGx5Cisg
ICAgICAgICAgICAgIG1vZGlmeSBhZGphY2VudCB3b3JkcyB0aGF0IG1heSBiZWxvbmcgdG8gQVNh
biAod2hpY2ggbWF5IGhhcHBlbiBpZgorICAgICAgICAgICAgICBzX2NodW5rU2l6ZSBpcyBsYXJn
ZXIgdGhhbiBzaXplb2YodWludHB0cl90KSkuCisKKyAgICAgICAgICAgYy4gZml4aW5nIGEgYnVn
IGluIFBhZ2UgZGlydHlCaXRzIG1hbmFnZW1lbnQgZm9yIHdoZW4gdGhlIHNpemUgb2YgdGhlIHZh
bHVlIHRvCisgICAgICAgICAgICAgIHdyaXRlIGlzIGdyZWF0ZXIgdGhhbiBzX2NodW5rU2l6ZS4g
IFRoZSBmaXggaW4gZ2VuZXJpYywgYnV0IGluIHByYWN0aWNlLAorICAgICAgICAgICAgICB0aGlz
IGN1cnJlbnRseSBvbmx5IG1hbmlmZXN0cyBvbiAzMi1iaXQgQVNhbiBidWlsZHMgYmVjYXVzZQor
ICAgICAgICAgICAgICBzaXplb2YodWludHB0cl90KSBhbmQgc19jaHVua1NpemUgYXJlIDMyLWJp
dCwgYW5kIHdlIG1heSB3cml0ZSA2NC1iaXQKKyAgICAgICAgICAgICAgdmFsdWVzLgorCisgICAg
ICAgICAgIGQuIG1ha2luZyBQYWdlOjptX2RpcnR5Qml0cyA2NCBiaXRzIGFsd2F5cy4gIFRoaXMg
bWF4aW1pemVzIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgc19jaHVua3NQZXJQYWdlIHdl
IGNhbiBoYXZlIGV2ZW4gb24gQVNhbiBidWlsZHMuCisKKyAgICAgICAgMi4gRml4ZWQgdGhlIGJv
dHRvbSBtb3N0IFByb2JlOjpDb250ZXh0IGFuZCBQcm9iZTo6U3RhY2sgZ2V0L3NldCBtZXRob2Rz
IHRvIHVzZQorICAgICAgICAgICBzdGQ6Om1lbWNweSB0byBhdm9pZCBzdHJpY3QgYWxpYXNpbmcg
aXNzdWVzLgorCisgICAgICAgIDMuIE9wdGltaXplZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgUGFn
ZTo6cGh5c2ljYWxBZGRyZXNzRm9yKCkuCisKKyAgICAgICAgNC4gT3B0aW1pemVkIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBTdGFjazo6c2V0KCkgaW4gdGhlIHJlY29yZGluZyBvZiB0aGUgbG93Cisg
ICAgICAgICAgIHdhdGVybWFyay4gIFdlIGp1c3QgcmVjb3JkIHRoZSBsb3dlc3QgcmF3IHBvaW50
ZXIgbm93LCBhbmQgb25seSBjb21wdXRlIHRoZQorICAgICAgICAgICBhbGlnbm1lbnQgdG8gaXRz
IGNodWNrIGJvdW5kYXJ5IGxhdGVyIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVxdWVzdGVk
LgorCisgICAgICAgIDUuIENoYW5nZWQgYSB2YWx1ZSBpbiB0ZXN0bWFzbSB0byBtYWtlIHRoZSB0
ZXN0IGxlc3MgdnVsbmVyYWJsZSB0byByb3VuZGluZyBpc3N1ZXMuCisKKyAgICAgICAgTm8gbmV3
IHRlc3QgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBhbHJlYWR5IGNvdmVyZWQgYnkgdGVzdG1hc20g
d2l0aCBBU2FuIGVuYWJsZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVDb250ZXh0Lmg6
CisgICAgICAgIChKU0M6OlByb2JlOjpDUFVTdGF0ZTo6Z3ByIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHJvYmU6OkNQVVN0YXRlOjpzcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29u
dGV4dDo6Z3ByKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6OnNwcik6CisgICAgICAg
IChKU0M6OlByb2JlOjpDb250ZXh0OjpmcHIpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4
dDo6Z3ByTmFtZSk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpzcHJOYW1lKToKKyAg
ICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6OmZwck5hbWUpOgorICAgICAgICAoSlNDOjpQcm9i
ZTo6Q29udGV4dDo6Z3ByIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6OnNw
ciBjb25zdCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpmcHIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6cGMpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29u
dGV4dDo6ZnApOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6c3ApOgorICAgICAgICAo
SlNDOjpQcm9iZTo6IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVT
dGFjay5jcHA6CisgICAgICAgIChKU0M6OlByb2JlOjpjb3B5U3RhY2tQYWdlKToKKyAgICAgICAg
KEpTQzo6UHJvYmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAoSlNDOjpQcm9iZTo6UGFnZTo6Zmx1
c2hXcml0ZXMpOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZVN0YWNrLmg6CisgICAgICAgIChK
U0M6OlByb2JlOjpQYWdlOjpnZXQpOgorICAgICAgICAoSlNDOjpQcm9iZTo6UGFnZTo6c2V0KToK
KyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OmRpcnR5Qml0Rm9yKToKKyAgICAgICAgKEpTQzo6
UHJvYmU6OlBhZ2U6OnBoeXNpY2FsQWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OlByb2JlOjpT
dGFjazo6bG93V2F0ZXJtYXJrKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlN0YWNrOjpnZXQpOgor
ICAgICAgICAoSlNDOjpQcm9iZTo6U3RhY2s6OnNldCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFByb2JlTW9kaWZpZXNTdGFja1ZhbHVlcyk6
CisKIDIwMTctMDktMTQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAK
ICAgICAgICAgW0pTQ10gRGlzYWJsZSBBcml0eSBGaXh1cCBJbmxpbmluZyB1bnRpbCBjcmFzaCBp
biBmYWNlYm9vay5jb20gaXMgZml4ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvUHJvYmVDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkocmV2aXNpb24gMjIyMDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMTQgKzQ1LDggQEAgc3RydWN0IENQVVN0YXRlIHsKICAgICBpbmxpbmUgdWludHB0cl90JiBz
cHIoU1BSZWdpc3RlcklEKTsKICAgICBpbmxpbmUgZG91YmxlJiBmcHIoRlBSZWdpc3RlcklEKTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfaW50ZWdyYWw8VD46OnZhbHVlPjo6dHlwZSogPSBudWxscHRyPgotICAgIFQgZ3ByKFJlZ2lz
dGVySUQpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+Ci0gICAg
VCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51
bGxwdHI+Ci0gICAgVCBzcHIoU1BSZWdpc3RlcklEKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVl
Pjo6dHlwZSogPSBudWxscHRyPgotICAgIFQgc3ByKFNQUmVnaXN0ZXJJRCkgY29uc3Q7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBzcHIoU1BSZWdpc3RlcklEKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVySUQpIGNvbnN0OwogCiAgICAgdm9pZComIHBjKCk7
CkBAIC04NSwzMiArNzksMjQgQEAgaW5saW5lIGRvdWJsZSYgQ1BVU3RhdGU6OmZwcihGUFJlZ2lz
dGVySQogICAgIHJldHVybiBmcHJzW2lkXTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKj4K
LVQgQ1BVU3RhdGU6OmdwcihSZWdpc3RlcklEIGlkKSBjb25zdAotewotICAgIENQVVN0YXRlKiBj
cHUgPSBjb25zdF9jYXN0PENQVVN0YXRlKj4odGhpcyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGNwdS0+Z3ByKGlkKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBUIENQVVN0YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QKIHsKICAg
ICBDUFVTdGF0ZSogY3B1ID0gY29uc3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMpOwotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7CisgICAgYXV0byYgZnJvbSA9IGNw
dS0+Z3ByKGlkKTsKKyAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSB0byB7
IH07CisgICAgc3RkOjptZW1jcHkoJnRvLCAmZnJvbSwgc2l6ZW9mKHRvKSk7IC8vIFVzZSBzdGQ6
Om1lbWNweSB0byBhdm9pZCBzdHJpY3QgYWxpYXNpbmcgaXNzdWVzLgorICAgIHJldHVybiB0bzsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKj4KLVQgQ1BVU3RhdGU6OnNwcihTUFJlZ2lzdGVy
SUQgaWQpIGNvbnN0Ci17Ci0gICAgQ1BVU3RhdGUqIGNwdSA9IGNvbnN0X2Nhc3Q8Q1BVU3RhdGUq
Pih0aGlzKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oY3B1LT5zcHIoaWQpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2lu
dGVyPFQ+Ojp2YWx1ZT46OnR5cGUqPgordGVtcGxhdGU8dHlwZW5hbWUgVD4KIFQgQ1BVU3RhdGU6
OnNwcihTUFJlZ2lzdGVySUQgaWQpIGNvbnN0CiB7CiAgICAgQ1BVU3RhdGUqIGNwdSA9IGNvbnN0
X2Nhc3Q8Q1BVU3RhdGUqPih0aGlzKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPihj
cHUtPnNwcihpZCkpOworICAgIGF1dG8mIGZyb20gPSBjcHUtPnNwcihpZCk7CisgICAgdHlwZW5h
bWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgdG8geyB9OworICAgIHN0ZDo6bWVtY3B5KCZ0
bywgJmZyb20sIHNpemVvZih0bykpOyAvLyBVc2Ugc3RkOjptZW1jcHkgdG8gYXZvaWQgc3RyaWN0
IGFsaWFzaW5nIGlzc3Vlcy4KKyAgICByZXR1cm4gdG87CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CkBAIC0yMTAsMjAgKzE5NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICwgY3B1KHN0YXRlLT5j
cHUpCiAgICAgeyB9CiAKLSAgICB1aW50cHRyX3QmIGdwcihSZWdpc3RlcklEIGlkKSB7IHJldHVy
biBtX3N0YXRlLT5jcHUuZ3ByKGlkKTsgfQotICAgIHVpbnRwdHJfdCYgc3ByKFNQUmVnaXN0ZXJJ
RCBpZCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwcihpZCk7IH0KLSAgICBkb3VibGUmIGZwcihG
UFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5mcHIoaWQpOyB9Ci0gICAgY29u
c3QgY2hhciogZ3ByTmFtZShSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUuZ3By
TmFtZShpZCk7IH0KLSAgICBjb25zdCBjaGFyKiBzcHJOYW1lKFNQUmVnaXN0ZXJJRCBpZCkgeyBy
ZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwck5hbWUoaWQpOyB9Ci0gICAgY29uc3QgY2hhciogZnByTmFt
ZShGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5mcHJOYW1lKGlkKTsgfQot
Ci0gICAgdm9pZComIHBjKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnBjKCk7IH0KLSAgICB2b2lk
KiYgZnAoKSB7IHJldHVybiBtX3N0YXRlLT5jcHUuZnAoKTsgfQotICAgIHZvaWQqJiBzcCgpIHsg
cmV0dXJuIG1fc3RhdGUtPmNwdS5zcCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IHBjKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnBjPFQ+KCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUIGZwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LmZwPFQ+KCk7IH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIHNwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwPFQ+KCk7IH0K
KyAgICB1aW50cHRyX3QmIGdwcihSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuZ3ByKGlkKTsg
fQorICAgIHVpbnRwdHJfdCYgc3ByKFNQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gY3B1LnNwcihp
ZCk7IH0KKyAgICBkb3VibGUmIGZwcihGUFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5mcHIo
aWQpOyB9CisgICAgY29uc3QgY2hhciogZ3ByTmFtZShSZWdpc3RlcklEIGlkKSB7IHJldHVybiBj
cHUuZ3ByTmFtZShpZCk7IH0KKyAgICBjb25zdCBjaGFyKiBzcHJOYW1lKFNQUmVnaXN0ZXJJRCBp
ZCkgeyByZXR1cm4gY3B1LnNwck5hbWUoaWQpOyB9CisgICAgY29uc3QgY2hhciogZnByTmFtZShG
UFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5mcHJOYW1lKGlkKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QgeyByZXR1cm4gY3B1Lmdw
cjxUPihpZCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHNwcihTUFJlZ2lzdGVySUQg
aWQpIGNvbnN0IHsgcmV0dXJuIGNwdS5zcHI8VD4oaWQpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBmcHIoRlBSZWdpc3RlcklEIGlkKSBjb25zdCB7IHJldHVybiBjcHUuZnByPFQ+KGlk
KTsgfQorCisgICAgdm9pZComIHBjKCkgeyByZXR1cm4gY3B1LnBjKCk7IH0KKyAgICB2b2lkKiYg
ZnAoKSB7IHJldHVybiBjcHUuZnAoKTsgfQorICAgIHZvaWQqJiBzcCgpIHsgcmV0dXJuIGNwdS5z
cCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHBjKCkgeyByZXR1cm4gY3B1LnBj
PFQ+KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwKCkgeyByZXR1cm4gY3B1LmZw
PFQ+KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHNwKCkgeyByZXR1cm4gY3B1LnNw
PFQ+KCk7IH0KIAogICAgIFN0YWNrJiBzdGFjaygpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suY3BwCShyZXZpc2lvbiAyMjIwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyMSArMjcsNDEgQEAKICNpbmNsdWRlICJQcm9iZVN0YWNrLmgiCiAK
ICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYg
RU5BQkxFKE1BU01fUFJPQkUpCiAKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIFByb2JlIHsK
IAorI2lmIEFTQU5fRU5BQkxFRAorLy8gRklYTUU6IHdlIHNob3VsZCBjb25zaWRlciB1c2luZyB0
aGUgY29weSBmdW5jdGlvbiBmb3IgYm90aCBBU2FuIGFuZCBub24tQVNhbiBidWlsZHMuCisvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2OTYxCitTVVBQUkVTU19B
U0FOCitzdGF0aWMgdm9pZCBjb3B5U3RhY2tQYWdlKHZvaWQqIGRzdCwgdm9pZCogc3JjLCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodWludHB0
cl90KT4oZHN0KSA9PSBkc3QpOworICAgIEFTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih1aW50cHRyX3QpPihzcmMpID09IHNyYyk7CisgICAgCisgICAgdWludHB0cl90KiBkc3RQb2lu
dGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPihkc3QpOworICAgIHVpbnRwdHJfdCog
c3JjUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oc3JjKTsKKyAgICBmb3Ig
KDsgc2l6ZTsgc2l6ZSAtPSBzaXplb2YodWludHB0cl90KSkKKyAgICAgICAgKmRzdFBvaW50ZXIr
KyA9ICpzcmNQb2ludGVyKys7Cit9CisjZWxzZQorI2RlZmluZSBjb3B5U3RhY2tQYWdlKGRzdCwg
c3JjLCBzaXplKSBzdGQ6Om1lbWNweShkc3QsIHNyYywgc2l6ZSk7CisjZW5kaWYKKwogUGFnZTo6
UGFnZSh2b2lkKiBiYXNlQWRkcmVzcykKICAgICA6IG1fYmFzZUxvZ2ljYWxBZGRyZXNzKGJhc2VB
ZGRyZXNzKQorICAgICwgbV9waHlzaWNhbEFkZHJlc3NPZmZzZXQocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJm1fYnVmZmVyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJhc2VBZGRy
ZXNzKSkKIHsKLSAgICBtZW1jcHkoJm1fYnVmZmVyLCBiYXNlQWRkcmVzcywgc19wYWdlU2l6ZSk7
CisgICAgY29weVN0YWNrUGFnZSgmbV9idWZmZXIsIGJhc2VBZGRyZXNzLCBzX3BhZ2VTaXplKTsK
IH0KIAogdm9pZCBQYWdlOjpmbHVzaFdyaXRlcygpCiB7Ci0gICAgdWludHB0cl90IGRpcnR5Qml0
cyA9IG1fZGlydHlCaXRzOworICAgIHVpbnQ2NF90IGRpcnR5Qml0cyA9IG1fZGlydHlCaXRzOwog
ICAgIHNpemVfdCBvZmZzZXQgPSAwOwogICAgIHdoaWxlIChkaXJ0eUJpdHMpIHsKICAgICAgICAg
Ly8gRmluZCBzdGFydC4KQEAgLTU2LDcgKzc2LDcgQEAgdm9pZCBQYWdlOjpmbHVzaFdyaXRlcygp
CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG9mZnNldCAtIHN0YXJ0T2Zmc2V0OwogICAgICAg
ICAgICAgdWludDhfdCogc3JjID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJm1fYnVmZmVy
KSArIHN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgdWludDhfdCogZHN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obV9iYXNlTG9naWNhbEFkZHJlc3MpICsgc3RhcnRPZmZzZXQ7Ci0gICAg
ICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHNpemUpOworICAgICAgICAgICAgY29weVN0YWNrUGFn
ZShkc3QsIHNyYywgc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgZGlydHlCaXRzID0gZGlydHlC
aXRzID4+IDE7CiAgICAgICAgIG9mZnNldCArPSBzX2NodW5rU2l6ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCShyZXZpc2lvbiAyMjIwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNQ
VS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTU2LDE0ICs1NywzNSBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUIGdldCh2b2lkKiBsb2dpY2FsQWRk
cmVzcykKICAgICB7Ci0gICAgICAgIHJldHVybiAqcGh5c2ljYWxBZGRyZXNzRm9yPFQqPihsb2dp
Y2FsQWRkcmVzcyk7CisgICAgICAgIHZvaWQqIGZyb20gPSBwaHlzaWNhbEFkZHJlc3NGb3IobG9n
aWNhbEFkZHJlc3MpOworICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlw
ZSB0byB7IH07CisgICAgICAgIHN0ZDo6bWVtY3B5KCZ0bywgZnJvbSwgc2l6ZW9mKHRvKSk7IC8v
IFVzZSBzdGQ6Om1lbWNweSB0byBhdm9pZCBzdHJpY3QgYWxpYXNpbmcgaXNzdWVzLgorICAgICAg
ICByZXR1cm4gdG87CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBnZXQo
dm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdldDxUPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQmFzZUFk
ZHJlc3MpICsgb2Zmc2V0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IHZvaWQgc2V0KHZvaWQqIGxvZ2ljYWxBZGRyZXNzLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAg
bV9kaXJ0eUJpdHMgfD0gZGlydHlCaXRGb3IobG9naWNhbEFkZHJlc3MpOwotICAgICAgICAqcGh5
c2ljYWxBZGRyZXNzRm9yPFQqPihsb2dpY2FsQWRkcmVzcykgPSB2YWx1ZTsKKyAgICAgICAgaWYg
KHNpemVvZihUKSA8PSBzX2NodW5rU2l6ZSkKKyAgICAgICAgICAgIG1fZGlydHlCaXRzIHw9IGRp
cnR5Qml0Rm9yKGxvZ2ljYWxBZGRyZXNzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
aXplX3QgbnVtYmVyT2ZDaHVua3MgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihUKT4oc19j
aHVua1NpemUpIC8gc19jaHVua1NpemU7CisgICAgICAgICAgICB1aW50OF90KiBkaXJ0eUFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQWRkcmVzcyk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2h1bmtzOyArK2ksIGRpcnR5QWRk
cmVzcyArPSBzX2NodW5rU2l6ZSkKKyAgICAgICAgICAgICAgICBtX2RpcnR5Qml0cyB8PSBkaXJ0
eUJpdEZvcihkaXJ0eUFkZHJlc3MpOworICAgICAgICB9CisgICAgICAgIHZvaWQqIHRvID0gcGh5
c2ljYWxBZGRyZXNzRm9yKGxvZ2ljYWxBZGRyZXNzKTsKKyAgICAgICAgc3RkOjptZW1jcHkodG8s
ICZ2YWx1ZSwgc2l6ZW9mKFQpKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBh
bGlhc2luZyBpc3N1ZXMuCisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBzZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2lj
YWxCYXNlQWRkcmVzcykgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIGhhc1dy
aXRlc1RvRmx1c2goKSBjb25zdCB7IHJldHVybiAhIW1fZGlydHlCaXRzOyB9CkBAIC03NCwzOSAr
OTYsNDggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB1aW50cHRyX3QgZGlydHlC
aXRGb3Iodm9pZCogbG9naWNhbEFkZHJlc3MpCisgICAgdWludDY0X3QgZGlydHlCaXRGb3Iodm9p
ZCogbG9naWNhbEFkZHJlc3MpCiAgICAgewogICAgICAgICB1aW50cHRyX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvZ2ljYWxBZGRyZXNzKSAmIHNfcGFnZU1hc2s7Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChvZmZzZXQgPj4gc19j
aHVua1NpemVTaGlmdCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkg
PDwgKG9mZnNldCA+PiBzX2NodW5rU2l6ZVNoaWZ0KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9p
bnRlcjxUPjo6dmFsdWU+Ojp0eXBlPgotICAgIFQgcGh5c2ljYWxBZGRyZXNzRm9yKHZvaWQqIGxv
Z2ljYWxBZGRyZXNzKQorICAgIHZvaWQqIHBoeXNpY2FsQWRkcmVzc0Zvcih2b2lkKiBsb2dpY2Fs
QWRkcmVzcykKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obG9naWNhbEFkZHJlc3MpICYgc19wYWdlTWFzazsKLSAgICAgICAgdm9p
ZCogcGh5c2ljYWxBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJm1fYnVmZmVy
KSArIG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4ocGh5c2ljYWxB
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2lj
YWxBZGRyZXNzKSArIG1fcGh5c2ljYWxBZGRyZXNzT2Zmc2V0OwogICAgIH0KIAogICAgIHZvaWQg
Zmx1c2hXcml0ZXMoKTsKIAogICAgIHZvaWQqIG1fYmFzZUxvZ2ljYWxBZGRyZXNzIHsgbnVsbHB0
ciB9OwotICAgIHVpbnRwdHJfdCBtX2RpcnR5Qml0cyB7IDAgfTsKKyAgICBwdHJkaWZmX3QgbV9w
aHlzaWNhbEFkZHJlc3NPZmZzZXQ7CisgICAgdWludDY0X3QgbV9kaXJ0eUJpdHMgeyAwIH07CiAK
KyNpZiBBU0FOX0VOQUJMRUQKKyAgICAvLyBUaGUgQVNhbiBzdGFjayBtYXkgY29udGFpbiBwb2lz
b25lZCB3b3JkcyB0aGF0IG1heSBiZSBtYW5pcHVsYXRlZCBhdCBBU2FuJ3MgZGlzY3JldGlvbi4K
KyAgICAvLyBXZSB3b3VsZCBuZXZlciB0b3VjaCB0aG9zZSB3b3JkcyBhbnl3YXksIGJ1dCBsZXQn
cyBlbnN1cmUgdGhhdCB0aGUgcGFnZSBzaXplIGlzIHNldAorICAgIC8vIHN1Y2ggdGhhdCB0aGUg
Y2h1bmsgc2l6ZSBpcyBndWFyYW50ZWVkIHRvIGJlIGV4YWN0bHkgc2l6ZW9mKHVpbnRwdHJfdCkg
c28gdGhhdCB3ZSB3b24ndAorICAgIC8vIGluYWR2ZXJ0ZW50bHkgb3ZlcndyaXRlIG9uZSBvZiBB
U2FuJ3Mgd29yZHMgb24gdGhlIHN0YWNrIHdoZW4gd2UgY29weSBiYWNrIHRoZSBkaXJ0eQorICAg
IC8vIGNodW5rcy4KKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHRoZSBz
YW1lIHBhZ2Ugc2l6ZSBmb3IgYm90aCBBU2FuIGFuZCBub24tQVNhbiBidWlsZHMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njk2MQorICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IHNfcGFnZVNpemUgPSA2NCAqIHNpemVvZih1aW50cHRyX3QpOyAv
LyBiZWNhdXNlIHRoZXJlIGFyZSA2NCBiaXRzIGluIG1fZGlydHlCaXRzLgorI2Vsc2UgLy8gbm90
IEFTQU5fRU5BQkxFRAogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfcGFnZVNpemUgPSAx
MDI0OworI2VuZGlmIC8vIEFTQU5fRU5BQkxFRAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0
cl90IHNfcGFnZU1hc2sgPSBzX3BhZ2VTaXplIC0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBzX2NodW5rc1BlclBhZ2UgPSBzaXplb2YodWludHB0cl90KSAqIDg7IC8vIHNpemVvZiht
X2RpcnR5Qml0cykgaW4gYml0cy4KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2NodW5r
c1BlclBhZ2UgPSBzaXplb2YodWludDY0X3QpICogODsgLy8gbnVtYmVyIG9mIGJpdHMgaW4gbV9k
aXJ0eUJpdHMuCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19jaHVua1NpemUgPSBzX3Bh
Z2VTaXplIC8gc19jaHVua3NQZXJQYWdlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90
IHNfY2h1bmtNYXNrID0gc19jaHVua1NpemUgLSAxOwotI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYg
QVNBTl9FTkFCTEVECisgICAgc3RhdGljX2Fzc2VydChzX2NodW5rU2l6ZSA9PSBzaXplb2YodWlu
dHB0cl90KSwgImJhZCBjaHVua1NpemVTaGlmdCIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IHNfY2h1bmtTaXplU2hpZnQgPSBpczY0Qml0KCkgPyAzIDogMjsKKyNlbHNlIC8vIG5vIEFT
QU5fRU5BQkxFRAogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfY2h1bmtTaXplU2hpZnQg
PSA0OwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2NodW5rU2l6ZVNoaWZ0
ID0gNTsKLSNlbmRpZgorI2VuZGlmIC8vIEFTQU5fRU5BQkxFRAogICAgIHN0YXRpY19hc3NlcnQo
c19wYWdlU2l6ZSA+IHNfY2h1bmtTaXplLCAiYmFkIHBhZ2VTaXplIG9yIGNodW5rU2l6ZSIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc19jaHVua1NpemUgPT0gKDEgPDwgc19jaHVua1NpemVTaGlmdCks
ICJiYWQgY2h1bmtTaXplU2hpZnQiKTsKIAotCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmFs
aWduZWRfc3RvcmFnZTxzX3BhZ2VTaXplLCBzdGQ6OmFsaWdubWVudF9vZjx1aW50cHRyX3Q+Ojp2
YWx1ZT46OnR5cGUgQnVmZmVyOwogICAgIEJ1ZmZlciBtX2J1ZmZlcjsKIH07CkBAIC0xMjAsNDAg
KzE1MSw0MCBAQCBwdWJsaWM6CiAgICAgeyB9CiAgICAgU3RhY2soU3RhY2smJiBvdGhlcik7CiAK
LSAgICB2b2lkKiBsb3dXYXRlcm1hcmsoKSB7IHJldHVybiBtX2xvd1dhdGVybWFyazsgfQorICAg
IHZvaWQqIGxvd1dhdGVybWFyaygpCisgICAgeworICAgICAgICAvLyBXZSB1c2UgdGhlIGNodW5r
QWRkcmVzcyBmb3IgdGhlIGxvdyB3YXRlcm1hcmsgYmVjYXVzZSB3ZSdsbCBiZSBkb2luZyB3cml0
ZSBiYWNrcworICAgICAgICAvLyB0byB0aGUgc3RhY2sgaW4gaW5jcmVtZW50cyBvZiBjaHVua3Mu
IEhlbmNlLCB3ZSdsbCB0cmVhdCB0aGUgbG93ZXN0IGFkZHJlc3Mgb2YKKyAgICAgICAgLy8gdGhl
IGNodW5rIGFzIHRoZSBsb3cgd2F0ZXJtYXJrIG9mIGFueSBnaXZlbiBzZXQgYWRkcmVzcy4KKyAg
ICAgICAgcmV0dXJuIFBhZ2U6OmNodW5rQWRkcmVzc0ZvcihtX2xvd1dhdGVybWFyayk7CisgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zjwhc3RkOjppc19zYW1lPGRvdWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+
Ojp2YWx1ZSwgVD46OnR5cGUgZ2V0KHZvaWQqIGFkZHJlc3MpCisgICAgVCBnZXQodm9pZCogYWRk
cmVzcykKICAgICB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBwYWdlRm9yKGFkZHJlc3MpOwogICAg
ICAgICByZXR1cm4gcGFnZS0+Z2V0PFQ+KGFkZHJlc3MpOwogICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQgZ2V0KHZvaWQqIGxvZ2ljYWxCYXNlQWRkcmVzcywgcHRyZGlmZl90
IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQ8VD4ocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4obG9naWNhbEJhc2VBZGRyZXNzKSArIG9mZnNldCk7CisgICAgfQogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3Rk
Ojppc19zYW1lPGRvdWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1
ZT46OnR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIHNldCh2b2lkKiBh
ZGRyZXNzLCBUIHZhbHVlKQogICAgIHsKICAgICAgICAgUGFnZSogcGFnZSA9IHBhZ2VGb3IoYWRk
cmVzcyk7CiAgICAgICAgIHBhZ2UtPnNldDxUPihhZGRyZXNzLCB2YWx1ZSk7CiAKLSAgICAgICAg
Ly8gV2UgdXNlIHRoZSBjaHVua0FkZHJlc3MgZm9yIHRoZSBsb3cgd2F0ZXJtYXJrIGJlY2F1c2Ug
d2UnbGwgYmUgZG9pbmcgd3JpdGUgYmFja3MKLSAgICAgICAgLy8gdG8gdGhlIHN0YWNrIGluIGlu
Y3JlbWVudHMgb2YgY2h1bmtzLiBIZW5jZSwgd2UnbGwgdHJlYXQgdGhlIGxvd2VzdCBhZGRyZXNz
IG9mCi0gICAgICAgIC8vIHRoZSBjaHVuayBhcyB0aGUgbG93IHdhdGVybWFyayBvZiBhbnkgZ2l2
ZW4gc2V0IGFkZHJlc3MuCi0gICAgICAgIHZvaWQqIGNodW5rQWRkcmVzcyA9IFBhZ2U6OmNodW5r
QWRkcmVzc0ZvcihhZGRyZXNzKTsKLSAgICAgICAgaWYgKGNodW5rQWRkcmVzcyA8IG1fbG93V2F0
ZXJtYXJrKQotICAgICAgICAgICAgbV9sb3dXYXRlcm1hcmsgPSBjaHVua0FkZHJlc3M7CisgICAg
ICAgIGlmIChhZGRyZXNzIDwgbV9sb3dXYXRlcm1hcmspCisgICAgICAgICAgICBtX2xvd1dhdGVy
bWFyayA9IGFkZHJlc3M7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8ZG91YmxlLCB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9jdjxUPjo6dHlwZT46OnZhbHVlLCBUPjo6dHlwZSBnZXQodm9pZCogYWRkcmVzcykK
LSAgICB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBwYWdlRm9yKGFkZHJlc3MpOwotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4ocGFnZS0+Z2V0PHVpbnQ2NF90PihhZGRyZXNzKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8ZG91YmxlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
djxUPjo6dHlwZT46OnZhbHVlPjo6dHlwZT4KLSAgICB2b2lkIHNldCh2b2lkKiBhZGRyZXNzLCBk
b3VibGUgdmFsdWUpCisgICAgdm9pZCBzZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJk
aWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PHVpbnQ2NF90PihhZGRy
ZXNzLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSk7CisgICAgICAgIHNldDxUPihyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQmFzZUFkZHJlc3MpICsgb2Zmc2V0LCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFnZSogZW5zdXJlUGFnZUZvcih2
b2lkKiBhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCShyZXZpc2lvbiAyMjIwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDcgKzYwMCw3IEBA
IHZvaWQgdGVzdFByb2JlTW9kaWZpZXNTdGFja1ZhbHVlcygpCiAgICAgICAgICAgICAvLyBGaWxs
IHRoZSBzdGFjayB3aXRoIHZhbHVlcy4KICAgICAgICAgICAgIHVpbnRwdHJfdCogcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4obmV3U1ApOwogICAgICAgICAgICAgaW50IGNvdW50ID0g
MDsKLSAgICAgICAgICAgIHN0YWNrLnNldDxkb3VibGU+KHArKywgMS4yMzQ1Njc4OSk7CisgICAg
ICAgICAgICBzdGFjay5zZXQ8ZG91YmxlPihwKyssIDEuMjM0NTY3KTsKICAgICAgICAgICAgIGlm
IChpczMyQml0KCkpCiAgICAgICAgICAgICAgICAgcCsrOyAvLyBPbiAzMi1iaXQgdGFyZ2V0cywg
YSBkb3VibGUgdGFrZXMgdXAgMiB1aW50cHRyX3QuCiAgICAgICAgICAgICB3aGlsZSAocCA8IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4ob3JpZ2luYWxTUCkpCkBAIC02MzEsNyArNjMxLDcg
QEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1N0YWNrVmFsdWVzKCkKICAgICAgICAgICAgIC8vIFZh
bGlkYXRlIHRoZSBzdGFjayB2YWx1ZXMuCiAgICAgICAgICAgICB1aW50cHRyX3QqIHAgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KG5ld1NQKTsKICAgICAgICAgICAgIGludCBjb3VudCA9
IDA7Ci0gICAgICAgICAgICBDSEVDS19FUShzdGFjay5nZXQ8ZG91YmxlPihwKyspLCAxLjIzNDU2
Nzg5KTsKKyAgICAgICAgICAgIENIRUNLX0VRKHN0YWNrLmdldDxkb3VibGU+KHArKyksIDEuMjM0
NTY3KTsKICAgICAgICAgICAgIGlmIChpczMyQml0KCkpCiAgICAgICAgICAgICAgICAgcCsrOyAv
LyBPbiAzMi1iaXQgdGFyZ2V0cywgYSBkb3VibGUgdGFrZXMgdXAgMiB1aW50cHRyX3QuCiAgICAg
ICAgICAgICB3aGlsZSAocCA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4ob3JpZ2luYWxT
UCkpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDU1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOS0xNCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkcmVzc1Nhbml0aXplcjogc3RhY2stYnVmZmVy
LXVuZGVyZmxvdyBpbiBKU0M6OlByb2JlOjpQYWdlOjpQYWdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzM0NDM2NDE1PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAg
ICAgIEFkZGVkIGEgY29udmVuaWVuY2UgdmVyc2lvbiBvZiByb3VuZFVwVG9NdWx0aXBsZU9mKCkg
c28gdGhhdCBpdCBjYW4gYmUgYXBwbGllZCB0bworICAgICAgICBwb2ludGVycyB3aXRob3V0IHRo
ZSBjbGllbnQgaGF2aW5nIHRvIGNhc3QgZXhwbGljaXRseS4KKworICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZik6CisKIDIwMTct
MDktMTQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93
IFdURjo6bWFwIHRvIHRha2UgZnVuY3Rpb24gYXMgcGFyYW1ldGVyCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJF
eHRyYXMuaAkocmV2aXNpb24gMjIyMDU1KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yMDQsNiArMjA0LDEyIEBAIHRlbXBsYXRlPHNpemVfdCBkaXZpc29yPiBp
bmxpbmUgY29uc3RleHAKICAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZkltcGwoZGl2aXNv
ciwgeCk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUg
VCogcm91bmRVcFRvTXVsdGlwbGVPZihUKiB4KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KFQqKSA9PSBzaXplb2Yoc2l6ZV90KSwgIiIpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFQqPihyb3VuZFVwVG9NdWx0aXBsZU9mPGRpdmlzb3I+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90
Pih4KSkpOworfQorCiBlbnVtIEJpbmFyeVNlYXJjaE1vZGUgewogICAgIEtleU11c3RCZVByZXNl
bnRJbkFycmF5LAogICAgIEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSwK
</data>

          </attachment>
      

    </bug>

</bugzilla>