<?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>176310</bug_id>
          
          <creation_ts>2017-09-03 08:38:22 -0700</creation_ts>
          <short_desc>Remove &quot;malloc&quot; and &quot;free&quot; use</short_desc>
          <delta_ts>2017-09-27 12:23:47 -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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344977</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 08:38:22 -0700</bug_when>
    <thetext>Remove &quot;malloc&quot; and &quot;free&quot; use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344978</commentid>
    <comment_count>1</comment_count>
      <attachid>319783</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 08:41:28 -0700</bug_when>
    <thetext>Created attachment 319783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344986</commentid>
    <comment_count>2</comment_count>
      <attachid>319783</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-03 10:22:37 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt; +    LOGFONT logFont { 0 };

There is code below that takes the address of this variable. Is that safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345002</commentid>
    <comment_count>3</comment_count>
      <attachid>319783</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 11:14:40 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

Great general direction to get rid of malloc/free.

But I don’t think we need MallocPtr at any of these call sites. And I am wondering why we have it at all. See comment below.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:79
&gt; +    auto buffer = MallocPtr&lt;char&gt;::malloc(header + strlen(firstColon + 1) + 1);

I would not have used MallocPtr&lt;char&gt;::malloc(size) here.

- I would have suggested Vector&lt;char, SOME_CONSTANT&gt; here instead. Pluses: 1) Avoids heap allocation entirely for common case. 2) Familiar idiom used many places in WebKit. Minuses: 1) Uses more stack space than malloc. 2) Extra overhead to keep track of size and capacity for resizing, which is wasteful in cases where we do not resize. 3) Doesn’t build in type casting for in cases where we need to allocate a certain number of bytes and cast to a pointer type other than &quot;char*&quot;. 4) May involve unwanted zeroing of bytes in some cases.

- My second choice would have been std::make_unique&lt;char[]&gt;(size). Pluses: 1) Built into the standard library. Minuses: 1) Zeroes out the bytes.

I am not sure why WebKit needs the MallocPtr class unless there is are places we definitely can’t use either of these. I did not check where we are already using it to see why we didn’t use either of my alternatives here.

&gt; Source/WTF/wtf/Assertions.cpp:107
&gt; +        auto buffer = MallocPtr&lt;char&gt;::malloc(length + 1);

Vector&lt;char, SOME_CONSTANT&gt;?

&gt; Source/WTF/wtf/Assertions.cpp:114
&gt;          CFRelease(str);
&gt;          CFRelease(cfFormat);

If we are already touching this code to deal with object lifetimes, we should consider changing these to RetainPtr.

&gt; Source/WTF/wtf/Assertions.cpp:135
&gt; +            auto buffer = MallocPtr&lt;char&gt;::malloc(size);

Vector&lt;char, SOME_CONSTANT&gt;?

The way this code silently stops and logs nothing if the allocation fails is something we do not need to preserve.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:141
&gt; +    auto linkedFonts = MallocPtr&lt;WCHAR&gt;::malloc(linkedFontsBufferSize);

Vector&lt;WCHAR, SOME_CONSTANT&gt;?

&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt;&gt; +    LOGFONT logFont { 0 };
&gt; 
&gt; There is code below that takes the address of this variable. Is that safe?

The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.

I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.

&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:58
&gt;      memcpy(logFont.lfFaceName, m_name.charactersWithNullTermination().data(), sizeof(logFont.lfFaceName[0]) * std::min&lt;size_t&gt;(static_cast&lt;size_t&gt;(LF_FACESIZE), 1 + m_name.length()));

If we were writing new code, I would suggest using wcscpy_s rather than memcpy here, which would make the code less verbose and do the same thing. Not sure it’s worth changing, though, because this does look correct.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:61
&gt; +        auto metrics = MallocPtr&lt;OUTLINETEXTMETRICW&gt;::malloc(bufferSize);

I would use Vector&lt;char, SOME_CONSTANT&gt; here and a typecast to OUTLINETEXTMETRICW*.

&gt; Source/WebCore/platform/mac/WebCoreNSURLExtras.mm:1050
&gt; +    auto after = MallocPtr&lt;char&gt;::malloc(bufferLength); // large enough to %-escape every character

Vector&lt;char, SOME_CONSTANT&gt;?

&gt; Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp:283
&gt; +        auto headerBuffer = MallocPtr&lt;char&gt;::malloc(headerBufferLength);

Vector&lt;char, SOME_CONSTANT&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345022</commentid>
    <comment_count>4</comment_count>
      <attachid>319783</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-03 12:04:51 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt;&gt;&gt; +    LOGFONT logFont { 0 };
&gt;&gt; 
&gt;&gt; There is code below that takes the address of this variable. Is that safe?
&gt; 
&gt; The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.
&gt; 
&gt; I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.

My worry was this code that happens below:
```CGFontCreateWithPlatformFont(&amp;logFont)```

I haven&apos;t read that function, but hopefully it doesn&apos;t stash a pointer to logFont anywhere, and instead, just uses the value at the memory location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345025</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-03 12:09:46 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Comment on attachment 319783 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319783&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt; &gt;&gt;&gt; +    LOGFONT logFont { 0 };
&gt; &gt;&gt; 
&gt; &gt;&gt; There is code below that takes the address of this variable. Is that safe?
&gt; &gt; 
&gt; &gt; The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.
&gt; &gt; 
&gt; &gt; I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.
&gt; 
&gt; My worry was this code that happens below:
&gt; ```CGFontCreateWithPlatformFont(&amp;logFont)```
&gt; 
&gt; I haven&apos;t read that function, but hopefully it doesn&apos;t stash a pointer to
&gt; logFont anywhere, and instead, just uses the value at the memory location.
This code looks seems scary to me since we&apos;re calling into code we don&apos;t control as WebKit:
https://developer.apple.com/documentation/coregraphics/1396334-cgfontcreatewithplatformfont</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345028</commentid>
    <comment_count>6</comment_count>
      <attachid>319783</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 12:25:31 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt;&gt;&gt;&gt;&gt; +    LOGFONT logFont { 0 };
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; There is code below that takes the address of this variable. Is that safe?
&gt;&gt;&gt; 
&gt;&gt;&gt; The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.
&gt;&gt;&gt; 
&gt;&gt;&gt; I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.
&gt;&gt; 
&gt;&gt; My worry was this code that happens below:
&gt;&gt; ```CGFontCreateWithPlatformFont(&amp;logFont)```
&gt;&gt; 
&gt;&gt; I haven&apos;t read that function, but hopefully it doesn&apos;t stash a pointer to logFont anywhere, and instead, just uses the value at the memory location.
&gt; 
&gt; This code looks seems scary to me since we&apos;re calling into code we don&apos;t control as WebKit:
&gt; https://developer.apple.com/documentation/coregraphics/1396334-cgfontcreatewithplatformfont

CG function description says nothing about this lifetime on Windows...
I assumed that the behavior should be the same to the CreateFontFromLOGFONT since the following code for !USE(CG) uses this.
And CreateFontFromLOGFONT does not manage passed LOGFONT lifetime. Thus the current code leaks memory for !USE(CG) at least.

Should we keep malloced LOGFONT for USE(CG) platform? It potentially leaks memory... And is there any doc about this CG function in Windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345051</commentid>
    <comment_count>7</comment_count>
      <attachid>319783</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 14:17:57 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt;&gt;&gt;&gt;&gt;&gt; +    LOGFONT logFont { 0 };
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; There is code below that takes the address of this variable. Is that safe?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.
&gt;&gt;&gt; 
&gt;&gt;&gt; My worry was this code that happens below:
&gt;&gt;&gt; ```CGFontCreateWithPlatformFont(&amp;logFont)```
&gt;&gt;&gt; 
&gt;&gt;&gt; I haven&apos;t read that function, but hopefully it doesn&apos;t stash a pointer to logFont anywhere, and instead, just uses the value at the memory location.
&gt;&gt; 
&gt;&gt; This code looks seems scary to me since we&apos;re calling into code we don&apos;t control as WebKit:
&gt;&gt; https://developer.apple.com/documentation/coregraphics/1396334-cgfontcreatewithplatformfont
&gt; 
&gt; CG function description says nothing about this lifetime on Windows...
&gt; I assumed that the behavior should be the same to the CreateFontFromLOGFONT since the following code for !USE(CG) uses this.
&gt; And CreateFontFromLOGFONT does not manage passed LOGFONT lifetime. Thus the current code leaks memory for !USE(CG) at least.
&gt; 
&gt; Should we keep malloced LOGFONT for USE(CG) platform? It potentially leaks memory... And is there any doc about this CG function in Windows?

No need for the fear, uncertainty, and doubt. I have access to the source code for that function and it does *not* keep that pointer. This is just what it seems like, a mistake that we can fix. Not something deep and mysterious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345137</commentid>
    <comment_count>8</comment_count>
      <attachid>319783</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 22:03:09 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:79
&gt;&gt; +    auto buffer = MallocPtr&lt;char&gt;::malloc(header + strlen(firstColon + 1) + 1);
&gt; 
&gt; I would not have used MallocPtr&lt;char&gt;::malloc(size) here.
&gt; 
&gt; - I would have suggested Vector&lt;char, SOME_CONSTANT&gt; here instead. Pluses: 1) Avoids heap allocation entirely for common case. 2) Familiar idiom used many places in WebKit. Minuses: 1) Uses more stack space than malloc. 2) Extra overhead to keep track of size and capacity for resizing, which is wasteful in cases where we do not resize. 3) Doesn’t build in type casting for in cases where we need to allocate a certain number of bytes and cast to a pointer type other than &quot;char*&quot;. 4) May involve unwanted zeroing of bytes in some cases.
&gt; 
&gt; - My second choice would have been std::make_unique&lt;char[]&gt;(size). Pluses: 1) Built into the standard library. Minuses: 1) Zeroes out the bytes.
&gt; 
&gt; I am not sure why WebKit needs the MallocPtr class unless there is are places we definitely can’t use either of these. I did not check where we are already using it to see why we didn’t use either of my alternatives here.

std::make_unique&lt;char[]&gt;(size)&apos;s problem is that the buffer will be allocated in system malloc instead of bmalloc.

And there is the case that the type of the malloc is completely unrelated to the allocated size. When we call std::make_unique&lt;char[]&gt;(size) or Vector&lt;char&gt; vec(size), the size of the buffer is sizeof(char) * size. But consider the following structure,

struct HeaderWithBuffer {
    ... header ...;
    char trailingBuffer[];
};

auto* buffer = malloc(sizeof(HeaderWithBuffer) + trailingBufferSize);

The above case can be seen in Windows APIs. And it is a bit difficult to handle the above one with std::make_unique / Vector. I think that&apos;s why MallocPtr&lt;&gt; is useful.

In the case of this place, Vector&lt;&gt; is enough. I&apos;ll change it to Vector here.

&gt;&gt; Source/WTF/wtf/Assertions.cpp:107
&gt;&gt; +        auto buffer = MallocPtr&lt;char&gt;::malloc(length + 1);
&gt; 
&gt; Vector&lt;char, SOME_CONSTANT&gt;?

Changed it to Vector&lt;char, InitialBufferSize = 256&gt;.

&gt;&gt; Source/WTF/wtf/Assertions.cpp:114
&gt;&gt;          CFRelease(cfFormat);
&gt; 
&gt; If we are already touching this code to deal with object lifetimes, we should consider changing these to RetainPtr.

OK, changed.

&gt;&gt; Source/WTF/wtf/Assertions.cpp:135
&gt;&gt; +            auto buffer = MallocPtr&lt;char&gt;::malloc(size);
&gt; 
&gt; Vector&lt;char, SOME_CONSTANT&gt;?
&gt; 
&gt; The way this code silently stops and logs nothing if the allocation fails is something we do not need to preserve.

I think using Vector&lt;char&gt; here is OK since this is not performance critical path.

&gt;&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:141
&gt;&gt; +    auto linkedFonts = MallocPtr&lt;WCHAR&gt;::malloc(linkedFontsBufferSize);
&gt; 
&gt; Vector&lt;WCHAR, SOME_CONSTANT&gt;?

Fixed.

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:57
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +    LOGFONT logFont { 0 };
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; There is code below that takes the address of this variable. Is that safe?
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; The old code seems to leak a LOGFONT on the heap every time the function is called. It’s good to fix that if we are confident it was a bug and nothing was relying on that. As far as I can tell from reading documentation it was indeed a mistake and had no benefit.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I don’t think the { 0 } is needed to preserve the old behavior, by the way, because malloc does not zero out the memory it allocates on the heap.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; My worry was this code that happens below:
&gt;&gt;&gt;&gt; ```CGFontCreateWithPlatformFont(&amp;logFont)```
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I haven&apos;t read that function, but hopefully it doesn&apos;t stash a pointer to logFont anywhere, and instead, just uses the value at the memory location.
&gt;&gt;&gt; 
&gt;&gt;&gt; This code looks seems scary to me since we&apos;re calling into code we don&apos;t control as WebKit:
&gt;&gt;&gt; https://developer.apple.com/documentation/coregraphics/1396334-cgfontcreatewithplatformfont
&gt;&gt; 
&gt;&gt; CG function description says nothing about this lifetime on Windows...
&gt;&gt; I assumed that the behavior should be the same to the CreateFontFromLOGFONT since the following code for !USE(CG) uses this.
&gt;&gt; And CreateFontFromLOGFONT does not manage passed LOGFONT lifetime. Thus the current code leaks memory for !USE(CG) at least.
&gt;&gt; 
&gt;&gt; Should we keep malloced LOGFONT for USE(CG) platform? It potentially leaks memory... And is there any doc about this CG function in Windows?
&gt; 
&gt; No need for the fear, uncertainty, and doubt. I have access to the source code for that function and it does *not* keep that pointer. This is just what it seems like, a mistake that we can fix. Not something deep and mysterious.

Great!

&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:58
&gt;&gt;      memcpy(logFont.lfFaceName, m_name.charactersWithNullTermination().data(), sizeof(logFont.lfFaceName[0]) * std::min&lt;size_t&gt;(static_cast&lt;size_t&gt;(LF_FACESIZE), 1 + m_name.length()));
&gt; 
&gt; If we were writing new code, I would suggest using wcscpy_s rather than memcpy here, which would make the code less verbose and do the same thing. Not sure it’s worth changing, though, because this does look correct.

I&apos;ll leave it for now, since it is not directly related to this patch right now. We should have a patch that performs this refactoring.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:61
&gt;&gt; +        auto metrics = MallocPtr&lt;OUTLINETEXTMETRICW&gt;::malloc(bufferSize);
&gt; 
&gt; I would use Vector&lt;char, SOME_CONSTANT&gt; here and a typecast to OUTLINETEXTMETRICW*.

I think MallocPtr&lt;&gt; is better here. OUTLINETEXTMETRICW&apos;s alignment would not be equal to char.

&gt;&gt; Source/WebCore/platform/mac/WebCoreNSURLExtras.mm:1050
&gt;&gt; +    auto after = MallocPtr&lt;char&gt;::malloc(bufferLength); // large enough to %-escape every character
&gt; 
&gt; Vector&lt;char, SOME_CONSTANT&gt;?

Fixed.

&gt;&gt; Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp:283
&gt;&gt; +        auto headerBuffer = MallocPtr&lt;char&gt;::malloc(headerBufferLength);
&gt; 
&gt; Vector&lt;char, SOME_CONSTANT&gt;?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345138</commentid>
    <comment_count>9</comment_count>
      <attachid>319835</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 22:07:41 -0700</bug_when>
    <thetext>Created attachment 319835
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345140</commentid>
    <comment_count>10</comment_count>
      <attachid>319783</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 22:11:02 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:61
&gt;&gt;&gt; +        auto metrics = MallocPtr&lt;OUTLINETEXTMETRICW&gt;::malloc(bufferSize);
&gt;&gt; 
&gt;&gt; I would use Vector&lt;char, SOME_CONSTANT&gt; here and a typecast to OUTLINETEXTMETRICW*.
&gt; 
&gt; I think MallocPtr&lt;&gt; is better here. OUTLINETEXTMETRICW&apos;s alignment would not be equal to char.

I am pretty sure that Vector&lt;char&gt; guarantees the alignment we need and we rely on that elsewhere too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345142</commentid>
    <comment_count>11</comment_count>
      <attachid>319836</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 22:15:32 -0700</bug_when>
    <thetext>Created attachment 319836
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345143</commentid>
    <comment_count>12</comment_count>
      <attachid>319783</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 22:15:58 -0700</bug_when>
    <thetext>Comment on attachment 319783
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:61
&gt;&gt;&gt;&gt; +        auto metrics = MallocPtr&lt;OUTLINETEXTMETRICW&gt;::malloc(bufferSize);
&gt;&gt;&gt; 
&gt;&gt;&gt; I would use Vector&lt;char, SOME_CONSTANT&gt; here and a typecast to OUTLINETEXTMETRICW*.
&gt;&gt; 
&gt;&gt; I think MallocPtr&lt;&gt; is better here. OUTLINETEXTMETRICW&apos;s alignment would not be equal to char.
&gt; 
&gt; I am pretty sure that Vector&lt;char&gt; guarantees the alignment we need and we rely on that elsewhere too.

OK, changed to Vector :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345153</commentid>
    <comment_count>13</comment_count>
      <attachid>319837</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-03 22:25:46 -0700</bug_when>
    <thetext>Created attachment 319837
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345191</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-04 02:24:29 -0700</bug_when>
    <thetext>Committed r221583: &lt;http://trac.webkit.org/changeset/221583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345296</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-04 18:13:23 -0700</bug_when>
    <thetext>Committed r221599: &lt;http://trac.webkit.org/changeset/221599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345346</commentid>
    <comment_count>16</comment_count>
      <attachid>319879</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2017-09-04 23:13:38 -0700</bug_when>
    <thetext>Created attachment 319879
Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345347</commentid>
    <comment_count>17</comment_count>
      <attachid>319879</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-04 23:15:40 -0700</bug_when>
    <thetext>Comment on attachment 319879
Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345355</commentid>
    <comment_count>18</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2017-09-05 00:14:26 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #17)
&gt; Comment on attachment 319879 [details]
&gt; Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)
&gt; 
&gt; r=me

Thank you for reviewing! 
Would you reopen this bug so that the commit-queue can work?
I wasn&apos;t aware of it and I don&apos;t have privilege to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345357</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-05 00:17:56 -0700</bug_when>
    <thetext>(In reply to Yoshiaki Jitsukawa from comment #18)
&gt; (In reply to Yusuke Suzuki from comment #17)
&gt; &gt; Comment on attachment 319879 [details]
&gt; &gt; Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)
&gt; &gt; 
&gt; &gt; r=me
&gt; 
&gt; Thank you for reviewing! 
&gt; Would you reopen this bug so that the commit-queue can work?
&gt; I wasn&apos;t aware of it and I don&apos;t have privilege to do it.

Oh, yeah, OK. Could you open a new bug for this and ping me at IRC?
I&apos;ll rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345359</commentid>
    <comment_count>20</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2017-09-05 00:22:26 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #19)
&gt; (In reply to Yoshiaki Jitsukawa from comment #18)
&gt; &gt; (In reply to Yusuke Suzuki from comment #17)
&gt; &gt; &gt; Comment on attachment 319879 [details]
&gt; &gt; &gt; Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)
&gt; &gt; &gt; 
&gt; &gt; &gt; r=me
&gt; &gt; 
&gt; &gt; Thank you for reviewing! 
&gt; &gt; Would you reopen this bug so that the commit-queue can work?
&gt; &gt; I wasn&apos;t aware of it and I don&apos;t have privilege to do it.
&gt; 
&gt; Oh, yeah, OK. Could you open a new bug for this and ping me at IRC?
&gt; I&apos;ll rs=me.

Got it. Will do. Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319783</attachid>
            <date>2017-09-03 08:41:28 -0700</date>
            <delta_ts>2017-09-03 11:14:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176310-20170904004127.patch</filename>
            <type>text/plain</type>
            <size>18828</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YmZiYzQ3M2RmNzZiZmJkMWMxYzE3ZGJhOTcwN2ZjOTdlZGMwNzY4Li5kMjEyNmFmN2EyODEwNDE2
YmNjYzE4NzUwYjc1ZGFmNWExOWJiNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBNYWxsb2NQdHI8PiBp
bnN0ZWFkLgorCisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKHNlbGVj
dG9yVG9Qcm9wZXJ0eU5hbWUpOgorCiAyMDE3LTA5LTAzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIENhbnZhc1Byb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRiNTFkZTA2NDMzYmUy
MDllMjQyYzgyNjA4YTA3Nzk0YmFlZGZjNmEuLmExNDZkNTNjZjg5ZmIzN2MyNTJmYmY0NGZkNjI4
NTY2ODliZTY2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDktMDMgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUmVtb3ZlICJtYWxsb2MiIGFu
ZCAiZnJlZSIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzYzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVc2UgTWFsbG9jUHRyPD4gaW5zdGVhZC4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25z
LmNwcDoKKwogMjAxNy0wOS0wMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlbW92ZSBDYW52YXNQcm94eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDkxMmUzYTIwMzRlY2VmMDEwOGUy
YjBhOTAzNWI0NmYzN2VjY2NhMGMuLmYwYWVhYWQ5MjlmMDdjNTA4NzgyZjlkNWUyZDJiNWI0YWI4
ZGE3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wOS0wMyAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBSZW1vdmUgIm1hbGxvYyIg
YW5kICJmcmVlIiB1c2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjMxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVzZSBNYWxsb2NQdHI8PiwgZmFzdE1hbGxvYy9mYXN0RnJlZSwgb3IgVmVjdG9yIGlu
c3RlYWQgb2YgbWFudWFsIGNhbGwgb2Ygc3lzdGVtIG1hbGxvYy9mcmVlLgorICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSBhcHBseSB0aGUgYWJvdmUgY2hhbmdlIGlmIHdlIGNhbiBlYXNpbHkgZmlu
ZCB0aGUgcGFpciBvZiBtYWxsb2MvZnJlZS4KKyAgICAgICAgQW5kIHdlIGRvIG5vdCB0b3VjaCBw
bHVnaW4gZGlyZWN0b3J5IHNpbmNlIHRoZSBleHRlcm5hbCBjb2RlIGNvdWxkIGNhbGwgZnJlZSgp
IG9udG8gdGhlCisgICAgICAgIGZhc3RNYWxsb2MtZWQgbWVtb3J5LgorCisgICAgICAgIEFsc28s
IHdlIHN0aWxsIHVzZSBtYWxsb2MgaWYgdGhlIHN5c3RlbSBhZG9wdHMgdGhlIGFsbG9jYXRlZCBt
ZW1vcnkuIExhdGVyLCB0aGUgc3lzdGVtCisgICAgICAgIHdpbGwgZGVhbGxvY2F0ZSBpdCBieSBj
YWxsaW5nIHRoZSBzeXN0ZW0gImZyZWUiLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFj
L0ZGVEZyYW1lTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpmZnRTZXR1cEZv
clNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmNsZWFudXApOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0TGlua2VkRm9udHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlTlNVUkxFeHRyYXMubW06CisgICAgICAgIChXZWJDb3JlOjpVUkxCeVRydW5jYXRpbmdPbmVD
aGFyYWN0ZXJCZWZvcmVDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZvclVSTENv
bXBvbmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dXNlclZpc2libGVTdHJpbmcpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bWFya3VwVG9DRkhUTUwpOgorCiAyMDE3LTA5LTAzICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIENhbnZhc1Byb3h5CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCmluZGV4IDhjY2UzNjkyZTYwNGJkMzRiYWRiN2U3
MTcyNTM2ZDk5YjBkMTg1MGYuLmUzZWFjYjczNDQzNWUzMzk5Y2UzNzhlZjRhMDE2OGVlZDllNWRk
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1t
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCkBAIC0zOCw2
ICszOCw3IEBACiAjaW1wb3J0ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2ltcG9ydCAiV2Vha0dD
TWFwLmgiCiAjaW1wb3J0ICJXZWFrR0NNYXBJbmxpbmVzLmgiCisjaW1wb3J0IDx3dGYvTWFsbG9j
UHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL05T
TWFwVGFibGVTUEkuaD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL2R5bGRTUEkuaD4KQEAgLTc1
LDEwICs3NiwxMCBAQCBzdGF0aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29u
c3QgY2hhciogc3RhcnQpCiAgICAgc2l6ZV90IGhlYWRlciA9IGZpcnN0Q29sb24gLSBzdGFydDsK
ICAgICAvLyBUaGUgbmV3IHN0cmluZyBuZWVkcyB0byBiZSBsb25nIGVub3VnaCB0byBob2xkICdo
ZWFkZXInLCBwbHVzIHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZywgZXhjbHVkaW5nCiAgICAg
Ly8gYXQgbGVhc3Qgb25lICc6JywgYnV0IGluY2x1ZGluZyBhICdcMCcuIChUaGlzIGlzIGNvbnNl
cnZhdGl2ZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAnOicpLgotICAgIGNoYXIqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MoaGVhZGVyICsgc3RybGVuKGZpcnN0Q29sb24g
KyAxKSArIDEpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IE1hbGxvY1B0cjxjaGFyPjo6bWFsbG9jKGhl
YWRlciArIHN0cmxlbihmaXJzdENvbG9uICsgMSkgKyAxKTsKICAgICAvLyBDb3B5ICdoZWFkZXIn
IGNoYXJhY3RlcnMsIHNldCBvdXRwdXQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGlzICYgaW5w
dXQgdG8gcG9pbnQgcGFzdCB0aGUgZmlyc3QgJzonLgotICAgIG1lbWNweShidWZmZXIsIHN0YXJ0
LCBoZWFkZXIpOwotICAgIGNoYXIqIG91dHB1dCA9IGJ1ZmZlciArIGhlYWRlcjsKKyAgICBtZW1j
cHkoYnVmZmVyLmdldCgpLCBzdGFydCwgaGVhZGVyKTsKKyAgICBjaGFyKiBvdXRwdXQgPSBidWZm
ZXIuZ2V0KCkgKyBoZWFkZXI7CiAgICAgY29uc3QgY2hhciogaW5wdXQgPSBzdGFydCArIGhlYWRl
ciArIDE7CiAKICAgICAvLyBPbiBlbnRyeSB0byB0aGUgbG9vcCwgd2UgaGF2ZSBhbHJlYWR5IHNr
aXBwZWQgb3ZlciBhICc6JyBmcm9tIHRoZSBpbnB1dC4KQEAgLTEwMSw5ICsxMDIsNyBAQCBzdGF0
aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciogc3RhcnQpCiAg
ICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSd2ZSBjb25zdW1lZCBhICc6JyAtIHdhc2gsIHJp
bnNlLCByZXBlYXQuCiAgICAgfQogZG9uZToKLSAgICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmJ1ZmZlcl07Ci0gICAgZnJlZShidWZmZXIpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzpidWZmZXIuZ2V0KCldOwogfQogCiBzdGF0aWMgYm9vbCBjb25zdHJ1Y3Rvckhhc0luc3RhbmNl
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVmLCBKU1ZhbHVlUmVm
IHBvc3NpYmxlSW5zdGFuY2UsIEpTVmFsdWVSZWYqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcAppbmRleCA1
MTU5MDgwZDkzYTk2ZTE0MGUzMDkyZjg4MzA3NGFkY2FlMTZkODdjLi5jZDM0NjNiNGE3OGE2NTU5
MDZiOGJlMjQ0MWY2YTVhMzVmZWVjNTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3Nl
cnRpb25zLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2dnaW5nQWNjdW11bGF0b3IuaD4KKyNpbmNsdWRlIDx3dGYvTWFsbG9j
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNr
VHJhY2UuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xMDMsMTMgKzEwNCwx
MiBAQCBzdGF0aWMgdm9pZCB2cHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0
LCB2YV9saXN0IGFyZ3MpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKICAg
ICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2Rpbmco
Q0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAg
Y2hhciogYnVmZmVyID0gKGNoYXIqKW1hbGxvYyhsZW5ndGggKyAxKTsKKyAgICAgICAgYXV0byBi
dWZmZXIgPSBNYWxsb2NQdHI8Y2hhcj46Om1hbGxvYyhsZW5ndGggKyAxKTsKIAotICAgICAgICBD
RlN0cmluZ0dldENTdHJpbmcoc3RyLCBidWZmZXIsIGxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdV
VEY4KTsKKyAgICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0ciwgYnVmZmVyLmdldCgpLCBsZW5n
dGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CiAKLSAgICAgICAgbG9nVG9TdGRlcnIoYnVmZmVy
KTsKKyAgICAgICAgbG9nVG9TdGRlcnIoYnVmZmVyLmdldCgpKTsKIAotICAgICAgICBmcmVlKGJ1
ZmZlcik7CiAgICAgICAgIENGUmVsZWFzZShzdHIpOwogICAgICAgICBDRlJlbGVhc2UoY2ZGb3Jt
YXQpOwogICAgICAgICByZXR1cm47CkBAIC0xMzIsMTggKzEzMiwxNSBAQCBzdGF0aWMgdm9pZCB2
cHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiAg
ICAgICAgIHNpemVfdCBzaXplID0gMTAyNDsKIAogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBj
aGFyKiBidWZmZXIgPSAoY2hhciopbWFsbG9jKHNpemUpOwotCi0gICAgICAgICAgICBpZiAoYnVm
ZmVyID09IE5VTEwpCisgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IE1hbGxvY1B0cjxjaGFyPjo6
bWFsbG9jKHNpemUpOworICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIGlmICh2c25wcmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQs
IGFyZ3MpICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdBKGJ1ZmZl
cik7Ci0gICAgICAgICAgICAgICAgZnJlZShidWZmZXIpOworICAgICAgICAgICAgaWYgKHZzbnBy
aW50ZihidWZmZXIuZ2V0KCksIHNpemUsIGZvcm1hdCwgYXJncykgIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ0EoYnVmZmVyLmdldCgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnJlZShidWZmZXIpOwogICAg
ICAgICAgICAgc2l6ZSAqPSAyOwogICAgICAgICB9IHdoaWxlIChzaXplID4gMTAyNCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1l
TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5j
cHAKaW5kZXggNjAxNWFhNTlkMmI1NTA2MjM0MTZhNDkzZjlhZDE2YzE4NGYzYjFlYy4uYWUxMDIz
ZWMyNjhmYzU5MTZmYjNlYWIzMTRmODg5Y2JlNDFjOWIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCkBAIC0xNDYsNyArMTQ2LDcg
QEAgdm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQogRkZUU2V0dXAgRkZU
RnJhbWU6OmZmdFNldHVwRm9yU2l6ZSh1bnNpZ25lZCBmZnRTaXplKQogewogICAgIGlmICghZmZ0
U2V0dXBzKSB7Ci0gICAgICAgIGZmdFNldHVwcyA9IChGRlRTZXR1cCopbWFsbG9jKHNpemVvZihG
RlRTZXR1cCkgKiBrTWF4RkZUUG93MlNpemUpOworICAgICAgICBmZnRTZXR1cHMgPSAoRkZUU2V0
dXAqKWZhc3RNYWxsb2Moc2l6ZW9mKEZGVFNldHVwKSAqIGtNYXhGRlRQb3cyU2l6ZSk7CiAgICAg
ICAgIG1lbXNldChmZnRTZXR1cHMsIDAsIHNpemVvZihGRlRTZXR1cCkgKiBrTWF4RkZUUG93MlNp
emUpOwogICAgIH0KIApAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgRkZURnJhbWU6OmNsZWFudXAo
KQogICAgICAgICAgICAgdkRTUF9kZXN0cm95X2ZmdHNldHVwKGZmdFNldHVwc1tpXSk7CiAgICAg
fQogCi0gICAgZnJlZShmZnRTZXR1cHMpOworICAgIGZhc3RGcmVlKGZmdFNldHVwcyk7CiAgICAg
ZmZ0U2V0dXBzID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCBjZWE5ZjZhNDk1ODI1NjZmODk5MzBj
NDFkZGM2MTIwOWE0NzgyYTQ2Li41YWU0OWZkOWI4MzBiYjcxMDAyOTE1OWVhMzEzMzIzZGVjZmU3
MjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhY2hlV2luLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPG1sYW5nLmg+CiAj
aW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC0xMzcsMTIgKzEzOCwxMSBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4qIGdldExpbmtl
ZEZvbnRzKFN0cmluZyYgZmFtaWx5KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIFdDSEFSKiBsaW5rZWRGb250cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0NIQVIqPihtYWxsb2Mo
bGlua2VkRm9udHNCdWZmZXJTaXplKSk7Ci0gICAgaWYgKDo6UmVnUXVlcnlWYWx1ZUV4KGZvbnRM
aW5rS2V5LCBmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAs
IG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGxpbmtlZEZvbnRzKSwgJmxpbmtlZEZv
bnRzQnVmZmVyU2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykgeworICAgIGF1dG8gbGlua2VkRm9udHMg
PSBNYWxsb2NQdHI8V0NIQVI+OjptYWxsb2MobGlua2VkRm9udHNCdWZmZXJTaXplKTsKKyAgICBp
ZiAoOjpSZWdRdWVyeVZhbHVlRXgoZm9udExpbmtLZXksIGZhbWlseS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxCWVRF
Kj4obGlua2VkRm9udHMuZ2V0KCkpLCAmbGlua2VkRm9udHNCdWZmZXJTaXplKSA9PSBFUlJPUl9T
VUNDRVNTKSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpbmtlZEZvbnRzQnVmZmVyU2l6
ZSAvIHNpemVvZigqbGlua2VkRm9udHMpOwotICAgICAgICBhcHBlbmRMaW5rZWRGb250cyhsaW5r
ZWRGb250cywgbGVuZ3RoLCByZXN1bHQpOworICAgICAgICBhcHBlbmRMaW5rZWRGb250cyhsaW5r
ZWRGb250cy5nZXQoKSwgbGVuZ3RoLCByZXN1bHQpOwogICAgIH0KLSAgICBmcmVlKGxpbmtlZEZv
bnRzKTsKICAgICBSZWdDbG9zZUtleShmb250TGlua0tleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAppbmRleCA5ZmY4NDExZmIzYTk0MDZkMDEz
NDQyNTUyYjM2YThiYjExNzFkN2E3Li44ZGQ1NDZjNWJjNjFhZmMxZTUyYjkwODI3NmQyNzdiMjBj
NjkwNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC01NCw3ICs1NCw3IEBA
IEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mCiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsK
IAotICAgIExPR0ZPTlQmIGxvZ0ZvbnQgPSAqc3RhdGljX2Nhc3Q8TE9HRk9OVCo+KG1hbGxvYyhz
aXplb2YoTE9HRk9OVCkpKTsKKyAgICBMT0dGT05UIGxvZ0ZvbnQgeyAwIH07CiAgICAgbWVtY3B5
KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVf
dD4oc3RhdGljX2Nhc3Q8c2l6ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkp
KTsKIAogICAgIGxvZ0ZvbnQubGZIZWlnaHQgPSAtc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cAppbmRleCBhZThiNGY0YmNkNjc2ODRjYTk4OTI4ZDRiNzU1MWE1YjlhNTBkZjFkLi42MTI3MzRh
OWI3N2UxMjIyM2YzNzZjY2ZlMmFlZmI0YmI4MGI5ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4u
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFs
bG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC01NywxNCArNTgsMTIg
QEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZv
bnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZl
clNpemUsICJCaXRtYXAgZm9udHMgbm90IHN1cHBvcnRlZCB3aXRoIENvcmVHcmFwaGljcy4iKTsK
IAogICAgIGlmIChidWZmZXJTaXplKSB7Ci0gICAgICAgIE9VVExJTkVURVhUTUVUUklDVyogbWV0
cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJTaXplKTsKKyAgICAgICAg
YXV0byBtZXRyaWNzID0gTWFsbG9jUHRyPE9VVExJTkVURVhUTUVUUklDVz46Om1hbGxvYyhidWZm
ZXJTaXplKTsKIAotICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6
ZSwgbWV0cmljcyk7Ci0gICAgICAgIFdDSEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRy
X3QpbWV0cmljcyArICh1aW50cHRyX3QpbWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKKyAgICAgICAg
R2V0T3V0bGluZVRleHRNZXRyaWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MuZ2V0KCkpOwor
ICAgICAgICBXQ0hBUiogZmFjZU5hbWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MuZ2V0
KCkgKyAodWludHB0cl90KW1ldHJpY3MtPm90bXBGYWNlTmFtZSk7CiAKICAgICAgICAgcGxhdGZv
cm1EYXRhSW5pdChtX2ZvbnQtPmdldCgpLCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKLQotICAgICAg
ICBmcmVlKG1ldHJpY3MpOwogICAgIH0KIAogICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tCmluZGV4
IDIwMzQwMzNmMTMxNWVlY2QzYTE5NjUyMzVhOGU2NjBhZmIxODU2ZmYuLmE1MGM0NjZlMzI5MjVh
MDRkMTc2NzI3ZDE4MTc4ZTQ0NGY4ODljMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVOU1VSTEV4dHJhcy5tbQpAQCAtNzUwLDIxICs3NTAsMTggQEAgTlNV
UkwgKlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudChOU1VSTCAqVVJM
LCBDRlVSTENvbXBvbmVudFR5cGUKICAgICBpZiAoZnJhZ1JnLmxvY2F0aW9uID09IGtDRk5vdEZv
dW5kKQogICAgICAgICByZXR1cm4gVVJMOwogICAgIAotICAgIFVJbnQ4ICp1cmxCeXRlcywgYnVm
ZmVyWzIwNDhdOwotICAgIENGSW5kZXggbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChDRlVSTFJl
ZilVUkwsIGJ1ZmZlciwgMjA0OCk7CisgICAgVmVjdG9yPFVJbnQ4LCAyMDQ4PiB1cmxCeXRlcygy
MDQ4KTsKKyAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJM
LCB1cmxCeXRlcy5kYXRhKCksIHVybEJ5dGVzLnNpemUoKSk7CiAgICAgaWYgKG51bUJ5dGVzID09
IC0xKSB7CiAgICAgICAgIG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBO
VUxMLCAwKTsKLSAgICAgICAgdXJsQnl0ZXMgPSBzdGF0aWNfY2FzdDxVSW50OCo+KG1hbGxvYyhu
dW1CeXRlcykpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIHVybEJ5dGVz
LCBudW1CeXRlcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVybEJ5dGVzID0gYnVmZmVyOwotICAg
ICAgICAKLSAgICBOU1VSTCAqcmVzdWx0ID0gKE5TVVJMICopQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMo
TlVMTCwgdXJsQnl0ZXMsIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCwgTlVMTCk7CisgICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMpOworICAgICAgICBDRlVS
TEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgbnVtQnl0ZXMpOworICAg
IH0KKworICAgIE5TVVJMICpyZXN1bHQgPSAoTlNVUkwgKilDRlVSTENyZWF0ZVdpdGhCeXRlcyhO
VUxMLCB1cmxCeXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29k
aW5nVVRGOCwgTlVMTCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IChOU1VS
TCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLCBmcmFnUmcubG9jYXRpb24g
LSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgTlVMTCk7CisgICAgICAgIHJlc3VsdCA9
IChOU1VSTCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLmRhdGEoKSwgZnJh
Z1JnLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIE5VTEwpOwogICAg
ICAgICAKLSAgICBpZiAodXJsQnl0ZXMgIT0gYnVmZmVyKQotICAgICAgICBmcmVlKHVybEJ5dGVz
KTsKICAgICByZXR1cm4gcmVzdWx0ID8gW3Jlc3VsdCBhdXRvcmVsZWFzZV0gOiBVUkw7CiB9CiAK
QEAgLTg3OCwzMSArODc1LDI2IEBAIHN0YXRpYyBCT09MIGhhc1F1ZXN0aW9uTWFya09ubHlRdWVy
eVN0cmluZyhOU1VSTCAqVVJMKQogTlNEYXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShOU1VS
TCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKIHsKICAgICBzdGF0aWMg
Y29uc3QgaW50IFVSTENvbXBvbmVudFR5cGVCdWZmZXJMZW5ndGggPSAyMDQ4OworICAgIFZlY3Rv
cjxVSW50OCwgVVJMQ29tcG9uZW50VHlwZUJ1ZmZlckxlbmd0aD4gYWxsQnl0ZXNCdWZmZXIoVVJM
Q29tcG9uZW50VHlwZUJ1ZmZlckxlbmd0aCk7CiAgICAgCi0gICAgVUludDggc3RhdGljQWxsQnl0
ZXNCdWZmZXJbVVJMQ29tcG9uZW50VHlwZUJ1ZmZlckxlbmd0aF07Ci0gICAgVUludDggKmFsbEJ5
dGVzQnVmZmVyID0gc3RhdGljQWxsQnl0ZXNCdWZmZXI7Ci0gICAgCi0gICAgQ0ZJbmRleCBieXRl
c0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIsIFVS
TENvbXBvbmVudFR5cGVCdWZmZXJMZW5ndGgpOworICAgIENGSW5kZXggYnl0ZXNGaWxsZWQgPSBD
RlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLmRhdGEoKSwgYWxsQnl0
ZXNCdWZmZXIuc2l6ZSgpKTsKICAgICBpZiAoYnl0ZXNGaWxsZWQgPT0gLTEpIHsKICAgICAgICAg
Q0ZJbmRleCBieXRlc1RvQWxsb2NhdGUgPSBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIE5V
TEwsIDApOwotICAgICAgICBhbGxCeXRlc0J1ZmZlciA9IHN0YXRpY19jYXN0PFVJbnQ4ICo+KG1h
bGxvYyhieXRlc1RvQWxsb2NhdGUpKTsKLSAgICAgICAgYnl0ZXNGaWxsZWQgPSBDRlVSTEdldEJ5
dGVzKChDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLCBieXRlc1RvQWxsb2NhdGUpOworICAg
ICAgICBhbGxCeXRlc0J1ZmZlci5ncm93KGJ5dGVzVG9BbGxvY2F0ZSk7CisgICAgICAgIGJ5dGVz
RmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlci5kYXRh
KCksIGJ5dGVzVG9BbGxvY2F0ZSk7CiAgICAgfQogICAgIAogICAgIENGUmFuZ2UgcmFuZ2U7CiAg
ICAgaWYgKGNvbXBvbmVudFR5cGUgIT0gY29tcGxldGVVUkwpIHsKICAgICAgICAgcmFuZ2UgPSBD
RlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVudCgoQ0ZVUkxSZWYpVVJMLCBjb21wb25lbnRUeXBl
LCBOVUxMKTsKLSAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IGtDRk5vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGljQWxsQnl0ZXNCdWZmZXIgIT0gYWxsQnl0ZXNCdWZmZXIpCi0g
ICAgICAgICAgICAgICAgZnJlZShhbGxCeXRlc0J1ZmZlcik7CisgICAgICAgIGlmIChyYW5nZS5s
b2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICByYW5nZS5sb2NhdGlvbiA9IDA7CiAgICAgICAgIHJh
bmdlLmxlbmd0aCA9IGJ5dGVzRmlsbGVkOwogICAgIH0KICAgICAKLSAgICBOU0RhdGEgKmNvbXBv
bmVudERhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YWxsQnl0ZXNCdWZmZXIgKyByYW5nZS5s
b2NhdGlvbiBsZW5ndGg6cmFuZ2UubGVuZ3RoXTsgCisgICAgTlNEYXRhICpjb21wb25lbnREYXRh
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyLmRhdGEoKSArIHJhbmdlLmxv
Y2F0aW9uIGxlbmd0aDpyYW5nZS5sZW5ndGhdOyAKICAgICAKICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyICpieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oW2NvbXBvbmVu
dERhdGEgYnl0ZXNdKTsKICAgICBOU011dGFibGVEYXRhICpyZXN1bHREYXRhID0gW05TTXV0YWJs
ZURhdGEgZGF0YV07CkBAIC05MjcsOSArOTE5LDYgQEAgTlNEYXRhICpkYXRhRm9yVVJMQ29tcG9u
ZW50VHlwZShOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKICAg
ICAgICAgfSAgICAgICAgICAgICAgIAogICAgIH0KICAgICAKLSAgICBpZiAoc3RhdGljQWxsQnl0
ZXNCdWZmZXIgIT0gYWxsQnl0ZXNCdWZmZXIpCi0gICAgICAgIGZyZWUoYWxsQnl0ZXNCdWZmZXIp
OwotICAgIAogICAgIHJldHVybiByZXN1bHREYXRhOwogfQogCkBAIC0xMDU4LDggKzEwNDcsOCBA
QCBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKlVSTCkKICAgICAKICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpwID0gYmVmb3JlOwogICAgIGludCBidWZmZXJMZW5ndGggPSAobGVu
Z3RoICogMykgKyAxOwotICAgIGNoYXIgKmFmdGVyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihtYWxs
b2MoYnVmZmVyTGVuZ3RoKSk7IC8vIGxhcmdlIGVub3VnaCB0byAlLWVzY2FwZSBldmVyeSBjaGFy
YWN0ZXIKLSAgICBjaGFyICpxID0gYWZ0ZXI7CisgICAgYXV0byBhZnRlciA9IE1hbGxvY1B0cjxj
aGFyPjo6bWFsbG9jKGJ1ZmZlckxlbmd0aCk7IC8vIGxhcmdlIGVub3VnaCB0byAlLWVzY2FwZSBl
dmVyeSBjaGFyYWN0ZXIKKyAgICBjaGFyICpxID0gYWZ0ZXIuZ2V0KCk7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBwW2ld
OwogICAgICAgICAvLyB1bmVzY2FwZSBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgaW5kaWNhdGUgYnl0
ZXMgZ3JlYXRlciB0aGFuIDB4N2YKQEAgLTEwODYsMTcgKzEwNzUsMTcgQEAgTlNTdHJpbmcgKnVz
ZXJWaXNpYmxlU3RyaW5nKE5TVVJMICpVUkwpCiAgICAgKnEgPSAnXDAnOwogICAgIAogICAgIC8v
IENoZWNrIHN0cmluZyB0byBzZWUgaWYgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBkaXNwbGF5IHVz
aW5nIFVURi04ICAKLSAgICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOmFmdGVyXTsKKyAgICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOmFmdGVyLmdldCgpXTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAg
ICAvLyBDb3VsZCBub3QgY29udmVydCB0byBVVEYtOC4KICAgICAgICAgLy8gQ29udmVydCBjaGFy
YWN0ZXJzIGdyZWF0ZXIgdGhhbiAweDdmIHRvIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAgICAgIC8v
IFNoaWZ0IGN1cnJlbnQgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgogICAgICAgICAv
LyB0aGVuIHdlIHdpbGwgY29weSBiYWNrIGJ5dGVzIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVy
IAogICAgICAgICAvLyBhcyB3ZSBjb252ZXJ0LgotICAgICAgICBpbnQgYWZ0ZXJsZW5ndGggPSBx
IC0gYWZ0ZXI7Ci0gICAgICAgIGNoYXIgKnAgPSBhZnRlciArIGJ1ZmZlckxlbmd0aCAtIGFmdGVy
bGVuZ3RoIC0gMTsKLSAgICAgICAgbWVtbW92ZShwLCBhZnRlciwgYWZ0ZXJsZW5ndGggKyAxKTsg
Ly8gY29waWVzIHRyYWlsaW5nICdcMCcKLSAgICAgICAgY2hhciAqcSA9IGFmdGVyOworICAgICAg
ICBpbnQgYWZ0ZXJsZW5ndGggPSBxIC0gYWZ0ZXIuZ2V0KCk7CisgICAgICAgIGNoYXIgKnAgPSBh
ZnRlci5nZXQoKSArIGJ1ZmZlckxlbmd0aCAtIGFmdGVybGVuZ3RoIC0gMTsKKyAgICAgICAgbWVt
bW92ZShwLCBhZnRlci5nZXQoKSwgYWZ0ZXJsZW5ndGggKyAxKTsgLy8gY29waWVzIHRyYWlsaW5n
ICdcMCcKKyAgICAgICAgY2hhciAqcSA9IGFmdGVyLmdldCgpOwogICAgICAgICB3aGlsZSAoKnAp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpwOwogICAgICAgICAgICAgaWYgKGMg
PiAweDdmKSB7CkBAIC0xMTA4LDExICsxMDk3LDkgQEAgTlNTdHJpbmcgKnVzZXJWaXNpYmxlU3Ry
aW5nKE5TVVJMICpVUkwpCiAgICAgICAgICAgICBwKys7CiAgICAgICAgIH0KICAgICAgICAgKnEg
PSAnXDAnOwotICAgICAgICByZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
YWZ0ZXJdOworICAgICAgICByZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
YWZ0ZXIuZ2V0KCldOwogICAgIH0KICAgICAKLSAgICBmcmVlKGFmdGVyKTsKLSAgICAKICAgICBp
ZiAobWF5TmVlZEhvc3ROYW1lRGVjb2RpbmcpIHsKICAgICAgICAgLy8gRklYTUU6IElzIGl0IGdv
b2QgdG8gaWdub3JlIHRoZSBmYWlsdXJlIG9mIG1hcEhvc3ROYW1lcyBhbmQga2VlcCByZXN1bHQg
aW50YWN0PwogICAgICAgICBOU1N0cmluZyAqbWFwcGVkUmVzdWx0ID0gbWFwSG9zdE5hbWVzKHJl
c3VsdCwgTk8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcAppbmRleCAyZGRjMzcwYjljMjJiY2UwYjUzZmI2NGJjMDMxOGQw
YjVmZGI2ODA4Li5jZmRiNDRlOTQzYmIzZTQzYTYwM2RkNmQwNjE1ZjhiZmNjN2MwOWM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHNobG9iai5oPgogI2luY2x1ZGUg
PHNobHdhcGkuaD4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+IC8vIGZvciBJTlRFUk5FVF9NQVhfVVJM
X0xFTkdUSAorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTI3NywxMSArMjc4LDEyIEBAIHZvaWQgbWFya3VwVG9D
RkhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgc3JjVVJMLCBWZWN0b3I8
Y2hhcj4mIHJlCiAgICAgdW5zaWduZWQgZW5kRnJhZ21lbnRPZmZzZXQgPSBzdGFydEZyYWdtZW50
T2Zmc2V0ICsgbWFya3VwVVRGOC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBlbmRIVE1MT2Zmc2V0
ID0gZW5kRnJhZ21lbnRPZmZzZXQgKyBzdHJsZW4oZW5kTWFya3VwKTsKIAotICAgIHVuc2lnbmVk
IGhlYWRlckJ1ZmZlckxlbmd0aCA9IHN0YXJ0SFRNTE9mZnNldCArIDE7IC8vICsgMSBmb3IgJ1ww
JyB0ZXJtaW5hdG9yLgotICAgIGNoYXIqIGhlYWRlckJ1ZmZlciA9IChjaGFyKiltYWxsb2MoaGVh
ZGVyQnVmZmVyTGVuZ3RoKTsKLSAgICBzbnByaW50ZihoZWFkZXJCdWZmZXIsIGhlYWRlckJ1ZmZl
ckxlbmd0aCwgaGVhZGVyLCBzdGFydEhUTUxPZmZzZXQsIGVuZEhUTUxPZmZzZXQsIHN0YXJ0RnJh
Z21lbnRPZmZzZXQsIGVuZEZyYWdtZW50T2Zmc2V0KTsKLSAgICBhcHBlbmQocmVzdWx0LCBDU3Ry
aW5nKGhlYWRlckJ1ZmZlcikpOwotICAgIGZyZWUoaGVhZGVyQnVmZmVyKTsKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGhlYWRlckJ1ZmZlckxlbmd0aCA9IHN0YXJ0SFRNTE9mZnNldCArIDE7IC8v
ICsgMSBmb3IgJ1wwJyB0ZXJtaW5hdG9yLgorICAgICAgICBhdXRvIGhlYWRlckJ1ZmZlciA9IE1h
bGxvY1B0cjxjaGFyPjo6bWFsbG9jKGhlYWRlckJ1ZmZlckxlbmd0aCk7CisgICAgICAgIHNucHJp
bnRmKGhlYWRlckJ1ZmZlci5nZXQoKSwgaGVhZGVyQnVmZmVyTGVuZ3RoLCBoZWFkZXIsIHN0YXJ0
SFRNTE9mZnNldCwgZW5kSFRNTE9mZnNldCwgc3RhcnRGcmFnbWVudE9mZnNldCwgZW5kRnJhZ21l
bnRPZmZzZXQpOworICAgICAgICBhcHBlbmQocmVzdWx0LCBDU3RyaW5nKGhlYWRlckJ1ZmZlci5n
ZXQoKSkpOworICAgIH0KICAgICBpZiAoc291cmNlVVJMVVRGOC5sZW5ndGgoKSkgewogICAgICAg
ICBhcHBlbmQocmVzdWx0LCBzb3VyY2VVUkxQcmVmaXgpOwogICAgICAgICBhcHBlbmQocmVzdWx0
LCBzb3VyY2VVUkxVVEY4KTsK
</data>
<flag name="review"
          id="339983"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319835</attachid>
            <date>2017-09-03 22:07:41 -0700</date>
            <delta_ts>2017-09-03 22:16:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176310-20170904140740.patch</filename>
            <type>text/plain</type>
            <size>21327</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MWY2ZjllMWQzYjA0ZmNiY2Y2MDgyMTFlMGQ1NzJlY2UwN2Y4M2VkLi5iM2IwMzc1ODZkM2Q3MTc1
NTJiNmZiYWY3ZWMzN2E0NDcyZTFhNDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNyBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIEFQSS9KU1dyYXBwZXJNYXAubW06CisgICAgICAgIChzZWxlY3RvclRv
UHJvcGVydHlOYW1lKToKKworMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysrMDMgYWxsb2NhdG9yIGludGVyZmFj
ZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggN2QyNzUzZmVmMTMzNGEyODdjOGQxOGJlOWY1ZWZlNzE2OThh
NjllOS4uYzFlZjkwZjEyMGQ2ZTU3YmNmNjMzZmYxMmZlZDQ4MDJhZWEzMGY1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNiBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKworMjAxNy0wOS0wMyAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysr
MDMgYWxsb2NhdG9yIGludGVyZmFjZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NDllZmM3
NDQ4OGNhN2QzNDY3MGY0NWI1ZjY0NzVlZTJmZDVhOWJlLi5kZDg3Yjk2YmUwM2IwZWUzZGIyNzJm
MTM3NDc1ZWY3MmRjYmNlMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTctMDkt
MDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUmVt
b3ZlICJtYWxsb2MiIGFuZCAiZnJlZSIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgTWFsbG9jUHRyPD4sIGZhc3RNYWxsb2MvZmFzdEZyZWUs
IG9yIFZlY3RvciBpbnN0ZWFkIG9mIG1hbnVhbCBjYWxsIG9mIHN5c3RlbSBtYWxsb2MvZnJlZS4K
KyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgYXBwbHkgdGhlIGFib3ZlIGNoYW5nZSBpZiB3ZSBj
YW4gZWFzaWx5IGZpbmQgdGhlIHBhaXIgb2YgbWFsbG9jL2ZyZWUuCisgICAgICAgIEFuZCB3ZSBk
byBub3QgdG91Y2ggcGx1Z2luIGRpcmVjdG9yeSBzaW5jZSB0aGUgZXh0ZXJuYWwgY29kZSBjb3Vs
ZCBjYWxsIGZyZWUoKSBvbnRvIHRoZQorICAgICAgICBmYXN0TWFsbG9jLWVkIG1lbW9yeS4KKwor
ICAgICAgICBBbHNvLCB3ZSBzdGlsbCB1c2UgbWFsbG9jIGlmIHRoZSBzeXN0ZW0gYWRvcHRzIHRo
ZSBhbGxvY2F0ZWQgbWVtb3J5LiBMYXRlciwgdGhlIHN5c3RlbQorICAgICAgICB3aWxsIGRlYWxs
b2NhdGUgaXQgYnkgY2FsbGluZyB0aGUgc3lzdGVtICJmcmVlIi4KKworICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFt
ZTo6ZmZ0U2V0dXBGb3JTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldExpbmtlZEZvbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6VVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEJ5UmVtb3Zp
bmdDb21wb25lbnRBbmRTdWJzZXF1ZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVN0cmluZ1dpdGhFc2NhcGVkVW5zYWZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3Jl
Ojp1c2VyVmlzaWJsZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrdXBUb0NGSFRNTCk6CisKIDIw
MTctMDktMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZl
IGdldEZpbGVNZXRhZGF0YSgpIHJldHVybiBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQppbmRleCA4Y2NlMzY5MmU2
MDRiZDM0YmFkYjdlNzE3MjUzNmQ5OWIwZDE4NTBmLi4wNmNjNWY4OGY3ZGM4ZDFmOWVlNjllNTc4
YzAwZDExZmQ4MDlkMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
V3JhcHBlck1hcC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1h
cC5tbQpAQCAtNjIsNiArNjIsOCBAQCAtIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNs
YXNzOihDbGFzcyljbHM7CiAKIEBlbmQKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25l
ZCBJbml0aWFsQnVmZmVyU2l6ZSB7IDI1NiB9OworCiAvLyBEZWZhdWx0IGNvbnZlcnNpb24gb2Yg
c2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgogLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92
ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRhbGl6
ZWQuCiBzdGF0aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciog
c3RhcnQpCkBAIC03NSwxMCArNzcsMTAgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJv
cGVydHlOYW1lKGNvbnN0IGNoYXIqIHN0YXJ0KQogICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENv
bG9uIC0gc3RhcnQ7CiAgICAgLy8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91
Z2ggdG8gaG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4
Y2x1ZGluZwogICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAo
VGhpcyBpcyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KLSAg
ICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKGhlYWRlciArIHN0cmxl
bihmaXJzdENvbG9uICsgMSkgKyAxKSk7CisgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJT
aXplPiBidWZmZXIoaGVhZGVyICsgc3RybGVuKGZpcnN0Q29sb24gKyAxKSArIDEpOwogICAgIC8v
IENvcHkgJ2hlYWRlcicgY2hhcmFjdGVycywgc2V0IG91dHB1dCB0byBwb2ludCB0byB0aGUgZW5k
IG9mIHRoaXMgJiBpbnB1dCB0byBwb2ludCBwYXN0IHRoZSBmaXJzdCAnOicuCi0gICAgbWVtY3B5
KGJ1ZmZlciwgc3RhcnQsIGhlYWRlcik7Ci0gICAgY2hhciogb3V0cHV0ID0gYnVmZmVyICsgaGVh
ZGVyOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBzdGFydCwgaGVhZGVyKTsKKyAgICBjaGFy
KiBvdXRwdXQgPSBidWZmZXIuZGF0YSgpICsgaGVhZGVyOwogICAgIGNvbnN0IGNoYXIqIGlucHV0
ID0gc3RhcnQgKyBoZWFkZXIgKyAxOwogCiAgICAgLy8gT24gZW50cnkgdG8gdGhlIGxvb3AsIHdl
IGhhdmUgYWxyZWFkeSBza2lwcGVkIG92ZXIgYSAnOicgZnJvbSB0aGUgaW5wdXQuCkBAIC0xMDEs
OSArMTAzLDcgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJvcGVydHlOYW1lKGNvbnN0
IGNoYXIqIHN0YXJ0KQogICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQg
YSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgogICAgIH0KIGRvbmU6Ci0gICAgTlNTdHJpbmcg
KnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpidWZmZXJdOwotICAgIGZy
ZWUoYnVmZmVyKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6YnVmZmVyLmRhdGEoKV07CiB9CiAKIHN0YXRpYyBib29sIGNvbnN0
cnVjdG9ySGFzSW5zdGFuY2UoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgY29uc3RydWN0
b3JSZWYsIEpTVmFsdWVSZWYgcG9zc2libGVJbnN0YW5jZSwgSlNWYWx1ZVJlZiopCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuY3BwCmluZGV4IDUxNTkwODBkOTNhOTZlMTQwZTMwOTJmODgzMDc0YWRjYWUxNmQ4N2Mu
LjY4YWMyMTlhZmI1MWMyYzVhM2ViMzljNTg2OTM5ODg5MWIxMjE4MzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2dnaW5nQWNjdW11bGF0b3IuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2Uu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgpAQCAtODcsMzEgKzg4LDI5IEBAIHN0YXRpYyB2b2lkIGxvZ1RvU3RkZXJyKGNvbnN0
IGNoYXIqIGJ1ZmZlcikKICAgICBmcHV0cyhidWZmZXIsIHN0ZGVycik7CiB9CiAKK3N0YXRpYyBj
b25zdCBjb25zdGV4cHIgdW5zaWduZWQgSW5pdGlhbEJ1ZmZlclNpemUgeyAyNTYgfTsKKwogV1RG
X0FUVFJJQlVURV9QUklOVEYoMSwgMCkKIHN0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX2NvbW1v
bihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKIHsKICNpZiBVU0UoQ0YpICYmICFP
UyhXSU5ET1dTKQogICAgIGlmIChzdHJzdHIoZm9ybWF0LCAiJUAiKSkgewotICAgICAgICBDRlN0
cmluZ1JlZiBjZkZvcm1hdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgZm9ybWF0
LCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOworICAgICAgICBhdXRvIGNmRm9ybWF0ID0gYWRvcHRD
RihDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKG51bGxwdHIsIGZvcm1hdCwga0NGU3RyaW5nRW5j
b2RpbmdVVEY4KSk7CiAKICNpZiBDT01QSUxFUihDTEFORykKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9u
bGl0ZXJhbCIKICNlbmRpZgotICAgICAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhGb3JtYXRBbmRBcmd1bWVudHMoTlVMTCwgTlVMTCwgY2ZGb3JtYXQsIGFyZ3MpOworICAg
ICAgICBhdXRvIHN0ciA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1l
bnRzKG51bGxwdHIsIG51bGxwdHIsIGNmRm9ybWF0LCBhcmdzKSk7CiAjaWYgQ09NUElMRVIoQ0xB
TkcpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKICAgICAgICAgQ0ZJbmRl
eCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2RpbmcoQ0ZTdHJpbmdHZXRM
ZW5ndGgoc3RyKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAgY2hhciogYnVmZmVy
ID0gKGNoYXIqKW1hbGxvYyhsZW5ndGggKyAxKTsKLQotICAgICAgICBDRlN0cmluZ0dldENTdHJp
bmcoc3RyLCBidWZmZXIsIGxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICAgICAg
VmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJTaXplPiBidWZmZXIobGVuZ3RoICsgMSk7CiAKLSAg
ICAgICAgbG9nVG9TdGRlcnIoYnVmZmVyKTsKKyAgICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0
ciwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwogCi0gICAg
ICAgIGZyZWUoYnVmZmVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHN0cik7Ci0gICAgICAgIENGUmVs
ZWFzZShjZkZvcm1hdCk7CisgICAgICAgIGxvZ1RvU3RkZXJyKGJ1ZmZlci5kYXRhKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzAsMjAgKzEyOSwxMyBAQCBzdGF0aWMgdm9pZCB2
cHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiAj
ZWxpZiBIQVZFKElTREVCVUdHRVJQUkVTRU5UKQogICAgIGlmIChJc0RlYnVnZ2VyUHJlc2VudCgp
KSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gMTAyNDsKLQorICAgICAgICBWZWN0b3I8Y2hhcj4g
YnVmZmVyKHNpemUpOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjaGFyKiBidWZmZXIgPSAo
Y2hhciopbWFsbG9jKHNpemUpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICh2c25wcmludGYoYnVmZmVy
LCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgT3V0cHV0RGVi
dWdTdHJpbmdBKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZnJlZShidWZmZXIpOworICAgICAg
ICAgICAgYnVmZmVyLmdyb3coc2l6ZSk7CisgICAgICAgICAgICBpZiAodnNucHJpbnRmKGJ1ZmZl
ci5nZXQoKSwgc2l6ZSwgZm9ybWF0LCBhcmdzKSAhPSAtMSkgeworICAgICAgICAgICAgICAgIE91
dHB1dERlYnVnU3RyaW5nQShidWZmZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAgICAgICAgICBz
aXplICo9IDI7CiAgICAgICAgIH0gd2hpbGUgKHNpemUgPiAxMDI0KTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAppbmRleCA2
MDE1YWE1OWQyYjU1MDYyMzQxNmE0OTNmOWFkMTZjMTg0ZjNiMWVjLi5hZTEwMjNlYzI2OGZjNTkx
NmZiM2VhYjMxNGY4ODljYmU0MWM5YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEZG
VEZyYW1lOjpkb0ludmVyc2VGRlQoZmxvYXQqIGRhdGEpCiBGRlRTZXR1cCBGRlRGcmFtZTo6ZmZ0
U2V0dXBGb3JTaXplKHVuc2lnbmVkIGZmdFNpemUpCiB7CiAgICAgaWYgKCFmZnRTZXR1cHMpIHsK
LSAgICAgICAgZmZ0U2V0dXBzID0gKEZGVFNldHVwKiltYWxsb2Moc2l6ZW9mKEZGVFNldHVwKSAq
IGtNYXhGRlRQb3cyU2l6ZSk7CisgICAgICAgIGZmdFNldHVwcyA9IChGRlRTZXR1cCopZmFzdE1h
bGxvYyhzaXplb2YoRkZUU2V0dXApICoga01heEZGVFBvdzJTaXplKTsKICAgICAgICAgbWVtc2V0
KGZmdFNldHVwcywgMCwgc2l6ZW9mKEZGVFNldHVwKSAqIGtNYXhGRlRQb3cyU2l6ZSk7CiAgICAg
fQogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBGRlRGcmFtZTo6Y2xlYW51cCgpCiAgICAgICAg
ICAgICB2RFNQX2Rlc3Ryb3lfZmZ0c2V0dXAoZmZ0U2V0dXBzW2ldKTsKICAgICB9CiAKLSAgICBm
cmVlKGZmdFNldHVwcyk7CisgICAgZmFzdEZyZWUoZmZ0U2V0dXBzKTsKICAgICBmZnRTZXR1cHMg
PSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IGNlYTlmNmE0OTU4MjU2NmY4OTkzMGM0MWRkYzYxMjA5
YTQ3ODJhNDYuLjUyN2UzYjY1OWEwMDYzNmRlMjEzNWJkYzM1MDNiNWUzNmUyNmNiY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCkBAIC0xMzcsMTIgKzEzNywxMiBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4q
IGdldExpbmtlZEZvbnRzKFN0cmluZyYgZmFtaWx5KQogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIFdDSEFSKiBsaW5rZWRGb250cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0NIQVIq
PihtYWxsb2MobGlua2VkRm9udHNCdWZmZXJTaXplKSk7Ci0gICAgaWYgKDo6UmVnUXVlcnlWYWx1
ZUV4KGZvbnRMaW5rS2V5LCBmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIDAsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGxpbmtlZEZvbnRzKSwg
JmxpbmtlZEZvbnRzQnVmZmVyU2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBsaW5rZWRGb250c0J1ZmZlclNpemUgLyBzaXplb2YoKmxpbmtlZEZvbnRz
KTsKLSAgICAgICAgYXBwZW5kTGlua2VkRm9udHMobGlua2VkRm9udHMsIGxlbmd0aCwgcmVzdWx0
KTsKKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIHVuc2lnbmVkIEluaXRpYWxCdWZmZXJTaXpl
IHsgMjU2IC8gc2l6ZW9mKFdDSEFSKSB9OworICAgIFZlY3RvcjxXQ0hBUiwgSW5pdGlhbEJ1ZmZl
clNpemU+IGxpbmtlZEZvbnRzKHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdDSEFSKT4obGlu
a2VkRm9udHNCdWZmZXJTaXplKSAvIHNpemVvZihXQ0hBUikpOworICAgIGlmICg6OlJlZ1F1ZXJ5
VmFsdWVFeChmb250TGlua0tleSwgZmFtaWx5LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCAwLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEJZVEUqPihsaW5rZWRGb250
cy5kYXRhKCkpLCAmbGlua2VkRm9udHNCdWZmZXJTaXplKSA9PSBFUlJPUl9TVUNDRVNTKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpbmtlZEZvbnRzQnVmZmVyU2l6ZSAvIHNpemVvZihX
Q0hBUik7CisgICAgICAgIGFwcGVuZExpbmtlZEZvbnRzKGxpbmtlZEZvbnRzLmRhdGEoKSwgbGVu
Z3RoLCByZXN1bHQpOwogICAgIH0KLSAgICBmcmVlKGxpbmtlZEZvbnRzKTsKICAgICBSZWdDbG9z
ZUtleShmb250TGlua0tleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAppbmRleCA5ZmY4NDExZmIzYTk0MDZkMDEzNDQyNTUyYjM2YThiYjExNzFk
N2E3Li44ZGQ1NDZjNWJjNjFhZmMxZTUyYjkwODI3NmQyNzdiMjBjNjkwNDQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mCiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsKIAotICAgIExPR0ZPTlQmIGxv
Z0ZvbnQgPSAqc3RhdGljX2Nhc3Q8TE9HRk9OVCo+KG1hbGxvYyhzaXplb2YoTE9HRk9OVCkpKTsK
KyAgICBMT0dGT05UIGxvZ0ZvbnQgeyAwIH07CiAgICAgbWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFt
ZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBzaXplb2Yo
bG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3RhdGljX2Nhc3Q8c2l6
ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKIAogICAgIGxvZ0ZvbnQu
bGZIZWlnaHQgPSAtc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAppbmRleCBhZThiNGY0YmNk
Njc2ODRjYTk4OTI4ZDRiNzU1MWE1YjlhNTBkZjFkLi42MTI3MzRhOWI3N2UxMjIyM2YzNzZjY2Zl
MmFlZmI0YmI4MGI5ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC01NywxNCArNTgsMTIgQEAgRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJv
b2wgYm9sZCwKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZlclNpemUsICJCaXRtYXAgZm9u
dHMgbm90IHN1cHBvcnRlZCB3aXRoIENvcmVHcmFwaGljcy4iKTsKIAogICAgIGlmIChidWZmZXJT
aXplKSB7Ci0gICAgICAgIE9VVExJTkVURVhUTUVUUklDVyogbWV0cmljcyA9IChPVVRMSU5FVEVY
VE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJTaXplKTsKKyAgICAgICAgYXV0byBtZXRyaWNzID0gTWFs
bG9jUHRyPE9VVExJTkVURVhUTUVUUklDVz46Om1hbGxvYyhidWZmZXJTaXplKTsKIAotICAgICAg
ICBHZXRPdXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6ZSwgbWV0cmljcyk7Ci0gICAg
ICAgIFdDSEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRyX3QpbWV0cmljcyArICh1aW50
cHRyX3QpbWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKKyAgICAgICAgR2V0T3V0bGluZVRleHRNZXRy
aWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MuZ2V0KCkpOworICAgICAgICBXQ0hBUiogZmFj
ZU5hbWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MuZ2V0KCkgKyAodWludHB0cl90KW1l
dHJpY3MtPm90bXBGYWNlTmFtZSk7CiAKICAgICAgICAgcGxhdGZvcm1EYXRhSW5pdChtX2ZvbnQt
PmdldCgpLCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKLQotICAgICAgICBmcmVlKG1ldHJpY3MpOwog
ICAgIH0KIAogICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tCmluZGV4IDIwMzQwMzNmMTMxNWVlY2Qz
YTE5NjUyMzVhOGU2NjBhZmIxODU2ZmYuLjJkNGFiYTNjOGFjNDMxNTYyZTU3ZWYyNWM3NTcwNTI2
Mjg1NDcwN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
TlNVUkxFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVO
U1VSTEV4dHJhcy5tbQpAQCAtNzUwLDIxICs3NTAsMTggQEAgTlNVUkwgKlVSTEJ5VHJ1bmNhdGlu
Z09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudChOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5
cGUKICAgICBpZiAoZnJhZ1JnLmxvY2F0aW9uID09IGtDRk5vdEZvdW5kKQogICAgICAgICByZXR1
cm4gVVJMOwogICAgIAotICAgIFVJbnQ4ICp1cmxCeXRlcywgYnVmZmVyWzIwNDhdOwotICAgIENG
SW5kZXggbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIGJ1ZmZlciwgMjA0
OCk7CisgICAgVmVjdG9yPFVJbnQ4LCBVUkxfQllURVNfQlVGRkVSX0xFTkdUSD4gdXJsQnl0ZXMo
VVJMX0JZVEVTX0JVRkZFUl9MRU5HVEgpOworICAgIENGSW5kZXggbnVtQnl0ZXMgPSBDRlVSTEdl
dEJ5dGVzKChDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgdXJsQnl0ZXMuc2l6ZSgpKTsK
ICAgICBpZiAobnVtQnl0ZXMgPT0gLTEpIHsKICAgICAgICAgbnVtQnl0ZXMgPSBDRlVSTEdldEJ5
dGVzKChDRlVSTFJlZilVUkwsIE5VTEwsIDApOwotICAgICAgICB1cmxCeXRlcyA9IHN0YXRpY19j
YXN0PFVJbnQ4Kj4obWFsbG9jKG51bUJ5dGVzKSk7Ci0gICAgICAgIENGVVJMR2V0Qnl0ZXMoKENG
VVJMUmVmKVVSTCwgdXJsQnl0ZXMsIG51bUJ5dGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXJs
Qnl0ZXMgPSBidWZmZXI7Ci0gICAgICAgIAotICAgIE5TVVJMICpyZXN1bHQgPSAoTlNVUkwgKilD
RlVSTENyZWF0ZVdpdGhCeXRlcyhOVUxMLCB1cmxCeXRlcywgZnJhZ1JnLmxvY2F0aW9uIC0gMSwg
a0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBOVUxMKTsKKyAgICAgICAgdXJsQnl0ZXMuZ3JvdyhudW1C
eXRlcyk7CisgICAgICAgIENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgdXJsQnl0ZXMuZGF0
YSgpLCBudW1CeXRlcyk7CisgICAgfQorCisgICAgTlNVUkwgKnJlc3VsdCA9IChOU1VSTCAqKUNG
VVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLmRhdGEoKSwgZnJhZ1JnLmxvY2F0aW9u
IC0gMSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBOVUxMKTsKICAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmVzdWx0ID0gKE5TVVJMICopQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgdXJsQnl0
ZXMsIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCBOVUxM
KTsKKyAgICAgICAgcmVzdWx0ID0gKE5TVVJMICopQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMoTlVMTCwg
dXJsQnl0ZXMuZGF0YSgpLCBmcmFnUmcubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lT
T0xhdGluMSwgTlVMTCk7CiAgICAgICAgIAotICAgIGlmICh1cmxCeXRlcyAhPSBidWZmZXIpCi0g
ICAgICAgIGZyZWUodXJsQnl0ZXMpOwogICAgIHJldHVybiByZXN1bHQgPyBbcmVzdWx0IGF1dG9y
ZWxlYXNlXSA6IFVSTDsKIH0KIApAQCAtODc3LDMyICs4NzQsMjUgQEAgc3RhdGljIEJPT0wgaGFz
UXVlc3Rpb25NYXJrT25seVF1ZXJ5U3RyaW5nKE5TVVJMICpVUkwpCiAKIE5TRGF0YSAqZGF0YUZv
clVSTENvbXBvbmVudFR5cGUoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wb25lbnRUeXBlIGNvbXBvbmVu
dFR5cGUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBVUkxDb21wb25lbnRUeXBlQnVmZmVyTGVu
Z3RoID0gMjA0ODsKLSAgICAKLSAgICBVSW50OCBzdGF0aWNBbGxCeXRlc0J1ZmZlcltVUkxDb21w
b25lbnRUeXBlQnVmZmVyTGVuZ3RoXTsKLSAgICBVSW50OCAqYWxsQnl0ZXNCdWZmZXIgPSBzdGF0
aWNBbGxCeXRlc0J1ZmZlcjsKLSAgICAKLSAgICBDRkluZGV4IGJ5dGVzRmlsbGVkID0gQ0ZVUkxH
ZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlciwgVVJMQ29tcG9uZW50VHlwZUJ1
ZmZlckxlbmd0aCk7CisgICAgVmVjdG9yPFVJbnQ4LCBVUkxfQllURVNfQlVGRkVSX0xFTkdUSD4g
YWxsQnl0ZXNCdWZmZXIoVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEgpOworICAgIENGSW5kZXggYnl0
ZXNGaWxsZWQgPSBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLmRh
dGEoKSwgYWxsQnl0ZXNCdWZmZXIuc2l6ZSgpKTsKICAgICBpZiAoYnl0ZXNGaWxsZWQgPT0gLTEp
IHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvQWxsb2NhdGUgPSBDRlVSTEdldEJ5dGVzKChDRlVS
TFJlZilVUkwsIE5VTEwsIDApOwotICAgICAgICBhbGxCeXRlc0J1ZmZlciA9IHN0YXRpY19jYXN0
PFVJbnQ4ICo+KG1hbGxvYyhieXRlc1RvQWxsb2NhdGUpKTsKLSAgICAgICAgYnl0ZXNGaWxsZWQg
PSBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLCBieXRlc1RvQWxs
b2NhdGUpOworICAgICAgICBhbGxCeXRlc0J1ZmZlci5ncm93KGJ5dGVzVG9BbGxvY2F0ZSk7Cisg
ICAgICAgIGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRl
c0J1ZmZlci5kYXRhKCksIGJ5dGVzVG9BbGxvY2F0ZSk7CiAgICAgfQogICAgIAogICAgIENGUmFu
Z2UgcmFuZ2U7CiAgICAgaWYgKGNvbXBvbmVudFR5cGUgIT0gY29tcGxldGVVUkwpIHsKICAgICAg
ICAgcmFuZ2UgPSBDRlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVudCgoQ0ZVUkxSZWYpVVJMLCBj
b21wb25lbnRUeXBlLCBOVUxMKTsKLSAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IGtDRk5v
dEZvdW5kKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljQWxsQnl0ZXNCdWZmZXIgIT0gYWxsQnl0
ZXNCdWZmZXIpCi0gICAgICAgICAgICAgICAgZnJlZShhbGxCeXRlc0J1ZmZlcik7CisgICAgICAg
IGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICByYW5nZS5sb2NhdGlvbiA9IDA7
CiAgICAgICAgIHJhbmdlLmxlbmd0aCA9IGJ5dGVzRmlsbGVkOwogICAgIH0KICAgICAKLSAgICBO
U0RhdGEgKmNvbXBvbmVudERhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YWxsQnl0ZXNCdWZm
ZXIgKyByYW5nZS5sb2NhdGlvbiBsZW5ndGg6cmFuZ2UubGVuZ3RoXTsgCisgICAgTlNEYXRhICpj
b21wb25lbnREYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyLmRhdGEo
KSArIHJhbmdlLmxvY2F0aW9uIGxlbmd0aDpyYW5nZS5sZW5ndGhdOyAKICAgICAKICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIg
Kj4oW2NvbXBvbmVudERhdGEgYnl0ZXNdKTsKICAgICBOU011dGFibGVEYXRhICpyZXN1bHREYXRh
ID0gW05TTXV0YWJsZURhdGEgZGF0YV07CkBAIC05MjcsOSArOTE3LDYgQEAgTlNEYXRhICpkYXRh
Rm9yVVJMQ29tcG9uZW50VHlwZShOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUgY29tcG9u
ZW50VHlwZSkKICAgICAgICAgfSAgICAgICAgICAgICAgIAogICAgIH0KICAgICAKLSAgICBpZiAo
c3RhdGljQWxsQnl0ZXNCdWZmZXIgIT0gYWxsQnl0ZXNCdWZmZXIpCi0gICAgICAgIGZyZWUoYWxs
Qnl0ZXNCdWZmZXIpOwotICAgIAogICAgIHJldHVybiByZXN1bHREYXRhOwogfQogCkBAIC05NDIs
OCArOTI5LDggQEAgc3RhdGljIE5TVVJMICpVUkxCeVJlbW92aW5nQ29tcG9uZW50QW5kU3Vic2Vx
dWVudENoYXJhY3RlcihOU1VSTCAqVVJMLCBDRlVSTENvbXAKICAgICAvLyBSZW1vdmUgb25lIHN1
YnNlcXVlbnQgY2hhcmFjdGVyLgogICAgIHJhbmdlLmxlbmd0aCsrOwogCi0gICAgVmVjdG9yPFVJ
bnQ4LCAyMDQ4PiBidWZmZXIoMjA0OCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0
Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYnVmZmVyLmRhdGEoKSwgMjA0OCk7CisgICAgVmVjdG9yPFVJ
bnQ4LCBVUkxfQllURVNfQlVGRkVSX0xFTkdUSD4gYnVmZmVyKFVSTF9CWVRFU19CVUZGRVJfTEVO
R1RIKTsKKyAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJM
LCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKICAgICBpZiAobnVtQnl0ZXMgPT0gLTEp
IHsKICAgICAgICAgbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIE5VTEws
IDApOwogICAgICAgICBidWZmZXIuZ3JvdyhudW1CeXRlcyk7CkBAIC0xMDEwLDEwICs5OTcsMTAg
QEAgTlNEYXRhICpvcmlnaW5hbFVSTERhdGEoTlNVUkwgKlVSTCkKIHN0YXRpYyBDRlN0cmluZ1Jl
ZiBjcmVhdGVTdHJpbmdXaXRoRXNjYXBlZFVuc2FmZUNoYXJhY3RlcnMoQ0ZTdHJpbmdSZWYgc3Ry
aW5nKQogewogICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsK
LSAgICBWZWN0b3I8VUNoYXIsIDIwNDg+IHNvdXJjZUJ1ZmZlcihsZW5ndGgpOworICAgIFZlY3Rv
cjxVQ2hhciwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IHNvdXJjZUJ1ZmZlcihsZW5ndGgpOwog
ICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCks
IHNvdXJjZUJ1ZmZlci5kYXRhKCkpOwogICAgIAotICAgIFZlY3RvcjxVQ2hhciwgMjA0OD4gb3V0
QnVmZmVyOworICAgIFZlY3RvcjxVQ2hhciwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVD4gb3V0QnVm
ZmVyOwogICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8VUNoYXIzMj4gcHJldmlvdXNDb2RlUG9pbnQ7
CiAgICAgQ0ZJbmRleCBpID0gMDsKQEAgLTEwNTgsOCArMTA0NSw4IEBAIE5TU3RyaW5nICp1c2Vy
VmlzaWJsZVN0cmluZyhOU1VSTCAqVVJMKQogICAgIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnAgPSBiZWZvcmU7CiAgICAgaW50IGJ1ZmZlckxlbmd0aCA9IChsZW5ndGggKiAzKSArIDE7Ci0g
ICAgY2hhciAqYWZ0ZXIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KG1hbGxvYyhidWZmZXJMZW5ndGgp
KTsgLy8gbGFyZ2UgZW5vdWdoIHRvICUtZXNjYXBlIGV2ZXJ5IGNoYXJhY3RlcgotICAgIGNoYXIg
KnEgPSBhZnRlcjsKKyAgICBWZWN0b3I8Y2hhciwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IGFm
dGVyKGJ1ZmZlckxlbmd0aCk7IC8vIGxhcmdlIGVub3VnaCB0byAlLWVzY2FwZSBldmVyeSBjaGFy
YWN0ZXIKKyAgICBjaGFyICpxID0gYWZ0ZXIuZGF0YSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gcFtpXTsKICAgICAg
ICAgLy8gdW5lc2NhcGUgZXNjYXBlIHNlcXVlbmNlcyB0aGF0IGluZGljYXRlIGJ5dGVzIGdyZWF0
ZXIgdGhhbiAweDdmCkBAIC0xMDg2LDE3ICsxMDczLDE3IEBAIE5TU3RyaW5nICp1c2VyVmlzaWJs
ZVN0cmluZyhOU1VSTCAqVVJMKQogICAgICpxID0gJ1wwJzsKICAgICAKICAgICAvLyBDaGVjayBz
dHJpbmcgdG8gc2VlIGlmIGl0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gZGlzcGxheSB1c2luZyBVVEYt
OCAgCi0gICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzphZnRlcl07CisgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzphZnRlci5kYXRhKCldOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIC8vIENv
dWxkIG5vdCBjb252ZXJ0IHRvIFVURi04LgogICAgICAgICAvLyBDb252ZXJ0IGNoYXJhY3RlcnMg
Z3JlYXRlciB0aGFuIDB4N2YgdG8gZXNjYXBlIHNlcXVlbmNlcy4KICAgICAgICAgLy8gU2hpZnQg
Y3VycmVudCBzdHJpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCiAgICAgICAgIC8vIHRoZW4g
d2Ugd2lsbCBjb3B5IGJhY2sgYnl0ZXMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgCiAgICAg
ICAgIC8vIGFzIHdlIGNvbnZlcnQuCi0gICAgICAgIGludCBhZnRlcmxlbmd0aCA9IHEgLSBhZnRl
cjsKLSAgICAgICAgY2hhciAqcCA9IGFmdGVyICsgYnVmZmVyTGVuZ3RoIC0gYWZ0ZXJsZW5ndGgg
LSAxOwotICAgICAgICBtZW1tb3ZlKHAsIGFmdGVyLCBhZnRlcmxlbmd0aCArIDEpOyAvLyBjb3Bp
ZXMgdHJhaWxpbmcgJ1wwJwotICAgICAgICBjaGFyICpxID0gYWZ0ZXI7CisgICAgICAgIGludCBh
ZnRlcmxlbmd0aCA9IHEgLSBhZnRlci5kYXRhKCk7CisgICAgICAgIGNoYXIgKnAgPSBhZnRlci5k
YXRhKCkgKyBidWZmZXJMZW5ndGggLSBhZnRlcmxlbmd0aCAtIDE7CisgICAgICAgIG1lbW1vdmUo
cCwgYWZ0ZXIuZGF0YSgpLCBhZnRlcmxlbmd0aCArIDEpOyAvLyBjb3BpZXMgdHJhaWxpbmcgJ1ww
JworICAgICAgICBjaGFyICpxID0gYWZ0ZXIuZGF0YSgpOwogICAgICAgICB3aGlsZSAoKnApIHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpwOwogICAgICAgICAgICAgaWYgKGMgPiAw
eDdmKSB7CkBAIC0xMTA4LDExICsxMDk1LDkgQEAgTlNTdHJpbmcgKnVzZXJWaXNpYmxlU3RyaW5n
KE5TVVJMICpVUkwpCiAgICAgICAgICAgICBwKys7CiAgICAgICAgIH0KICAgICAgICAgKnEgPSAn
XDAnOwotICAgICAgICByZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YWZ0
ZXJdOworICAgICAgICByZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YWZ0
ZXIuZGF0YSgpXTsKICAgICB9CiAgICAgCi0gICAgZnJlZShhZnRlcik7Ci0gICAgCiAgICAgaWYg
KG1heU5lZWRIb3N0TmFtZURlY29kaW5nKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCBnb29k
IHRvIGlnbm9yZSB0aGUgZmFpbHVyZSBvZiBtYXBIb3N0TmFtZXMgYW5kIGtlZXAgcmVzdWx0IGlu
dGFjdD8KICAgICAgICAgTlNTdHJpbmcgKm1hcHBlZFJlc3VsdCA9IG1hcEhvc3ROYW1lcyhyZXN1
bHQsIE5PKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRVdGlsaXRpZXNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFV0aWxpdGllc1dpbi5jcHAKaW5kZXggMmRkYzM3MGI5YzIyYmNlMGI1M2ZiNjRiYzAzMThkMGI1
ZmRiNjgwOC4uOTcwMDI3MGFiZjFlMmY4NDY0MGFkYzJiZWQ1YjBmMjYwNmE0YjBiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dp
bi5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjaW5jbHVkZSA8
d2luaW5ldC5oPiAvLyBmb3IgSU5URVJORVRfTUFYX1VSTF9MRU5HVEgKICNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAg
LTI3NywxMSArMjc4LDEzIEBAIHZvaWQgbWFya3VwVG9DRkhUTUwoY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgc3JjVVJMLCBWZWN0b3I8Y2hhcj4mIHJlCiAgICAgdW5zaWduZWQg
ZW5kRnJhZ21lbnRPZmZzZXQgPSBzdGFydEZyYWdtZW50T2Zmc2V0ICsgbWFya3VwVVRGOC5sZW5n
dGgoKTsKICAgICB1bnNpZ25lZCBlbmRIVE1MT2Zmc2V0ID0gZW5kRnJhZ21lbnRPZmZzZXQgKyBz
dHJsZW4oZW5kTWFya3VwKTsKIAotICAgIHVuc2lnbmVkIGhlYWRlckJ1ZmZlckxlbmd0aCA9IHN0
YXJ0SFRNTE9mZnNldCArIDE7IC8vICsgMSBmb3IgJ1wwJyB0ZXJtaW5hdG9yLgotICAgIGNoYXIq
IGhlYWRlckJ1ZmZlciA9IChjaGFyKiltYWxsb2MoaGVhZGVyQnVmZmVyTGVuZ3RoKTsKLSAgICBz
bnByaW50ZihoZWFkZXJCdWZmZXIsIGhlYWRlckJ1ZmZlckxlbmd0aCwgaGVhZGVyLCBzdGFydEhU
TUxPZmZzZXQsIGVuZEhUTUxPZmZzZXQsIHN0YXJ0RnJhZ21lbnRPZmZzZXQsIGVuZEZyYWdtZW50
T2Zmc2V0KTsKLSAgICBhcHBlbmQocmVzdWx0LCBDU3RyaW5nKGhlYWRlckJ1ZmZlcikpOwotICAg
IGZyZWUoaGVhZGVyQnVmZmVyKTsKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGhlYWRlckJ1ZmZl
ckxlbmd0aCA9IHN0YXJ0SFRNTE9mZnNldCArIDE7IC8vICsgMSBmb3IgJ1wwJyB0ZXJtaW5hdG9y
LgorICAgICAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIHVuc2lnbmVkIEluaXRpYWxCdWZmZXJT
aXplIHsgMjA0OCB9OworICAgICAgICBWZWN0b3I8Y2hhciwgSW5pdGlhbEJ1ZmZlclNpemU+IGhl
YWRlckJ1ZmZlcihoZWFkZXJCdWZmZXJMZW5ndGgpOworICAgICAgICBzbnByaW50ZihoZWFkZXJC
dWZmZXIuZGF0YSgpLCBoZWFkZXJCdWZmZXJMZW5ndGgsIGhlYWRlciwgc3RhcnRIVE1MT2Zmc2V0
LCBlbmRIVE1MT2Zmc2V0LCBzdGFydEZyYWdtZW50T2Zmc2V0LCBlbmRGcmFnbWVudE9mZnNldCk7
CisgICAgICAgIGFwcGVuZChyZXN1bHQsIENTdHJpbmcoaGVhZGVyQnVmZmVyLmRhdGEoKSkpOwor
ICAgIH0KICAgICBpZiAoc291cmNlVVJMVVRGOC5sZW5ndGgoKSkgewogICAgICAgICBhcHBlbmQo
cmVzdWx0LCBzb3VyY2VVUkxQcmVmaXgpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBzb3VyY2VV
UkxVVEY4KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319836</attachid>
            <date>2017-09-03 22:15:32 -0700</date>
            <delta_ts>2017-09-03 22:26:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176310-20170904141530.patch</filename>
            <type>text/plain</type>
            <size>21202</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MWY2ZjllMWQzYjA0ZmNiY2Y2MDgyMTFlMGQ1NzJlY2UwN2Y4M2VkLi5iM2IwMzc1ODZkM2Q3MTc1
NTJiNmZiYWY3ZWMzN2E0NDcyZTFhNDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNyBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIEFQSS9KU1dyYXBwZXJNYXAubW06CisgICAgICAgIChzZWxlY3RvclRv
UHJvcGVydHlOYW1lKToKKworMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysrMDMgYWxsb2NhdG9yIGludGVyZmFj
ZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggN2QyNzUzZmVmMTMzNGEyODdjOGQxOGJlOWY1ZWZlNzE2OThh
NjllOS4uYzFlZjkwZjEyMGQ2ZTU3YmNmNjMzZmYxMmZlZDQ4MDJhZWEzMGY1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNiBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKworMjAxNy0wOS0wMyAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysr
MDMgYWxsb2NhdG9yIGludGVyZmFjZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NDllZmM3
NDQ4OGNhN2QzNDY3MGY0NWI1ZjY0NzVlZTJmZDVhOWJlLi5kZDg3Yjk2YmUwM2IwZWUzZGIyNzJm
MTM3NDc1ZWY3MmRjYmNlMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTctMDkt
MDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUmVt
b3ZlICJtYWxsb2MiIGFuZCAiZnJlZSIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgTWFsbG9jUHRyPD4sIGZhc3RNYWxsb2MvZmFzdEZyZWUs
IG9yIFZlY3RvciBpbnN0ZWFkIG9mIG1hbnVhbCBjYWxsIG9mIHN5c3RlbSBtYWxsb2MvZnJlZS4K
KyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgYXBwbHkgdGhlIGFib3ZlIGNoYW5nZSBpZiB3ZSBj
YW4gZWFzaWx5IGZpbmQgdGhlIHBhaXIgb2YgbWFsbG9jL2ZyZWUuCisgICAgICAgIEFuZCB3ZSBk
byBub3QgdG91Y2ggcGx1Z2luIGRpcmVjdG9yeSBzaW5jZSB0aGUgZXh0ZXJuYWwgY29kZSBjb3Vs
ZCBjYWxsIGZyZWUoKSBvbnRvIHRoZQorICAgICAgICBmYXN0TWFsbG9jLWVkIG1lbW9yeS4KKwor
ICAgICAgICBBbHNvLCB3ZSBzdGlsbCB1c2UgbWFsbG9jIGlmIHRoZSBzeXN0ZW0gYWRvcHRzIHRo
ZSBhbGxvY2F0ZWQgbWVtb3J5LiBMYXRlciwgdGhlIHN5c3RlbQorICAgICAgICB3aWxsIGRlYWxs
b2NhdGUgaXQgYnkgY2FsbGluZyB0aGUgc3lzdGVtICJmcmVlIi4KKworICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFt
ZTo6ZmZ0U2V0dXBGb3JTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldExpbmtlZEZvbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6VVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEJ5UmVtb3Zp
bmdDb21wb25lbnRBbmRTdWJzZXF1ZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVN0cmluZ1dpdGhFc2NhcGVkVW5zYWZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3Jl
Ojp1c2VyVmlzaWJsZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrdXBUb0NGSFRNTCk6CisKIDIw
MTctMDktMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZl
IGdldEZpbGVNZXRhZGF0YSgpIHJldHVybiBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQppbmRleCA4Y2NlMzY5MmU2
MDRiZDM0YmFkYjdlNzE3MjUzNmQ5OWIwZDE4NTBmLi4wNmNjNWY4OGY3ZGM4ZDFmOWVlNjllNTc4
YzAwZDExZmQ4MDlkMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
V3JhcHBlck1hcC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1h
cC5tbQpAQCAtNjIsNiArNjIsOCBAQCAtIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNs
YXNzOihDbGFzcyljbHM7CiAKIEBlbmQKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25l
ZCBJbml0aWFsQnVmZmVyU2l6ZSB7IDI1NiB9OworCiAvLyBEZWZhdWx0IGNvbnZlcnNpb24gb2Yg
c2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgogLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92
ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRhbGl6
ZWQuCiBzdGF0aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciog
c3RhcnQpCkBAIC03NSwxMCArNzcsMTAgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJv
cGVydHlOYW1lKGNvbnN0IGNoYXIqIHN0YXJ0KQogICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENv
bG9uIC0gc3RhcnQ7CiAgICAgLy8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91
Z2ggdG8gaG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4
Y2x1ZGluZwogICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAo
VGhpcyBpcyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KLSAg
ICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKGhlYWRlciArIHN0cmxl
bihmaXJzdENvbG9uICsgMSkgKyAxKSk7CisgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJT
aXplPiBidWZmZXIoaGVhZGVyICsgc3RybGVuKGZpcnN0Q29sb24gKyAxKSArIDEpOwogICAgIC8v
IENvcHkgJ2hlYWRlcicgY2hhcmFjdGVycywgc2V0IG91dHB1dCB0byBwb2ludCB0byB0aGUgZW5k
IG9mIHRoaXMgJiBpbnB1dCB0byBwb2ludCBwYXN0IHRoZSBmaXJzdCAnOicuCi0gICAgbWVtY3B5
KGJ1ZmZlciwgc3RhcnQsIGhlYWRlcik7Ci0gICAgY2hhciogb3V0cHV0ID0gYnVmZmVyICsgaGVh
ZGVyOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBzdGFydCwgaGVhZGVyKTsKKyAgICBjaGFy
KiBvdXRwdXQgPSBidWZmZXIuZGF0YSgpICsgaGVhZGVyOwogICAgIGNvbnN0IGNoYXIqIGlucHV0
ID0gc3RhcnQgKyBoZWFkZXIgKyAxOwogCiAgICAgLy8gT24gZW50cnkgdG8gdGhlIGxvb3AsIHdl
IGhhdmUgYWxyZWFkeSBza2lwcGVkIG92ZXIgYSAnOicgZnJvbSB0aGUgaW5wdXQuCkBAIC0xMDEs
OSArMTAzLDcgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJvcGVydHlOYW1lKGNvbnN0
IGNoYXIqIHN0YXJ0KQogICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQg
YSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgogICAgIH0KIGRvbmU6Ci0gICAgTlNTdHJpbmcg
KnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpidWZmZXJdOwotICAgIGZy
ZWUoYnVmZmVyKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6YnVmZmVyLmRhdGEoKV07CiB9CiAKIHN0YXRpYyBib29sIGNvbnN0
cnVjdG9ySGFzSW5zdGFuY2UoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgY29uc3RydWN0
b3JSZWYsIEpTVmFsdWVSZWYgcG9zc2libGVJbnN0YW5jZSwgSlNWYWx1ZVJlZiopCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuY3BwCmluZGV4IDUxNTkwODBkOTNhOTZlMTQwZTMwOTJmODgzMDc0YWRjYWUxNmQ4N2Mu
LjAxMzE3ZmM3MmQ5ZWQ4MThlZGJiMGQyNWQwYTUyNGU5ZDc4YjcwMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2dnaW5nQWNjdW11bGF0b3IuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2Uu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgpAQCAtODcsMzEgKzg4LDI5IEBAIHN0YXRpYyB2b2lkIGxvZ1RvU3RkZXJyKGNvbnN0
IGNoYXIqIGJ1ZmZlcikKICAgICBmcHV0cyhidWZmZXIsIHN0ZGVycik7CiB9CiAKK3N0YXRpYyBj
b25zdCBjb25zdGV4cHIgdW5zaWduZWQgSW5pdGlhbEJ1ZmZlclNpemUgeyAyNTYgfTsKKwogV1RG
X0FUVFJJQlVURV9QUklOVEYoMSwgMCkKIHN0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX2NvbW1v
bihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKIHsKICNpZiBVU0UoQ0YpICYmICFP
UyhXSU5ET1dTKQogICAgIGlmIChzdHJzdHIoZm9ybWF0LCAiJUAiKSkgewotICAgICAgICBDRlN0
cmluZ1JlZiBjZkZvcm1hdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgZm9ybWF0
LCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOworICAgICAgICBhdXRvIGNmRm9ybWF0ID0gYWRvcHRD
RihDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKG51bGxwdHIsIGZvcm1hdCwga0NGU3RyaW5nRW5j
b2RpbmdVVEY4KSk7CiAKICNpZiBDT01QSUxFUihDTEFORykKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9u
bGl0ZXJhbCIKICNlbmRpZgotICAgICAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhGb3JtYXRBbmRBcmd1bWVudHMoTlVMTCwgTlVMTCwgY2ZGb3JtYXQsIGFyZ3MpOworICAg
ICAgICBhdXRvIHN0ciA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1l
bnRzKG51bGxwdHIsIG51bGxwdHIsIGNmRm9ybWF0LmdldCgpLCBhcmdzKSk7CiAjaWYgQ09NUElM
RVIoQ0xBTkcpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKLSAgICAgICAg
Q0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2RpbmcoQ0ZTdHJp
bmdHZXRMZW5ndGgoc3RyKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAgY2hhciog
YnVmZmVyID0gKGNoYXIqKW1hbGxvYyhsZW5ndGggKyAxKTsKLQotICAgICAgICBDRlN0cmluZ0dl
dENTdHJpbmcoc3RyLCBidWZmZXIsIGxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAg
ICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2Rpbmco
Q0ZTdHJpbmdHZXRMZW5ndGgoc3RyLmdldCgpKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAg
ICAgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJTaXplPiBidWZmZXIobGVuZ3RoICsgMSk7
CiAKLSAgICAgICAgbG9nVG9TdGRlcnIoYnVmZmVyKTsKKyAgICAgICAgQ0ZTdHJpbmdHZXRDU3Ry
aW5nKHN0ci5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VU
RjgpOwogCi0gICAgICAgIGZyZWUoYnVmZmVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHN0cik7Ci0g
ICAgICAgIENGUmVsZWFzZShjZkZvcm1hdCk7CisgICAgICAgIGxvZ1RvU3RkZXJyKGJ1ZmZlci5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzAsMjAgKzEyOSwxMyBAQCBz
dGF0aWMgdm9pZCB2cHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCB2YV9s
aXN0IGFyZ3MpCiAjZWxpZiBIQVZFKElTREVCVUdHRVJQUkVTRU5UKQogICAgIGlmIChJc0RlYnVn
Z2VyUHJlc2VudCgpKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gMTAyNDsKLQorICAgICAgICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyKHNpemUpOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjaGFy
KiBidWZmZXIgPSAoY2hhciopbWFsbG9jKHNpemUpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVy
ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICh2c25w
cmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7Ci0gICAgICAgICAgICAg
ICAgT3V0cHV0RGVidWdTdHJpbmdBKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZnJlZShidWZm
ZXIpOworICAgICAgICAgICAgYnVmZmVyLmdyb3coc2l6ZSk7CisgICAgICAgICAgICBpZiAodnNu
cHJpbnRmKGJ1ZmZlci5nZXQoKSwgc2l6ZSwgZm9ybWF0LCBhcmdzKSAhPSAtMSkgeworICAgICAg
ICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nQShidWZmZXIuZ2V0KCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAg
ICAgICAgICAgICBzaXplICo9IDI7CiAgICAgICAgIH0gd2hpbGUgKHNpemUgPiAxMDI0KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJh
bWVNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFj
LmNwcAppbmRleCA2MDE1YWE1OWQyYjU1MDYyMzQxNmE0OTNmOWFkMTZjMTg0ZjNiMWVjLi5hZTEw
MjNlYzI2OGZjNTkxNmZiM2VhYjMxNGY4ODljYmU0MWM5YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKQEAgLTE0Niw3ICsxNDYs
NyBAQCB2b2lkIEZGVEZyYW1lOjpkb0ludmVyc2VGRlQoZmxvYXQqIGRhdGEpCiBGRlRTZXR1cCBG
RlRGcmFtZTo6ZmZ0U2V0dXBGb3JTaXplKHVuc2lnbmVkIGZmdFNpemUpCiB7CiAgICAgaWYgKCFm
ZnRTZXR1cHMpIHsKLSAgICAgICAgZmZ0U2V0dXBzID0gKEZGVFNldHVwKiltYWxsb2Moc2l6ZW9m
KEZGVFNldHVwKSAqIGtNYXhGRlRQb3cyU2l6ZSk7CisgICAgICAgIGZmdFNldHVwcyA9IChGRlRT
ZXR1cCopZmFzdE1hbGxvYyhzaXplb2YoRkZUU2V0dXApICoga01heEZGVFBvdzJTaXplKTsKICAg
ICAgICAgbWVtc2V0KGZmdFNldHVwcywgMCwgc2l6ZW9mKEZGVFNldHVwKSAqIGtNYXhGRlRQb3cy
U2l6ZSk7CiAgICAgfQogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBGRlRGcmFtZTo6Y2xlYW51
cCgpCiAgICAgICAgICAgICB2RFNQX2Rlc3Ryb3lfZmZ0c2V0dXAoZmZ0U2V0dXBzW2ldKTsKICAg
ICB9CiAKLSAgICBmcmVlKGZmdFNldHVwcyk7CisgICAgZmFzdEZyZWUoZmZ0U2V0dXBzKTsKICAg
ICBmZnRTZXR1cHMgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IGNlYTlmNmE0OTU4MjU2NmY4OTkz
MGM0MWRkYzYxMjA5YTQ3ODJhNDYuLjUyN2UzYjY1OWEwMDYzNmRlMjEzNWJkYzM1MDNiNWUzNmUy
NmNiY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0xMzcsMTIgKzEzNywxMiBAQCBzdGF0aWMgY29uc3QgVmVj
dG9yPFN0cmluZz4qIGdldExpbmtlZEZvbnRzKFN0cmluZyYgZmFtaWx5KQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFdDSEFSKiBsaW5rZWRGb250cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V0NIQVIqPihtYWxsb2MobGlua2VkRm9udHNCdWZmZXJTaXplKSk7Ci0gICAgaWYgKDo6
UmVnUXVlcnlWYWx1ZUV4KGZvbnRMaW5rS2V5LCBmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGxp
bmtlZEZvbnRzKSwgJmxpbmtlZEZvbnRzQnVmZmVyU2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykgewot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsaW5rZWRGb250c0J1ZmZlclNpemUgLyBzaXplb2Yo
KmxpbmtlZEZvbnRzKTsKLSAgICAgICAgYXBwZW5kTGlua2VkRm9udHMobGlua2VkRm9udHMsIGxl
bmd0aCwgcmVzdWx0KTsKKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIHVuc2lnbmVkIEluaXRp
YWxCdWZmZXJTaXplIHsgMjU2IC8gc2l6ZW9mKFdDSEFSKSB9OworICAgIFZlY3RvcjxXQ0hBUiwg
SW5pdGlhbEJ1ZmZlclNpemU+IGxpbmtlZEZvbnRzKHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdDSEFSKT4obGlua2VkRm9udHNCdWZmZXJTaXplKSAvIHNpemVvZihXQ0hBUikpOworICAgIGlm
ICg6OlJlZ1F1ZXJ5VmFsdWVFeChmb250TGlua0tleSwgZmFtaWx5LmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEJZVEUq
PihsaW5rZWRGb250cy5kYXRhKCkpLCAmbGlua2VkRm9udHNCdWZmZXJTaXplKSA9PSBFUlJPUl9T
VUNDRVNTKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpbmtlZEZvbnRzQnVmZmVyU2l6
ZSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgIGFwcGVuZExpbmtlZEZvbnRzKGxpbmtlZEZvbnRz
LmRhdGEoKSwgbGVuZ3RoLCByZXN1bHQpOwogICAgIH0KLSAgICBmcmVlKGxpbmtlZEZvbnRzKTsK
ICAgICBSZWdDbG9zZUtleShmb250TGlua0tleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAppbmRleCA5ZmY4NDExZmIzYTk0MDZkMDEzNDQyNTUy
YjM2YThiYjExNzFkN2E3Li44ZGQ1NDZjNWJjNjFhZmMxZTUyYjkwODI3NmQyNzdiMjBjNjkwNDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mCiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsKIAotICAg
IExPR0ZPTlQmIGxvZ0ZvbnQgPSAqc3RhdGljX2Nhc3Q8TE9HRk9OVCo+KG1hbGxvYyhzaXplb2Yo
TE9HRk9OVCkpKTsKKyAgICBMT0dGT05UIGxvZ0ZvbnQgeyAwIH07CiAgICAgbWVtY3B5KGxvZ0Zv
bnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKIAog
ICAgIGxvZ0ZvbnQubGZIZWlnaHQgPSAtc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAppbmRl
eCBhZThiNGY0YmNkNjc2ODRjYTk4OTI4ZDRiNzU1MWE1YjlhNTBkZjFkLi4yZmQ3ODI2OThiOThj
NWNhM2MyOTA4ZmQxNGYzMTNlMWU5NjMxYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCkBA
IC01NywxNCArNTcsMTQgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElP
YmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGJ1ZmZlclNpemUsICJCaXRtYXAgZm9udHMgbm90IHN1cHBvcnRlZCB3aXRoIENv
cmVHcmFwaGljcy4iKTsKIAogICAgIGlmIChidWZmZXJTaXplKSB7Ci0gICAgICAgIE9VVExJTkVU
RVhUTUVUUklDVyogbWV0cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJT
aXplKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25lZCBJbml0aWFsQnVm
ZmVyU2l6ZSB7IDI1NiB9OworICAgICAgICBWZWN0b3I8Y2hhciwgMjU2PiBidWZmZXIoYnVmZmVy
U2l6ZSk7CisgICAgICAgIGF1dG8qIG1ldHJpY3MgPSByZWludGVycHJldF9jYXN0PE9VVExJTkVU
RVhUTUVUUklDVyo+KGJ1ZmZlci5kYXRhKCkpOwogCiAgICAgICAgIEdldE91dGxpbmVUZXh0TWV0
cmljc1coaGRjLCBidWZmZXJTaXplLCBtZXRyaWNzKTsKICAgICAgICAgV0NIQVIqIGZhY2VOYW1l
ID0gKFdDSEFSKikoKHVpbnRwdHJfdCltZXRyaWNzICsgKHVpbnRwdHJfdCltZXRyaWNzLT5vdG1w
RmFjZU5hbWUpOwogCiAgICAgICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwgc2l6
ZSwgaGRjLCBmYWNlTmFtZSk7Ci0KLSAgICAgICAgZnJlZShtZXRyaWNzKTsKICAgICB9CiAKICAg
ICBSZXN0b3JlREMoaGRjLCAtMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU1VSTEV4dHJhcy5tbQppbmRleCAyMDM0MDMzZjEzMTVlZWNkM2ExOTY1MjM1YThl
NjYwYWZiMTg1NmZmLi4yZDRhYmEzYzhhYzQzMTU2MmU1N2VmMjVjNzU3MDUyNjI4NTQ3MDdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFz
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMu
bW0KQEAgLTc1MCwyMSArNzUwLDE4IEBAIE5TVVJMICpVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0
ZXJCZWZvcmVDb21wb25lbnQoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wb25lbnRUeXBlCiAgICAgaWYg
KGZyYWdSZy5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKICAgICAgICAgcmV0dXJuIFVSTDsKICAg
ICAKLSAgICBVSW50OCAqdXJsQnl0ZXMsIGJ1ZmZlclsyMDQ4XTsKLSAgICBDRkluZGV4IG51bUJ5
dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBidWZmZXIsIDIwNDgpOworICAgIFZl
Y3RvcjxVSW50OCwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IHVybEJ5dGVzKFVSTF9CWVRFU19C
VUZGRVJfTEVOR1RIKTsKKyAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZV
UkxSZWYpVVJMLCB1cmxCeXRlcy5kYXRhKCksIHVybEJ5dGVzLnNpemUoKSk7CiAgICAgaWYgKG51
bUJ5dGVzID09IC0xKSB7CiAgICAgICAgIG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxS
ZWYpVVJMLCBOVUxMLCAwKTsKLSAgICAgICAgdXJsQnl0ZXMgPSBzdGF0aWNfY2FzdDxVSW50OCo+
KG1hbGxvYyhudW1CeXRlcykpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkws
IHVybEJ5dGVzLCBudW1CeXRlcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVybEJ5dGVzID0gYnVm
ZmVyOwotICAgICAgICAKLSAgICBOU1VSTCAqcmVzdWx0ID0gKE5TVVJMICopQ0ZVUkxDcmVhdGVX
aXRoQnl0ZXMoTlVMTCwgdXJsQnl0ZXMsIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0Vu
Y29kaW5nVVRGOCwgTlVMTCk7CisgICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMpOworICAg
ICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgbnVtQnl0
ZXMpOworICAgIH0KKworICAgIE5TVVJMICpyZXN1bHQgPSAoTlNVUkwgKilDRlVSTENyZWF0ZVdp
dGhCeXRlcyhOVUxMLCB1cmxCeXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0
cmluZ0VuY29kaW5nVVRGOCwgTlVMTCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3Vs
dCA9IChOU1VSTCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLCBmcmFnUmcu
bG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgTlVMTCk7CisgICAgICAg
IHJlc3VsdCA9IChOU1VSTCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLmRh
dGEoKSwgZnJhZ1JnLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIE5V
TEwpOwogICAgICAgICAKLSAgICBpZiAodXJsQnl0ZXMgIT0gYnVmZmVyKQotICAgICAgICBmcmVl
KHVybEJ5dGVzKTsKICAgICByZXR1cm4gcmVzdWx0ID8gW3Jlc3VsdCBhdXRvcmVsZWFzZV0gOiBV
Ukw7CiB9CiAKQEAgLTg3NywzMiArODc0LDI1IEBAIHN0YXRpYyBCT09MIGhhc1F1ZXN0aW9uTWFy
a09ubHlRdWVyeVN0cmluZyhOU1VSTCAqVVJMKQogCiBOU0RhdGEgKmRhdGFGb3JVUkxDb21wb25l
bnRUeXBlKE5TVVJMICpVUkwsIENGVVJMQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQogewot
ICAgIHN0YXRpYyBjb25zdCBpbnQgVVJMQ29tcG9uZW50VHlwZUJ1ZmZlckxlbmd0aCA9IDIwNDg7
Ci0gICAgCi0gICAgVUludDggc3RhdGljQWxsQnl0ZXNCdWZmZXJbVVJMQ29tcG9uZW50VHlwZUJ1
ZmZlckxlbmd0aF07Ci0gICAgVUludDggKmFsbEJ5dGVzQnVmZmVyID0gc3RhdGljQWxsQnl0ZXNC
dWZmZXI7Ci0gICAgCi0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKENG
VVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIsIFVSTENvbXBvbmVudFR5cGVCdWZmZXJMZW5ndGgp
OworICAgIFZlY3RvcjxVSW50OCwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IGFsbEJ5dGVzQnVm
ZmVyKFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIKTsKKyAgICBDRkluZGV4IGJ5dGVzRmlsbGVkID0g
Q0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlci5kYXRhKCksIGFsbEJ5
dGVzQnVmZmVyLnNpemUoKSk7CiAgICAgaWYgKGJ5dGVzRmlsbGVkID09IC0xKSB7CiAgICAgICAg
IENGSW5kZXggYnl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBO
VUxMLCAwKTsKLSAgICAgICAgYWxsQnl0ZXNCdWZmZXIgPSBzdGF0aWNfY2FzdDxVSW50OCAqPiht
YWxsb2MoYnl0ZXNUb0FsbG9jYXRlKSk7Ci0gICAgICAgIGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRC
eXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlciwgYnl0ZXNUb0FsbG9jYXRlKTsKKyAg
ICAgICAgYWxsQnl0ZXNCdWZmZXIuZ3JvdyhieXRlc1RvQWxsb2NhdGUpOworICAgICAgICBieXRl
c0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIuZGF0
YSgpLCBieXRlc1RvQWxsb2NhdGUpOwogICAgIH0KICAgICAKICAgICBDRlJhbmdlIHJhbmdlOwog
ICAgIGlmIChjb21wb25lbnRUeXBlICE9IGNvbXBsZXRlVVJMKSB7CiAgICAgICAgIHJhbmdlID0g
Q0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKENGVVJMUmVmKVVSTCwgY29tcG9uZW50VHlw
ZSwgTlVMTCk7Ci0gICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkgewot
ICAgICAgICAgICAgaWYgKHN0YXRpY0FsbEJ5dGVzQnVmZmVyICE9IGFsbEJ5dGVzQnVmZmVyKQot
ICAgICAgICAgICAgICAgIGZyZWUoYWxsQnl0ZXNCdWZmZXIpOworICAgICAgICBpZiAocmFuZ2Uu
bG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSAwOwogICAgICAgICBy
YW5nZS5sZW5ndGggPSBieXRlc0ZpbGxlZDsKICAgICB9CiAgICAgCi0gICAgTlNEYXRhICpjb21w
b25lbnREYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyICsgcmFuZ2Uu
bG9jYXRpb24gbGVuZ3RoOnJhbmdlLmxlbmd0aF07IAorICAgIE5TRGF0YSAqY29tcG9uZW50RGF0
YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczphbGxCeXRlc0J1ZmZlci5kYXRhKCkgKyByYW5nZS5s
b2NhdGlvbiBsZW5ndGg6cmFuZ2UubGVuZ3RoXTsgCiAgICAgCiAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KFtjb21wb25l
bnREYXRhIGJ5dGVzXSk7CiAgICAgTlNNdXRhYmxlRGF0YSAqcmVzdWx0RGF0YSA9IFtOU011dGFi
bGVEYXRhIGRhdGFdOwpAQCAtOTI3LDkgKzkxNyw2IEBAIE5TRGF0YSAqZGF0YUZvclVSTENvbXBv
bmVudFR5cGUoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wb25lbnRUeXBlIGNvbXBvbmVudFR5cGUpCiAg
ICAgICAgIH0gICAgICAgICAgICAgICAKICAgICB9CiAgICAgCi0gICAgaWYgKHN0YXRpY0FsbEJ5
dGVzQnVmZmVyICE9IGFsbEJ5dGVzQnVmZmVyKQotICAgICAgICBmcmVlKGFsbEJ5dGVzQnVmZmVy
KTsKLSAgICAKICAgICByZXR1cm4gcmVzdWx0RGF0YTsKIH0KIApAQCAtOTQyLDggKzkyOSw4IEBA
IHN0YXRpYyBOU1VSTCAqVVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRDaGFyYWN0
ZXIoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wCiAgICAgLy8gUmVtb3ZlIG9uZSBzdWJzZXF1ZW50IGNo
YXJhY3Rlci4KICAgICByYW5nZS5sZW5ndGgrKzsKIAotICAgIFZlY3RvcjxVSW50OCwgMjA0OD4g
YnVmZmVyKDIwNDgpOwotICAgIENGSW5kZXggbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChDRlVS
TFJlZilVUkwsIGJ1ZmZlci5kYXRhKCksIDIwNDgpOworICAgIFZlY3RvcjxVSW50OCwgVVJMX0JZ
VEVTX0JVRkZFUl9MRU5HVEg+IGJ1ZmZlcihVUkxfQllURVNfQlVGRkVSX0xFTkdUSCk7CisgICAg
Q0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLnNpemUoKSk7CiAgICAgaWYgKG51bUJ5dGVzID09IC0xKSB7CiAgICAgICAg
IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBOVUxMLCAwKTsKICAgICAg
ICAgYnVmZmVyLmdyb3cobnVtQnl0ZXMpOwpAQCAtMTAxMCwxMCArOTk3LDEwIEBAIE5TRGF0YSAq
b3JpZ2luYWxVUkxEYXRhKE5TVVJMICpVUkwpCiBzdGF0aWMgQ0ZTdHJpbmdSZWYgY3JlYXRlU3Ry
aW5nV2l0aEVzY2FwZWRVbnNhZmVDaGFyYWN0ZXJzKENGU3RyaW5nUmVmIHN0cmluZykKIHsKICAg
ICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Ci0gICAgVmVjdG9y
PFVDaGFyLCAyMDQ4PiBzb3VyY2VCdWZmZXIobGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXIsIFVS
TF9CWVRFU19CVUZGRVJfTEVOR1RIPiBzb3VyY2VCdWZmZXIobGVuZ3RoKTsKICAgICBDRlN0cmlu
Z0dldENoYXJhY3RlcnMoc3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzb3VyY2VCdWZm
ZXIuZGF0YSgpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXIsIDIwNDg+IG91dEJ1ZmZlcjsKKyAg
ICBWZWN0b3I8VUNoYXIsIFVSTF9CWVRFU19CVUZGRVJfTEVOR1Q+IG91dEJ1ZmZlcjsKICAgICAK
ICAgICBzdGQ6Om9wdGlvbmFsPFVDaGFyMzI+IHByZXZpb3VzQ29kZVBvaW50OwogICAgIENGSW5k
ZXggaSA9IDA7CkBAIC0xMDU4LDggKzEwNDUsOCBAQCBOU1N0cmluZyAqdXNlclZpc2libGVTdHJp
bmcoTlNVUkwgKlVSTCkKICAgICAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYmVmb3Jl
OwogICAgIGludCBidWZmZXJMZW5ndGggPSAobGVuZ3RoICogMykgKyAxOwotICAgIGNoYXIgKmFm
dGVyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihtYWxsb2MoYnVmZmVyTGVuZ3RoKSk7IC8vIGxhcmdl
IGVub3VnaCB0byAlLWVzY2FwZSBldmVyeSBjaGFyYWN0ZXIKLSAgICBjaGFyICpxID0gYWZ0ZXI7
CisgICAgVmVjdG9yPGNoYXIsIFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIPiBhZnRlcihidWZmZXJM
ZW5ndGgpOyAvLyBsYXJnZSBlbm91Z2ggdG8gJS1lc2NhcGUgZXZlcnkgY2hhcmFjdGVyCisgICAg
Y2hhciAqcSA9IGFmdGVyLmRhdGEoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IHBbaV07CiAgICAgICAgIC8vIHVuZXNj
YXBlIGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBpbmRpY2F0ZSBieXRlcyBncmVhdGVyIHRoYW4gMHg3
ZgpAQCAtMTA4NiwxNyArMTA3MywxNyBAQCBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNV
UkwgKlVSTCkKICAgICAqcSA9ICdcMCc7CiAgICAgCiAgICAgLy8gQ2hlY2sgc3RyaW5nIHRvIHNl
ZSBpZiBpdCBjYW4gYmUgY29udmVydGVkIHRvIGRpc3BsYXkgdXNpbmcgVVRGLTggIAotICAgIE5T
U3RyaW5nICpyZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YWZ0ZXJdOwor
ICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YWZ0
ZXIuZGF0YSgpXTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAvLyBDb3VsZCBub3QgY29u
dmVydCB0byBVVEYtOC4KICAgICAgICAgLy8gQ29udmVydCBjaGFyYWN0ZXJzIGdyZWF0ZXIgdGhh
biAweDdmIHRvIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAgICAgIC8vIFNoaWZ0IGN1cnJlbnQgc3Ry
aW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgogICAgICAgICAvLyB0aGVuIHdlIHdpbGwgY29w
eSBiYWNrIGJ5dGVzIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIAogICAgICAgICAvLyBhcyB3
ZSBjb252ZXJ0LgotICAgICAgICBpbnQgYWZ0ZXJsZW5ndGggPSBxIC0gYWZ0ZXI7Ci0gICAgICAg
IGNoYXIgKnAgPSBhZnRlciArIGJ1ZmZlckxlbmd0aCAtIGFmdGVybGVuZ3RoIC0gMTsKLSAgICAg
ICAgbWVtbW92ZShwLCBhZnRlciwgYWZ0ZXJsZW5ndGggKyAxKTsgLy8gY29waWVzIHRyYWlsaW5n
ICdcMCcKLSAgICAgICAgY2hhciAqcSA9IGFmdGVyOworICAgICAgICBpbnQgYWZ0ZXJsZW5ndGgg
PSBxIC0gYWZ0ZXIuZGF0YSgpOworICAgICAgICBjaGFyICpwID0gYWZ0ZXIuZGF0YSgpICsgYnVm
ZmVyTGVuZ3RoIC0gYWZ0ZXJsZW5ndGggLSAxOworICAgICAgICBtZW1tb3ZlKHAsIGFmdGVyLmRh
dGEoKSwgYWZ0ZXJsZW5ndGggKyAxKTsgLy8gY29waWVzIHRyYWlsaW5nICdcMCcKKyAgICAgICAg
Y2hhciAqcSA9IGFmdGVyLmRhdGEoKTsKICAgICAgICAgd2hpbGUgKCpwKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGMgPSAqcDsKICAgICAgICAgICAgIGlmIChjID4gMHg3ZikgewpAQCAt
MTEwOCwxMSArMTA5NSw5IEBAIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqVVJM
KQogICAgICAgICAgICAgcCsrOwogICAgICAgICB9CiAgICAgICAgICpxID0gJ1wwJzsKLSAgICAg
ICAgcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFmdGVyXTsKKyAgICAg
ICAgcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFmdGVyLmRhdGEoKV07
CiAgICAgfQogICAgIAotICAgIGZyZWUoYWZ0ZXIpOwotICAgIAogICAgIGlmIChtYXlOZWVkSG9z
dE5hbWVEZWNvZGluZykgewogICAgICAgICAvLyBGSVhNRTogSXMgaXQgZ29vZCB0byBpZ25vcmUg
dGhlIGZhaWx1cmUgb2YgbWFwSG9zdE5hbWVzIGFuZCBrZWVwIHJlc3VsdCBpbnRhY3Q/CiAgICAg
ICAgIE5TU3RyaW5nICptYXBwZWRSZXN1bHQgPSBtYXBIb3N0TmFtZXMocmVzdWx0LCBOTyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNX
aW4uY3BwCmluZGV4IDJkZGMzNzBiOWMyMmJjZTBiNTNmYjY0YmMwMzE4ZDBiNWZkYjY4MDguLjk3
MDAyNzBhYmYxZTJmODQ2NDBhZGMyYmVkNWIwZjI2MDZhNGIwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogI2luY2x1ZGUgPHdpbmluZXQuaD4g
Ly8gZm9yIElOVEVSTkVUX01BWF9VUkxfTEVOR1RICiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0yNzcsMTEgKzI3
OCwxMyBAQCB2b2lkIG1hcmt1cFRvQ0ZIVE1MKGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBT
dHJpbmcmIHNyY1VSTCwgVmVjdG9yPGNoYXI+JiByZQogICAgIHVuc2lnbmVkIGVuZEZyYWdtZW50
T2Zmc2V0ID0gc3RhcnRGcmFnbWVudE9mZnNldCArIG1hcmt1cFVURjgubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgZW5kSFRNTE9mZnNldCA9IGVuZEZyYWdtZW50T2Zmc2V0ICsgc3RybGVuKGVuZE1h
cmt1cCk7CiAKLSAgICB1bnNpZ25lZCBoZWFkZXJCdWZmZXJMZW5ndGggPSBzdGFydEhUTUxPZmZz
ZXQgKyAxOyAvLyArIDEgZm9yICdcMCcgdGVybWluYXRvci4KLSAgICBjaGFyKiBoZWFkZXJCdWZm
ZXIgPSAoY2hhciopbWFsbG9jKGhlYWRlckJ1ZmZlckxlbmd0aCk7Ci0gICAgc25wcmludGYoaGVh
ZGVyQnVmZmVyLCBoZWFkZXJCdWZmZXJMZW5ndGgsIGhlYWRlciwgc3RhcnRIVE1MT2Zmc2V0LCBl
bmRIVE1MT2Zmc2V0LCBzdGFydEZyYWdtZW50T2Zmc2V0LCBlbmRGcmFnbWVudE9mZnNldCk7Ci0g
ICAgYXBwZW5kKHJlc3VsdCwgQ1N0cmluZyhoZWFkZXJCdWZmZXIpKTsKLSAgICBmcmVlKGhlYWRl
ckJ1ZmZlcik7CisgICAgeworICAgICAgICB1bnNpZ25lZCBoZWFkZXJCdWZmZXJMZW5ndGggPSBz
dGFydEhUTUxPZmZzZXQgKyAxOyAvLyArIDEgZm9yICdcMCcgdGVybWluYXRvci4KKyAgICAgICAg
c3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25lZCBJbml0aWFsQnVmZmVyU2l6ZSB7IDIwNDgg
fTsKKyAgICAgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJTaXplPiBoZWFkZXJCdWZmZXIo
aGVhZGVyQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgc25wcmludGYoaGVhZGVyQnVmZmVyLmRhdGEo
KSwgaGVhZGVyQnVmZmVyTGVuZ3RoLCBoZWFkZXIsIHN0YXJ0SFRNTE9mZnNldCwgZW5kSFRNTE9m
ZnNldCwgc3RhcnRGcmFnbWVudE9mZnNldCwgZW5kRnJhZ21lbnRPZmZzZXQpOworICAgICAgICBh
cHBlbmQocmVzdWx0LCBDU3RyaW5nKGhlYWRlckJ1ZmZlci5kYXRhKCkpKTsKKyAgICB9CiAgICAg
aWYgKHNvdXJjZVVSTFVURjgubGVuZ3RoKCkpIHsKICAgICAgICAgYXBwZW5kKHJlc3VsdCwgc291
cmNlVVJMUHJlZml4KTsKICAgICAgICAgYXBwZW5kKHJlc3VsdCwgc291cmNlVVJMVVRGOCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319837</attachid>
            <date>2017-09-03 22:25:46 -0700</date>
            <delta_ts>2017-09-03 22:25:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176310-20170904142545.patch</filename>
            <type>text/plain</type>
            <size>21203</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MWY2ZjllMWQzYjA0ZmNiY2Y2MDgyMTFlMGQ1NzJlY2UwN2Y4M2VkLi5iM2IwMzc1ODZkM2Q3MTc1
NTJiNmZiYWY3ZWMzN2E0NDcyZTFhNDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNyBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIEFQSS9KU1dyYXBwZXJNYXAubW06CisgICAgICAgIChzZWxlY3RvclRv
UHJvcGVydHlOYW1lKToKKworMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysrMDMgYWxsb2NhdG9yIGludGVyZmFj
ZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggN2QyNzUzZmVmMTMzNGEyODdjOGQxOGJlOWY1ZWZlNzE2OThh
NjllOS4uYzFlZjkwZjEyMGQ2ZTU3YmNmNjMzZmYxMmZlZDQ4MDJhZWEzMGY1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNiBAQAogMjAxNy0wOS0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBSZW1vdmUgIm1hbGxvYyIgYW5kICJmcmVlIiB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVh
ZC4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDoKKworMjAxNy0wOS0wMyAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwogICAgICAgICBbV1RGXSBBZGQgQysr
MDMgYWxsb2NhdG9yIGludGVyZmFjZSBmb3IgR0NDIDwgNgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MzAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NDllZmM3
NDQ4OGNhN2QzNDY3MGY0NWI1ZjY0NzVlZTJmZDVhOWJlLi5kZDg3Yjk2YmUwM2IwZWUzZGIyNzJm
MTM3NDc1ZWY3MmRjYmNlMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTctMDkt
MDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUmVt
b3ZlICJtYWxsb2MiIGFuZCAiZnJlZSIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgTWFsbG9jUHRyPD4sIGZhc3RNYWxsb2MvZmFzdEZyZWUs
IG9yIFZlY3RvciBpbnN0ZWFkIG9mIG1hbnVhbCBjYWxsIG9mIHN5c3RlbSBtYWxsb2MvZnJlZS4K
KyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgYXBwbHkgdGhlIGFib3ZlIGNoYW5nZSBpZiB3ZSBj
YW4gZWFzaWx5IGZpbmQgdGhlIHBhaXIgb2YgbWFsbG9jL2ZyZWUuCisgICAgICAgIEFuZCB3ZSBk
byBub3QgdG91Y2ggcGx1Z2luIGRpcmVjdG9yeSBzaW5jZSB0aGUgZXh0ZXJuYWwgY29kZSBjb3Vs
ZCBjYWxsIGZyZWUoKSBvbnRvIHRoZQorICAgICAgICBmYXN0TWFsbG9jLWVkIG1lbW9yeS4KKwor
ICAgICAgICBBbHNvLCB3ZSBzdGlsbCB1c2UgbWFsbG9jIGlmIHRoZSBzeXN0ZW0gYWRvcHRzIHRo
ZSBhbGxvY2F0ZWQgbWVtb3J5LiBMYXRlciwgdGhlIHN5c3RlbQorICAgICAgICB3aWxsIGRlYWxs
b2NhdGUgaXQgYnkgY2FsbGluZyB0aGUgc3lzdGVtICJmcmVlIi4KKworICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFt
ZTo6ZmZ0U2V0dXBGb3JTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldExpbmtlZEZvbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6VVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEJ5UmVtb3Zp
bmdDb21wb25lbnRBbmRTdWJzZXF1ZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVN0cmluZ1dpdGhFc2NhcGVkVW5zYWZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3Jl
Ojp1c2VyVmlzaWJsZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrdXBUb0NGSFRNTCk6CisKIDIw
MTctMDktMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZl
IGdldEZpbGVNZXRhZGF0YSgpIHJldHVybiBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQppbmRleCA4Y2NlMzY5MmU2
MDRiZDM0YmFkYjdlNzE3MjUzNmQ5OWIwZDE4NTBmLi4wNmNjNWY4OGY3ZGM4ZDFmOWVlNjllNTc4
YzAwZDExZmQ4MDlkMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
V3JhcHBlck1hcC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1h
cC5tbQpAQCAtNjIsNiArNjIsOCBAQCAtIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNs
YXNzOihDbGFzcyljbHM7CiAKIEBlbmQKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25l
ZCBJbml0aWFsQnVmZmVyU2l6ZSB7IDI1NiB9OworCiAvLyBEZWZhdWx0IGNvbnZlcnNpb24gb2Yg
c2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgogLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92
ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRhbGl6
ZWQuCiBzdGF0aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciog
c3RhcnQpCkBAIC03NSwxMCArNzcsMTAgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJv
cGVydHlOYW1lKGNvbnN0IGNoYXIqIHN0YXJ0KQogICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENv
bG9uIC0gc3RhcnQ7CiAgICAgLy8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91
Z2ggdG8gaG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4
Y2x1ZGluZwogICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAo
VGhpcyBpcyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KLSAg
ICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKGhlYWRlciArIHN0cmxl
bihmaXJzdENvbG9uICsgMSkgKyAxKSk7CisgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJT
aXplPiBidWZmZXIoaGVhZGVyICsgc3RybGVuKGZpcnN0Q29sb24gKyAxKSArIDEpOwogICAgIC8v
IENvcHkgJ2hlYWRlcicgY2hhcmFjdGVycywgc2V0IG91dHB1dCB0byBwb2ludCB0byB0aGUgZW5k
IG9mIHRoaXMgJiBpbnB1dCB0byBwb2ludCBwYXN0IHRoZSBmaXJzdCAnOicuCi0gICAgbWVtY3B5
KGJ1ZmZlciwgc3RhcnQsIGhlYWRlcik7Ci0gICAgY2hhciogb3V0cHV0ID0gYnVmZmVyICsgaGVh
ZGVyOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBzdGFydCwgaGVhZGVyKTsKKyAgICBjaGFy
KiBvdXRwdXQgPSBidWZmZXIuZGF0YSgpICsgaGVhZGVyOwogICAgIGNvbnN0IGNoYXIqIGlucHV0
ID0gc3RhcnQgKyBoZWFkZXIgKyAxOwogCiAgICAgLy8gT24gZW50cnkgdG8gdGhlIGxvb3AsIHdl
IGhhdmUgYWxyZWFkeSBza2lwcGVkIG92ZXIgYSAnOicgZnJvbSB0aGUgaW5wdXQuCkBAIC0xMDEs
OSArMTAzLDcgQEAgc3RhdGljIE5TU3RyaW5nICpzZWxlY3RvclRvUHJvcGVydHlOYW1lKGNvbnN0
IGNoYXIqIHN0YXJ0KQogICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQg
YSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgogICAgIH0KIGRvbmU6Ci0gICAgTlNTdHJpbmcg
KnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpidWZmZXJdOwotICAgIGZy
ZWUoYnVmZmVyKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6YnVmZmVyLmRhdGEoKV07CiB9CiAKIHN0YXRpYyBib29sIGNvbnN0
cnVjdG9ySGFzSW5zdGFuY2UoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgY29uc3RydWN0
b3JSZWYsIEpTVmFsdWVSZWYgcG9zc2libGVJbnN0YW5jZSwgSlNWYWx1ZVJlZiopCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuY3BwCmluZGV4IDUxNTkwODBkOTNhOTZlMTQwZTMwOTJmODgzMDc0YWRjYWUxNmQ4N2Mu
LjAxMzE3ZmM3MmQ5ZWQ4MThlZGJiMGQyNWQwYTUyNGU5ZDc4YjcwMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2dnaW5nQWNjdW11bGF0b3IuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2Uu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgpAQCAtODcsMzEgKzg4LDI5IEBAIHN0YXRpYyB2b2lkIGxvZ1RvU3RkZXJyKGNvbnN0
IGNoYXIqIGJ1ZmZlcikKICAgICBmcHV0cyhidWZmZXIsIHN0ZGVycik7CiB9CiAKK3N0YXRpYyBj
b25zdCBjb25zdGV4cHIgdW5zaWduZWQgSW5pdGlhbEJ1ZmZlclNpemUgeyAyNTYgfTsKKwogV1RG
X0FUVFJJQlVURV9QUklOVEYoMSwgMCkKIHN0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX2NvbW1v
bihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKIHsKICNpZiBVU0UoQ0YpICYmICFP
UyhXSU5ET1dTKQogICAgIGlmIChzdHJzdHIoZm9ybWF0LCAiJUAiKSkgewotICAgICAgICBDRlN0
cmluZ1JlZiBjZkZvcm1hdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgZm9ybWF0
LCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOworICAgICAgICBhdXRvIGNmRm9ybWF0ID0gYWRvcHRD
RihDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKG51bGxwdHIsIGZvcm1hdCwga0NGU3RyaW5nRW5j
b2RpbmdVVEY4KSk7CiAKICNpZiBDT01QSUxFUihDTEFORykKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9u
bGl0ZXJhbCIKICNlbmRpZgotICAgICAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhGb3JtYXRBbmRBcmd1bWVudHMoTlVMTCwgTlVMTCwgY2ZGb3JtYXQsIGFyZ3MpOworICAg
ICAgICBhdXRvIHN0ciA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0QW5kQXJndW1l
bnRzKG51bGxwdHIsIG51bGxwdHIsIGNmRm9ybWF0LmdldCgpLCBhcmdzKSk7CiAjaWYgQ09NUElM
RVIoQ0xBTkcpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKLSAgICAgICAg
Q0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2RpbmcoQ0ZTdHJp
bmdHZXRMZW5ndGgoc3RyKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAgY2hhciog
YnVmZmVyID0gKGNoYXIqKW1hbGxvYyhsZW5ndGggKyAxKTsKLQotICAgICAgICBDRlN0cmluZ0dl
dENTdHJpbmcoc3RyLCBidWZmZXIsIGxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAg
ICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2Rpbmco
Q0ZTdHJpbmdHZXRMZW5ndGgoc3RyLmdldCgpKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAg
ICAgICAgVmVjdG9yPGNoYXIsIEluaXRpYWxCdWZmZXJTaXplPiBidWZmZXIobGVuZ3RoICsgMSk7
CiAKLSAgICAgICAgbG9nVG9TdGRlcnIoYnVmZmVyKTsKKyAgICAgICAgQ0ZTdHJpbmdHZXRDU3Ry
aW5nKHN0ci5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VU
RjgpOwogCi0gICAgICAgIGZyZWUoYnVmZmVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHN0cik7Ci0g
ICAgICAgIENGUmVsZWFzZShjZkZvcm1hdCk7CisgICAgICAgIGxvZ1RvU3RkZXJyKGJ1ZmZlci5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzAsMjAgKzEyOSwxMyBAQCBz
dGF0aWMgdm9pZCB2cHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCB2YV9s
aXN0IGFyZ3MpCiAjZWxpZiBIQVZFKElTREVCVUdHRVJQUkVTRU5UKQogICAgIGlmIChJc0RlYnVn
Z2VyUHJlc2VudCgpKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gMTAyNDsKLQorICAgICAgICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyKHNpemUpOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjaGFy
KiBidWZmZXIgPSAoY2hhciopbWFsbG9jKHNpemUpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVy
ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICh2c25w
cmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7Ci0gICAgICAgICAgICAg
ICAgT3V0cHV0RGVidWdTdHJpbmdBKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZnJlZShidWZm
ZXIpOworICAgICAgICAgICAgYnVmZmVyLmdyb3coc2l6ZSk7CisgICAgICAgICAgICBpZiAodnNu
cHJpbnRmKGJ1ZmZlci5nZXQoKSwgc2l6ZSwgZm9ybWF0LCBhcmdzKSAhPSAtMSkgeworICAgICAg
ICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nQShidWZmZXIuZ2V0KCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAg
ICAgICAgICAgICBzaXplICo9IDI7CiAgICAgICAgIH0gd2hpbGUgKHNpemUgPiAxMDI0KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJh
bWVNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFj
LmNwcAppbmRleCA2MDE1YWE1OWQyYjU1MDYyMzQxNmE0OTNmOWFkMTZjMTg0ZjNiMWVjLi5hZTEw
MjNlYzI2OGZjNTkxNmZiM2VhYjMxNGY4ODljYmU0MWM5YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKQEAgLTE0Niw3ICsxNDYs
NyBAQCB2b2lkIEZGVEZyYW1lOjpkb0ludmVyc2VGRlQoZmxvYXQqIGRhdGEpCiBGRlRTZXR1cCBG
RlRGcmFtZTo6ZmZ0U2V0dXBGb3JTaXplKHVuc2lnbmVkIGZmdFNpemUpCiB7CiAgICAgaWYgKCFm
ZnRTZXR1cHMpIHsKLSAgICAgICAgZmZ0U2V0dXBzID0gKEZGVFNldHVwKiltYWxsb2Moc2l6ZW9m
KEZGVFNldHVwKSAqIGtNYXhGRlRQb3cyU2l6ZSk7CisgICAgICAgIGZmdFNldHVwcyA9IChGRlRT
ZXR1cCopZmFzdE1hbGxvYyhzaXplb2YoRkZUU2V0dXApICoga01heEZGVFBvdzJTaXplKTsKICAg
ICAgICAgbWVtc2V0KGZmdFNldHVwcywgMCwgc2l6ZW9mKEZGVFNldHVwKSAqIGtNYXhGRlRQb3cy
U2l6ZSk7CiAgICAgfQogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBGRlRGcmFtZTo6Y2xlYW51
cCgpCiAgICAgICAgICAgICB2RFNQX2Rlc3Ryb3lfZmZ0c2V0dXAoZmZ0U2V0dXBzW2ldKTsKICAg
ICB9CiAKLSAgICBmcmVlKGZmdFNldHVwcyk7CisgICAgZmFzdEZyZWUoZmZ0U2V0dXBzKTsKICAg
ICBmZnRTZXR1cHMgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IGNlYTlmNmE0OTU4MjU2NmY4OTkz
MGM0MWRkYzYxMjA5YTQ3ODJhNDYuLjUyN2UzYjY1OWEwMDYzNmRlMjEzNWJkYzM1MDNiNWUzNmUy
NmNiY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0xMzcsMTIgKzEzNywxMiBAQCBzdGF0aWMgY29uc3QgVmVj
dG9yPFN0cmluZz4qIGdldExpbmtlZEZvbnRzKFN0cmluZyYgZmFtaWx5KQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFdDSEFSKiBsaW5rZWRGb250cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V0NIQVIqPihtYWxsb2MobGlua2VkRm9udHNCdWZmZXJTaXplKSk7Ci0gICAgaWYgKDo6
UmVnUXVlcnlWYWx1ZUV4KGZvbnRMaW5rS2V5LCBmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGxp
bmtlZEZvbnRzKSwgJmxpbmtlZEZvbnRzQnVmZmVyU2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykgewot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsaW5rZWRGb250c0J1ZmZlclNpemUgLyBzaXplb2Yo
KmxpbmtlZEZvbnRzKTsKLSAgICAgICAgYXBwZW5kTGlua2VkRm9udHMobGlua2VkRm9udHMsIGxl
bmd0aCwgcmVzdWx0KTsKKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIHVuc2lnbmVkIEluaXRp
YWxCdWZmZXJTaXplIHsgMjU2IC8gc2l6ZW9mKFdDSEFSKSB9OworICAgIFZlY3RvcjxXQ0hBUiwg
SW5pdGlhbEJ1ZmZlclNpemU+IGxpbmtlZEZvbnRzKHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdDSEFSKT4obGlua2VkRm9udHNCdWZmZXJTaXplKSAvIHNpemVvZihXQ0hBUikpOworICAgIGlm
ICg6OlJlZ1F1ZXJ5VmFsdWVFeChmb250TGlua0tleSwgZmFtaWx5LmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEJZVEUq
PihsaW5rZWRGb250cy5kYXRhKCkpLCAmbGlua2VkRm9udHNCdWZmZXJTaXplKSA9PSBFUlJPUl9T
VUNDRVNTKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpbmtlZEZvbnRzQnVmZmVyU2l6
ZSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgIGFwcGVuZExpbmtlZEZvbnRzKGxpbmtlZEZvbnRz
LmRhdGEoKSwgbGVuZ3RoLCByZXN1bHQpOwogICAgIH0KLSAgICBmcmVlKGxpbmtlZEZvbnRzKTsK
ICAgICBSZWdDbG9zZUtleShmb250TGlua0tleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAppbmRleCA5ZmY4NDExZmIzYTk0MDZkMDEzNDQyNTUy
YjM2YThiYjExNzFkN2E3Li44ZGQ1NDZjNWJjNjFhZmMxZTUyYjkwODI3NmQyNzdiMjBjNjkwNDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mCiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsKIAotICAg
IExPR0ZPTlQmIGxvZ0ZvbnQgPSAqc3RhdGljX2Nhc3Q8TE9HRk9OVCo+KG1hbGxvYyhzaXplb2Yo
TE9HRk9OVCkpKTsKKyAgICBMT0dGT05UIGxvZ0ZvbnQgeyAwIH07CiAgICAgbWVtY3B5KGxvZ0Zv
bnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKIAog
ICAgIGxvZ0ZvbnQubGZIZWlnaHQgPSAtc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAppbmRl
eCBhZThiNGY0YmNkNjc2ODRjYTk4OTI4ZDRiNzU1MWE1YjlhNTBkZjFkLi4yZmQ3ODI2OThiOThj
NWNhM2MyOTA4ZmQxNGYzMTNlMWU5NjMxYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCkBA
IC01NywxNCArNTcsMTQgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElP
YmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGJ1ZmZlclNpemUsICJCaXRtYXAgZm9udHMgbm90IHN1cHBvcnRlZCB3aXRoIENv
cmVHcmFwaGljcy4iKTsKIAogICAgIGlmIChidWZmZXJTaXplKSB7Ci0gICAgICAgIE9VVExJTkVU
RVhUTUVUUklDVyogbWV0cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJT
aXplKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciB1bnNpZ25lZCBJbml0aWFsQnVm
ZmVyU2l6ZSB7IDI1NiB9OworICAgICAgICBWZWN0b3I8Y2hhciwgMjU2PiBidWZmZXIoYnVmZmVy
U2l6ZSk7CisgICAgICAgIGF1dG8qIG1ldHJpY3MgPSByZWludGVycHJldF9jYXN0PE9VVExJTkVU
RVhUTUVUUklDVyo+KGJ1ZmZlci5kYXRhKCkpOwogCiAgICAgICAgIEdldE91dGxpbmVUZXh0TWV0
cmljc1coaGRjLCBidWZmZXJTaXplLCBtZXRyaWNzKTsKICAgICAgICAgV0NIQVIqIGZhY2VOYW1l
ID0gKFdDSEFSKikoKHVpbnRwdHJfdCltZXRyaWNzICsgKHVpbnRwdHJfdCltZXRyaWNzLT5vdG1w
RmFjZU5hbWUpOwogCiAgICAgICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwgc2l6
ZSwgaGRjLCBmYWNlTmFtZSk7Ci0KLSAgICAgICAgZnJlZShtZXRyaWNzKTsKICAgICB9CiAKICAg
ICBSZXN0b3JlREMoaGRjLCAtMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU1VSTEV4dHJhcy5tbQppbmRleCAyMDM0MDMzZjEzMTVlZWNkM2ExOTY1MjM1YThl
NjYwYWZiMTg1NmZmLi42OGE1NjIzMGVhZDQzMzBiZGE4NjIzYjJmYjhhZDY3ZjJhNzA4YWZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFz
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMu
bW0KQEAgLTc1MCwyMSArNzUwLDE4IEBAIE5TVVJMICpVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0
ZXJCZWZvcmVDb21wb25lbnQoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wb25lbnRUeXBlCiAgICAgaWYg
KGZyYWdSZy5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKICAgICAgICAgcmV0dXJuIFVSTDsKICAg
ICAKLSAgICBVSW50OCAqdXJsQnl0ZXMsIGJ1ZmZlclsyMDQ4XTsKLSAgICBDRkluZGV4IG51bUJ5
dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBidWZmZXIsIDIwNDgpOworICAgIFZl
Y3RvcjxVSW50OCwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IHVybEJ5dGVzKFVSTF9CWVRFU19C
VUZGRVJfTEVOR1RIKTsKKyAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZV
UkxSZWYpVVJMLCB1cmxCeXRlcy5kYXRhKCksIHVybEJ5dGVzLnNpemUoKSk7CiAgICAgaWYgKG51
bUJ5dGVzID09IC0xKSB7CiAgICAgICAgIG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxS
ZWYpVVJMLCBOVUxMLCAwKTsKLSAgICAgICAgdXJsQnl0ZXMgPSBzdGF0aWNfY2FzdDxVSW50OCo+
KG1hbGxvYyhudW1CeXRlcykpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkws
IHVybEJ5dGVzLCBudW1CeXRlcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVybEJ5dGVzID0gYnVm
ZmVyOwotICAgICAgICAKLSAgICBOU1VSTCAqcmVzdWx0ID0gKE5TVVJMICopQ0ZVUkxDcmVhdGVX
aXRoQnl0ZXMoTlVMTCwgdXJsQnl0ZXMsIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0Vu
Y29kaW5nVVRGOCwgTlVMTCk7CisgICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMpOworICAg
ICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgbnVtQnl0
ZXMpOworICAgIH0KKworICAgIE5TVVJMICpyZXN1bHQgPSAoTlNVUkwgKilDRlVSTENyZWF0ZVdp
dGhCeXRlcyhOVUxMLCB1cmxCeXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0
cmluZ0VuY29kaW5nVVRGOCwgTlVMTCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3Vs
dCA9IChOU1VSTCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLCBmcmFnUmcu
bG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgTlVMTCk7CisgICAgICAg
IHJlc3VsdCA9IChOU1VSTCAqKUNGVVJMQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHVybEJ5dGVzLmRh
dGEoKSwgZnJhZ1JnLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIE5V
TEwpOwogICAgICAgICAKLSAgICBpZiAodXJsQnl0ZXMgIT0gYnVmZmVyKQotICAgICAgICBmcmVl
KHVybEJ5dGVzKTsKICAgICByZXR1cm4gcmVzdWx0ID8gW3Jlc3VsdCBhdXRvcmVsZWFzZV0gOiBV
Ukw7CiB9CiAKQEAgLTg3NywzMiArODc0LDI1IEBAIHN0YXRpYyBCT09MIGhhc1F1ZXN0aW9uTWFy
a09ubHlRdWVyeVN0cmluZyhOU1VSTCAqVVJMKQogCiBOU0RhdGEgKmRhdGFGb3JVUkxDb21wb25l
bnRUeXBlKE5TVVJMICpVUkwsIENGVVJMQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQogewot
ICAgIHN0YXRpYyBjb25zdCBpbnQgVVJMQ29tcG9uZW50VHlwZUJ1ZmZlckxlbmd0aCA9IDIwNDg7
Ci0gICAgCi0gICAgVUludDggc3RhdGljQWxsQnl0ZXNCdWZmZXJbVVJMQ29tcG9uZW50VHlwZUJ1
ZmZlckxlbmd0aF07Ci0gICAgVUludDggKmFsbEJ5dGVzQnVmZmVyID0gc3RhdGljQWxsQnl0ZXNC
dWZmZXI7Ci0gICAgCi0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKENG
VVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIsIFVSTENvbXBvbmVudFR5cGVCdWZmZXJMZW5ndGgp
OworICAgIFZlY3RvcjxVSW50OCwgVVJMX0JZVEVTX0JVRkZFUl9MRU5HVEg+IGFsbEJ5dGVzQnVm
ZmVyKFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIKTsKKyAgICBDRkluZGV4IGJ5dGVzRmlsbGVkID0g
Q0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlci5kYXRhKCksIGFsbEJ5
dGVzQnVmZmVyLnNpemUoKSk7CiAgICAgaWYgKGJ5dGVzRmlsbGVkID09IC0xKSB7CiAgICAgICAg
IENGSW5kZXggYnl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBO
VUxMLCAwKTsKLSAgICAgICAgYWxsQnl0ZXNCdWZmZXIgPSBzdGF0aWNfY2FzdDxVSW50OCAqPiht
YWxsb2MoYnl0ZXNUb0FsbG9jYXRlKSk7Ci0gICAgICAgIGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRC
eXRlcygoQ0ZVUkxSZWYpVVJMLCBhbGxCeXRlc0J1ZmZlciwgYnl0ZXNUb0FsbG9jYXRlKTsKKyAg
ICAgICAgYWxsQnl0ZXNCdWZmZXIuZ3JvdyhieXRlc1RvQWxsb2NhdGUpOworICAgICAgICBieXRl
c0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIuZGF0
YSgpLCBieXRlc1RvQWxsb2NhdGUpOwogICAgIH0KICAgICAKICAgICBDRlJhbmdlIHJhbmdlOwog
ICAgIGlmIChjb21wb25lbnRUeXBlICE9IGNvbXBsZXRlVVJMKSB7CiAgICAgICAgIHJhbmdlID0g
Q0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKENGVVJMUmVmKVVSTCwgY29tcG9uZW50VHlw
ZSwgTlVMTCk7Ci0gICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkgewot
ICAgICAgICAgICAgaWYgKHN0YXRpY0FsbEJ5dGVzQnVmZmVyICE9IGFsbEJ5dGVzQnVmZmVyKQot
ICAgICAgICAgICAgICAgIGZyZWUoYWxsQnl0ZXNCdWZmZXIpOworICAgICAgICBpZiAocmFuZ2Uu
bG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSAwOwogICAgICAgICBy
YW5nZS5sZW5ndGggPSBieXRlc0ZpbGxlZDsKICAgICB9CiAgICAgCi0gICAgTlNEYXRhICpjb21w
b25lbnREYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyICsgcmFuZ2Uu
bG9jYXRpb24gbGVuZ3RoOnJhbmdlLmxlbmd0aF07IAorICAgIE5TRGF0YSAqY29tcG9uZW50RGF0
YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczphbGxCeXRlc0J1ZmZlci5kYXRhKCkgKyByYW5nZS5s
b2NhdGlvbiBsZW5ndGg6cmFuZ2UubGVuZ3RoXTsgCiAgICAgCiAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KFtjb21wb25l
bnREYXRhIGJ5dGVzXSk7CiAgICAgTlNNdXRhYmxlRGF0YSAqcmVzdWx0RGF0YSA9IFtOU011dGFi
bGVEYXRhIGRhdGFdOwpAQCAtOTI3LDkgKzkxNyw2IEBAIE5TRGF0YSAqZGF0YUZvclVSTENvbXBv
bmVudFR5cGUoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wb25lbnRUeXBlIGNvbXBvbmVudFR5cGUpCiAg
ICAgICAgIH0gICAgICAgICAgICAgICAKICAgICB9CiAgICAgCi0gICAgaWYgKHN0YXRpY0FsbEJ5
dGVzQnVmZmVyICE9IGFsbEJ5dGVzQnVmZmVyKQotICAgICAgICBmcmVlKGFsbEJ5dGVzQnVmZmVy
KTsKLSAgICAKICAgICByZXR1cm4gcmVzdWx0RGF0YTsKIH0KIApAQCAtOTQyLDggKzkyOSw4IEBA
IHN0YXRpYyBOU1VSTCAqVVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRDaGFyYWN0
ZXIoTlNVUkwgKlVSTCwgQ0ZVUkxDb21wCiAgICAgLy8gUmVtb3ZlIG9uZSBzdWJzZXF1ZW50IGNo
YXJhY3Rlci4KICAgICByYW5nZS5sZW5ndGgrKzsKIAotICAgIFZlY3RvcjxVSW50OCwgMjA0OD4g
YnVmZmVyKDIwNDgpOwotICAgIENGSW5kZXggbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChDRlVS
TFJlZilVUkwsIGJ1ZmZlci5kYXRhKCksIDIwNDgpOworICAgIFZlY3RvcjxVSW50OCwgVVJMX0JZ
VEVTX0JVRkZFUl9MRU5HVEg+IGJ1ZmZlcihVUkxfQllURVNfQlVGRkVSX0xFTkdUSCk7CisgICAg
Q0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKVVSTCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLnNpemUoKSk7CiAgICAgaWYgKG51bUJ5dGVzID09IC0xKSB7CiAgICAgICAg
IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpVVJMLCBOVUxMLCAwKTsKICAgICAg
ICAgYnVmZmVyLmdyb3cobnVtQnl0ZXMpOwpAQCAtMTAxMCwxMCArOTk3LDEwIEBAIE5TRGF0YSAq
b3JpZ2luYWxVUkxEYXRhKE5TVVJMICpVUkwpCiBzdGF0aWMgQ0ZTdHJpbmdSZWYgY3JlYXRlU3Ry
aW5nV2l0aEVzY2FwZWRVbnNhZmVDaGFyYWN0ZXJzKENGU3RyaW5nUmVmIHN0cmluZykKIHsKICAg
ICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Ci0gICAgVmVjdG9y
PFVDaGFyLCAyMDQ4PiBzb3VyY2VCdWZmZXIobGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXIsIFVS
TF9CWVRFU19CVUZGRVJfTEVOR1RIPiBzb3VyY2VCdWZmZXIobGVuZ3RoKTsKICAgICBDRlN0cmlu
Z0dldENoYXJhY3RlcnMoc3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzb3VyY2VCdWZm
ZXIuZGF0YSgpKTsKICAgICAKLSAgICBWZWN0b3I8VUNoYXIsIDIwNDg+IG91dEJ1ZmZlcjsKKyAg
ICBWZWN0b3I8VUNoYXIsIFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIPiBvdXRCdWZmZXI7CiAgICAg
CiAgICAgc3RkOjpvcHRpb25hbDxVQ2hhcjMyPiBwcmV2aW91c0NvZGVQb2ludDsKICAgICBDRklu
ZGV4IGkgPSAwOwpAQCAtMTA1OCw4ICsxMDQ1LDggQEAgTlNTdHJpbmcgKnVzZXJWaXNpYmxlU3Ry
aW5nKE5TVVJMICpVUkwpCiAgICAgCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGJlZm9y
ZTsKICAgICBpbnQgYnVmZmVyTGVuZ3RoID0gKGxlbmd0aCAqIDMpICsgMTsKLSAgICBjaGFyICph
ZnRlciA9IHN0YXRpY19jYXN0PGNoYXIgKj4obWFsbG9jKGJ1ZmZlckxlbmd0aCkpOyAvLyBsYXJn
ZSBlbm91Z2ggdG8gJS1lc2NhcGUgZXZlcnkgY2hhcmFjdGVyCi0gICAgY2hhciAqcSA9IGFmdGVy
OworICAgIFZlY3RvcjxjaGFyLCBVUkxfQllURVNfQlVGRkVSX0xFTkdUSD4gYWZ0ZXIoYnVmZmVy
TGVuZ3RoKTsgLy8gbGFyZ2UgZW5vdWdoIHRvICUtZXNjYXBlIGV2ZXJ5IGNoYXJhY3RlcgorICAg
IGNoYXIgKnEgPSBhZnRlci5kYXRhKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBwW2ldOwogICAgICAgICAvLyB1bmVz
Y2FwZSBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgaW5kaWNhdGUgYnl0ZXMgZ3JlYXRlciB0aGFuIDB4
N2YKQEAgLTEwODYsMTcgKzEwNzMsMTcgQEAgTlNTdHJpbmcgKnVzZXJWaXNpYmxlU3RyaW5nKE5T
VVJMICpVUkwpCiAgICAgKnEgPSAnXDAnOwogICAgIAogICAgIC8vIENoZWNrIHN0cmluZyB0byBz
ZWUgaWYgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBkaXNwbGF5IHVzaW5nIFVURi04ICAKLSAgICBO
U1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFmdGVyXTsK
KyAgICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFm
dGVyLmRhdGEoKV07CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgLy8gQ291bGQgbm90IGNv
bnZlcnQgdG8gVVRGLTguCiAgICAgICAgIC8vIENvbnZlcnQgY2hhcmFjdGVycyBncmVhdGVyIHRo
YW4gMHg3ZiB0byBlc2NhcGUgc2VxdWVuY2VzLgogICAgICAgICAvLyBTaGlmdCBjdXJyZW50IHN0
cmluZyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKICAgICAgICAgLy8gdGhlbiB3ZSB3aWxsIGNv
cHkgYmFjayBieXRlcyB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAKICAgICAgICAgLy8gYXMg
d2UgY29udmVydC4KLSAgICAgICAgaW50IGFmdGVybGVuZ3RoID0gcSAtIGFmdGVyOwotICAgICAg
ICBjaGFyICpwID0gYWZ0ZXIgKyBidWZmZXJMZW5ndGggLSBhZnRlcmxlbmd0aCAtIDE7Ci0gICAg
ICAgIG1lbW1vdmUocCwgYWZ0ZXIsIGFmdGVybGVuZ3RoICsgMSk7IC8vIGNvcGllcyB0cmFpbGlu
ZyAnXDAnCi0gICAgICAgIGNoYXIgKnEgPSBhZnRlcjsKKyAgICAgICAgaW50IGFmdGVybGVuZ3Ro
ID0gcSAtIGFmdGVyLmRhdGEoKTsKKyAgICAgICAgY2hhciAqcCA9IGFmdGVyLmRhdGEoKSArIGJ1
ZmZlckxlbmd0aCAtIGFmdGVybGVuZ3RoIC0gMTsKKyAgICAgICAgbWVtbW92ZShwLCBhZnRlci5k
YXRhKCksIGFmdGVybGVuZ3RoICsgMSk7IC8vIGNvcGllcyB0cmFpbGluZyAnXDAnCisgICAgICAg
IGNoYXIgKnEgPSBhZnRlci5kYXRhKCk7CiAgICAgICAgIHdoaWxlICgqcCkgewogICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBjID0gKnA7CiAgICAgICAgICAgICBpZiAoYyA+IDB4N2YpIHsKQEAg
LTExMDgsMTEgKzEwOTUsOSBAQCBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKlVS
TCkKICAgICAgICAgICAgIHArKzsKICAgICAgICAgfQogICAgICAgICAqcSA9ICdcMCc7Ci0gICAg
ICAgIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzphZnRlcl07CisgICAg
ICAgIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzphZnRlci5kYXRhKCld
OwogICAgIH0KICAgICAKLSAgICBmcmVlKGFmdGVyKTsKLSAgICAKICAgICBpZiAobWF5TmVlZEhv
c3ROYW1lRGVjb2RpbmcpIHsKICAgICAgICAgLy8gRklYTUU6IElzIGl0IGdvb2QgdG8gaWdub3Jl
IHRoZSBmYWlsdXJlIG9mIG1hcEhvc3ROYW1lcyBhbmQga2VlcCByZXN1bHQgaW50YWN0PwogICAg
ICAgICBOU1N0cmluZyAqbWFwcGVkUmVzdWx0ID0gbWFwSG9zdE5hbWVzKHJlc3VsdCwgTk8pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcAppbmRleCAyZGRjMzcwYjljMjJiY2UwYjUzZmI2NGJjMDMxOGQwYjVmZGI2ODA4Li45
NzAwMjcwYWJmMWUyZjg0NjQwYWRjMmJlZDViMGYyNjA2YTRiMGI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHNobHdhcGkuaD4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+
IC8vIGZvciBJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMjc3LDExICsy
NzgsMTMgQEAgdm9pZCBtYXJrdXBUb0NGSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3Qg
U3RyaW5nJiBzcmNVUkwsIFZlY3RvcjxjaGFyPiYgcmUKICAgICB1bnNpZ25lZCBlbmRGcmFnbWVu
dE9mZnNldCA9IHN0YXJ0RnJhZ21lbnRPZmZzZXQgKyBtYXJrdXBVVEY4Lmxlbmd0aCgpOwogICAg
IHVuc2lnbmVkIGVuZEhUTUxPZmZzZXQgPSBlbmRGcmFnbWVudE9mZnNldCArIHN0cmxlbihlbmRN
YXJrdXApOwogCi0gICAgdW5zaWduZWQgaGVhZGVyQnVmZmVyTGVuZ3RoID0gc3RhcnRIVE1MT2Zm
c2V0ICsgMTsgLy8gKyAxIGZvciAnXDAnIHRlcm1pbmF0b3IuCi0gICAgY2hhciogaGVhZGVyQnVm
ZmVyID0gKGNoYXIqKW1hbGxvYyhoZWFkZXJCdWZmZXJMZW5ndGgpOwotICAgIHNucHJpbnRmKGhl
YWRlckJ1ZmZlciwgaGVhZGVyQnVmZmVyTGVuZ3RoLCBoZWFkZXIsIHN0YXJ0SFRNTE9mZnNldCwg
ZW5kSFRNTE9mZnNldCwgc3RhcnRGcmFnbWVudE9mZnNldCwgZW5kRnJhZ21lbnRPZmZzZXQpOwot
ICAgIGFwcGVuZChyZXN1bHQsIENTdHJpbmcoaGVhZGVyQnVmZmVyKSk7Ci0gICAgZnJlZShoZWFk
ZXJCdWZmZXIpOworICAgIHsKKyAgICAgICAgdW5zaWduZWQgaGVhZGVyQnVmZmVyTGVuZ3RoID0g
c3RhcnRIVE1MT2Zmc2V0ICsgMTsgLy8gKyAxIGZvciAnXDAnIHRlcm1pbmF0b3IuCisgICAgICAg
IHN0YXRpYyBjb25zdCBjb25zdGV4cHIgdW5zaWduZWQgSW5pdGlhbEJ1ZmZlclNpemUgeyAyMDQ4
IH07CisgICAgICAgIFZlY3RvcjxjaGFyLCBJbml0aWFsQnVmZmVyU2l6ZT4gaGVhZGVyQnVmZmVy
KGhlYWRlckJ1ZmZlckxlbmd0aCk7CisgICAgICAgIHNucHJpbnRmKGhlYWRlckJ1ZmZlci5kYXRh
KCksIGhlYWRlckJ1ZmZlckxlbmd0aCwgaGVhZGVyLCBzdGFydEhUTUxPZmZzZXQsIGVuZEhUTUxP
ZmZzZXQsIHN0YXJ0RnJhZ21lbnRPZmZzZXQsIGVuZEZyYWdtZW50T2Zmc2V0KTsKKyAgICAgICAg
YXBwZW5kKHJlc3VsdCwgQ1N0cmluZyhoZWFkZXJCdWZmZXIuZGF0YSgpKSk7CisgICAgfQogICAg
IGlmIChzb3VyY2VVUkxVVEY4Lmxlbmd0aCgpKSB7CiAgICAgICAgIGFwcGVuZChyZXN1bHQsIHNv
dXJjZVVSTFByZWZpeCk7CiAgICAgICAgIGFwcGVuZChyZXN1bHQsIHNvdXJjZVVSTFVURjgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319879</attachid>
            <date>2017-09-04 23:13:38 -0700</date>
            <delta_ts>2017-09-04 23:15:40 -0700</delta_ts>
            <desc>Patch to fix compilation errors with HAVE(ISDEBUGGERPRESENT)</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>1204</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZGEzY2ZkZjcwOTAuLmNmYTRjNzYwZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3
LTA5LTA0ICBZb3NoaWFraSBKaXRzdWthd2EgIDxZb3NoaWFraS5KaXRzdWthd2FAc29ueS5jb20+
CisKKyAgICAgICAgRml4IGNvbXBpbGF0aW9uIGVycm9ycyB3aXRoIEhBVkUoSVNERUJVR0dFUlBS
RVNFTlQpIGFmdGVyIHIyMjE1ODMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjMxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorCiAyMDE3LTA5LTA0ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBIVE1MTWVk
aWFFbGVtZW50IHRvIHJlbGVhc2UgbG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
QXNzZXJ0aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcAppbmRleCAwMTMx
N2ZjNzJkOS4uN2VkN2RlNTI1NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC0xMzIsOCArMTMy
LDggQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0IGNoYXIqIGZvcm1h
dCwgdmFfbGlzdCBhcmdzKQogICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKHNpemUpOwogICAg
ICAgICBkbyB7CiAgICAgICAgICAgICBidWZmZXIuZ3JvdyhzaXplKTsKLSAgICAgICAgICAgIGlm
ICh2c25wcmludGYoYnVmZmVyLmdldCgpLCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdBKGJ1ZmZlci5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAodnNucHJpbnRmKGJ1ZmZlci5kYXRhKCksIHNpemUsIGZvcm1hdCwgYXJncykgIT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ0EoYnVmZmVyLmRhdGEoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzaXpl
ICo9IDI7Cg==
</data>
<flag name="review"
          id="340064"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="340065"
          type_id="3"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>