<?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>78305</bug_id>
          
          <creation_ts>2012-02-09 18:03:15 -0800</creation_ts>
          <short_desc>[Qt][Texmap] Refactor backing-store code in TextureMapper</short_desc>
          <delta_ts>2012-02-14 04:53:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553669</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-09 18:03:15 -0800</bug_when>
    <thetext>TextureMapperNode and LayerTreeHostProxy currenty includes a lot of code for dealing with backing-store. That code is hard to maintain and is messy. 
This is an attempt at making it a lot cleaner, and making the way backing-stores in TextureMapper be transparent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553716</commentid>
    <comment_count>1</comment_count>
      <attachid>126428</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-09 18:46:02 -0800</bug_when>
    <thetext>Created attachment 126428
Patch

This is the last huge refactor patch for now, so please bear with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553923</commentid>
    <comment_count>2</comment_count>
      <attachid>126428</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-10 00:59:41 -0800</bug_when>
    <thetext>Comment on attachment 126428
Patch

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

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.h:49
&gt; +    virtual int maxTextureDimension() { return 2000; }

Would it make sense to make it possible to use different dimentions horizontally, vertically?

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:304
&gt; +    m_compositedImage = TextureMapperCompositedImage::get(m_image.get(), textureMapper);
&gt; +    m_contentsLayer = m_media ? m_media : m_compositedImage.get();

Would it make sense to check for m_media first?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:109
&gt; +    virtual int maxTextureDimension() { return 10000; }

Why such a crazy big default? if you want to avoid tiling why not use MAX_INT or so.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:31
&gt; +void TextureMapperTile::updateContents(TextureMapper* textureMapper, Image* image, const IntRect&amp; dirtyRect)
&gt; +{
&gt; +    IntRect targetRect = enclosingIntRect(m_rect);

Please notice that webkit just switched to floats for layouts. Maybe we soon need to change to using LayoutRects instead

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:44
&gt; +        m_texture-&gt;reset(targetRect.size(), false);

specify what the false means

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:59
&gt; +void TextureMapperBackingStore::computeTilesIfNeeded(const FloatSize&amp; size, int tileSize)

It seems more like a createTilesIfNeeded()

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:80
&gt; +        bool found = false;

bool existsAlready = false?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:82
&gt; +PassRefPtr&lt;TextureMapperBackingStore&gt; TextureMapperNode::getBackingStore()

why not just backingStore() ?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:99
&gt; +    FloatRect dirtyRect = m_state.needsDisplay ? layerRect() : m_state.needsDisplayRect;

is this correct?

&gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:49
&gt; +#if PLATFORM(QT)
&gt; +    QImage qtImage = m_backBuffer-&gt;createQImage();
&gt; +    pixels = qtImage.constBits();
&gt; +#endif

You intent this file to move out of /qt/ ?

&gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:50
&gt; +    texture-&gt;updateContents(pixels, IntRect(IntPoint(), m_backBuffer-&gt;size()));

why not use ::zero() here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554103</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-10 09:14:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 126428 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126428&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.h:49
&gt; &gt; +    virtual int maxTextureDimension() { return 2000; }
&gt; 
&gt; Would it make sense to make it possible to use different dimentions horizontally, vertically?
It might look nice, but what is the use for that?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:304
&gt; &gt; +    m_compositedImage = TextureMapperCompositedImage::get(m_image.get(), textureMapper);
&gt; &gt; +    m_contentsLayer = m_media ? m_media : m_compositedImage.get();
&gt; 
&gt; Would it make sense to check for m_media first?
You mean before testing for m_compositedImage? that wouldn&apos;t work, because we need to reset the composited image if m_image is 0.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:109
&gt; &gt; +    virtual int maxTextureDimension() { return 10000; }
&gt; 
&gt; Why such a crazy big default? if you want to avoid tiling why not use MAX_INT or so.
For super-huge images I still want a bit of tiling.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:31
&gt; &gt; +void TextureMapperTile::updateContents(TextureMapper* textureMapper, Image* image, const IntRect&amp; dirtyRect)
&gt; &gt; +{
&gt; &gt; +    IntRect targetRect = enclosingIntRect(m_rect);
&gt; 
&gt; Please notice that webkit just switched to floats for layouts. Maybe we soon need to change to using LayoutRects instead
Right.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:44
&gt; &gt; +        m_texture-&gt;reset(targetRect.size(), false);
&gt; 
&gt; specify what the false means
Sure, had a boolean trap there... I&apos;ll add a comment and make it into an enum in a different patch.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:82
&gt; &gt; +PassRefPtr&lt;TextureMapperBackingStore&gt; TextureMapperNode::getBackingStore()
&gt; 
&gt; why not just backingStore() ?
Because it might create the backing-store; I like using the word get when the function can have side-effects.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:99
&gt; &gt; +    FloatRect dirtyRect = m_state.needsDisplay ? layerRect() : m_state.needsDisplayRect;
&gt; 
&gt; is this correct?
Yes. needsDisplay means we have to update the entire layerRect.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:49
&gt; &gt; +#if PLATFORM(QT)
&gt; &gt; +    QImage qtImage = m_backBuffer-&gt;createQImage();
&gt; &gt; +    pixels = qtImage.constBits();
&gt; &gt; +#endif
&gt; 
&gt; You intent this file to move out of /qt/ ?
Yes, most of this is not Qt specific though we&apos;re the only ones to do this cross-process AC so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554138</commentid>
    <comment_count>4</comment_count>
      <attachid>126530</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-10 10:09:10 -0800</bug_when>
    <thetext>Created attachment 126530
Patch to address comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554295</commentid>
    <comment_count>5</comment_count>
      <attachid>126554</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-10 12:28:14 -0800</bug_when>
    <thetext>Created attachment 126554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554315</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-10 12:50:30 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=126530&amp;action=review

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:59
&gt; +void TextureMapperBackingStore::createOrDestroyTilesIfNeeded(const FloatSize&amp; size, const IntSize&amp; tileSize)

A few comments in that method could help.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperCompositedImage.cpp:31
&gt; +static HashMap&lt;int64_t, RefPtr&lt;TextureMapperCompositedImage&gt; &gt; s_imageBackingStores;

The map itself wouldn&apos;t be cleared, isn&apos;t that a bit dirty?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:103
&gt; +    m_backingStore-&gt;updateContents(textureMapper, layer, IntRect(dirtyRect));

Tiles swapBuffers are being done as an obscure side effect of m_backingStore-&gt;updateContents inside updateBackingStore inside syncCompositingState. This is an important step and I think it would be nice if it was more explicit, directly called from LayerTreeHostProxy on the LayerBackingStore after the layer state sync.

&gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:32
&gt; +void LayerBackingStoreTile::swapBuffers(WebCore::TextureMapper* textureMapper)

Maybe have something in the name that buffers swapping only happens if needed.

&gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:76
&gt; +    clear();

I&apos;ve spent 15 minutes trying to understand the code until I saw this line, please add a comment :)
It seems unnecessary to do all this synchronization work each time something gets updated, couldn&apos;t LayerBackingStoreTile inherit from TextureMapperTile?

&gt; Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp:79
&gt; +    HashMap&lt;int, LayerBackingStoreTile&gt;::iterator end = m_tiles.end();
&gt; +    Vector&lt;TextureMapperTile&gt;&amp; tilesToPaint = getTiles();
&gt; +    for (HashMap&lt;int, LayerBackingStoreTile&gt;::iterator it = m_tiles.begin(); it != end; ++it) {

This part is confusing, getTiles(), LayerBackingStore::m_tiles and TextureMapperBackingStore::m_tiles don&apos;t have much in their name to tell their purposes appart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554323</commentid>
    <comment_count>7</comment_count>
      <attachid>126554</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-10 13:00:29 -0800</bug_when>
    <thetext>Comment on attachment 126554
Patch

Removing flag due to Jocelyn&apos;s review, would address them soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554346</commentid>
    <comment_count>8</comment_count>
      <attachid>126554</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-10 13:30:19 -0800</bug_when>
    <thetext>Comment on attachment 126554
Patch

Attachment 126554 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11447820</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554637</commentid>
    <comment_count>9</comment_count>
      <attachid>126638</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-11 09:26:36 -0800</bug_when>
    <thetext>Created attachment 126638
Patch

I&apos;ve addressed Jocelyn&apos;s comments in this patch; Since the change is rather significant, I think it requires an additional review.
Jocelyn, what do you think of the changes? I tried to make this a lot more straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556077</commentid>
    <comment_count>10</comment_count>
      <attachid>126927</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 01:10:25 -0800</bug_when>
    <thetext>Created attachment 126927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556094</commentid>
    <comment_count>11</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-14 01:25:17 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve addressed Jocelyn&apos;s comments in this patch; Since the change is rather significant, I think it requires an additional review.
&gt; Jocelyn, what do you think of the changes? I tried to make this a lot more straightforward.

Looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556102</commentid>
    <comment_count>12</comment_count>
      <attachid>126934</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 01:36:18 -0800</bug_when>
    <thetext>Created attachment 126934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556212</commentid>
    <comment_count>13</comment_count>
      <attachid>126957</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 04:31:13 -0800</bug_when>
    <thetext>Created attachment 126957
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556226</commentid>
    <comment_count>14</comment_count>
      <attachid>126957</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 04:53:50 -0800</bug_when>
    <thetext>Comment on attachment 126957
Patch

Clearing flags on attachment: 126957

Committed r107707: &lt;http://trac.webkit.org/changeset/107707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556227</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 04:53:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126428</attachid>
            <date>2012-02-09 18:46:02 -0800</date>
            <delta_ts>2012-02-10 10:09:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>77865</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDMzNGM4Li4wYTRmNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBubyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hyb25pemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpnZXRDb250
ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAgICAoVGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp1cGRhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNl
bGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1
cmZhY2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJl
Y3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnM6OlRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRCYWNraW5nU3RvcmVGYWN0b3J5KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnMpOgorCiAy
MDEyLTAyLTA5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29t
PgogCiAgICAgICAgIEVuc3VyZSB0aW1lcnMgYW5kIG90aGVyIGFjdGl2ZSBET00gb2JqZWN0cyBk
byBub3QgZmlyZSBpbiBzdXNwZW5kZWQgZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggYzA4Y2IyNS4uOTQ2YjUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC01NzM1LDYgKzU3MzUsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3Np
dGVkSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAog
ICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmggXAogICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKQEAgLTU3NTcsNyArNTc2MSwxMCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2Uu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNzU4ZGQ0Yi4uNDE5ZjU5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC0zOTQ0LDYgKzM5NDQsOCBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdl
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oCkBAIC0zOTUyLDYgKzM5NTQsOCBAQCBjb250YWlucyhDT05GSUcsIHRl
eG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0u
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGM1OWFjZGMuLjBjNmQ3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NzYsNiAr
MzU3NiwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29t
cG9zaXRlZEltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi45ODIyYmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZp
cnR1YWwgdm9pZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBpbnQgbWF4VGV4dHVyZURpbWVuc2lv
bigpIHsgcmV0dXJuIDIwMDA7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0
OwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
aW5kZXggNjZiYzc2ZS4uMmJiNDZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgcHVibGljOgogCiAgICAgUUdMV2lkZ2V0KiBnZXRWaWV3cG9ydEdMV2lkZ2V0KCk7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRl
eHR1cmUqIG1hc2spOwogI2VuZGlmCiAKICAgICB2b2lkIHBhaW50KFFQYWludGVyKiwgY29uc3Qg
UVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiwgUVdpZGdldCopOwpAQCAtMTQyLDcgKzE0Miw3IEBA
IHN0YXRpYyBpbmxpbmUgcXVpbnQzMiBzd2FwQmdyVG9SZ2IocXVpbnQzMiBwaXhlbCkKIH0KIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4
dHVyZSogbWFzaykgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJh
bWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCBiNTIxZDFhLi5jOWZiN2FlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDggQEAgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2Rl
KGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygw
KQorICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX21lZGlhKDApCiAgICAgLCBt
X2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0aGlzLCAmR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogewogfQpAQCAtNDQsOCArNDYsOCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpkaWRTeW5jaHJvbml6ZSgpCiB7CiAgICAgbV9z
eW5jUXVldWVkID0gZmFsc2U7CiAgICAgbV9jaGFuZ2VNYXNrID0gMDsKLSAgICBtX3BlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOworICAg
IG1fbmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC02MSw3ICs2Myw3
IEBAIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIoKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxh
eSgpCiB7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIG1f
bmVlZHNEaXNwbGF5ID0gdHJ1ZTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkRpc3BsYXlDaGFuZ2UpOwogfQogCkBAIC02OSw4ICs3MSw4IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheSgpCiAqLwogdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewotICAgIGlmICghbm9k
ZSgpLT5tZWRpYSgpKQotICAgICAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRy
dWU7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdl
LmdldCgpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFu
Z2UpOwogfQogCkBAIC03OCw5ICs4MCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGlmIChtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICBpZiAobV9uZWVk
c0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QudW5pdGUocmVjdCk7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJlY3Qp
OwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9
CiAKQEAgLTEyOCw3ICsxMzAsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjph
ZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheQogKi8KIHZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciog
bGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCiB7Ci0KICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKIH0KQEAgLTI1OSwyOCArMjYwLDYgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09IG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsKLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IodmFsdWUpOwotICAgIG5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKLX0KLQotLyog
XHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQotewotICAgIGlmICghbV9wZW5kaW5nQ29udGVu
dC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5k
aW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigpOwotICAgIEdyYXBoaWNzTGF5ZXI6
OmNsZWFyQmFja2dyb3VuZENvbG9yKCk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKLSovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09w
YXF1ZShib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQpA
QCAtMzE5LDIyICsyOTgsMzIgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQogICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q29udGVudHNSZWN0Q2hhbmdlKTsKIH0KIAorVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpnZXRDb250ZW50c0xheWVy
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgbV9jb21wb3NpdGVkSW1hZ2Ug
PSBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlOjpnZXQobV9pbWFnZS5nZXQoKSwgdGV4dHVy
ZU1hcHBlcik7CisgICAgbV9jb250ZW50c0xheWVyID0gbV9tZWRpYSA/IG1fbWVkaWEgOiBtX2Nv
bXBvc2l0ZWRJbWFnZS5nZXQoKTsKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyOworfQorCiAv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogeworICAgIGlmIChpbWFn
ZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbWFnZSA9IGltYWdlOworICAg
IG1fY29udGVudHNMYXllciA9IDA7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDb250ZW50Q2hhbmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gaW1h
Z2UgPyBUZXh0dXJlTWFwcGVyTm9kZTo6RGlyZWN0SW1hZ2VDb250ZW50VHlwZSA6IFRleHR1cmVN
YXBwZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5pbWFnZSA9
IGltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWEpCiB7CisgICAgbV9pbWFnZSA9IDA7Cisg
ICAgbV9tZWRpYSA9IG1lZGlhOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9NZWRp
YShtZWRpYSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hh
bmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gbWVkaWEgPyBUZXh0dXJl
TWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJOb2RlOjpIVE1MQ29u
dGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IG1lZGlhOworICAgIG1fY29u
dGVudHNMYXllciA9IG1lZGlhOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAg
LTM1MSwxMyArMzQwLDYgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0Nv
bXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JikKICAgICBtX25vZGUtPnN5bmNDb21wb3Np
dGluZ1N0YXRlKHRoaXMsIFRleHR1cmVNYXBwZXJOb2RlOjpUcmF2ZXJzZURlc2NlbmRhbnRzKTsK
IH0KIAotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBjb25zdF9jYXN0PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKj4obm9kZSgpLT5tZWRp
YSgpKTsKLX0KLQogYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBk
b3VibGUgdGltZU9mZnNldCkKIHsKICAgICBBU1NFUlQoIWtleWZyYW1lc05hbWUuaXNFbXB0eSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggMTcyZmRkYS4u
ODYwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckNvbXBvc2l0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAK
ICNpZiBFTkFCTEUoV0VCR0wpCkBAIC02NCw4ICs2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NU
b0JvdW5kcyhib29sIGIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBi
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzT3BhcXVlKGJvb2wgYik7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIGIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpOwpAQCAtNzcsMTAgKzc2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKTsKLSAgICBpbmxpbmUgVGV4dHVy
ZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVu
ZGluZ0NvbnRlbnQ7IH0KICAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVy
biBtX2NoYW5nZU1hc2s7IH0KICAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTg5LDEy
ICs4NywyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmKTsKIAogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlLmdldCgpOyB9CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGdldENv
bnRlbnRzTGF5ZXIoVGV4dHVyZU1hcHBlciopOworICAgIGJvb2wgbmVlZHNEaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0Rpc3BsYXk7IH0KKyAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJl
Y3QoKSBjb25zdCB7IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7
IH0KIAogcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKKyAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gbV9jb21wb3NpdGVkSW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAg
IGludCBtX2NoYW5nZU1hc2s7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1f
cGVuZGluZ0NvbnRlbnQ7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKKyAgICBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbV9jb250ZW50c0xheWVyOworICAgIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBtX21lZGlhOworICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7CiAg
ICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHZvaWQgYW5pbWF0
aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7
CiAgICAgVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+IG1fYW5pbWF0aW9uU3RhcnRl
ZFRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4IDVlNTI4ZDQuLjU4ZTRmNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5jcHAKQEAgLTczLDcgKzczLDYgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyOjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAg
ICByZXR1cm4gc2VsZWN0ZWRUZXh0dXJlOwogfQogCi0KIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBp
ZiAobW9kZSA9PSBTb2Z0d2FyZU1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBmMjVjZTBiLi5jOGUw
NjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTEwNiw2ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKSB7IH0KIAorICAgIHZpcnR1YWwgaW50IG1heFRleHR1cmVEaW1lbnNpb24oKSB7IHJldHVy
biAxMDAwMDsgfQorCiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkgd2hl
biBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFj
cXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWZmN2RkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE2
NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0dXJl
TWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0
YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3JlY3QpOworICAgIHRhcmdldFJlY3QuaW50
ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVjdDsKKworICAgIC8v
IE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KKyAgICBz
b3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgIC8v
IE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbmF0ZXMuCisgICAg
dGFyZ2V0UmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmUpIHsKKyAgICAgICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVy
ZSgpOworICAgICAgICBtX3RleHR1cmUtPnJlc2V0KHRhcmdldFJlY3Quc2l6ZSgpLCBmYWxzZSk7
CisgICAgfQorCisgICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZSwgdGFyZ2V0UmVj
dCwgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
KiBtYXNrKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBpZiAoIW1f
c2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpy
ZWN0VG9SZWN0KHJlY3QoKSwgdGFyZ2V0UmVjdCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVy
ZSgqbV90aWxlc1tpXS50ZXh0dXJlKCkuZ2V0KCksIG1hdHJpeC5tYXBSZWN0KG1fdGlsZXNbaV0u
cmVjdCgpKSwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlOjpjb21wdXRlVGlsZXNJZk5lZWRlZChjb25zdCBGbG9hdFNpemUmIHNp
emUsIGludCB0aWxlU2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2l6ZSA9IHNpemU7CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxl
UmVjdHNUb0FkZDsKKyAgICBWZWN0b3I8aW50PiB0aWxlSW5kaWNlc1RvUmVtb3ZlOworICAgIHN0
YXRpYyBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0gNjsKKworICAgIGZvciAoZmxvYXQg
eSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7IHkgKz0gdGlsZVNpemUpIHsKKyAgICAgICAgZm9y
IChmbG9hdCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4ICs9IHRpbGVTaXplKSB7CisgICAg
ICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgdGlsZVNpemUsIHRpbGVTaXplKTsKKyAg
ICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChyZWN0KCkpOworICAgICAgICAgICAgdGlsZVJl
Y3RzVG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
aW50IGkgPSBtX3RpbGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIEZsb2F0
UmVjdCBvbGRUaWxlID0gbV90aWxlc1tpXS5yZWN0KCk7CisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKworICAgICAgICBmb3IgKGludCBqID0gdGlsZVJlY3RzVG9BZGQuc2l6ZSgpIC0gMTsg
aiA+PSAwOyAtLWopIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBuZXdUaWxlID0gdGlsZVJlY3Rz
VG9BZGRbal07CisgICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICB0aWxlUmVjdHNUb0FkZC5yZW1vdmUoaik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICB0aWxlSW5kaWNlc1RvUmVtb3Zl
LmFwcGVuZChpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVSZWN0
c1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghdGlsZUluZGljZXNUb1JlbW92ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJUaWxlJiB0aWxlID0gbV90aWxl
c1t0aWxlSW5kaWNlc1RvUmVtb3ZlWzBdXTsKKyAgICAgICAgICAgIHRpbGVJbmRpY2VzVG9SZW1v
dmUucmVtb3ZlKDApOworICAgICAgICAgICAgdGlsZS5zZXRSZWN0KHRpbGVSZWN0c1RvQWRkW2ld
KTsKKyAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUoKSkKKyAgICAgICAgICAgICAgICB0aWxl
LnRleHR1cmUoKS0+cmVzZXQoZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QoKSkuc2l6ZSgpLCBm
YWxzZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdGls
ZXMuYXBwZW5kKFRleHR1cmVNYXBwZXJUaWxlKHRpbGVSZWN0c1RvQWRkW2ldKSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlSW5kaWNlc1RvUmVtb3ZlLnNpemUoKSAm
JiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAgICBtX3Rp
bGVzLnJlbW92ZSh0aWxlSW5kaWNlc1RvUmVtb3ZlW2ldKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyLCBHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIGlmICghdGV4dHVyZU1hcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsYXll
cikgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0aWxlU2l6
ZSA9IHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVEaW1lbnNpb24oKTsKKworICAgIGNvbXB1dGVU
aWxlc0lmTmVlZGVkKGxheWVyLT5zaXplKCksIHRpbGVTaXplKTsKKworICAgIC8vIFBhaW50IHRo
ZSBlbnRpcmUgZGlydHkgcmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdl
IG9ubHkgcGFpbnQgb25jZS4KKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBl
ci0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0
LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cygqY29udGV4dCwgZGlydHlSZWN0KTsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisK
KyNpZiBQTEFURk9STShRVCkKKyAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBEb250Q29w
eUJhY2tpbmdTdG9yZSBpbiBub24tUXQgcG9ydHMgdGhhdCB1c2UgVGV4dHVyZU1hcHBlci4KKyAg
ICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisjZW5k
aWYKKworICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBkaXJ0
eVJlY3QpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFw
cGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGls
ZXNbaV0udGV4dHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fdGlsZXNbaV0udGV4dHVyZSgp
OworICAgIH0KKworICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI2ODlmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlX2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0xheWVy
OworCitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsg
fQorICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQor
ICAgIGlubGluZSB2b2lkIHNldFRleHR1cmUoQml0bWFwVGV4dHVyZSogdGV4dHVyZSkgeyBtX3Rl
eHR1cmUgPSB0ZXh0dXJlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQorICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4
dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgSW50UmVjdCYpOworICAgIFRleHR1cmVNYXBwZXJU
aWxlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCA9IEZsb2F0UmVjdCgpKQorICAgICAgICA6IG1fcmVj
dChyZWN0KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1
cmU+IG1fdGV4dHVyZTsKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwg
cHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4geworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
LCBCaXRtYXBUZXh0dXJlKik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1
cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKiwgY29uc3QgSW50UmVjdCYpOworICAgIGlubGluZSB2
b2lkIGNsZWFyKCkgeyBtX3RpbGVzLmNsZWFyKCk7IG1fc2l6ZSA9IEludFNpemUoKTsgfQorICAg
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlKTsgfQorICAgIGlubGluZSBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fc2l6
ZSk7IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9
IHNpemU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1h
cHBlciosIEltYWdlKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgY29tcHV0ZVRpbGVzSWZO
ZWVkZWQoY29uc3QgRmxvYXRTaXplJiwgaW50KTsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRp
bGU+JiBnZXRUaWxlcygpIHsgcmV0dXJuIG1fdGlsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8VGV4
dHVyZU1hcHBlclRpbGU+JiBnZXRUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXM7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+IG1fdGlsZXM7CisgICAgRmxv
YXRTaXplIG1fc2l6ZTsKK307CisKK30KKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdkNDJhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJD
b21wb3NpdGVkSW1hZ2UuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIgorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1
ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBJdCdzIHVzdWFsbHkgbm90IHJlY29tbWVuZGVkIHRvIHVzZSBzdGF0aWMg
bWFwcyBsaWtlIHRoaXMgb25lIHdpdGggVGV4dHVyZU1hcHBlci4gSG93ZXZlciwgd2UncmUgZ3Vh
cmFudGVlZAorLy8gdGhhdCB0aGlzIG1hcCB3b3VsZCBiZSBjbGVhcmVkIGJlZm9yZSBhIFRleHR1
cmVNYXBwZXIgaXMgY2xlYXJlZCwgd2hpY2ggbWFrZXMgaXQgc2FmZSB0byB1c2UuCitzdGF0aWMg
SGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gPiBz
X2ltYWdlQmFja2luZ1N0b3JlczsKKworc3RhdGljIGludDY0X3QgZ2V0VWlkRm9ySW1hZ2UoSW1h
Z2UqIGltYWdlKQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIHJldHVybiBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+Y2FjaGVLZXkoKTsKKyNlbmRpZgorICAgIHJldHVybiBp
bnQ2NF90KGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKK30KKworVGV4dHVy
ZU1hcHBlckNvbXBvc2l0ZWRJbWFnZTo6flRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoKQor
eworICAgIHNfaW1hZ2VCYWNraW5nU3RvcmVzLnJlbW92ZShtX3VpZCk7Cit9CisKK1RleHR1cmVN
YXBwZXJDb21wb3NpdGVkSW1hZ2U6OlRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoSW1hZ2Uq
IGltYWdlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQ2NF90IHVpZCkKKyAgICA6
IG1fdWlkKHVpZCkKK3sKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlcik7CisgICAgQVNTRVJUKGlt
YWdlKTsKKyAgICBjb21wdXRlVGlsZXNJZk5lZWRlZChpbWFnZS0+c2l6ZSgpLCB0ZXh0dXJlTWFw
cGVyLT5tYXhUZXh0dXJlRGltZW5zaW9uKCkpOworICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVN
YXBwZXIsIGltYWdlLCBpbWFnZS0+cmVjdCgpKTsKKworICAgIGlmICghdWlkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBXZSByZW1vdmUgdGhlIG1hcCBlbnRyeSB3aGVuIGFsbCBvdGhlciBy
ZWZlcmVuY2VzIGFyZSBnb25lLCBzbyB0aGUgcmVmZXJlbmNlIGhhcyB0byBiZSB3ZWFrLgorICAg
IHNfaW1hZ2VCYWNraW5nU3RvcmVzLnNldChtX3VpZCwgYWRvcHRSZWYodGhpcykpOworfQorCitQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+IFRleHR1cmVNYXBwZXJDb21w
b3NpdGVkSW1hZ2U6OmNyZWF0ZShJbWFnZSogaW1hZ2UsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGludDY0X3QgdWlkKQoreworICAgIGlmICghdWlkKQorICAgICAgICB1aWQgPSBnZXRV
aWRGb3JJbWFnZShpbWFnZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
Q29tcG9zaXRlZEltYWdlKGltYWdlLCB0ZXh0dXJlTWFwcGVyLCB1aWQpKTsKK30KKworUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlPiBUZXh0dXJlTWFwcGVyQ29tcG9zaXRl
ZEltYWdlOjpnZXQoSW1hZ2UqIGltYWdlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQor
eworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJDb21wb3NpdGVkSW1hZ2U+KCk7CisgICAgaW50NjRfdCB1aWQgPSBnZXRVaWRGb3JJbWFnZShp
bWFnZSk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0
ZWRJbWFnZT4gPjo6aXRlcmF0b3IgaXQgPSBzX2ltYWdlQmFja2luZ1N0b3Jlcy5maW5kKHVpZCk7
CisgICAgaWYgKGl0ID09IHNfaW1hZ2VCYWNraW5nU3RvcmVzLmVuZCgpKQorICAgICAgICByZXR1
cm4gY3JlYXRlKGltYWdlLCB0ZXh0dXJlTWFwcGVyLCB1aWQpOworICAgIHJldHVybiBpdC0+c2Vj
b25kOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEzM2ZlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJDb21wb3NpdGVkSW1hZ2UuaApAQCAtMCwwICsxLDM5IEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdl
X2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZV9oCisKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
Q29tcG9zaXRlZEltYWdlPiBnZXQoSW1hZ2UqLCBUZXh0dXJlTWFwcGVyKik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gY3JlYXRlKEltYWdlKiwg
VGV4dHVyZU1hcHBlciosIGludDY0X3QgdWlkID0gMCk7CisgICAgflRleHR1cmVNYXBwZXJDb21w
b3NpdGVkSW1hZ2UoKTsKKworcHJpdmF0ZToKKyAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZElt
YWdlKEltYWdlKiwgVGV4dHVyZU1hcHBlciosIGludDY0X3QpOworICAgIGludDY0X3QgbV91aWQ7
Cit9OworCit9CisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmNwcAppbmRleCA0NWI5NGJkLi5lYTI3YjBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5jcHAKQEAgLTIwLDE2ICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAKKyNpbmNsdWRlICJzdGRpby5oIgorCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1h
dGhFeHRyYXMuaCIKIAotbmFtZXNwYWNlIHsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ1RpbGVE
aW1lbnNpb24gPSAxMDI0LjA7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dHVyZU1h
cHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC04
MSwyMTggKzc5LDU2IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1z
UmVjdXJzaXZlKCkKICAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRy
ZW4uc2l6ZSgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkK
K1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gVGV4dHVyZU1hcHBlck5vZGU6
OmdldEJhY2tpbmdTdG9yZSgpCiB7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAg
aWYgKG1fc3RhdGUudGlsZU93bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlw
ZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3NDb250ZW50KSB7Ci0gICAgICAg
IG1fb3duZWRUaWxlcy5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7Ci0gICAgVmVjdG9yPGludD4gdGlsZXNUb1JlbW92ZTsK
LSAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0gNjsKLSAgICBGbG9hdFNpemUgc2l6
ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29u
dGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgZm9yIChm
bG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24p
IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVuc2lvbiwg
Z1RpbGVEaW1lbnNpb24pOwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRS
ZWN0KTsKLSAgICAgICAgICAgIHRpbGVzVG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBtX293bmVkVGlsZXMuc2l6ZSgpIC0gMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX293bmVkVGls
ZXNbaV0ucmVjdDsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAo
aW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7Ci0gICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVzVG9BZGRbal07Ci0gICAgICAgICAgICBp
ZiAob2xkVGlsZSAhPSBuZXdUaWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB0aWxlc1RvQWRkLnJlbW92ZShqKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAg
ICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKGkpOwotICAgIH0KLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0FkZC5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIXRp
bGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBt
X293bmVkVGlsZXNbdGlsZXNUb1JlbW92ZVswXV07Ci0gICAgICAgICAgICB0aWxlc1RvUmVtb3Zl
LnJlbW92ZSgwKTsKLSAgICAgICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Ci0gICAg
ICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBPd25lZFRpbGUgdGlsZTsKLSAgICAgICAgdGlsZS5yZWN0ID0g
dGlsZXNUb0FkZFtpXTsKLSAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAgICAg
bV9vd25lZFRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fb3duZWRUaWxlcy5zaXplKCkgPiBUaWxl
RXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgbV9vd25lZFRpbGVzLnJlbW92ZSh0aWxlc1Rv
UmVtb3ZlW2ldKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdT
dG9yZSA9IGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZTsK
IH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBH
cmFwaGljc0xheWVyKiBsYXllcikKIHsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCi0g
ICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxh
eWVyIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigp
OworICAgIGlmICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9zaXplLmlzRW1wdHkoKSkgewor
ICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0
IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3Bs
YXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwot
Ci0gICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVz
LnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKLSAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25l
ZFRpbGVzW3RpbGVJbmRleF07Ci0gICAgICAgIGlmICghdGlsZS50ZXh0dXJlKQotICAgICAgICAg
ICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0aWxlLnRleHR1cmU7Ci0gICAgICAg
IEludFNpemUgdGlsZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCkuc2l6ZSgpOwot
Ci0gICAgICAgIGlmICh0aWxlLm5lZWRzUmVzZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUoKSAh
PSB0aWxlU2l6ZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICB0aWxlLm5l
ZWRzUmVzZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBt
X3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAgICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNs
b3NpbmdJbnRSZWN0KHRpbGUucmVjdCkpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9i
YWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gY3JlYXRlQmFja2luZ1N0b3Jl
KCk7CiAKKyAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgPyBs
YXllclJlY3QoKSA6IG1fc3RhdGUubmVlZHNEaXNwbGF5UmVjdDsKICAgICBpZiAoZGlydHlSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gUGFpbnQgdGhlIGVudGlyZSBk
aXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVyLiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWlu
dCBvbmNlLgotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkp
OwotICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJh
d2luZ01vZGUoKSk7Ci0gICAgY29udGV4dC0+dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGly
dHlSZWN0LnkoKSk7Ci0gICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250
ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09
IERpcmVjdEltYWdlQ29udGVudFR5cGUpCi0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1
cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNv
bnRlbnRzUmVjdCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotCi0jaWYgUExBVEZPUk0o
UVQpCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IHN1cHBvcnQgRG9udENvcHlCYWNraW5nU3RvcmUg
aW4gbm9uLVF0IHBvcnRzIHRoYXQgdXNlIFRleHR1cmVNYXBwZXIuCi0gICAgaW1hZ2UgPSBpbWFn
ZUJ1ZmZlci0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi0KLSAgICAvLyBE
aXZpZGUgdGhlIGltYWdlIHRvIHRpbGVzLgotICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7
IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAg
IE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOwotICAgICAgICBJbnRS
ZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7Ci0gICAgICAgIHRh
cmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgIGlmICh0YXJnZXRSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSB0YXJnZXRSZWN0OwotCi0gICAgICAgIC8vIE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRo
ZSBidWZmZXIncyBjb29yZGluYXRlcy4KLSAgICAgICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJl
Y3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Ci0KLSAgICAgICAgLy8gTm9ybWFsaXplIHRhcmdldFJl
Y3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGlucWF0ZXMuCi0gICAgICAgIHRhcmdldFJlY3QubW92
ZSgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOwotICAgICAgICB0aWxlLnRleHR1cmUt
PnVwZGF0ZUNvbnRlbnRzKGltYWdlLmdldCgpLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRt
YXBUZXh0dXJlOjpSR0JBRm9ybWF0KTsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSA9IGZhbHNlOwotICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVj
dCA9IEludFJlY3QoKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHModGV4dHVy
ZU1hcHBlciwgbGF5ZXIsIEludFJlY3QoZGlydHlSZWN0KSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50KCkKIHsKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgY29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKIAotICAgIFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0OwotICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gbV90ZXh0
dXJlTWFwcGVyOwotICAgIG9wdC50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBw
YWludFJlY3Vyc2l2ZShvcHQpOwotfQotCi1GbG9hdFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OnRh
cmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgKLSAgICAg
ICAgICAgICAgICB0YXJnZXRSZWN0LngoKSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0Lngo
KSksCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFy
Z2V0UmVjdC55KCkpLAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgdGlsZVJlY3QuaGVpZ2h0KCkpOworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7
CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBwYWludFJl
Y3Vyc2l2ZShvcHRpb25zKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxm
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG1f
c2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7Ci0gICAgQml0bWFwVGV4dHVyZSog
bWFzayA9IG9wdGlvbnMubWFzazsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IHRoaXMtPnRh
cmdldFJlY3QoKTsKLQogICAgIC8vIFdlIGFwcGx5IHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtIHRv
IGNvbXBlbnNhdGUgZm9yIHBhaW50aW5nIGludG8gYSBzdXJmYWNlLCBhbmQgdGhlbiBhcHBseSB0
aGUgb2Zmc2V0IHNvIHRoYXQgdGhlIHBhaW50aW5nIGZpdHMgaW4gdGhlIHRhcmdldCByZWN0Lgog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9CiAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChvcHRpb25zLnRyYW5zZm9ybSkKICAgICAgICAgICAgIC5tdWx0aXBseSht
X3RyYW5zZm9ybS5jb21iaW5lZCgpKQogICAgICAgICAgICAgLnRyYW5zbGF0ZShvcHRpb25zLm9m
ZnNldC53aWR0aCgpLCBvcHRpb25zLm9mZnNldC5oZWlnaHQoKSk7CiAKLSNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKLSAgICBWZWN0b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlPiB0aWxlc1Rv
UGFpbnQ7Ci0KLSAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5h
Z2VkVGlsZXMpIHsKLSAgICAgICAgLy8gU29ydCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZh
Y3RvciBsYXN0LgotICAgICAgICBWZWN0b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7
Ci0gICAgICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBl
bmQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaE1h
cDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5
TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYg
KCFpdC0+c2Vjb25kLmZyb250QnVmZmVyLnRleHR1cmUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnNjYWxlID09IG1fc3RhdGUuY29udGVu
dFNjYWxlKSB7Ci0gICAgICAgICAgICAgICAgdGlsZXMuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VGhpcyBjcmVhdGVzIGEgdHJhbnNpdGlvbmFsIGVmZmVjdCBsb29rcyBnb29kIG9ubHkgd2hlbiB0
aGVyZSdzIG5vIHRyYW5zcGFyZW5jeSwgc28gd2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgb3BhY2l0
eSBmb3IgdGhlIGxheWVyIGlzIGFib3ZlIGEgY2VydGFpbiB0aHJlc2hvbGQuCi0gICAgICAgICAg
ICBpZiAob3BhY2l0eSA+IDAuOTUpCi0gICAgICAgICAgICAgICAgdGlsZXMucHJlcGVuZCgmaXQt
PnNlY29uZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpbGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUg
PSAqdGlsZXNbaV07Ci0gICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IHRpbGUuZnJvbnRCdWZm
ZXIudGFyZ2V0UmVjdDsKLSAgICAgICAgICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqdGls
ZS5mcm9udEJ1ZmZlci50ZXh0dXJlOwotICAgICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFj
aXR5ID0gb3B0aW9ucy5vcGFjaXR5OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrID0g
b3B0aW9ucy5tYXNrOwogCi0gICAgLy8gTm93IHdlIHBhaW50IG93bmVkIHRpbGVzLCBpZiB3ZSdy
ZSBpbiBPd25lZFRpbGVNb2RlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vd25lZFRp
bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUgPSBtX293
bmVkVGlsZXNbaV0udGV4dHVyZS5nZXQoKTsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0IHJlY3Qg
PSB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QodGFyZ2V0UmVjdCwgbV9vd25lZFRpbGVzW2ldLnJlY3Qp
OwotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCBy
ZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwotICAgIH0KKyAgICBpZiAobV9iYWNraW5n
U3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRp
b25zLnRleHR1cmVNYXBwZXIsIGxheWVyUmVjdCgpLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2su
Z2V0KCkpOwogCi0gICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFD
b250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhKQotICAgICAgICBtX2N1cnJlbnRD
b250ZW50Lm1lZGlhLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIs
IHRhcmdldFJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CisgICAgaWYgKG1fY29udGVu
dHNMYXllcikKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5wYWludFRvVGV4dHVyZU1hcHBlcihv
cHRpb25zLnRleHR1cmVNYXBwZXIsIG1fc3RhdGUuY29udGVudHNSZWN0LCB0cmFuc2Zvcm0sIG9w
YWNpdHksIG1hc2suZ2V0KCkpOwogfQogCiBpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVH
cmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQpAQCAtMzMy
LDcgKzE2OCw3IEBAIEludFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZh
Y2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtCiB7CiAgICAgSW50UmVjdCByZWN0
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgobWF0cml4KS5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKLSAgICBy
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRyYW5zZm9ybS5tYXBSZWN0KGVudGlyZVJlY3Qo
KSkpOworICAgIHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxvY2FsVHJhbnNmb3JtLm1hcFJlY3Qo
bGF5ZXJSZWN0KCkpKTsKICAgICBpZiAoIW1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiAhbV9zdGF0
ZS5tYXNrTGF5ZXIpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgcmVjdC51bml0ZShtX2NoaWxkcmVuW2ldLT5pbnRlcm1l
ZGlhdGVTdXJmYWNlUmVjdChtYXRyaXgpKTsKQEAgLTQzMyw3ICsyNjksNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRp
b25zJiBvcHRpb25zKQogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbWFz
a1RleHR1cmUgPSAwOwogCi0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShv
cHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
b3B0aW9ucy5zdXJmYWNlLmdldCgpKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRU
cmFuc2Zvcm0gPQogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFu
c2Zvcm0pCiAgICAgICAgICAgICAgICAgLm11bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkp
CkBAIC00NTAsODkgKzI4Niw2IEBAIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5v
ZGUoKQogICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hp
bGRyZW4uZmluZCh0aGlzKSk7CiB9CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLWlu
dCBUZXh0dXJlTWFwcGVyTm9kZTo6Y3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKQotewot
ICAgIHN0YXRpYyBpbnQgbmV4dElEID0gMDsKLSAgICBpbnQgaWQgPSArK25leHRJRDsKLSAgICBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYWRkKGlkLCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoc2Nh
bGUpKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRTY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiBpZDsK
LX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCkK
LXsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMucmVtb3ZlKGlkKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKQotewotICAgIG1f
ZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5jbGVhcigpOwotCi0gICAgZm9yIChpbnQgaSA9IG1fY2hp
bGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnB1
cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBp
ZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5
TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5k
KGlkKTsKLQotICAgIGlmIChpdCA9PSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5z
ZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tCdWZmZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0g
ICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJlY3QgPSB0YXJnZXRSZWN0OwotICAgIHRpbGUuYmFj
a0J1ZmZlci50ZXh0dXJlID0gdGV4dHVyZTsKLSAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQg
PSB0cnVlOwotICAgIHRpbGUuaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSA9IHRydWU7Ci19Ci0K
LXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VU
aWxlcygpCi17Ci0gICAgZm9yIChIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6
aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gbV9l
eHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLmlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UpCi0gICAgICAgICAgICBtX2V4dGVybmFsbHlN
YW5hZ2VkVGlsZXMucmVtb3ZlKGl0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lkKiBkYXRhKQotewot
ICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotCi0gICAgSGFzaE1hcDxpbnQsIEV4dGVybmFs
bHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmZp
bmQoaWQpOwotICAgIGlmIChpdCA9PSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5z
ZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tCdWZmZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0g
ICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJlY3QgPSBGbG9hdFJlY3QodGFyZ2V0UmVjdCk7Ci0g
ICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJlY3Quc2NhbGUoMS4wIC8gdGlsZS5zY2FsZSk7Ci0K
LSAgICBpZiAoIXRpbGUuYmFja0J1ZmZlci50ZXh0dXJlKQotICAgICAgICB0aWxlLmJhY2tCdWZm
ZXIudGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIHRpbGUu
YmFja0J1ZmZlci50ZXh0dXJlLT5yZXNldChzb3VyY2VSZWN0LnNpemUoKSwgZmFsc2UpOwotICAg
IHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VSZWN0
KTsKLSAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVudHNCdWZmZXJzKCkKLXsKLSAgICBIYXNoTWFwPGludCwg
RXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdl
ZFRpbGVzLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+
c2Vjb25kOwotICAgICAgICBpZiAoIXRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSBmYWxzZTsK
LSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIHN3YXBCdWZmZXIgPSB0aWxlLmZy
b250QnVmZmVyOwotICAgICAgICB0aWxlLmZyb250QnVmZmVyID0gdGlsZS5iYWNrQnVmZmVyOwot
ICAgICAgICB0aWxlLmJhY2tCdWZmZXIgPSBzd2FwQnVmZmVyOwotICAgIH0KLX0KLSNlbmRpZgot
CiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgaW50IG9wdGlvbnMpCiB7CiAgICAgc3lu
Y0NvbXBvc2l0aW5nU3RhdGUoZ3JhcGhpY3NMYXllciwgcm9vdExheWVyKCktPm1fdGV4dHVyZU1h
cHBlciwgb3B0aW9ucyk7CkBAIC01NDEsMTQgKzI5NCwxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3Jh
cGhpYwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyKQogewogICAgIGludCBjaGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hh
bmdlTWFzaygpOwotICAgIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSYgcGVu
ZGluZ0NvbnRlbnQgPSBncmFwaGljc0xheWVyLT5wZW5kaW5nQ29udGVudCgpOwotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHN3YXBDb250ZW50c0J1ZmZlcnMoKTsKLSNlbmRpZgot
ICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBncmFwaGljc0xheWVyLT5tX2FuaW1h
dGlvbnMuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0
eSgpICYmICFwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkpCisKKyAgICBpZiAoY2hhbmdlTWFz
ayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
PT0gSFRNTENvbnRlbnRUeXBlICYmIChjaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgeworICAg
IGlmIChjaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSB7CiAgICAgICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBuZXdQYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVu
dCgpKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCAhPSBtX3BhcmVudCkgewogICAgICAgICAgICAg
Ly8gUmVtb3ZlIG5vZGUgZnJvbSBjdXJyZW50IGZyb20gY2hpbGQgbGlzdCBmaXJzdC4KQEAgLTU4
MCwxNiArMzMwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChjaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2Up
KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSB3YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53
aWR0aCgpLCBncmFwaGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBpZiAod2Fu
dGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENv
bnRlbnRUeXBlKQotICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFwaGljc0xh
eWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3Qo
KS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgaWYgKHdhbnRlZFNpemUgIT0gbV9zaXplKQotICAgICAg
ICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7Ci0KLSAgICAgICAgbV9zaXplID0gd2FudGVkU2l6
ZTsKLSAgICB9CisgICAgbV9zaXplID0gZ3JhcGhpY3NMYXllci0+c2l6ZSgpOwogCiAgICAgaWYg
KGNoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKICAgICAgICBpZiAoVGV4dHVyZU1hcHBl
ck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5
ZXIoKSkpCkBAIC02MTksMTMgKzM2MCwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAg
IG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gZ3JhcGhpY3NMYXllci0+YmFja2ZhY2VWaXNp
YmlsaXR5KCk7CiAgICAgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXIt
PmNoaWxkcmVuVHJhbnNmb3JtKCk7CiAgICAgbV9zdGF0ZS5vcGFjaXR5ID0gZ3JhcGhpY3NMYXll
ci0+b3BhY2l0eSgpOwotCi0gICAgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IHBlbmRp
bmdDb250ZW50LmNvbnRlbnRUeXBlOwotICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBwZW5k
aW5nQ29udGVudC5pbWFnZTsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhID0gcGVuZGluZ0Nv
bnRlbnQubWVkaWE7Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJl
bnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7Ci0g
ICAgaWYgKCFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eVJlY3QpOworICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkg
fHwgZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKCFtX3N0YXRlLm5lZWRz
RGlzcGxheSkKKyAgICAgICAgbV9zdGF0ZS5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKGdyYXBoaWNz
TGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKSk7CisgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhp
Y3NMYXllci0+Z2V0Q29udGVudHNMYXllcih0ZXh0dXJlTWFwcGVyKTsKIAogICAgIG1fdHJhbnNm
b3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQ
b2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsKQEAgLTY2Niw2ICs0MDQsOSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIAogdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRp
b25zKQogeworICAgIGlmICghdGV4dHVyZU1hcHBlcikKKyAgICAgICAgcmV0dXJuOworCiAgICAg
aWYgKGdyYXBoaWNzTGF5ZXIgJiYgIShvcHRpb25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKICAg
ICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBw
ZXIpOwogICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwpAQCAtNjgzLDEw
ICs0MjQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgICAgICBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSksIHRleHR1cmVNYXBwZXIpOwogCiAgICAg
c3luY0FuaW1hdGlvbnMoKTsKLSAgICBjb21wdXRlVGlsZXMoKTsKLQotICAgIGlmIChncmFwaGlj
c0xheWVyKQotICAgICAgICByZW5kZXJDb250ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5
ZXIpOworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVy
KTsKIAogICAgIGlmICghKG9wdGlvbnMgJiBUcmF2ZXJzZURlc2NlbmRhbnRzKSkKICAgICAgICAg
b3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IDIz
MGM5ZTAuLjZkNDE0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQyLDE2
ICs0MywxNCBAQCBjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjsKIAogY2xhc3MgVGV4
dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CiBwdWJsaWM6Ci0gICAgQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZTsKLSAgICBCaXRtYXBUZXh0dXJlKiBtYXNrOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBzdXJmYWNlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrOwogICAgIGZsb2F0IG9w
YWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgIEludFNpemUg
b2Zmc2V0OwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1h
cHBlclBhaW50T3B0aW9ucygpCi0gICAgICAgIDogc3VyZmFjZSgwKQotICAgICAgICAsIG1hc2so
MCkKLSAgICAgICAgLCBvcGFjaXR5KDEpCisgICAgICAgIDogb3BhY2l0eSgxKQogICAgICAgICAs
IHRleHR1cmVNYXBwZXIoMCkKICAgICB7IH0KIH07CkBAIC05Nyw0MiArOTYsMjAgQEAgcHVibGlj
OgogICAgICAgICBDb21wdXRhdGlvbnNPbmx5ID0gMgogICAgIH07CiAKLSAgICBlbnVtIFRpbGVP
d25lcnNoaXAgewotICAgICAgICBPd25lZFRpbGVzLAotICAgICAgICBFeHRlcm5hbGx5TWFuYWdl
ZFRpbGVzCi0gICAgfTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVyTm9kZSos
IEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7Ci0KLSAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVz
IHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgotICAg
IGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5
cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5
cGV9OwotICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0gICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rp
c3BsYXlSZWN0OwotICAgICAgICBib29sIG5lZWRzRGlzcGxheTsKLSAgICAgICAgQ29sb3IgYmFj
a2dyb3VuZENvbG9yOwotCi0gICAgICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwotICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciogbWVkaWE7Ci0gICAgICAgIENvbnRlbnREYXRhKCkKLSAgICAgICAgICAgIDogbmVl
ZHNEaXNwbGF5KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5
cGUpCi0gICAgICAgICAgICAsIGltYWdlKDApCi0gICAgICAgICAgICAsIG1lZGlhKDApCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCiAgICAg
ICAgIDogbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICAgICAs
IG1fY29udGVudHNMYXllcigwKQogICAgICAgICAsIG1fb3BhY2l0eSgxKQogICAgICAgICAsIG1f
Y2VudGVyWigwKQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlRmFjdG9yeShUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlOjpjcmVhdGUpCiAgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCiAgICAg
eyB9CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTm9kZSgpOwogCisgICAgdHlwZWRlZiBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IEJhY2tpbmdTdG9yZUZhY3Rvcnko
KTsKKwogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqLCBpbnQgc3luY09wdGlvbnMgPSAwKTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgVGV4dHVyZU1hcHBlciosIGludCBzeW5j
T3B0aW9ucyA9IDApOwogICAgIHZvaWQgc3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOwpAQCAt
MTQ0LDE5ICsxMjEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVy
c2hpcCBvd25lcnNoaXApIHsgbV9zdGF0ZS50aWxlT3duZXJzaGlwID0gb3duZXJzaGlwOyB9Ci0g
ICAgaW50IGNyZWF0ZUNvbnRlbnRzVGlsZShmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVD
b250ZW50c1RpbGUoaW50IGlkKTsKLSAgICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIo
aW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSopOwotICAgIHZvaWQg
Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7Ci0gICAgdm9pZCBwdXJnZU5v
ZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRJRChpbnQgaWQpIHsg
bV9pZCA9IGlkOyB9Ci0gICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotCi0gICAg
Y29uc3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50Q29udGVudC5tZWRpYTsgfQorICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlRmFjdG9y
eShCYWNraW5nU3RvcmVGYWN0b3J5IGZhY3RvcnkpIHsgbV9iYWNraW5nU3RvcmVGYWN0b3J5ID0g
ZmFjdG9yeTsgfQorICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmUoKSB7IG1fYmFja2luZ1N0b3Jl
ID0gMDsgfQorICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gZ2V0QmFj
a2luZ1N0b3JlKCk7CiAKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXll
cigpOwpAQCAtMTc0LDEzICsxNDEsMTMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGNvbXBh
cmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKICAg
ICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBh
cnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiAKLSAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJl
KCkgeyByZXR1cm4gbV9vd25lZFRpbGVzLmlzRW1wdHkoKSA/IDAgOiBtX293bmVkVGlsZXNbMF0u
dGV4dHVyZS5nZXQoKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgp
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPnRleHR1cmUoKSA6IDA7
IH0KIAogICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0
aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQ
YWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2Eo
Y29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwotICAgIHZvaWQgcmVuZGVyQ29udGVu
dChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgdXBkYXRlQmFja2lu
Z1N0b3JlKFRleHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7CiAKICAgICB2b2lkIHN5bmNB
bmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKQEAgLTE4OCw2MyArMTU1
LDI0IEBAIHByaXZhdGU6CiAKICAgICBMYXllclRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIAotICAg
IGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CisgICAgaW5saW5lIEZsb2F0UmVj
dCBsYXllclJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0
ZS5jb250ZW50c1JlY3Q7CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVy
bygpLCBtX3NpemUpOwogICAgIH0KIAotICAgIGlubGluZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2Ug
PyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7Ci0gICAgfQotICAgIHN0
cnVjdCBPd25lZFRpbGUgewotICAgICAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0gICAgICAgIGJvb2wgbmVlZHNSZXNldDsKLSAgICB9
OwotCi0gICAgVmVjdG9yPE93bmVkVGlsZT4gbV9vd25lZFRpbGVzOwotCi0jaWYgVVNFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciB7
Ci0gICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0OwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0
UmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUgewotICAgICAgICBib29sIGlzQmFja0J1
ZmZlclVwZGF0ZWQ7Ci0gICAgICAgIGJvb2wgaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZTsKLSAg
ICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBm
cm9udEJ1ZmZlcjsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIGJhY2tCdWZm
ZXI7Ci0KLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlKGZsb2F0IHNjYWxlID0gMS4wKQot
ICAgICAgICAgICAgOiBpc0JhY2tCdWZmZXJVcGRhdGVkKGZhbHNlKQotICAgICAgICAgICAgLCBp
c0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGZhbHNlKQotICAgICAgICAgICAgLCBzY2FsZShzY2Fs
ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEhhc2hNYXA8aW50LCBFeHRl
cm5hbGx5TWFuYWdlZFRpbGU+IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlczsKLSNlbmRpZgotCi0g
ICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVudDsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZUJhY2tpbmdTdG9yZSgpIHsgcmV0dXJuICgqbV9iYWNr
aW5nU3RvcmVGYWN0b3J5KSgpOyB9CiAKICAgICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBt
X2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX3BhcmVudDsKICAgICBUZXh0dXJl
TWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBtX2NvbnRlbnRzTGF5ZXI7CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKICAgICBmbG9hdCBtX29w
YWNpdHk7CiAgICAgZmxvYXQgbV9jZW50ZXJaOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgaW50
IG1faWQ7CisKKyAgICBCYWNraW5nU3RvcmVGYWN0b3J5KiBtX2JhY2tpbmdTdG9yZUZhY3Rvcnk7
CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBGbG9hdFBvaW50IHBvczsKQEAgLTI1NCw2
ICsxODIsNyBAQCBwcml2YXRlOgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJl
blRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQgb3BhY2l0eTsKICAgICAgICAgRmxvYXRSZWN0IGNv
bnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CiAgICAgICAg
IGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50OwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bWFza0xheWVyOwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYUxheWVyOwpAQCAt
MjYzLDEzICsxOTIsOSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDog
MTsKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkgOiAxOwogICAgICAgICBib29sIHZp
c2libGUgOiAxOwotICAgICAgICBib29sIG5lZWRzUmVzZXQ6IDE7CisgICAgICAgIGJvb2wgbmVl
ZHNEaXNwbGF5OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKICAgICAg
ICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAgICAgIGZsb2F0IGNvbnRlbnRTY2FsZTsKLSNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgVGlsZU93bmVyc2hpcCB0aWxlT3duZXJz
aGlwOwotI2VuZGlmCiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgxLmYp
CiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQpAQCAtMjgwLDEzICsyMDUsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKICAgICAgICAgICAgICwgYmFj
a2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCi0gICAg
ICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0
cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKICAgICAgICAgICAg
ICwgbmVlZHNSZXBhaW50KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50U2NhbGUoMS4wZikK
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICwgdGlsZU93bmVyc2hp
cChPd25lZFRpbGVzKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4IDFiMjkyOTAuLmM2OWMxZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0yMCw3ICsyMCw2
IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzAs
NyArMjksOCBAQCBjbGFzcyBCaXRtYXBUZXh0dXJlOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQg
b3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVyZSogbWFzayA9IDApIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJl
KiBtYXNrID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpIHsgfQogfTsK
IAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBjNTNlOTU1Li5lZTY1ZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzUgQEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5v
a2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBj
b2RlIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4MzA1CisKKyAgICAgICAgTW92ZSB0aGUgYmFja2luZy1zdG9yZSBjb2Rl
IHRvIExheWVyVHJlZUJhY2tpbmdTdG9yZSwgaW1wbGVtZW50aW5nIHRoZSB2aXJ0dWFsIGZ1bmN0
aW9ucworICAgICAgICBpbiBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLgorICAgICAgICBXZSBz
YXZlIHRoZSBkb3VibGUtYnVmZmVyZWQgdGlsZSBpbiB0aGUgYmFja2luZy1zdG9yZSwgYW5kIHRo
ZW4gY29udmVydCB0aGVtIHRvIHJlZ3VsYXIKKyAgICAgICAgdGlsZXMgaW4gdXBkYXRlQ29udGVu
dHMsIGJhc2VkIG9uIHRoZSBvcmRlciBvZiBwYWludGluZy4KKyAgICAgICAgVXNlIFRleHR1cmVN
YXBwZXJDb21wb3NpdGVkSW1hZ2UgZm9yIGltYWdlcyBpbnN0ZWFkIG9mIHNhdmluZyBvdXIgb3du
IGNvbXBvc2l0ZWQgaW1hZ2UKKyAgICAgICAgcmVnaXN0cnkuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdT
dG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MucHJvOgorCiAyMDEyLTAyLTA3ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJj
b3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBGZXRjaCB0aGUgdmlzaWJsZSByZWN0IGZy
b20gTGF5ZXJUcmVlSG9zdCBpbnN0ZWFkIG9mIGtlZXBpbmcgYSBjb3B5IGluIGVhY2ggbGF5ZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQppbmRleCBjZWRlNGVhLi5mYWU2NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI1Myw2
ICsyNTMsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggXAog
ICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNr
aW5nU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIFwKICAgICBVSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdl
c3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTgxLDYgKzU4Miw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2Vi
VUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcCBcCisgICAg
VUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50
SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXgg
NGM5NzE4Ny4uNjM2NWM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaApAQCAtMzAsMTUgKzMwLDE3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckNvbXBvc2l0ZWRJbWFnZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitj
bGFzcyBMYXllckJhY2tpbmdTdG9yZTsKIGNsYXNzIFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxh
eWVyVXBkYXRlSW5mbzsKIApAQCAtOTgsMTIgKzEwMCw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkludFBvaW50
LCBSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gPiBUaWxlZEltYWdlOwotICAgIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBtX25vZGVWaXN1YWxDb250ZW50c1Jl
Y3RNYXA7Ci0gICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlVG9Ob2RlVGlsZTsKLSAgICBpbnQg
cmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0OwotICAgIEhhc2hNYXA8
aW50NjRfdCwgVGlsZWRJbWFnZT4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICB2
b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwogICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9y
dCgpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CkBAIC0xMTgsMTEgKzExNCwx
MiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwogICAgIHZvaWQg
ZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKLQor
ICAgIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXll
cklEKTsKICNlbmRpZgogCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworICAgIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1h
Z2U+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CiAKICNpZiBQTEFURk9STShRVCkKICAg
ICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExheWVyVHJl
ZUhvc3RQcm94eT4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJC
YWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTMw
ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJC
YWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJCYWNr
aW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKwordm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX2JhY2tCdWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gbV90YXJnZXRS
ZWN0OworICAgIHRhcmdldFJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsKKyAgICBtX2Zyb250QnVm
ZmVyLnNldFJlY3QodGFyZ2V0UmVjdCk7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1
cmUgPSBtX2Zyb250QnVmZmVyLnRleHR1cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAg
ICAgdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgbV9m
cm9udEJ1ZmZlci5zZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOworICAgIH0KKworICAgIHRleHR1
cmUtPnJlc2V0KGVuY2xvc2luZ0ludFJlY3QobV9zb3VyY2VSZWN0KS5zaXplKCksIGZhbHNlKTsK
KyAgICBjb25zdCB2b2lkKiBwaXhlbHM7CisjaWYgUExBVEZPUk0oUVQpCisgICAgUUltYWdlIHF0
SW1hZ2UgPSBtX2JhY2tCdWZmZXItPmNyZWF0ZVFJbWFnZSgpOworICAgIHBpeGVscyA9IHF0SW1h
Z2UuY29uc3RCaXRzKCk7CisjZW5kaWYKKyAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhwaXhl
bHMsIEludFJlY3QoSW50UG9pbnQoKSwgbV9iYWNrQnVmZmVyLT5zaXplKCkpKTsKKyAgICBtX2Jh
Y2tCdWZmZXIuY2xlYXIoKTsKK30KKwordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlVGls
ZShpbnQgaWQsIGZsb2F0IHNjYWxlKQoreworICAgIG1fdGlsZXMuYWRkKGlkLCBMYXllckJhY2tp
bmdTdG9yZVRpbGUoc2NhbGUpKTsKKyAgICBtX3NjYWxlID0gc2NhbGU7Cit9CisKK3ZvaWQgTGF5
ZXJCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50IGlkKQoreworICAgIG1fdGlsZXMucmVtb3Zl
KGlkKTsKK30KKwordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFNoYXJl
YWJsZUJpdG1hcCogYmFja0J1ZmZlcikKK3sKKyAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFTU0VSVChp
dCAhPSBtX3RpbGVzLmVuZCgpKTsKKyAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0
UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3Rv
cmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBjbGVhcigpOworICAgIEhhc2hN
YXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVu
ZCgpOworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZT4mIHRpbGVzVG9QYWludCA9IGdldFRp
bGVzKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBM
YXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICB0aWxlLnN3
YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworCisgICAgICAgIGlmICghdGlsZS5mcm9udEJ1ZmZl
cigpLnRleHR1cmUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0aWxl
LnNjYWxlKCkgPT0gbV9zY2FsZSkgeworICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFwcGVuZCh0
aWxlLmZyb250QnVmZmVyKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHByZXZpb3VzIHRpbGUgaWYgdGhlIG9wYWNpdHkgaXMg
aGlnaCwgb3RoZXJ3aXNlIGVmZmVjdCBsb29rcyBsaWtlIGEgYnVnLgorICAgICAgICBpZiAobGF5
ZXItPm9wYWNpdHkoKSA+IDAuOTUpCisgICAgICAgICAgICB0aWxlc1RvUGFpbnQucHJlcGVuZCh0
aWxlLmZyb250QnVmZmVyKCkpOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45NWVhNmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTGF5ZXJCYWNraW5nU3RvcmVf
aAorI2RlZmluZSBMYXllckJhY2tpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIExheWVyQmFja2luZ1N0b3JlVGlsZSB7CitwdWJsaWM6CisgICAgTGF5ZXJC
YWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKKyAgICAgICAgOiBtX3NjYWxlKHNjYWxl
KQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVy
biBtX3NjYWxlOyB9CisgICAgaW5saW5lIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlJiBmcm9u
dEJ1ZmZlcigpIHsgcmV0dXJuIG1fZnJvbnRCdWZmZXI7IH0KKyAgICBpbmxpbmUgY29uc3QgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclRpbGUmIGZyb250QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9m
cm9udEJ1ZmZlcjsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ciopOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRh
cmdldCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2UsIFNoYXJlYWJsZUJpdG1hcCog
YnVmZmVyKQorICAgIHsKKyAgICAgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0OworICAgICAgICBt
X3NvdXJjZVJlY3QgPSBzb3VyY2U7CisgICAgICAgIG1fYmFja0J1ZmZlciA9IGJ1ZmZlcjsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUgbV9mcm9udEJ1
ZmZlcjsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CisgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG1fc291cmNlUmVjdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV90
YXJnZXRSZWN0OworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCitjbGFzcyBMYXllckJhY2tpbmdT
dG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7CisgICAgdm9pZCByZW1vdmVUaWxl
KGludCk7CisgICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBTaGFyZWFibGVCaXRtYXAqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcios
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKK3By
aXZhdGU6CisgICAgTGF5ZXJCYWNraW5nU3RvcmUoKQorICAgICAgICA6IG1fc2NhbGUoMS4pCisg
ICAgeyB9CisgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT4gbV90aWxlczsK
KyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworfQorI2VuZGlmIC8vIExheWVyQmFja2luZ1N0b3Jl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0
UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwCmluZGV4IGM3Y2E3ZjEuLmVlNDliMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMjIsMTkgKzIy
LDIwIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aCIKKyNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJOb2RlLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIK
LSNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oIgogI2luY2x1ZGUgPFFEYXRlVGltZT4KICNpbmNsdWRlIDxjYWlyby9PcGVuR0xTaGlt
cy5oPgogCkBAIC0xNDksOCArMTUwLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXll
clRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKIHsKICAgICBH
cmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0
aGlzKTsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bmV3TGF5ZXIpOwotICAgIG5vZGUtPnNldElEKGxheWVySUQpOwotICAgIG5vZGUtPnNldFRpbGVP
d25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpOworICAg
IG5vZGUtPnNldEJhY2tpbmdTdG9yZUZhY3RvcnkoTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSk7
CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKIH0KIApAQCAtMjM1LDIxICsyMzUsMTMg
QEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKLWludCBMYXllclRyZWVIb3N0UHJv
eHk6OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAotewotICAgIEhh
c2hNYXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9kZVRpbGUuZmlu
ZCh0aWxlSUQpOwotICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQogdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllcklu
Zm8pCiB7CiAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKICAgICBlbnN1cmVMYXll
cihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGJvb2wgbmVlZHNUb1Vw
ZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgbGF5ZXJJbmZvLmNv
bnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgYm9vbCBuZWVkc1RvVXBk
YXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAobGF5ZXJJbmZvLmNv
bnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQpOwogCiAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOwogCkBA
IC0zNDgsNjkgKzM0MCwzMyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVy
SUQoV2ViTGF5ZXJJRCBsYXllcklEKQogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7
CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCitQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0
b3JlPiBMYXllclRyZWVIb3N0UHJveHk6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQog
ewotICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGVuc3VyZUxh
eWVyKGlkKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUobGF5ZXJCeUlEKGlkKSk7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KG5vZGUtPmdldEJhY2tpbmdT
dG9yZSgpLmdldCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFj
a2luZ1N0b3JlOworfQogCi0gICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50
c1RpbGUoc2NhbGUpOwotICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJ
RCk7Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGdldEJhY2tpbmdTdG9yZShsYXll
cklEKS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQogewotICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQo
bGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IG5v
ZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAoIW5v
ZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGls
ZShub2RlVGlsZUlEKTsKLSAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworICAg
IGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwogfQogCiB2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKQogewotICAgIGVuc3VyZUxheWVyKGxheWVySUQp
OwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXll
ckJ5SUQobGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBp
ZiAoIW5vZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vZGUtPnNldFRleHR1cmVN
YXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBRSW1hZ2UgaW1hZ2UgPSBiaXRtYXAt
PmNyZWF0ZVFJbWFnZSgpOwotICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIobm9k
ZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2UuY29uc3RCaXRzKCkpOworICAg
IGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+dXBkYXRlVGlsZSh0aWxlSUQsIHNvdXJjZVJlY3Qs
IHRhcmdldFJlY3QsIGJpdG1hcCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKQogewotICAg
IFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsKLSAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNp
b24gPSAxMDI0OwotICAgIFFJbWFnZSBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0g
ICAgYm9vbCBpbWFnZUhhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7Ci0gICAgSW50
UmVjdCBpbWFnZVJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0KCkpOwotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2UuaGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lvbikg
ewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlLndpZHRoKCk7IHggKz0gVGlsZURp
bWVuc2lvbikgewotICAgICAgICAgICAgUUltYWdlIHN1YkltYWdlOwotICAgICAgICAgICAgSW50
UmVjdCByZWN0KHgsIHksIFRpbGVEaW1lbnNpb24sIFRpbGVEaW1lbnNpb24pOwotICAgICAgICAg
ICAgcmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChRU2l6ZShyZWN0
LnNpemUoKSkgPT0gaW1hZ2Uuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1h
Z2U7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZS5j
b3B5KHJlY3QpOwotICAgICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBt
X3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJl
c2V0KHJlY3Quc2l6ZSgpLCAhaW1hZ2VIYXNBbHBoYSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT51
cGRhdGVDb250ZW50cyhzdWJJbWFnZS5jb25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCByZWN0LnNpemUoKSkpOwotICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2Nh
dGlvbigpLCB0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCB0aWxlZEltYWdlKTsKKyAgICBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZTo6
Y3JlYXRlKGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgbV90ZXh0dXJlTWFwcGVyLmdldCgp
KSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBp
bWFnZUlEKQpAQCAtNDIwLDMzICszNzYsOSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVz
dHJveUltYWdlKGludDY0X3QgaW1hZ2VJRCkKIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmFz
c2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQog
ewotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXll
cik7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWltYWdlSUQp
IHsKLSAgICAgICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+c2l6
ZSgpKTsKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3QoKSk7
Ci0gICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8gc2l6
ZS53aWR0aCgpOwotICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0LmhlaWdo
dCgpIC8gc2l6ZS5oZWlnaHQoKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+Ojpp
dGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0g
ICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBpdC0+
c2Vjb25kLmVuZCgpOwotICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0gaXQt
PnNlY29uZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkgewot
ICAgICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3QpLCBG
bG9hdFNpemUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOwotICAgICAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1JlY3Qu
eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZlcnRp
Y2FsRmFjdG9yICsgY29udGVudHNSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsKLSAg
ICAgICAgaW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOwotICAg
ICAgICBub2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShuZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJdC0+
c2Vjb25kLmdldCgpKTsKLSAgICB9CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVy
ZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+
c2Vjb25kLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJD
aGFuZ2VzKCkKQEAgLTYyOSwxMiArNTYxLDEwIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpw
dXJnZUdMUmVzb3VyY2VzKCkKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUocm9vdExheWVyKCkpOwogCiAgICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUt
PnB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CisgICAgICAgIG5vZGUtPmNsZWFyQmFja2lu
Z1N0b3JlKCk7CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwotCiAg
ICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7Ci0KICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tp
bmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAog
Ci0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126530</attachid>
            <date>2012-02-10 10:09:10 -0800</date>
            <delta_ts>2012-02-10 12:28:14 -0800</delta_ts>
            <desc>Patch to address comments</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>78141</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDMzNGM4Li4wYTRmNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBubyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hyb25pemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpnZXRDb250
ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAgICAoVGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp1cGRhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNl
bGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1
cmZhY2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJl
Y3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnM6OlRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRCYWNraW5nU3RvcmVGYWN0b3J5KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnMpOgorCiAy
MDEyLTAyLTA5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29t
PgogCiAgICAgICAgIEVuc3VyZSB0aW1lcnMgYW5kIG90aGVyIGFjdGl2ZSBET00gb2JqZWN0cyBk
byBub3QgZmlyZSBpbiBzdXNwZW5kZWQgZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggYzA4Y2IyNS4uOTQ2YjUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC01NzM1LDYgKzU3MzUsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3Np
dGVkSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAog
ICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmggXAogICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKQEAgLTU3NTcsNyArNTc2MSwxMCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2Uu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNzU4ZGQ0Yi4uNDE5ZjU5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC0zOTQ0LDYgKzM5NDQsOCBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdl
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oCkBAIC0zOTUyLDYgKzM5NTQsOCBAQCBjb250YWlucyhDT05GSUcsIHRl
eG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0u
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGM1OWFjZGMuLjBjNmQ3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NzYsNiAr
MzU3NiwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29t
cG9zaXRlZEltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi5jNmZmMDNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZp
cnR1YWwgdm9pZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXpl
KCkgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAppbmRleCA2NmJjNzZlLi4yYmI0NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICBRR0xXaWRnZXQqIGdldFZpZXdw
b3J0R0xXaWRnZXQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3Bh
Y2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnQoUVBh
aW50ZXIqLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CkBAIC0x
NDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1JnYihxdWludDMy
IHBpeGVsKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKICAgICBibGl0
TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI1MjFkMWEuLjllMTU4MWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgsNiArMjgs
OCBAQCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQp
CiAgICAgLCBtX25vZGUoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpKQogICAgICwg
bV9jaGFuZ2VNYXNrKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1fbWVk
aWEoMCkKICAgICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiB7CiB9CkBAIC00NCw4
ICs0Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmRpZFN5bmNocm9uaXpl
KCkKIHsKICAgICBtX3N5bmNRdWV1ZWQgPSBmYWxzZTsKICAgICBtX2NoYW5nZU1hc2sgPSAwOwot
ICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9wZW5kaW5n
Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fbmVlZHNEaXNwbGF5
ID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
QEAgLTYxLDcgKzYzLDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcigpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9
IHRydWU7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTY5LDggKzcxLDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKICovCiB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7
Ci0gICAgaWYgKCFub2RlKCktPm1lZGlhKCkpCi0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnQubmVl
ZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0Q29udGVudHNU
b0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTc4LDkgKzgwLDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogKi8KIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQor
ICAgIGlmIChtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBtX25lZWRzRGlzcGxheVJl
Y3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNw
bGF5Q2hhbmdlKTsKIH0KIApAQCAtMTI4LDcgKzEzMCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNz
TGF5CiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhH
cmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKLQogICAgIEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwogICAgIG5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogfQpAQCAtMjU5LDI4ICsy
NjAsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQo
Ym9vbCB2YWx1ZSkKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwotdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xv
ciA9IHZhbHVlOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1ZSk7
Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFu
Z2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpCi17Ci0gICAgaWYgKCFt
X3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7Ci0gICAg
R3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Ci19Ci0KLS8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQotKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGNvbnRl
bnRzT3BhcXVlKCkpCkBAIC0zMTksMjIgKzI5OCwzMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAgICAgbm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c1JlY3RDaGFuZ2UpOwogfQogCitU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Omdl
dENvbnRlbnRzTGF5ZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICAvLyBJ
biB0aGUgY2FzZSBvZiBhIG51bGwgbV9pbWFnZSwgdGhpcyB3b3VsZCByZXNldCBtX2NvbXBvc2l0
ZWRJbWFnZS4KKyAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJDb21wb3NpdGVk
SW1hZ2U6OmdldChtX2ltYWdlLmdldCgpLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICBtX2NvbnRlbnRz
TGF5ZXIgPSBtX21lZGlhID8gbV9tZWRpYSA6IG1fY29tcG9zaXRlZEltYWdlLmdldCgpOworICAg
IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7Cit9CisKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSogaW1hZ2UpCiB7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1f
cGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlw
ZTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBtZWRpYSkKIHsKKyAgICBtX2ltYWdlID0gMDsKKyAgICBtX21lZGlhID0gbWVkaWE7CiAgICAg
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKICAgICBub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1fcGVuZGluZ0NvbnRl
bnQuY29udGVudFR5cGUgPSBtZWRpYSA/IFRleHR1cmVNYXBwZXJOb2RlOjpNZWRpYUNvbnRlbnRU
eXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKLSAgICBtX3BlbmRpbmdD
b250ZW50Lm1lZGlhID0gbWVkaWE7CisgICAgbV9jb250ZW50c0xheWVyID0gbWVkaWE7CiB9CiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMzUxLDEzICszNDEsNiBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmKQogICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhpcywgVGV4dHVyZU1h
cHBlck5vZGU6OlRyYXZlcnNlRGVzY2VuZGFudHMpOwogfQogCi0vKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKLSovCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIqPihub2RlKCktPm1lZGlhKCkpOwotfQotCiBib29sIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmlt
LCBjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAg
IEFTU0VSVCgha2V5ZnJhbWVzTmFtZS5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaAppbmRleCAxNzJmZGRhLi44NjA5ZGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkKQEAgLTY0
LDggKzY1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29s
IGIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgYik7CiAgICAgdmly
dHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sIGIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCYWNr
Z3JvdW5kQ29sb3IoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCBi
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYik7CiAgICAg
dmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7CkBAIC03NywxMCArNzYsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZs
b2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
OwotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNr
IGNoYW5nZU1hc2spOwotICAgIGlubGluZSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEm
IHBlbmRpbmdDb250ZW50KCkgeyByZXR1cm4gbV9wZW5kaW5nQ29udGVudDsgfQogICAgIGlubGlu
ZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQogICAgIHZv
aWQgZGlkU3luY2hyb25pemUoKTsKIApAQCAtODksMTIgKzg3LDIwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKyAgICBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogZ2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVy
Kik7CisgICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRGlzcGxh
eTsgfQorICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsgfQogCiBwcml2YXRlOgogICAgIE93blB0
cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQ29t
cG9zaXRlZEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1h
Z2U7CiAgICAgYm9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50IG1fY2hhbmdlTWFzazsKLSAgICBU
ZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBib29s
IG1fbmVlZHNEaXNwbGF5OworICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRl
bnRzTGF5ZXI7CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1fbWVkaWE7CisgICAg
RmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
cyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1l
cjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAgICBUaW1lcjxHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAK
aW5kZXggNWU1MjhkNC4uNThlNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcApAQCAtNzMsNyArNzMs
NiBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXI6OmFjcXVpcmVUZXh0
dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYgcwogICAgIHJldHVybiBzZWxlY3RlZFRleHR1cmU7
CiB9CiAKLQogUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
QWNjZWxlcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IFNvZnR3YXJlTW9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oCmluZGV4IGYyNWNlMGIuLmZmNTEzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAt
MTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpIHsgfQogCisgICAgdmlydHVhbCBJ
bnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShJTlRfTUFYLCBJ
TlRfTUFYKTsgfQorCiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkgd2hl
biBkZXJlZmVyZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFj
cXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzE1NmQzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE2
NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0dXJl
TWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0
YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3JlY3QpOworICAgIHRhcmdldFJlY3QuaW50
ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVjdDsKKworICAgIC8v
IE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KKyAgICBz
b3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgIC8v
IE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbmF0ZXMuCisgICAg
dGFyZ2V0UmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmUpIHsKKyAgICAgICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVy
ZSgpOworICAgICAgICBtX3RleHR1cmUtPnJlc2V0KHRhcmdldFJlY3Quc2l6ZSgpLCAvKiBvcGFx
dWUgPSAqLyBmYWxzZSk7CisgICAgfQorCisgICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyhp
bWFnZSwgdGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5
LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKyAgICBpZiAoIW1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1hdHJpeCA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KHJlY3QoKSwgdGFyZ2V0UmVjdCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICB0ZXh0dXJlTWFw
cGVyLT5kcmF3VGV4dHVyZSgqbV90aWxlc1tpXS50ZXh0dXJlKCkuZ2V0KCksIG1hdHJpeC5tYXBS
ZWN0KG1fdGlsZXNbaV0ucmVjdCgpKSwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlOjpjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVl
ZGVkKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCit7Cisg
ICAgaWYgKHNpemUgPT0gbV9zaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NpemUgPSBz
aXplOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzVG9BZGQ7CisgICAgVmVjdG9y
PGludD4gdGlsZUluZGljZXNUb1JlbW92ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVFcmFz
ZVRocmVzaG9sZCA9IDY7CisKKyAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdo
dCgpOyB5ICs9IHRpbGVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIGZvciAoZmxvYXQgeCA9IDA7
IHggPCBtX3NpemUud2lkdGgoKTsgeCArPSB0aWxlU2l6ZS53aWR0aCgpKSB7CisgICAgICAgICAg
ICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgdGlsZVNpemUud2lkdGgoKSwgdGlsZVNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KHJlY3QoKSk7CisgICAgICAg
ICAgICB0aWxlUmVjdHNUb0FkZC5hcHBlbmQodGlsZVJlY3QpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChpbnQgaSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3QoKTsKKyAgICAgICAgYm9v
bCBleGlzdHNBbHJlYWR5ID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IHRpbGVSZWN0
c1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qg
bmV3VGlsZSA9IHRpbGVSZWN0c1RvQWRkW2pdOworICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0g
bmV3VGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZXhpc3Rz
QWxyZWFkeSA9IHRydWU7CisgICAgICAgICAgICB0aWxlUmVjdHNUb0FkZC5yZW1vdmUoaik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXhpc3RzQWxyZWFk
eSkKKyAgICAgICAgICAgIHRpbGVJbmRpY2VzVG9SZW1vdmUuYXBwZW5kKGkpOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZVJlY3RzVG9BZGQuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCF0aWxlSW5kaWNlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgVGV4dHVyZU1hcHBlclRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRpY2VzVG9SZW1vdmVb
MF1dOworICAgICAgICAgICAgdGlsZUluZGljZXNUb1JlbW92ZS5yZW1vdmUoMCk7CisgICAgICAg
ICAgICB0aWxlLnNldFJlY3QodGlsZVJlY3RzVG9BZGRbaV0pOworICAgICAgICAgICAgaWYgKHRp
bGUudGV4dHVyZSgpKQorICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZSgpLT5yZXNldChlbmNs
b3NpbmdJbnRSZWN0KHRpbGUucmVjdCgpKS5zaXplKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbV90aWxlcy5hcHBlbmQoVGV4dHVyZU1hcHBl
clRpbGUodGlsZVJlY3RzVG9BZGRbaV0pKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpbGVJbmRpY2VzVG9SZW1vdmUuc2l6ZSgpICYmIG1fdGlsZXMuc2l6ZSgpID4gVGls
ZUVyYXNlVGhyZXNob2xkOyArK2kpCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRpbGVJbmRpY2Vz
VG9SZW1vdmVbaV0pOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU6OnVwZGF0
ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyKSB7CisgICAgICAgIGNsZWFyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHRleHR1cmVNYXBwZXIt
Pm1heFRleHR1cmVTaXplKCk7CisKKyAgICBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKGxh
eWVyLT5zaXplKCksIHRpbGVTaXplKTsKKworICAgIC8vIFBhaW50IHRoZSBlbnRpcmUgZGlydHkg
cmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdlIG9ubHkgcGFpbnQgb25j
ZS4KKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAg
ICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdN
b2RlKCkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVj
dC55KCkpOworICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwg
ZGlydHlSZWN0KTsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisKKyNpZiBQTEFURk9STShR
VCkKKyAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBEb250Q29weUJhY2tpbmdTdG9yZSBp
biBub24tUXQgcG9ydHMgdGhhdCB1c2UgVGV4dHVyZU1hcHBlci4KKyAgICBpbWFnZSA9IGltYWdl
QnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisjZW5kaWYKKworICAgIHVwZGF0
ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBkaXJ0eVJlY3QpOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZSwgZGly
dHlSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGlsZXNbaV0udGV4dHVyZSgp
KQorICAgICAgICAgICAgcmV0dXJuIG1fdGlsZXNbaV0udGV4dHVyZSgpOworICAgIH0KKworICAg
IHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmEzODdiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzEg
QEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
X2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVk
ZSAiUmVmUHRyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0xheWVyOworCitjbGFzcyBUZXh0
dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgaW5saW5lIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQorICAgIGlubGluZSBG
bG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGlubGluZSB2b2lk
IHNldFRleHR1cmUoQml0bWFwVGV4dHVyZSogdGV4dHVyZSkgeyBtX3RleHR1cmUgPSB0ZXh0dXJl
OyB9CisgICAgaW5saW5lIHZvaWQgc2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9y
ZWN0ID0gcmVjdDsgfQorICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIElt
YWdlKiwgY29uc3QgSW50UmVjdCYpOworICAgIFRleHR1cmVNYXBwZXJUaWxlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCA9IEZsb2F0UmVjdCgpKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgIHsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgcHVibGljIFJlZkNvdW50
ZWQ8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBHcmFw
aGljc0xheWVyKiwgY29uc3QgSW50UmVjdCYpOworICAgIGlubGluZSB2b2lkIGNsZWFyKCkgeyBt
X3RpbGVzLmNsZWFyKCk7IG1fc2l6ZSA9IEludFNpemUoKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlKTsgfQorICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSk7IH0KKyAgICB2b2lk
IHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZChj
b25zdCBGbG9hdFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIHRpbGVTaXpl
KTsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+JiBnZXRUaWxlcygpIHsgcmV0dXJuIG1f
dGlsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+JiBnZXRUaWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdGlsZXM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VGV4dHVy
ZU1hcHBlclRpbGU+IG1fdGlsZXM7CisgICAgRmxvYXRTaXplIG1fc2l6ZTsKK307CisKK30KKyNl
bmRpZiAvLyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQ29tcG9zaXRlZEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zY2NhNmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIgor
CisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJdCdzIHVzdWFsbHkg
bm90IHJlY29tbWVuZGVkIHRvIHVzZSBzdGF0aWMgbWFwcyBsaWtlIHRoaXMgb25lIHdpdGggVGV4
dHVyZU1hcHBlci4gSG93ZXZlciwgd2UncmUgZ3VhcmFudGVlZAorLy8gdGhhdCB0aGlzIG1hcCB3
b3VsZCBiZSBjbGVhcmVkIGJlZm9yZSBhIFRleHR1cmVNYXBwZXIgaXMgY2xlYXJlZCwgd2hpY2gg
bWFrZXMgaXQgc2FmZSB0byB1c2UuCitzdGF0aWMgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4
dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gPiBzX2ltYWdlQmFja2luZ1N0b3JlczsKKworc3Rh
dGljIGludDY0X3QgZ2V0VWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdlKQoreworI2lmIFBMQVRGT1JN
KFFUKQorICAgIHJldHVybiBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+Y2Fj
aGVLZXkoKTsKKyNlbmRpZgorICAgIHJldHVybiBpbnQ2NF90KGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpKTsKK30KKworVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZTo6flRl
eHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoKQoreworICAgIHNfaW1hZ2VCYWNraW5nU3RvcmVz
LnJlbW92ZShtX3VpZCk7Cit9CisKK1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6OlRleHR1
cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyLCBpbnQ2NF90IHVpZCkKKyAgICA6IG1fdWlkKHVpZCkKK3sKKyAgICBBU1NFUlQo
dGV4dHVyZU1hcHBlcik7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBjcmVhdGVPckRlc3Ryb3lU
aWxlc0lmTmVlZGVkKGltYWdlLT5zaXplKCksIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXpl
KCkpOworICAgIHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBpbWFnZS0+cmVj
dCgpKTsKKworICAgIGlmICghdWlkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSByZW1v
dmUgdGhlIG1hcCBlbnRyeSB3aGVuIGFsbCBvdGhlciByZWZlcmVuY2VzIGFyZSBnb25lLCBzbyB0
aGUgcmVmZXJlbmNlIGhhcyB0byBiZSB3ZWFrLgorICAgIHNfaW1hZ2VCYWNraW5nU3RvcmVzLnNl
dChtX3VpZCwgYWRvcHRSZWYodGhpcykpOworfQorCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJD
b21wb3NpdGVkSW1hZ2U+IFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6OmNyZWF0ZShJbWFn
ZSogaW1hZ2UsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludDY0X3QgdWlkKQorewor
ICAgIGlmICghdWlkKQorICAgICAgICB1aWQgPSBnZXRVaWRGb3JJbWFnZShpbWFnZSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlKGltYWdlLCB0
ZXh0dXJlTWFwcGVyLCB1aWQpKTsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlPiBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlOjpnZXQoSW1hZ2UqIGltYWdl
LCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+KCk7Cisg
ICAgaW50NjRfdCB1aWQgPSBnZXRVaWRGb3JJbWFnZShpbWFnZSk7CisgICAgSGFzaE1hcDxpbnQ2
NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gPjo6aXRlcmF0b3IgaXQg
PSBzX2ltYWdlQmFja2luZ1N0b3Jlcy5maW5kKHVpZCk7CisgICAgaWYgKGl0ID09IHNfaW1hZ2VC
YWNraW5nU3RvcmVzLmVuZCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlKGltYWdlLCB0ZXh0dXJl
TWFwcGVyLCB1aWQpOworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNv
bXBvc2l0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40YWEzM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuaApAQCAt
MCwwICsxLDM5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBl
ckNvbXBvc2l0ZWRJbWFnZV9oCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNvbXBvc2l0
ZWRJbWFnZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlPiBnZXQoSW1h
Z2UqLCBUZXh0dXJlTWFwcGVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
ckNvbXBvc2l0ZWRJbWFnZT4gY3JlYXRlKEltYWdlKiwgVGV4dHVyZU1hcHBlciosIGludDY0X3Qg
dWlkID0gMCk7CisgICAgflRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoKTsKKworcHJpdmF0
ZToKKyAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlKEltYWdlKiwgVGV4dHVyZU1hcHBl
ciosIGludDY0X3QpOworICAgIGludDY0X3QgbV91aWQ7Cit9OworCit9CisjZW5kaWYgLy8gVGV4
dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRl
eCA0NWI5NGJkLi5jMTc4ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTIwLDE2
ICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJO
b2RlLmgiCiAKKyNpbmNsdWRlICJzdGRpby5oIgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAotbmFtZXNwYWNl
IHsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ1RpbGVEaW1lbnNpb24gPSAxMDI0LjA7Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBl
ck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC04MSwyMTggKzc5LDU2IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCkKICAgICAgICAgc29y
dEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKIH0KIAotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZT4gVGV4dHVyZU1hcHBlck5vZGU6OmJhY2tpbmdTdG9yZSgpCiB7Ci0jaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fc3RhdGUudGlsZU93bmVyc2hpcCA9
PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBp
ZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1f
c3RhdGUuZHJhd3NDb250ZW50KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7Ci0g
ICAgVmVjdG9yPGludD4gdGlsZXNUb1JlbW92ZTsKLSAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhy
ZXNob2xkID0gNjsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgRmxv
YXRSZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0gZ1Rp
bGVEaW1lbnNpb24pIHsKLSAgICAgICAgZm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRSZWN0
LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwotICAgICAgICAg
ICAgdGlsZVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIHRpbGVzVG9B
ZGQuYXBwZW5kKHRpbGVSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkg
PSBtX293bmVkVGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3Qg
RmxvYXRSZWN0IG9sZFRpbGUgPSBtX293bmVkVGlsZXNbaV0ucmVjdDsKLSAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAt
IDE7IGogPj0gMDsgLS1qKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9
IHRpbGVzVG9BZGRbal07Ci0gICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICB0aWxlc1RvQWRkLnJlbW92ZShqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBw
ZW5kKGkpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0FkZC5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZXNUb1JlbW92ZVsw
XV07Ci0gICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIHRp
bGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0
cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBPd25lZFRp
bGUgdGlsZTsKLSAgICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKLSAgICAgICAgdGls
ZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAgICAgbV9vd25lZFRpbGVzLmFwcGVuZCh0aWxlKTsK
LSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgp
ICYmIG1fb3duZWRUaWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAgICAg
ICAgbV9vd25lZFRpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IGNyZWF0ZUJhY2tpbmdTdG9yZSgp
OworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xh
eWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwZGF0ZUJhY2tpbmdTdG9yZShU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlw
ID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0g
ICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRl
bnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKSB7
Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOworICAgIGlmICghbV9zdGF0ZS5kcmF3c0Nv
bnRlbnQgfHwgbV9zaXplLmlzRW1wdHkoKSkgeworICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVh
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJl
bnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwotCi0gICAgZm9yIChzaXplX3QgdGlsZUluZGV4
ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKLSAg
ICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07Ci0gICAgICAg
IGlmICghdGlsZS50ZXh0dXJlKQotICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRl
eHR1cmUgPSB0aWxlLnRleHR1cmU7Ci0gICAgICAgIEludFNpemUgdGlsZVNpemUgPSBlbmNsb3Np
bmdJbnRSZWN0KHRpbGUucmVjdCkuc2l6ZSgpOwotCi0gICAgICAgIGlmICh0aWxlLm5lZWRzUmVz
ZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSB0aWxlU2l6ZSB8fCAhdGV4dHVyZS0+aXNW
YWxpZCgpKSB7Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKLSAg
ICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCkpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFj
a2luZ1N0b3JlID0gY3JlYXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICBGbG9hdFJlY3QgZGlydHlS
ZWN0ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgPyBsYXllclJlY3QoKSA6IG1fc3RhdGUubmVlZHNE
aXNwbGF5UmVjdDsKICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgLy8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVm
ZmVyLiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgotICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkp
OwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7
Ci0gICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVy
LT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGNvbnRleHQtPnNldFRleHREcmF3
aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgY29udGV4dC0+
dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Ci0gICAgbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGlmICht
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCi0g
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZl
ci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6
IHN1cHBvcnQgRG9udENvcHlCYWNraW5nU3RvcmUgaW4gbm9uLVF0IHBvcnRzIHRoYXQgdXNlIFRl
eHR1cmVNYXBwZXIuCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOwotI2VuZGlmCi0KLSAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVzLgot
ICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5z
aXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRU
aWxlc1t0aWxlSW5kZXhdOwotICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHRpbGUucmVjdCk7Ci0gICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVj
dCk7Ci0gICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OwotCi0gICAgICAg
IC8vIE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4KLSAg
ICAgICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Ci0K
LSAgICAgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBjb29yZGlu
cWF0ZXMuCi0gICAgICAgIHRhcmdldFJlY3QubW92ZSgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVj
dC55KCkpOwotICAgICAgICB0aWxlLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLmdldCgp
LCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpSR0JBRm9ybWF0KTsKLSAg
ICB9Ci0KLSAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOwotICAgIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX2JhY2tp
bmdTdG9yZS0+dXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgbGF5ZXIsIEludFJlY3QoZGly
dHlSZWN0KSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KCkKIHsKLSAgICBp
ZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgY29tcHV0ZVRyYW5z
Zm9ybXNSZWN1cnNpdmUoKTsKIAotICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0Owot
ICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gbV90ZXh0dXJlTWFwcGVyOwotICAgIG9wdC50ZXh0dXJl
TWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwotfQotCi1G
bG9hdFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSAr
ICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0LngoKSksCi0gICAgICAgICAgICAgICAgdGFyZ2V0
UmVjdC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFyZ2V0UmVjdC55KCkpLAotICAgICAgICAgICAg
ICAgIHRpbGVSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAgdGlsZVJlY3QuaGVpZ2h0KCkp
OworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5iaW5kU3VyZmFjZSgwKTsKKyAgICBwYWludFJlY3Vyc2l2ZShvcHRpb25zKTsKIH0KIAogdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRl
LmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250
ZW50VHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRpb25z
Lm9wYWNpdHk7Ci0gICAgQml0bWFwVGV4dHVyZSogbWFzayA9IG9wdGlvbnMubWFzazsKLSAgICBG
bG9hdFJlY3QgdGFyZ2V0UmVjdCA9IHRoaXMtPnRhcmdldFJlY3QoKTsKLQogICAgIC8vIFdlIGFw
cGx5IHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtIHRvIGNvbXBlbnNhdGUgZm9yIHBhaW50aW5nIGlu
dG8gYSBzdXJmYWNlLCBhbmQgdGhlbiBhcHBseSB0aGUgb2Zmc2V0IHNvIHRoYXQgdGhlIHBhaW50
aW5nIGZpdHMgaW4gdGhlIHRhcmdldCByZWN0LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybSA9CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChvcHRpb25zLnRyYW5z
Zm9ybSkKICAgICAgICAgICAgIC5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKQogICAg
ICAgICAgICAgLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldC53aWR0aCgpLCBvcHRpb25zLm9mZnNl
dC5oZWlnaHQoKSk7CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBWZWN0b3I8
RXh0ZXJuYWxseU1hbmFnZWRUaWxlPiB0aWxlc1RvUGFpbnQ7Ci0KLSAgICBpZiAobV9zdGF0ZS50
aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpIHsKLSAgICAgICAgLy8gU29y
dCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZhY3RvciBsYXN0LgotICAgICAgICBWZWN0b3I8
RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBFeHRl
cm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBlbmQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGls
ZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmZyb250QnVmZmVyLnRl
eHR1cmUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLnNjYWxlID09IG1fc3RhdGUuY29udGVudFNjYWxlKSB7Ci0gICAgICAgICAgICAgICAg
dGlsZXMuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgdHJhbnNpdGlvbmFs
IGVmZmVjdCBsb29rcyBnb29kIG9ubHkgd2hlbiB0aGVyZSdzIG5vIHRyYW5zcGFyZW5jeSwgc28g
d2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgb3BhY2l0eSBmb3IgdGhlIGxheWVyIGlzIGFib3ZlIGEg
Y2VydGFpbiB0aHJlc2hvbGQuCi0gICAgICAgICAgICBpZiAob3BhY2l0eSA+IDAuOTUpCi0gICAg
ICAgICAgICAgICAgdGlsZXMucHJlcGVuZCgmaXQtPnNlY29uZCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSAqdGlsZXNbaV07Ci0gICAgICAgICAgICBG
bG9hdFJlY3QgcmVjdCA9IHRpbGUuZnJvbnRCdWZmZXIudGFyZ2V0UmVjdDsKLSAgICAgICAgICAg
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqdGlsZS5mcm9udEJ1ZmZlci50ZXh0dXJlOwotICAg
ICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0
LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5OworICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrID0gb3B0aW9ucy5tYXNrOwogCi0gICAgLy8gTm93
IHdlIHBhaW50IG93bmVkIHRpbGVzLCBpZiB3ZSdyZSBpbiBPd25lZFRpbGVNb2RlLgotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEJpdG1hcFRleHR1cmUqIHRleHR1cmUgPSBtX293bmVkVGlsZXNbaV0udGV4dHVyZS5nZXQoKTsK
LSAgICAgICAgY29uc3QgRmxvYXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QodGFy
Z2V0UmVjdCwgbV9vd25lZFRpbGVzW2ldLnJlY3QpOwotICAgICAgICBvcHRpb25zLnRleHR1cmVN
YXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1h
c2spOwotICAgIH0KKyAgICBpZiAobV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0
b3JlLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGxheWVyUmVj
dCgpLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2suZ2V0KCkpOwogCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250
ZW50Lm1lZGlhKQotICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludFRvVGV4dHVy
ZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIHRyYW5zZm9ybSwgb3Bh
Y2l0eSwgbWFzayk7CisgICAgaWYgKG1fY29udGVudHNMYXllcikKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1fc3Rh
dGUuY29udGVudHNSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2suZ2V0KCkpOwogfQogCiBp
bnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2
b2lkKiBhLCBjb25zdCB2b2lkKiBiKQpAQCAtMzMyLDcgKzE2OCw3IEBAIEludFJlY3QgVGV4dHVy
ZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtCiB7CiAgICAgSW50UmVjdCByZWN0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4KS5tdWx0aXBseSht
X3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKLSAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsb2Nh
bFRyYW5zZm9ybS5tYXBSZWN0KGVudGlyZVJlY3QoKSkpOworICAgIHJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KGxvY2FsVHJhbnNmb3JtLm1hcFJlY3QobGF5ZXJSZWN0KCkpKTsKICAgICBpZiAoIW1f
c3RhdGUubWFza3NUb0JvdW5kcyAmJiAhbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQogICAgICAgICAgICAgcmVj
dC51bml0ZShtX2NoaWxkcmVuW2ldLT5pbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChtYXRyaXgpKTsK
QEAgLTQzMyw3ICsyNjksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2
ZShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgIGlmIChtX3N0
YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbWFza1RleHR1cmUgPSAwOwogCi0gICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlLmdldCgpKTsKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUcmFuc2Zvcm0gPQogICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCiAgICAgICAgICAgICAgICAgLm11
bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkpCkBAIC00NTAsODkgKzI4Niw2IEBAIFRleHR1
cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogICAgICAgICBtX3BhcmVudC0+bV9j
aGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKSk7CiB9CiAKLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLWludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y3JlYXRl
Q29udGVudHNUaWxlKGZsb2F0IHNjYWxlKQotewotICAgIHN0YXRpYyBpbnQgbmV4dElEID0gMDsK
LSAgICBpbnQgaWQgPSArK25leHRJRDsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYWRk
KGlkLCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoc2NhbGUpKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRT
Y2FsZSA9IHNjYWxlOwotICAgIHJldHVybiBpZDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCkKLXsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2Vk
VGlsZXMucmVtb3ZlKGlkKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cHVyZ2VOb2Rl
VGV4dHVyZXNSZWN1cnNpdmUoKQotewotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5jbGVh
cigpOwotCi0gICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZv
ckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQot
ewotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9
IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKLQotICAgIGlmIChpdCA9PSBtX2V4
dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tCdWZm
ZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJl
Y3QgPSB0YXJnZXRSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gdGV4dHVyZTsK
LSAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwotICAgIHRpbGUuaXNEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZSA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNs
ZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpCi17Ci0gICAgZm9yIChIYXNoTWFw
PGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlN
YW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLmlzRGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UpCi0gICAgICAgICAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMucmVtb3ZlKGl0KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tCdWZm
ZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIp
OwotCi0gICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0
ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmZpbmQoaWQpOwotICAgIGlmIChpdCA9PSBtX2V4
dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tCdWZm
ZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJl
Y3QgPSBGbG9hdFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdldFJl
Y3Quc2NhbGUoMS4wIC8gdGlsZS5zY2FsZSk7Ci0KLSAgICBpZiAoIXRpbGUuYmFja0J1ZmZlci50
ZXh0dXJlKQotICAgICAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT5yZXNldChz
b3VyY2VSZWN0LnNpemUoKSwgZmFsc2UpOwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT51
cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VSZWN0KTsKLSAgICB0aWxlLmlzQmFja0J1ZmZlclVw
ZGF0ZWQgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVudHNC
dWZmZXJzKCkKLXsKLSAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRl
cmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgpOwotICAgIGZvciAoSGFz
aE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5h
bGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBFeHRl
cm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIXRpbGUu
aXNCYWNrQnVmZmVyVXBkYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0aWxl
LmlzQmFja0J1ZmZlclVwZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRU
aWxlQnVmZmVyIHN3YXBCdWZmZXIgPSB0aWxlLmZyb250QnVmZmVyOwotICAgICAgICB0aWxlLmZy
b250QnVmZmVyID0gdGlsZS5iYWNrQnVmZmVyOwotICAgICAgICB0aWxlLmJhY2tCdWZmZXIgPSBz
d2FwQnVmZmVyOwotICAgIH0KLX0KLSNlbmRpZgotCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NM
YXllciwgaW50IG9wdGlvbnMpCiB7CiAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGUoZ3JhcGhpY3NM
YXllciwgcm9vdExheWVyKCktPm1fdGV4dHVyZU1hcHBlciwgb3B0aW9ucyk7CkBAIC01NDEsMTQg
KzI5NCwxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBn
cmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQogewogICAgIGludCBj
aGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hhbmdlTWFzaygpOwotICAgIGNvbnN0IFRleHR1
cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSYgcGVuZGluZ0NvbnRlbnQgPSBncmFwaGljc0xheWVy
LT5wZW5kaW5nQ29udGVudCgpOwotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHN3
YXBDb250ZW50c0J1ZmZlcnMoKTsKLSNlbmRpZgotICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hh
bmdlcyAmJiBncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnMuaXNFbXB0eSgpICYmIHBlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29udGVudC5uZWVk
c0Rpc3BsYXkpCisKKyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhpY3NM
YXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChjaGFu
Z2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgeworICAgIGlmIChjaGFuZ2VNYXNrICYgUGFyZW50Q2hh
bmdlKSB7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBuZXdQYXJlbnQgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgaWYgKG5ld1BhcmVu
dCAhPSBtX3BhcmVudCkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBjdXJyZW50
IGZyb20gY2hpbGQgbGlzdCBmaXJzdC4KQEAgLTU4MCwxNiArMzMwLDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKiBncmEKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYgKFNp
emVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSB3YW50
ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5zaXpl
KCkuaGVpZ2h0KCkpOwotICAgICAgICBpZiAod2FudGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVuZGlu
Z0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAgd2Fu
dGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgp
LCBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgaWYg
KHdhbnRlZFNpemUgIT0gbV9zaXplKQotICAgICAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7
Ci0KLSAgICAgICAgbV9zaXplID0gd2FudGVkU2l6ZTsKLSAgICB9CisgICAgbV9zaXplID0gZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpOwogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFu
Z2UpIHsKICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkpCkBAIC02MTksMTMgKzM2MCwxMCBA
QCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5
ID0gZ3JhcGhpY3NMYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9zdGF0ZS5jaGls
ZHJlblRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7CiAgICAg
bV9zdGF0ZS5vcGFjaXR5ID0gZ3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOwotCi0gICAgbV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9IHBlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOwotICAg
IG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBwZW5kaW5nQ29udGVudC5pbWFnZTsKLSAgICBtX2N1
cnJlbnRDb250ZW50Lm1lZGlhID0gcGVuZGluZ0NvbnRlbnQubWVkaWE7Ci0gICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBw
ZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7Ci0gICAgaWYgKCFtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVu
aXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fc3RhdGUubmVlZHNE
aXNwbGF5ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgfHwgZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNw
bGF5KCk7CisgICAgaWYgKCFtX3N0YXRlLm5lZWRzRGlzcGxheSkKKyAgICAgICAgbV9zdGF0ZS5u
ZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKSk7
CisgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhpY3NMYXllci0+Z2V0Q29udGVudHNMYXllcih0
ZXh0dXJlTWFwcGVyKTsKIAogICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9z
KTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsK
QEAgLTY2Niw2ICs0MDQsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9u
c1JlY3Vyc2l2ZWx5KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRpb25zKQogeworICAgIGlmICghdGV4dHVyZU1h
cHBlcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgIShvcHRp
b25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKICAgICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVT
ZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBwZXIpOwogICAgICAgICBncmFwaGljc0xheWVy
LT5kaWRTeW5jaHJvbml6ZSgpOwpAQCAtNjgzLDEwICs0MjQsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
Z3JhcGhpYwogICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5
ZXIoKSksIHRleHR1cmVNYXBwZXIpOwogCiAgICAgc3luY0FuaW1hdGlvbnMoKTsKLSAgICBjb21w
dXRlVGlsZXMoKTsKLQotICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICByZW5kZXJDb250
ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5ZXIpOworICAgIHVwZGF0ZUJhY2tpbmdTdG9y
ZSh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVyKTsKIAogICAgIGlmICghKG9wdGlvbnMgJiBU
cmF2ZXJzZURlc2NlbmRhbnRzKSkKICAgICAgICAgb3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IDIzMGM5ZTAuLmE3N2YxNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQyLDE2ICs0MywxNCBAQCBjbGFzcyBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CiBw
dWJsaWM6Ci0gICAgQml0bWFwVGV4dHVyZSogc3VyZmFjZTsKLSAgICBCaXRtYXBUZXh0dXJlKiBt
YXNrOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBzdXJmYWNlOworICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiBtYXNrOwogICAgIGZsb2F0IG9wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtOwogICAgIEludFNpemUgb2Zmc2V0OwogICAgIFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucygpCi0gICAgICAg
IDogc3VyZmFjZSgwKQotICAgICAgICAsIG1hc2soMCkKLSAgICAgICAgLCBvcGFjaXR5KDEpCisg
ICAgICAgIDogb3BhY2l0eSgxKQogICAgICAgICAsIHRleHR1cmVNYXBwZXIoMCkKICAgICB7IH0K
IH07CkBAIC05Nyw0MiArOTYsMjAgQEAgcHVibGljOgogICAgICAgICBDb21wdXRhdGlvbnNPbmx5
ID0gMgogICAgIH07CiAKLSAgICBlbnVtIFRpbGVPd25lcnNoaXAgewotICAgICAgICBPd25lZFRp
bGVzLAotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzCi0gICAgfTsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVyTm9kZSosIEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7Ci0K
LSAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNv
bG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgotICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29u
dGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlh
Q29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OwotICAgIHN0cnVjdCBDb250ZW50RGF0
YSB7Ci0gICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OwotICAgICAgICBib29sIG5l
ZWRzRGlzcGxheTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAgIENv
bnRlbnRUeXBlIGNvbnRlbnRUeXBlOwotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotICAg
ICAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWE7Ci0gICAgICAgIENv
bnRlbnREYXRhKCkKLSAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICAgICAg
ICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICAsIGltYWdlKDAp
Ci0gICAgICAgICAgICAsIG1lZGlhKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0K
ICAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCiAgICAgICAgIDogbV9wYXJlbnQoMCkKICAgICAgICAg
LCBtX2VmZmVjdFRhcmdldCgwKQorICAgICAgICAsIG1fY29udGVudHNMYXllcigwKQogICAgICAg
ICAsIG1fb3BhY2l0eSgxKQogICAgICAgICAsIG1fY2VudGVyWigwKQorICAgICAgICAsIG1fYmFj
a2luZ1N0b3JlRmFjdG9yeShUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlOjpjcmVhdGUpCiAgICAg
ICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCiAgICAgeyB9CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJl
TWFwcGVyTm9kZSgpOwogCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmU+IEJhY2tpbmdTdG9yZUZhY3RvcnkoKTsKKwogICAgIHZvaWQgc3luY0NvbXBvc2l0
aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBpbnQgc3luY09wdGlvbnMgPSAw
KTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKiwgVGV4dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwogICAgIHZvaWQgc3lu
Y0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOwpAQCAtMTQ0LDE5ICsxMjEsOSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHBhaW50KCk7CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2
b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVyc2hpcCBvd25lcnNoaXApIHsgbV9zdGF0ZS50
aWxlT3duZXJzaGlwID0gb3duZXJzaGlwOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRlbnRzVGlsZShm
bG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVDb250ZW50c1RpbGUoaW50IGlkKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lkKik7Ci0gICAgdm9p
ZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgQml0bWFwVGV4dHVyZSopOwotICAgIHZvaWQgY2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZVRpbGVzKCk7Ci0gICAgdm9pZCBwdXJnZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwotI2Vu
ZGlmCi0gICAgdm9pZCBzZXRJRChpbnQgaWQpIHsgbV9pZCA9IGlkOyB9Ci0gICAgaW50IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQotCi0gICAgY29uc3QgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q29udGVudC5tZWRpYTsgfQor
ICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlRmFjdG9yeShCYWNraW5nU3RvcmVGYWN0b3J5IGZhY3Rv
cnkpIHsgbV9iYWNraW5nU3RvcmVGYWN0b3J5ID0gZmFjdG9yeTsgfQorICAgIHZvaWQgY2xlYXJC
YWNraW5nU3RvcmUoKSB7IG1fYmFja2luZ1N0b3JlID0gMDsgfQorICAgIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCk7CiAKIHByaXZhdGU6CiAgICAg
VGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOwpAQCAtMTc0LDEzICsxNDEsMTMgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2
b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKICAgICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVj
dG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiAK
LSAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV9vd25lZFRpbGVzLmlzRW1w
dHkoKSA/IDAgOiBtX293bmVkVGlsZXNbMF0udGV4dHVyZS5nZXQoKTsgfQorICAgIFBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9i
YWNraW5nU3RvcmUtPnRleHR1cmUoKSA6IDA7IH0KIAogICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUo
Y29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENo
aWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50
U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9u
cyYpOwotICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXll
ciopOworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqLCBHcmFwaGlj
c0xheWVyKik7CiAKICAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdDsKQEAgLTE4OCw2MyArMTU1LDI0IEBAIHByaXZhdGU6CiAKICAgICBMYXllclRy
YW5zZm9ybSBtX3RyYW5zZm9ybTsKIAotICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVjdCgp
IGNvbnN0CisgICAgaW5saW5lIEZsb2F0UmVjdCBsYXllclJlY3QoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRU
eXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7CisgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOwogICAgIH0KIAotICAgIGlu
bGluZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIH0K
LQotICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBl
ICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXpl
KCkgOiBtX3NpemU7Ci0gICAgfQotICAgIHN0cnVjdCBPd25lZFRpbGUgewotICAgICAgICBGbG9h
dFJlY3QgcmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0gICAg
ICAgIGJvb2wgbmVlZHNSZXNldDsKLSAgICB9OwotCi0gICAgVmVjdG9yPE93bmVkVGlsZT4gbV9v
d25lZFRpbGVzOwotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RydWN0IEV4
dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciB7Ci0gICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0
OwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IHRleHR1cmU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdlZFRp
bGUgewotICAgICAgICBib29sIGlzQmFja0J1ZmZlclVwZGF0ZWQ7Ci0gICAgICAgIGJvb2wgaXNE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZTsKLSAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAgIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBmcm9udEJ1ZmZlcjsKLSAgICAgICAgRXh0ZXJuYWxs
eU1hbmFnZWRUaWxlQnVmZmVyIGJhY2tCdWZmZXI7Ci0KLSAgICAgICAgRXh0ZXJuYWxseU1hbmFn
ZWRUaWxlKGZsb2F0IHNjYWxlID0gMS4wKQotICAgICAgICAgICAgOiBpc0JhY2tCdWZmZXJVcGRh
dGVkKGZhbHNlKQotICAgICAgICAgICAgLCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGZhbHNl
KQotICAgICAgICAgICAgLCBzY2FsZShzY2FsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+IG1fZXh0ZXJuYWxs
eU1hbmFnZWRUaWxlczsKLSNlbmRpZgotCi0gICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVu
dDsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZUJhY2tp
bmdTdG9yZSgpIHsgcmV0dXJuICgqbV9iYWNraW5nU3RvcmVGYWN0b3J5KSgpOyB9CiAKICAgICBW
ZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBtX3BhcmVudDsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7Cisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAg
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7CiAgICAgRmxvYXRT
aXplIG1fc2l6ZTsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgZmxvYXQgbV9jZW50ZXJaOwog
ICAgIFN0cmluZyBtX25hbWU7Ci0gICAgaW50IG1faWQ7CisKKyAgICBCYWNraW5nU3RvcmVGYWN0
b3J5KiBtX2JhY2tpbmdTdG9yZUZhY3Rvcnk7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAg
ICBGbG9hdFBvaW50IHBvczsKQEAgLTI1NCw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQgb3Bh
Y2l0eTsKICAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0
IG5lZWRzRGlzcGxheVJlY3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50Owog
ICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOwogICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcmVwbGljYUxheWVyOwpAQCAtMjYzLDEzICsxOTIsOSBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2li
aWxpdHkgOiAxOwogICAgICAgICBib29sIHZpc2libGUgOiAxOwotICAgICAgICBib29sIG5lZWRz
UmVzZXQ6IDE7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OiAxOwogICAgICAgICBib29sIG1p
Z2h0SGF2ZU92ZXJsYXBzIDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAgICAg
IGZsb2F0IGNvbnRlbnRTY2FsZTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAg
ICAgVGlsZU93bmVyc2hpcCB0aWxlT3duZXJzaGlwOwotI2VuZGlmCiAgICAgICAgIFN0YXRlKCkK
ICAgICAgICAgICAgIDogb3BhY2l0eSgxLmYpCiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQpA
QCAtMjgwLDEzICsyMDUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBjb250ZW50c09wYXF1
ZShmYWxzZSkKICAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICAg
ICAgICAgLCB2aXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2UpCisg
ICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVP
dmVybGFwcyhmYWxzZSkKICAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQotICAgICAg
ICAgICAgLCBjb250ZW50U2NhbGUoMS4wZikKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
LSAgICAgICAgICAgICwgdGlsZU93bmVyc2hpcChPd25lZFRpbGVzKQotI2VuZGlmCiAgICAgICAg
IHsKICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oCmluZGV4IDFiMjkyOTAuLmM2OWMxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzAsNyArMjksOCBAQCBjbGFzcyBCaXRtYXBUZXh0dXJl
OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVyZSog
bWFzayA9IDApIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBv
cGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzd2FwQnVmZmVycygpIHsgfQogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNTNlOTU1Li5l
ZTY1ZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTItMDItMDkgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1h
cF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA1CisKKyAgICAgICAg
TW92ZSB0aGUgYmFja2luZy1zdG9yZSBjb2RlIHRvIExheWVyVHJlZUJhY2tpbmdTdG9yZSwgaW1w
bGVtZW50aW5nIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBpbiBUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlLgorICAgICAgICBXZSBzYXZlIHRoZSBkb3VibGUtYnVmZmVyZWQgdGlsZSBp
biB0aGUgYmFja2luZy1zdG9yZSwgYW5kIHRoZW4gY29udmVydCB0aGVtIHRvIHJlZ3VsYXIKKyAg
ICAgICAgdGlsZXMgaW4gdXBkYXRlQ29udGVudHMsIGJhc2VkIG9uIHRoZSBvcmRlciBvZiBwYWlu
dGluZy4KKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UgZm9yIGltYWdl
cyBpbnN0ZWFkIG9mIHNhdmluZyBvdXIgb3duIGNvbXBvc2l0ZWQgaW1hZ2UKKyAgICAgICAgcmVn
aXN0cnkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6
OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFn
ZVRvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xS
ZXNvdXJjZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MucHJvOgorCiAyMDEyLTAyLTA3ICBKb2Nl
bHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0
XSBGZXRjaCB0aGUgdmlzaWJsZSByZWN0IGZyb20gTGF5ZXJUcmVlSG9zdCBpbnN0ZWFkIG9mIGtl
ZXBpbmcgYSBjb3B5IGluIGVhY2ggbGF5ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBjZWRlNGVhLi5mYWU2
NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI1Myw2ICsyNTMsNyBAQCBIRUFERVJTICs9IFwKICAgICBV
SVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oIFwK
KyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVy
LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTgxLDYg
KzU4Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGll
bnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvUXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3Jl
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9x
dC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGM5NzE4Ny4uNjM2NWM3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtMzAsMTUgKzMwLDE3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRT
aXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
aW1lci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJO
b2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIgogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsKIGNsYXNz
IFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIApAQCAtOTgsMTIgKzEw
MCw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkNvcmU6OkludFBvaW50LCBSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZT4gPiBUaWxlZEltYWdlOwotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVj
dE1hcCBtX25vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7Ci0gICAgSGFzaE1hcDxpbnQsIGludD4g
bV90aWxlVG9Ob2RlVGlsZTsKLSAgICBpbnQgcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0
aWxlSUQpIGNvbnN0OwotICAgIEhhc2hNYXA8aW50NjRfdCwgVGlsZWRJbWFnZT4gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwog
ICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2Vi
TGF5ZXJJRCk7CkBAIC0xMTgsMTEgKzExNCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmbHVz
aExheWVyQ2hhbmdlcygpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBl
bnN1cmVMYXllcihXZWJMYXllcklEKTsKLQorICAgIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3Rv
cmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKICNlbmRpZgogCiAgICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIFZlY3RvcjxXZWJMYXllcklE
PiBtX2xheWVyc1RvRGVsZXRlOworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXM7CiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRp
bWVyKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4qKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsOTcg
QEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRlICJzdGRp
by5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICghbV9iYWNrQnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IG1fdGFyZ2V0UmVjdDsKKyAg
ICB0YXJnZXRSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7CisgICAgbV9mcm9udEJ1ZmZlci5zZXRS
ZWN0KHRhcmdldFJlY3QpOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV9m
cm9udEJ1ZmZlci50ZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgIHRleHR1
cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1fZnJvbnRCdWZm
ZXIuc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5yZXNl
dChlbmNsb3NpbmdJbnRSZWN0KG1fc291cmNlUmVjdCkuc2l6ZSgpLCBmYWxzZSk7CisgICAgY29u
c3Qgdm9pZCogcGl4ZWxzOworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFJbWFnZSBxdEltYWdlID0g
bV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKTsKKyAgICBwaXhlbHMgPSBxdEltYWdlLmNvbnN0
Qml0cygpOworI2VuZGlmCisgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMocGl4ZWxzLCBJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja0J1ZmZlci0+c2l6ZSgpKSk7CisgICAgbV9iYWNr
QnVmZmVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUo
aW50IGlkLCBmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlKHNjYWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIExheWVy
QmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBpZCkKK3sKKyAgICBtX3RpbGVzLnJlbW92ZShp
ZCk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBTaGFyZWFi
bGVCaXRtYXAqIGJhY2tCdWZmZXIpCit7CisgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0
b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV90aWxlcy5lbmQoKSk7CisgICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJl
Y3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIpOworfQorCit2b2lkIExheWVyQmFja2luZ1N0b3Jl
Ojp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgSW50UmVjdCYpCit7CisgICAgY2xlYXIoKTsKKyAgICBIYXNoTWFw
PGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQo
KTsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+JiB0aWxlc1RvUGFpbnQgPSBnZXRUaWxl
cygpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgdGlsZS5zd2Fw
QnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKKworICAgICAgICBpZiAoIXRpbGUuZnJvbnRCdWZmZXIo
KS50ZXh0dXJlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodGlsZS5z
Y2FsZSgpID09IG1fc2NhbGUpIHsKKyAgICAgICAgICAgIHRpbGVzVG9QYWludC5hcHBlbmQodGls
ZS5mcm9udEJ1ZmZlcigpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhp
Z2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KKyAgICAgICAgaWYgKGxheWVy
LT5vcGFjaXR5KCkgPiAwLjk1KQorICAgICAgICAgICAgdGlsZXNUb1BhaW50LnByZXBlbmQodGls
ZS5mcm9udEJ1ZmZlcigpKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTVlYTZlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIExheWVyQmFja2luZ1N0b3JlX2gK
KyNkZWZpbmUgTGF5ZXJCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZVRpbGUgeworcHVibGljOgorICAgIExheWVyQmFj
a2luZ1N0b3JlVGlsZShmbG9hdCBzY2FsZSA9IDEpCisgICAgICAgIDogbV9zY2FsZShzY2FsZSkK
KyAgICB7CisgICAgfQorCisgICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zY2FsZTsgfQorICAgIGlubGluZSBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZSYgZnJvbnRC
dWZmZXIoKSB7IHJldHVybiBtX2Zyb250QnVmZmVyOyB9CisgICAgaW5saW5lIGNvbnN0IFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJUaWxlJiBmcm9udEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJv
bnRCdWZmZXI7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIq
KTsKKyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJn
ZXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBTaGFyZWFibGVCaXRtYXAqIGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldDsKKyAgICAgICAgbV9z
b3VyY2VSZWN0ID0gc291cmNlOworICAgICAgICBtX2JhY2tCdWZmZXIgPSBidWZmZXI7CisgICAg
fQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlIG1fZnJvbnRCdWZm
ZXI7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iYWNrQnVmZmVyOworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdGFy
Z2V0UmVjdDsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworY2xhc3MgTGF5ZXJCYWNraW5nU3Rv
cmUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6
CisgICAgdm9pZCBjcmVhdGVUaWxlKGludCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGlsZShp
bnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgU2hhcmVhYmxlQml0bWFwKik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQmFja2luZ1N0b3JlKTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCitwcml2
YXRlOgorICAgIExheWVyQmFja2luZ1N0b3JlKCkKKyAgICAgICAgOiBtX3NjYWxlKDEuKQorICAg
IHsgfQorICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+IG1fdGlsZXM7Cisg
ICAgZmxvYXQgbV9zY2FsZTsKK307CisKK30KKyNlbmRpZiAvLyBMYXllckJhY2tpbmdTdG9yZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcAppbmRleCBjN2NhN2YxLi41ZTljMDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTIyLDE5ICsyMiwy
MCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyTm9kZS5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0j
aW5jbHVkZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAi
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCIKICNpbmNsdWRlIDxRRGF0ZVRpbWU+CiAjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMu
aD4KIApAQCAtMTQ5LDggKzE1MCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJU
cmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVySUQpCiB7CiAgICAgR3Jh
cGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIodGhp
cyk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG5l
d0xheWVyKTsKLSAgICBub2RlLT5zZXRJRChsYXllcklEKTsKLSAgICBub2RlLT5zZXRUaWxlT3du
ZXJzaGlwKFRleHR1cmVNYXBwZXJOb2RlOjpFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKTsKKyAgICBu
b2RlLT5zZXRCYWNraW5nU3RvcmVGYWN0b3J5KExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUpOwog
ICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7CiB9CiAKQEAgLTIzNSwyMSArMjM1LDEzIEBA
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCi1pbnQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKLXsKLSAgICBIYXNo
TWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQo
dGlsZUlEKTsKLSAgICBpZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZv
KQogewogICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAgZW5zdXJlTGF5ZXIo
aWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwogICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLSAgICBib29sIG5lZWRzVG9VcGRh
dGVJbWFnZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkIHx8IGxheWVySW5mby5jb250
ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIGJvb2wgbmVlZHNUb1VwZGF0
ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5jb250
ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKIApAQCAt
MzQ4LDY5ICszNDAsMzMgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklE
KFdlYkxheWVySUQgbGF5ZXJJRCkKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwog
fQogCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQorUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9y
ZT4gTGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKIHsK
LSAgICBlbnN1cmVMYXllcihsYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9
IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBlbnN1cmVMYXll
cihpZCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KGxheWVyQnlJRChpZCkpOworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihub2RlLT5iYWNraW5nU3RvcmUo
KS5nZXQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGJhY2tpbmdT
dG9yZTsKK30KIAotICAgIGludCBub2RlVGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVudHNUaWxl
KHNjYWxlKTsKLSAgICBtX3RpbGVUb05vZGVUaWxlLmFkZCh0aWxlSUQsIG5vZGVUaWxlSUQpOwor
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBp
bnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCkt
PmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKIHsKLSAgICBUZXh0
dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVy
SUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBub2RlVGls
ZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7Ci0gICAgaWYgKCFub2RlVGls
ZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9k
ZVRpbGVJRCk7Ci0gICAgbV90aWxlVG9Ob2RlVGlsZS5yZW1vdmUodGlsZUlEKTsKKyAgICBnZXRC
YWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKIH0KIAogdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBT
aGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKIHsKLSAgICBlbnN1cmVMYXllcihsYXllcklEKTsKLSAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlE
KGxheWVySUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBu
b2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7Ci0gICAgaWYgKCFu
b2RlVGlsZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVy
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgUUltYWdlIGltYWdlID0gYml0bWFwLT5jcmVh
dGVRSW1hZ2UoKTsKLSAgICBub2RlLT5zZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxl
SUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGltYWdlLmNvbnN0Qml0cygpKTsKKyAgICBnZXRC
YWNraW5nU3RvcmUobGF5ZXJJRCktPnVwZGF0ZVRpbGUodGlsZUlELCBzb3VyY2VSZWN0LCB0YXJn
ZXRSZWN0LCBiaXRtYXApOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1h
Z2UoaW50NjRfdCBpbWFnZUlELCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKIHsKLSAgICBUaWxl
ZEltYWdlIHRpbGVkSW1hZ2U7Ci0gICAgc3RhdGljIGNvbnN0IGludCBUaWxlRGltZW5zaW9uID0g
MTAyNDsKLSAgICBRSW1hZ2UgaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgIGJv
b2wgaW1hZ2VIYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOwotICAgIEludFJlY3Qg
aW1hZ2VSZWN0KDAsIDAsIGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKTsKLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGltYWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNp
b24pIHsKLSAgICAgICAgICAgIFFJbWFnZSBzdWJJbWFnZTsKLSAgICAgICAgICAgIEludFJlY3Qg
cmVjdCh4LCB5LCBUaWxlRGltZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKLSAgICAgICAgICAgIHJl
Y3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXpl
KCkpID09IGltYWdlLnNpemUoKSkKLSAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShy
ZWN0KTsKLSAgICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0
dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChy
ZWN0LnNpemUoKSwgIWltYWdlSGFzQWxwaGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRl
Q29udGVudHMoc3ViSW1hZ2UuY29uc3RCaXRzKCksIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cmVjdC5zaXplKCkpKTsKLSAgICAgICAgICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24o
KSwgdGV4dHVyZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5zZXQoaW1hZ2VJRCwgdGlsZWRJbWFnZSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuc2V0KGltYWdlSUQsIFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6OmNyZWF0
ZShiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOwog
fQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJ
RCkKQEAgLTQyMCwzMyArMzc2LDkgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lJ
bWFnZShpbnQ2NF90IGltYWdlSUQpCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25J
bWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKIHsKLSAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbWFnZUlEKSB7Ci0g
ICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7
Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0KCkpOwotICAg
IGZsb2F0IGhvcml6b250YWxGYWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lk
dGgoKTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAv
IHNpemUuaGVpZ2h0KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0
b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwotICAgIGlm
IChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVGlsZWRJbWFnZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0gaXQtPnNlY29u
ZC5lbmQoKTsKLSAgICBmb3IgKFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNv
bmQuYmVnaW4oKTsgdGlsZUl0ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRT
aXplKHRpbGVJdC0+c2Vjb25kLT5zaXplKCkpKTsKLSAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJl
Y3Qoc291cmNlUmVjdC54KCkgKiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNSZWN0LngoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZh
Y3RvciArIGNvbnRlbnRzUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZVJlY3Qud2lkdGgoKSAqIGhvcml6b250YWxGYWN0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7Ci0gICAgICAg
IGludCBuZXdUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsKLSAgICAgICAg
bm9kZS0+c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
bmV3VGlsZUlELCBJbnRSZWN0KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29u
ZC5nZXQoKSk7Ci0gICAgfQorICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBw
ZXJDb21wb3NpdGVkSW1hZ2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuZW5kKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29u
ZC5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hhbmdl
cygpCkBAIC02MjksMTIgKzU2MSwxMCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VH
TFJlc291cmNlcygpCiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKHJvb3RMYXllcigpKTsKIAogICAgIGlmIChub2RlKQotICAgICAgICBub2RlLT5wdXJn
ZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOworICAgICAgICBub2RlLT5jbGVhckJhY2tpbmdTdG9y
ZSgpOwogCiAgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLQogICAgIG1f
dGV4dHVyZU1hcHBlci5jbGVhcigpOwotCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3Rv
cmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAK
</data>
<flag name="review"
          id="128366"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126554</attachid>
            <date>2012-02-10 12:28:14 -0800</date>
            <delta_ts>2012-02-11 09:26:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>57734</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDMzNGM4Li5jNTNmY2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hy
b25pemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpnZXRDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFn
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQ29tcG9zaXRlZEltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjp1cGRhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omlu
dGVybWVkaWF0ZVN1cmZhY2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnM6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRCYWNraW5nU3Rv
cmVGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bGF5ZXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjcmVhdGVCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0
YXRlOjpTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6c3dhcEJ1
ZmZlcnMpOgorCiAyMDEyLTAyLTA5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5z
ZW5Abm9raWEuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aW1lcnMgYW5kIG90aGVyIGFjdGl2ZSBE
T00gb2JqZWN0cyBkbyBub3QgZmlyZSBpbiBzdXNwZW5kZWQgZG9jdW1lbnRzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzA4Y2IyNS4uNTk4NmY5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC01NzM1LDYgKzU3MzUsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwKICAgICAgICAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5jcHAgXAogICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmggXAogICAgICAgICBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKQEAgLTU3NTcs
NiArNTc2MSwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Q29tcG9zaXRlZEltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKaW5kZXggNzU4ZGQ0Yi4uNDE5ZjU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTQ0
LDYgKzM5NDQsOCBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmggXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oCkBAIC0zOTUyLDYgKzM5NTQsOCBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJD
b21wb3NpdGVkSW1hZ2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGM1OWFjZGMuLjBjNmQ3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NzYsNiArMzU3NiwxMCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZElt
YWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0
dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi5jNmZmMDNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJH
TC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWlu
dGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwogICAgIHZpcnR1YWwgdm9p
ZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgeyByZXR1
cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkg
Y29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAppbmRleCA2NmJjNzZlLi4yYmI0NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAt
NzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICBRR0xXaWRnZXQqIGdldFZpZXdwb3J0R0xXaWRn
ZXQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0
bWFwVGV4dHVyZSogbWFzayk7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBj
b25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CkBAIC0xNDIsNyArMTQy
LDcgQEAgc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1JnYihxdWludDMyIHBpeGVsKQog
fQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRt
YXBUZXh0dXJlKiBtYXNrKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKICAgICBibGl0TXVsdGlzYW1w
bGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI1MjFkMWEuLjllMTU4MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgsNiArMjgsOCBAQCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBt
X25vZGUoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpKQogICAgICwgbV9jaGFuZ2VN
YXNrKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1fbWVkaWEoMCkKICAg
ICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiB7CiB9CkBAIC00NCw4ICs0Niw4IEBA
IHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmRpZFN5bmNocm9uaXplKCkKIHsKICAg
ICBtX3N5bmNRdWV1ZWQgPSBmYWxzZTsKICAgICBtX2NoYW5nZU1hc2sgPSAwOwotICAgIG1fcGVu
ZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7
CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTYxLDcg
KzYzLDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcigpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNE
aXNwbGF5KCkKIHsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7Cisg
ICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTY5LDggKzcxLDggQEAgdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKICovCiB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYg
KCFub2RlKCktPm1lZGlhKCkpCi0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5
ID0gdHJ1ZTsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0Q29udGVudHNUb0ltYWdlKG1f
aW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxh
eUNoYW5nZSk7CiB9CiAKQEAgLTc4LDkgKzgwLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogKi8KIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgIGlmICht
X25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVl
ZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUo
cmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdl
KTsKIH0KIApAQCAtMTI4LDcgKzEzMCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5CiAqLwog
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xh
eWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKLQogICAgIEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogfQpAQCAtMjU5LDI4ICsyNjAsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1
ZSkKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IHZhbHVl
OwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1ZSk7Ci0gICAgbm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOwotfQot
Ci0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpCi17Ci0gICAgaWYgKCFtX3BlbmRpbmdD
b250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7Ci0gICAgR3JhcGhpY3NM
YXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQotKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzT3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzT3BhcXVl
KCkpCkBAIC0zMTksMjIgKzI5OCwzMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c1JlY3RDaGFuZ2UpOwogfQogCitUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmdldENvbnRlbnRz
TGF5ZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICAvLyBJbiB0aGUgY2Fz
ZSBvZiBhIG51bGwgbV9pbWFnZSwgdGhpcyB3b3VsZCByZXNldCBtX2NvbXBvc2l0ZWRJbWFnZS4K
KyAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6Omdl
dChtX2ltYWdlLmdldCgpLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIgPSBt
X21lZGlhID8gbV9tZWRpYSA6IG1fY29tcG9zaXRlZEltYWdlLmdldCgpOworICAgIHJldHVybiBt
X2NvbnRlbnRzTGF5ZXI7Cit9CisKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSog
aW1hZ2UpCiB7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1fcGVuZGluZ0Nv
bnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpEaXJlY3RJbWFn
ZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKLSAgICBt
X3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtZWRpYSkK
IHsKKyAgICBtX2ltYWdlID0gMDsKKyAgICBtX21lZGlhID0gbWVkaWE7CiAgICAgR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1fcGVuZGluZ0NvbnRlbnQuY29udGVu
dFR5cGUgPSBtZWRpYSA/IFRleHR1cmVNYXBwZXJOb2RlOjpNZWRpYUNvbnRlbnRUeXBlIDogVGV4
dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm1l
ZGlhID0gbWVkaWE7CisgICAgbV9jb250ZW50c0xheWVyID0gbWVkaWE7CiB9CiAKIC8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMzUxLDEzICszNDEsNiBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKQog
ICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhpcywgVGV4dHVyZU1hcHBlck5vZGU6
OlRyYXZlcnNlRGVzY2VuZGFudHMpOwogfQogCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
LSovCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1M
YXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqPihub2RlKCktPm1lZGlhKCkpOwotfQotCiBib29sIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBT
dHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIEFTU0VSVCgh
a2V5ZnJhbWVzTmFtZS5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaAppbmRleCAxNzJmZGRhLi44NjA5ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlck5vZGUuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkKQEAgLTY0LDggKzY1LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgYik7CiAgICAgdmlydHVhbCB2b2lk
IHNldERyYXdzQ29udGVudChib29sIGIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29s
b3IoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYik7CiAgICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7CkBAIC03NywxMCArNzYsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYp
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZp
cnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAg
IHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5nZU1h
c2spOwotICAgIGlubGluZSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdD
b250ZW50KCkgeyByZXR1cm4gbV9wZW5kaW5nQ29udGVudDsgfQogICAgIGlubGluZSBpbnQgY2hh
bmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQogICAgIHZvaWQgZGlkU3lu
Y2hyb25pemUoKTsKIApAQCAtODksMTIgKzg3LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgVGV4dHVyZU1hcHBlck5v
ZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKyAgICBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogZ2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyKik7CisgICAg
Ym9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRGlzcGxheTsgfQorICAg
IEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsgfQogCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJl
TWFwcGVyTm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZElt
YWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAg
Ym9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50IG1fY2hhbmdlTWFzazsKLSAgICBUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBib29sIG1fbmVlZHNE
aXNwbGF5OworICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7
CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1fbWVkaWE7CisgICAgRmxvYXRSZWN0
IG1fbmVlZHNEaXNwbGF5UmVjdDsKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1h
dGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAgICBUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNWU1
MjhkNC4uNThlNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcApAQCAtNzMsNyArNzMsNiBAQCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXI6OmFjcXVpcmVUZXh0dXJlRnJvbVBv
b2woY29uc3QgSW50U2l6ZSYgcwogICAgIHJldHVybiBzZWxlY3RlZFRleHR1cmU7CiB9CiAKLQog
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoQWNjZWxlcmF0
aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IFNvZnR3YXJlTW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCmluZGV4IGYyNWNlMGIuLmZmNTEzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMTA2LDYgKzEw
Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZygpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpIHsgfQogCisgICAgdmlydHVhbCBJbnRTaXplIG1h
eFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShJTlRfTUFYLCBJTlRfTUFYKTsg
fQorCiAgICAgLy8gQSBzdXJmYWNlIGlzIHJlbGVhc2VkIGltcGxpY2l0bHkgd2hlbiBkZXJlZmVy
ZW5jZWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0
dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApp
bmRleCA0NWI5NGJkLi5jMTc4ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTIw
LDE2ICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJOb2RlLmgiCiAKKyNpbmNsdWRlICJzdGRpby5oIgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKIAotbmFtZXNw
YWNlIHsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ1RpbGVEaW1lbnNpb24gPSAxMDI0LjA7Ci19
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1h
cHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC04MSwyMTggKzc5LDU2IEBAIHZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCkKICAgICAgICAg
c29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkKK1Bhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4gVGV4dHVyZU1hcHBlck5vZGU6OmJhY2tpbmdTdG9yZSgpCiB7Ci0j
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fc3RhdGUudGlsZU93bmVyc2hp
cCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYg
IW1fc3RhdGUuZHJhd3NDb250ZW50KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7
Ci0gICAgVmVjdG9yPGludD4gdGlsZXNUb1JlbW92ZTsKLSAgICBjb25zdCBpbnQgVGlsZUVyYXNl
VGhyZXNob2xkID0gNjsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAg
RmxvYXRSZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0g
Z1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgZm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRS
ZWN0LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVj
dCB0aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwotICAgICAg
ICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIHRpbGVz
VG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50
IGkgPSBtX293bmVkVGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29u
c3QgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX293bmVkVGlsZXNbaV0ucmVjdDsKLSAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUo
KSAtIDE7IGogPj0gMDsgLS1qKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGls
ZSA9IHRpbGVzVG9BZGRbal07Ci0gICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICB0aWxlc1RvQWRkLnJlbW92ZShqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUu
YXBwZW5kKGkpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0Fk
ZC5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZXNUb1JlbW92
ZVswXV07Ci0gICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLnJlbW92ZSgwKTsKLSAgICAgICAgICAg
IHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQg
PSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBPd25l
ZFRpbGUgdGlsZTsKLSAgICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKLSAgICAgICAg
dGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAgICAgbV9vd25lZFRpbGVzLmFwcGVuZCh0aWxl
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6
ZSgpICYmIG1fb3duZWRUaWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAg
ICAgICAgbV9vd25lZFRpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICBpZiAoIW1f
YmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IGNyZWF0ZUJhY2tpbmdTdG9y
ZSgpOworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGlj
c0xheWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwZGF0ZUJhY2tpbmdTdG9y
ZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsK
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJz
aGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgot
Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICghbV9zdGF0ZS5kcmF3c0Nv
bnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUp
KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOworICAgIGlmICghbV9zdGF0ZS5kcmF3
c0NvbnRlbnQgfHwgbV9zaXplLmlzRW1wdHkoKSkgeworICAgICAgICBtX2JhY2tpbmdTdG9yZS5j
bGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0ZXh0dXJlTWFwcGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwotCi0gICAgZm9yIChzaXplX3QgdGlsZUlu
ZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsK
LSAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07Ci0gICAg
ICAgIGlmICghdGlsZS50ZXh0dXJlKQotICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVy
ZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4m
IHRleHR1cmUgPSB0aWxlLnRleHR1cmU7Ci0gICAgICAgIEludFNpemUgdGlsZVNpemUgPSBlbmNs
b3NpbmdJbnRSZWN0KHRpbGUucmVjdCkuc2l6ZSgpOwotCi0gICAgICAgIGlmICh0aWxlLm5lZWRz
UmVzZXQgfHwgdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSB0aWxlU2l6ZSB8fCAhdGV4dHVyZS0+
aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRleHR1cmUtPnJlc2V0KHRpbGVTaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsK
LSAgICAgICAgICAgIGRpcnR5UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCkp
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1f
YmFja2luZ1N0b3JlID0gY3JlYXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICBGbG9hdFJlY3QgZGly
dHlSZWN0ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgPyBsYXllclJlY3QoKSA6IG1fc3RhdGUubmVl
ZHNEaXNwbGF5UmVjdDsKICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgLy8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2Ug
YnVmZmVyLiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgotICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXpl
KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0
KCk7Ci0gICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFw
cGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGNvbnRleHQtPnNldFRleHRE
cmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgY29udGV4
dC0+dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7Ci0gICAgbGF5ZXIt
PnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGlm
IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUp
Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgaW1hZ2UgPSBpbWFnZUJ1
ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbHNlCi0gICAgLy8gRklY
TUU6IHN1cHBvcnQgRG9udENvcHlCYWNraW5nU3RvcmUgaW4gbm9uLVF0IHBvcnRzIHRoYXQgdXNl
IFRleHR1cmVNYXBwZXIuCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKENvcHlC
YWNraW5nU3RvcmUpOwotI2VuZGlmCi0KLSAgICAvLyBEaXZpZGUgdGhlIGltYWdlIHRvIHRpbGVz
LgotICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxl
cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3du
ZWRUaWxlc1t0aWxlSW5kZXhdOwotICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHRpbGUucmVjdCk7Ci0gICAgICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KGRpcnR5
UmVjdCk7Ci0gICAgICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJnZXRSZWN0OwotCi0gICAg
ICAgIC8vIE5vcm1hbGl6ZSBzb3VyY2VSZWN0IHRvIHRoZSBidWZmZXIncyBjb29yZGluYXRlcy4K
LSAgICAgICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7
Ci0KLSAgICAgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBjb29y
ZGlucWF0ZXMuCi0gICAgICAgIHRhcmdldFJlY3QubW92ZSgtdGlsZS5yZWN0LngoKSwgLXRpbGUu
cmVjdC55KCkpOwotICAgICAgICB0aWxlLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLmdl
dCgpLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpSR0JBRm9ybWF0KTsK
LSAgICB9Ci0KLSAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOwotICAg
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgbGF5ZXIsIEludFJlY3Qo
ZGlydHlSZWN0KSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KCkKIHsKLSAg
ICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgY29tcHV0ZVRy
YW5zZm9ybXNSZWN1cnNpdmUoKTsKIAotICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0
OwotICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gbV90ZXh0dXJlTWFwcGVyOwotICAgIG9wdC50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwotfQot
Ci1GbG9hdFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0Lngo
KSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0LngoKSksCi0gICAgICAgICAgICAgICAgdGFy
Z2V0UmVjdC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFyZ2V0UmVjdC55KCkpLAotICAgICAgICAg
ICAgICAgIHRpbGVSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAgdGlsZVJlY3QuaGVpZ2h0
KCkpOworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBwYWludFJlY3Vyc2l2ZShvcHRpb25zKTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0
YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxD
b250ZW50VHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRp
b25zLm9wYWNpdHk7Ci0gICAgQml0bWFwVGV4dHVyZSogbWFzayA9IG9wdGlvbnMubWFzazsKLSAg
ICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IHRoaXMtPnRhcmdldFJlY3QoKTsKLQogICAgIC8vIFdl
IGFwcGx5IHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtIHRvIGNvbXBlbnNhdGUgZm9yIHBhaW50aW5n
IGludG8gYSBzdXJmYWNlLCBhbmQgdGhlbiBhcHBseSB0aGUgb2Zmc2V0IHNvIHRoYXQgdGhlIHBh
aW50aW5nIGZpdHMgaW4gdGhlIHRhcmdldCByZWN0LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybSA9CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChvcHRpb25zLnRy
YW5zZm9ybSkKICAgICAgICAgICAgIC5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKQog
ICAgICAgICAgICAgLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldC53aWR0aCgpLCBvcHRpb25zLm9m
ZnNldC5oZWlnaHQoKSk7CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBWZWN0
b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlPiB0aWxlc1RvUGFpbnQ7Ci0KLSAgICBpZiAobV9zdGF0
ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpIHsKLSAgICAgICAgLy8g
U29ydCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZhY3RvciBsYXN0LgotICAgICAgICBWZWN0
b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBF
eHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBlbmQgPSBtX2V4dGVybmFsbHlNYW5hZ2Vk
VGlsZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2Vk
VGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmZyb250QnVmZmVy
LnRleHR1cmUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLnNjYWxlID09IG1fc3RhdGUuY29udGVudFNjYWxlKSB7Ci0gICAgICAgICAgICAg
ICAgdGlsZXMuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgdHJhbnNpdGlv
bmFsIGVmZmVjdCBsb29rcyBnb29kIG9ubHkgd2hlbiB0aGVyZSdzIG5vIHRyYW5zcGFyZW5jeSwg
c28gd2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgb3BhY2l0eSBmb3IgdGhlIGxheWVyIGlzIGFib3Zl
IGEgY2VydGFpbiB0aHJlc2hvbGQuCi0gICAgICAgICAgICBpZiAob3BhY2l0eSA+IDAuOTUpCi0g
ICAgICAgICAgICAgICAgdGlsZXMucHJlcGVuZCgmaXQtPnNlY29uZCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSAqdGlsZXNbaV07Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgcmVjdCA9IHRpbGUuZnJvbnRCdWZmZXIudGFyZ2V0UmVjdDsKLSAgICAgICAg
ICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqdGlsZS5mcm9udEJ1ZmZlci50ZXh0dXJlOwot
ICAgICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBy
ZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5Owor
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrID0gb3B0aW9ucy5tYXNrOwogCi0gICAgLy8g
Tm93IHdlIHBhaW50IG93bmVkIHRpbGVzLCBpZiB3ZSdyZSBpbiBPd25lZFRpbGVNb2RlLgotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUgPSBtX293bmVkVGlsZXNbaV0udGV4dHVyZS5nZXQo
KTsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9yVGlsZVJlY3Qo
dGFyZ2V0UmVjdCwgbV9vd25lZFRpbGVzW2ldLnJlY3QpOwotICAgICAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHks
IG1hc2spOwotICAgIH0KKyAgICBpZiAobV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGxheWVy
UmVjdCgpLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2suZ2V0KCkpOwogCi0gICAgaWYgKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRD
b250ZW50Lm1lZGlhKQotICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludFRvVGV4
dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIHRyYW5zZm9ybSwg
b3BhY2l0eSwgbWFzayk7CisgICAgaWYgKG1fY29udGVudHNMYXllcikKKyAgICAgICAgbV9jb250
ZW50c0xheWVyLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1f
c3RhdGUuY29udGVudHNSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2suZ2V0KCkpOwogfQog
CiBpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25z
dCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQpAQCAtMzMyLDcgKzE2OCw3IEBAIEludFJlY3QgVGV4
dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtCiB7CiAgICAgSW50UmVjdCByZWN0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4KS5tdWx0aXBs
eShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKLSAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChs
b2NhbFRyYW5zZm9ybS5tYXBSZWN0KGVudGlyZVJlY3QoKSkpOworICAgIHJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGxvY2FsVHJhbnNmb3JtLm1hcFJlY3QobGF5ZXJSZWN0KCkpKTsKICAgICBpZiAo
IW1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiAhbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
cmVjdC51bml0ZShtX2NoaWxkcmVuW2ldLT5pbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChtYXRyaXgp
KTsKQEAgLTQzMyw3ICsyNjksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vy
c2l2ZShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgIGlmICht
X3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbWFza1RleHR1cmUgPSAwOwogCi0gICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlLmdldCgpKTsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUcmFuc2Zvcm0gPQogICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCiAgICAgICAgICAgICAgICAg
Lm11bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkpCkBAIC00NTAsODkgKzI4Niw2IEBAIFRl
eHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogICAgICAgICBtX3BhcmVudC0+
bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKSk7CiB9CiAK
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLWludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y3Jl
YXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKQotewotICAgIHN0YXRpYyBpbnQgbmV4dElEID0g
MDsKLSAgICBpbnQgaWQgPSArK25leHRJRDsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMu
YWRkKGlkLCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoc2NhbGUpKTsKLSAgICBtX3N0YXRlLmNvbnRl
bnRTY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiBpZDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCkKLXsKLSAgICBtX2V4dGVybmFsbHlNYW5h
Z2VkVGlsZXMucmVtb3ZlKGlkKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cHVyZ2VO
b2RlVGV4dHVyZXNSZWN1cnNpdmUoKQotewotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5j
bGVhcigpOwotCi0gICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZl
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVCYWNrQnVmZmVyVGV4dHVy
ZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJl
KQotewotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBp
dCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKLQotICAgIGlmIChpdCA9PSBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tC
dWZmZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdl
dFJlY3QgPSB0YXJnZXRSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gdGV4dHVy
ZTsKLSAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOwotICAgIHRpbGUuaXNEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZSA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpCi17Ci0gICAgZm9yIChIYXNo
TWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFs
bHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLmlzRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UpCi0gICAgICAgICAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMucmVtb3ZlKGl0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBw
ZXIpOwotCi0gICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9y
IGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmZpbmQoaWQpOwotICAgIGlmIChpdCA9PSBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICB0aWxlLmJhY2tC
dWZmZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdl
dFJlY3QgPSBGbG9hdFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdl
dFJlY3Quc2NhbGUoMS4wIC8gdGlsZS5zY2FsZSk7Ci0KLSAgICBpZiAoIXRpbGUuYmFja0J1ZmZl
ci50ZXh0dXJlKQotICAgICAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IG1fdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlLT5yZXNl
dChzb3VyY2VSZWN0LnNpemUoKSwgZmFsc2UpOwotICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJl
LT51cGRhdGVDb250ZW50cyhkYXRhLCBzb3VyY2VSZWN0KTsKLSAgICB0aWxlLmlzQmFja0J1ZmZl
clVwZGF0ZWQgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVu
dHNCdWZmZXJzKCkKLXsKLSAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6
aXRlcmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgpOwotICAgIGZvciAo
SGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRl
cm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBF
eHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIXRp
bGUuaXNCYWNrQnVmZmVyVXBkYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0
aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFn
ZWRUaWxlQnVmZmVyIHN3YXBCdWZmZXIgPSB0aWxlLmZyb250QnVmZmVyOwotICAgICAgICB0aWxl
LmZyb250QnVmZmVyID0gdGlsZS5iYWNrQnVmZmVyOwotICAgICAgICB0aWxlLmJhY2tCdWZmZXIg
PSBzd2FwQnVmZmVyOwotICAgIH0KLX0KLSNlbmRpZgotCiB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhp
Y3NMYXllciwgaW50IG9wdGlvbnMpCiB7CiAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGUoZ3JhcGhp
Y3NMYXllciwgcm9vdExheWVyKCktPm1fdGV4dHVyZU1hcHBlciwgb3B0aW9ucyk7CkBAIC01NDEs
MTQgKzI5NCwxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQogewogICAgIGlu
dCBjaGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hhbmdlTWFzaygpOwotICAgIGNvbnN0IFRl
eHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSYgcGVuZGluZ0NvbnRlbnQgPSBncmFwaGljc0xh
eWVyLT5wZW5kaW5nQ29udGVudCgpOwotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAg
IHN3YXBDb250ZW50c0J1ZmZlcnMoKTsKLSNlbmRpZgotICAgIGlmIChjaGFuZ2VNYXNrID09IE5v
Q2hhbmdlcyAmJiBncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnMuaXNFbXB0eSgpICYmIHBlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXkpCisKKyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhp
Y3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChj
aGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgeworICAgIGlmIChjaGFuZ2VNYXNrICYgUGFyZW50
Q2hhbmdlKSB7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBuZXdQYXJlbnQgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgaWYgKG5ld1Bh
cmVudCAhPSBtX3BhcmVudCkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBjdXJy
ZW50IGZyb20gY2hpbGQgbGlzdCBmaXJzdC4KQEAgLTU4MCwxNiArMzMwLDcgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiBncmEKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYg
KFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSB3
YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5z
aXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBpZiAod2FudGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVu
ZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAg
d2FudGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0
aCgpLCBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
aWYgKHdhbnRlZFNpemUgIT0gbV9zaXplKQotICAgICAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFy
KCk7Ci0KLSAgICAgICAgbV9zaXplID0gd2FudGVkU2l6ZTsKLSAgICB9CisgICAgbV9zaXplID0g
Z3JhcGhpY3NMYXllci0+c2l6ZSgpOwogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiBNYXNrTGF5ZXJD
aGFuZ2UpIHsKICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkpCkBAIC02MTksMTMgKzM2MCwx
MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmls
aXR5ID0gZ3JhcGhpY3NMYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9zdGF0ZS5j
aGlsZHJlblRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7CiAg
ICAgbV9zdGF0ZS5vcGFjaXR5ID0gZ3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOwotCi0gICAgbV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IHBlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOwot
ICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBwZW5kaW5nQ29udGVudC5pbWFnZTsKLSAgICBt
X2N1cnJlbnRDb250ZW50Lm1lZGlhID0gcGVuZGluZ0NvbnRlbnQubWVkaWE7Ci0gICAgbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8
fCBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7Ci0gICAgaWYgKCFtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0
LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fc3RhdGUubmVl
ZHNEaXNwbGF5ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgfHwgZ3JhcGhpY3NMYXllci0+bmVlZHNE
aXNwbGF5KCk7CisgICAgaWYgKCFtX3N0YXRlLm5lZWRzRGlzcGxheSkKKyAgICAgICAgbV9zdGF0
ZS5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheVJlY3Qo
KSk7CisgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhpY3NMYXllci0+Z2V0Q29udGVudHNMYXll
cih0ZXh0dXJlTWFwcGVyKTsKIAogICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUu
cG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50
KTsKQEAgLTY2Niw2ICs0MDQsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0
aW9uc1JlY3Vyc2l2ZWx5KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRpb25zKQogeworICAgIGlmICghdGV4dHVy
ZU1hcHBlcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgIShv
cHRpb25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKICAgICAgICAgc3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBwZXIpOwogICAgICAgICBncmFwaGljc0xh
eWVyLT5kaWRTeW5jaHJvbml6ZSgpOwpAQCAtNjgzLDEwICs0MjQsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhcGhpYwogICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGUodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNh
TGF5ZXIoKSksIHRleHR1cmVNYXBwZXIpOwogCiAgICAgc3luY0FuaW1hdGlvbnMoKTsKLSAgICBj
b21wdXRlVGlsZXMoKTsKLQotICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICByZW5kZXJD
b250ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5ZXIpOworICAgIHVwZGF0ZUJhY2tpbmdT
dG9yZSh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVyKTsKIAogICAgIGlmICghKG9wdGlvbnMg
JiBUcmF2ZXJzZURlc2NlbmRhbnRzKSkKICAgICAgICAgb3B0aW9ucyA9IENvbXB1dGF0aW9uc09u
bHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IDIzMGM5ZTAuLmE3N2YxNzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQyLDE2ICs0MywxNCBAQCBjbGFzcyBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7
CiBwdWJsaWM6Ci0gICAgQml0bWFwVGV4dHVyZSogc3VyZmFjZTsKLSAgICBCaXRtYXBUZXh0dXJl
KiBtYXNrOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBzdXJmYWNlOworICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiBtYXNrOwogICAgIGZsb2F0IG9wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOwogICAgIEludFNpemUgb2Zmc2V0OwogICAgIFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucygpCi0gICAg
ICAgIDogc3VyZmFjZSgwKQotICAgICAgICAsIG1hc2soMCkKLSAgICAgICAgLCBvcGFjaXR5KDEp
CisgICAgICAgIDogb3BhY2l0eSgxKQogICAgICAgICAsIHRleHR1cmVNYXBwZXIoMCkKICAgICB7
IH0KIH07CkBAIC05Nyw0MiArOTYsMjAgQEAgcHVibGljOgogICAgICAgICBDb21wdXRhdGlvbnNP
bmx5ID0gMgogICAgIH07CiAKLSAgICBlbnVtIFRpbGVPd25lcnNoaXAgewotICAgICAgICBPd25l
ZFRpbGVzLAotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzCi0gICAgfTsKLQotICAgIHR5
cGVkZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVyTm9kZSosIEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7
Ci0KLSAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5k
IGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgotICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1M
Q29udGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1l
ZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OwotICAgIHN0cnVjdCBDb250ZW50
RGF0YSB7Ci0gICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OwotICAgICAgICBib29s
IG5lZWRzRGlzcGxheTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAg
IENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwot
ICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWE7Ci0gICAgICAg
IENvbnRlbnREYXRhKCkKLSAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICAg
ICAgICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICAsIGltYWdl
KDApCi0gICAgICAgICAgICAsIG1lZGlhKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07
Ci0KICAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCiAgICAgICAgIDogbV9wYXJlbnQoMCkKICAgICAg
ICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICAgICAsIG1fY29udGVudHNMYXllcigwKQogICAg
ICAgICAsIG1fb3BhY2l0eSgxKQogICAgICAgICAsIG1fY2VudGVyWigwKQorICAgICAgICAsIG1f
YmFja2luZ1N0b3JlRmFjdG9yeShUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlOjpjcmVhdGUpCiAg
ICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCiAgICAgeyB9CiAKICAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyTm9kZSgpOwogCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmU+IEJhY2tpbmdTdG9yZUZhY3RvcnkoKTsKKwogICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBpbnQgc3luY09wdGlvbnMg
PSAwKTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKiwgVGV4dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwogICAgIHZvaWQg
c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOwpAQCAtMTQ0LDE5ICsxMjEsOSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAg
ICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVyc2hpcCBvd25lcnNoaXApIHsgbV9zdGF0
ZS50aWxlT3duZXJzaGlwID0gb3duZXJzaGlwOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRlbnRzVGls
ZShmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVDb250ZW50c1RpbGUoaW50IGlkKTsKLSAg
ICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCB2b2lkKik7Ci0gICAg
dm9pZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShp
bnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgQml0bWFwVGV4dHVyZSopOwotICAgIHZvaWQgY2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVRpbGVzKCk7Ci0gICAgdm9pZCBwdXJnZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwot
I2VuZGlmCi0gICAgdm9pZCBzZXRJRChpbnQgaWQpIHsgbV9pZCA9IGlkOyB9Ci0gICAgaW50IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotCi0gICAgY29uc3QgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q29udGVudC5tZWRpYTsg
fQorICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlRmFjdG9yeShCYWNraW5nU3RvcmVGYWN0b3J5IGZh
Y3RvcnkpIHsgbV9iYWNraW5nU3RvcmVGYWN0b3J5ID0gZmFjdG9yeTsgfQorICAgIHZvaWQgY2xl
YXJCYWNraW5nU3RvcmUoKSB7IG1fYmFja2luZ1N0b3JlID0gMDsgfQorICAgIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCk7CiAKIHByaXZhdGU6CiAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOwpAQCAtMTc0LDEzICsxNDEsMTMgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25z
dCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKICAgICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIo
VmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7
CiAKLSAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV9vd25lZFRpbGVzLmlz
RW1wdHkoKSA/IDAgOiBtX293bmVkVGlsZXNbMF0udGV4dHVyZS5nZXQoKTsgfQorICAgIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8g
bV9iYWNraW5nU3RvcmUtPnRleHR1cmUoKSA6IDA7IH0KIAogICAgIHZvaWQgcGFpbnRSZWN1cnNp
dmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxm
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFu
ZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBh
aW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0
aW9ucyYpOwotICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NM
YXllciopOworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqLCBHcmFw
aGljc0xheWVyKik7CiAKICAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1Zp
c2libGUoKSBjb25zdDsKQEAgLTE4OCw2MyArMTU1LDI0IEBAIHByaXZhdGU6CiAKICAgICBMYXll
clRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIAotICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVj
dCgpIGNvbnN0CisgICAgaW5saW5lIEZsb2F0UmVjdCBsYXllclJlY3QoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7CisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOwogICAgIH0KIAotICAg
IGlubGluZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAg
IH0KLQotICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRU
eXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5z
aXplKCkgOiBtX3NpemU7Ci0gICAgfQotICAgIHN0cnVjdCBPd25lZFRpbGUgewotICAgICAgICBG
bG9hdFJlY3QgcmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0g
ICAgICAgIGJvb2wgbmVlZHNSZXNldDsKLSAgICB9OwotCi0gICAgVmVjdG9yPE93bmVkVGlsZT4g
bV9vd25lZFRpbGVzOwotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RydWN0
IEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciB7Ci0gICAgICAgIEZsb2F0UmVjdCBzb3VyY2VS
ZWN0OwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+IHRleHR1cmU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdl
ZFRpbGUgewotICAgICAgICBib29sIGlzQmFja0J1ZmZlclVwZGF0ZWQ7Ci0gICAgICAgIGJvb2wg
aXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZTsKLSAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAg
IEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBmcm9udEJ1ZmZlcjsKLSAgICAgICAgRXh0ZXJu
YWxseU1hbmFnZWRUaWxlQnVmZmVyIGJhY2tCdWZmZXI7Ci0KLSAgICAgICAgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlKGZsb2F0IHNjYWxlID0gMS4wKQotICAgICAgICAgICAgOiBpc0JhY2tCdWZmZXJV
cGRhdGVkKGZhbHNlKQotICAgICAgICAgICAgLCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGZh
bHNlKQotICAgICAgICAgICAgLCBzY2FsZShzY2FsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+IG1fZXh0ZXJu
YWxseU1hbmFnZWRUaWxlczsKLSNlbmRpZgotCi0gICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29u
dGVudDsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZUJh
Y2tpbmdTdG9yZSgpIHsgcmV0dXJuICgqbV9iYWNraW5nU3RvcmVGYWN0b3J5KSgpOyB9CiAKICAg
ICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBtX3BhcmVudDsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwor
ICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7CiAgICAgRmxv
YXRTaXplIG1fc2l6ZTsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgZmxvYXQgbV9jZW50ZXJa
OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgaW50IG1faWQ7CisKKyAgICBCYWNraW5nU3RvcmVG
YWN0b3J5KiBtX2JhY2tpbmdTdG9yZUZhY3Rvcnk7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAg
ICAgICBGbG9hdFBvaW50IHBvczsKQEAgLTI1NCw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQg
b3BhY2l0eTsKICAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRS
ZWN0IG5lZWRzRGlzcGxheVJlY3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50
OwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOwogICAgICAgICBUZXh0dXJl
TWFwcGVyTm9kZSogcmVwbGljYUxheWVyOwpAQCAtMjYzLDEzICsxOTIsOSBAQCBwcml2YXRlOgog
ICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKICAgICAgICAgYm9vbCBiYWNrZmFjZVZp
c2liaWxpdHkgOiAxOwogICAgICAgICBib29sIHZpc2libGUgOiAxOwotICAgICAgICBib29sIG5l
ZWRzUmVzZXQ6IDE7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OiAxOwogICAgICAgICBib29s
IG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAg
ICAgIGZsb2F0IGNvbnRlbnRTY2FsZTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAg
ICAgICAgVGlsZU93bmVyc2hpcCB0aWxlT3duZXJzaGlwOwotI2VuZGlmCiAgICAgICAgIFN0YXRl
KCkKICAgICAgICAgICAgIDogb3BhY2l0eSgxLmYpCiAgICAgICAgICAgICAsIG1hc2tMYXllcigw
KQpAQCAtMjgwLDEzICsyMDUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBjb250ZW50c09w
YXF1ZShmYWxzZSkKICAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAg
ICAgICAgICAgLCB2aXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2Up
CisgICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQogICAgICAgICAgICAgLCBtaWdodEhh
dmVPdmVybGFwcyhmYWxzZSkKICAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQotICAg
ICAgICAgICAgLCBjb250ZW50U2NhbGUoMS4wZikKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgICAgICwgdGlsZU93bmVyc2hpcChPd25lZFRpbGVzKQotI2VuZGlmCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oCmluZGV4IDFiMjkyOTAuLmM2OWMxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzAsNyArMjksOCBAQCBjbGFzcyBCaXRtYXBUZXh0
dXJlOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVy
ZSogbWFzayA9IDApIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9h
dCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzd2FwQnVmZmVycygpIHsgfQogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNTNlOTU1
Li5mNTBjNWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTItMDItMDkgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1Rl
eG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGluIFRleHR1cmVNYXBwZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA1CisKKyAgICAg
ICAgTW92ZSB0aGUgYmFja2luZy1zdG9yZSBjb2RlIHRvIExheWVyVHJlZUJhY2tpbmdTdG9yZSwg
aW1wbGVtZW50aW5nIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBpbiBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLgorICAgICAgICBXZSBzYXZlIHRoZSBkb3VibGUtYnVmZmVyZWQgdGls
ZSBpbiB0aGUgYmFja2luZy1zdG9yZSwgYW5kIHRoZW4gY29udmVydCB0aGVtIHRvIHJlZ3VsYXIK
KyAgICAgICAgdGlsZXMgaW4gdXBkYXRlQ29udGVudHMsIGJhc2VkIG9uIHRoZSBvcmRlciBvZiBw
YWludGluZy4KKyAgICAgICAgVXNlIFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UgZm9yIGlt
YWdlcyBpbnN0ZWFkIG9mIHNhdmluZyBvdXIgb3duIGNvbXBvc2l0ZWQgaW1hZ2UKKyAgICAgICAg
cmVnaXN0cnkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4uCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0
UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MucHJvOgorCiAy
MDEyLTAyLTA3ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XSBGZXRjaCB0aGUgdmlzaWJsZSByZWN0IGZyb20gTGF5ZXJUcmVlSG9z
dCBpbnN0ZWFkIG9mIGtlZXBpbmcgYSBjb3B5IGluIGVhY2ggbGF5ZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCBjZWRlNGVhLi5mYWU2NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI1Myw2ICsyNTMsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIFwK
ICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9X
ZWJVSUNsaWVudC5oIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmggXApAQCAtNTgxLDYgKzU4Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xh
eWVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGM5NzE4Ny4uNjM2NWM3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApA
QCAtMzAsMTUgKzMwLDE3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJ
bWFnZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllckJhY2tp
bmdTdG9yZTsKIGNsYXNzIFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsK
IApAQCAtOTgsMTIgKzEwMCw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkludFBvaW50LCBSZWZQdHI8V2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZT4gPiBUaWxlZEltYWdlOwotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjpOb2RlUmVjdE1hcCBtX25vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7Ci0gICAgSGFz
aE1hcDxpbnQsIGludD4gbV90aWxlVG9Ob2RlVGlsZTsKLSAgICBpbnQgcmVtb3RlVGlsZUlEVG9O
b2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0OwotICAgIEhhc2hNYXA8aW50NjRfdCwgVGlsZWRJ
bWFnZT4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0KICAgICB2b2lkIHNjaGVkdWxlV2Vi
Vmlld1VwZGF0ZSgpOwogICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOwogICAgIHZvaWQg
ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CkBAIC0xMTgsMTEgKzExNCwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVy
KCk7CiAgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKLQorICAgIFBhc3NSZWZQdHI8
TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKICNlbmRpZgog
CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIFZl
Y3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworICAgIEhhc2hNYXA8aW50NjRfdCwg
UmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+ID4gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXM7CiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIGRpZEZpcmVW
aWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4qKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwCmluZGV4IGM3Y2E3ZjEuLjVlOWMwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMjIsMTkgKzIyLDIw
IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIK
KyNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJOb2RlLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNp
bmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJ0
ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oIgogI2luY2x1ZGUgPFFEYXRlVGltZT4KICNpbmNsdWRlIDxjYWlyby9PcGVuR0xTaGltcy5o
PgogCkBAIC0xNDksOCArMTUwLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKIHsKICAgICBHcmFw
aGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlz
KTsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobmV3
TGF5ZXIpOwotICAgIG5vZGUtPnNldElEKGxheWVySUQpOwotICAgIG5vZGUtPnNldFRpbGVPd25l
cnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpOworICAgIG5v
ZGUtPnNldEJhY2tpbmdTdG9yZUZhY3RvcnkoTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSk7CiAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKIH0KIApAQCAtMjM1LDIxICsyMzUsMTMgQEAg
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKICAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKLWludCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAotewotICAgIEhhc2hN
YXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9kZVRpbGUuZmluZCh0
aWxlSUQpOwotICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8p
CiB7CiAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKICAgICBlbnN1cmVMYXllcihp
ZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGJvb2wgbmVlZHNUb1VwZGF0
ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgbGF5ZXJJbmZvLmNvbnRl
bnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgYm9vbCBuZWVkc1RvVXBkYXRl
SW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAobGF5ZXJJbmZvLmNvbnRl
bnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpOwogCiAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOwogCkBAIC0z
NDgsNjkgKzM0MCwzMyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQo
V2ViTGF5ZXJJRCBsYXllcklEKQogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7CiB9
CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCitQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3Jl
PiBMYXllclRyZWVIb3N0UHJveHk6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQogewot
ICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGVuc3VyZUxheWVy
KGlkKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bGF5ZXJCeUlEKGlkKSk7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KG5vZGUtPmJhY2tpbmdTdG9yZSgp
LmdldCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0
b3JlOworfQogCi0gICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUo
c2NhbGUpOwotICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7Cit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+
Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQogewotICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJ
RCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IG5vZGVUaWxl
SUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAoIW5vZGVUaWxl
SUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2Rl
VGlsZUlEKTsKLSAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworICAgIGdldEJh
Y2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwogfQogCiB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFNo
YXJlYWJsZUJpdG1hcCogYml0bWFwKQogewotICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQo
bGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IG5v
ZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAoIW5v
ZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIo
bV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBRSW1hZ2UgaW1hZ2UgPSBiaXRtYXAtPmNyZWF0
ZVFJbWFnZSgpOwotICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIobm9kZVRpbGVJ
RCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2UuY29uc3RCaXRzKCkpOworICAgIGdldEJh
Y2tpbmdTdG9yZShsYXllcklEKS0+dXBkYXRlVGlsZSh0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdl
dFJlY3QsIGJpdG1hcCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFn
ZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKQogewotICAgIFRpbGVk
SW1hZ2UgdGlsZWRJbWFnZTsKLSAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAx
MDI0OwotICAgIFFJbWFnZSBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgYm9v
bCBpbWFnZUhhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7Ci0gICAgSW50UmVjdCBp
bWFnZVJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0KCkpOwotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaW1hZ2UuaGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lvbikgewotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlLndpZHRoKCk7IHggKz0gVGlsZURpbWVuc2lv
bikgewotICAgICAgICAgICAgUUltYWdlIHN1YkltYWdlOwotICAgICAgICAgICAgSW50UmVjdCBy
ZWN0KHgsIHksIFRpbGVEaW1lbnNpb24sIFRpbGVEaW1lbnNpb24pOwotICAgICAgICAgICAgcmVj
dC5pbnRlcnNlY3QoaW1hZ2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChRU2l6ZShyZWN0LnNpemUo
KSkgPT0gaW1hZ2Uuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2U7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZS5jb3B5KHJl
Y3QpOwotICAgICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1
cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHJl
Y3Quc2l6ZSgpLCAhaW1hZ2VIYXNBbHBoYSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVD
b250ZW50cyhzdWJJbWFnZS5jb25zdEJpdHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCBy
ZWN0LnNpemUoKSkpOwotICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigp
LCB0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VzLnNldChpbWFnZUlELCB0aWxlZEltYWdlKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5zZXQoaW1hZ2VJRCwgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRl
KGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgbV90ZXh0dXJlTWFwcGVyLmdldCgpKSk7CiB9
CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlE
KQpAQCAtNDIwLDMzICszNzYsOSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUlt
YWdlKGludDY0X3QgaW1hZ2VJRCkKIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmFzc2lnbklt
YWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQogewotICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllcik7Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWltYWdlSUQpIHsKLSAg
ICAgICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+c2l6ZSgpKTsK
LSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3QoKSk7Ci0gICAg
ZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8gc2l6ZS53aWR0
aCgpOwotICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0LmhlaWdodCgpIC8g
c2l6ZS5oZWlnaHQoKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+OjppdGVyYXRv
ciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgaWYg
KGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBpdC0+c2Vjb25k
LmVuZCgpOwotICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0gaXQtPnNlY29u
ZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkgewotICAgICAg
ICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3QpLCBGbG9hdFNp
emUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVj
dChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1JlY3QueCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZlcnRpY2FsRmFj
dG9yICsgY29udGVudHNSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsKLSAgICAgICAg
aW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOwotICAgICAgICBu
b2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShu
ZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJdC0+c2Vjb25k
LmdldCgpKTsKLSAgICB9CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBl
ckNvbXBvc2l0ZWRJbWFnZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vjb25k
LmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2Vz
KCkKQEAgLTYyOSwxMiArNTYxLDEwIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdM
UmVzb3VyY2VzKCkKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUocm9vdExheWVyKCkpOwogCiAgICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUtPnB1cmdl
Tm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7CisgICAgICAgIG5vZGUtPmNsZWFyQmFja2luZ1N0b3Jl
KCk7CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwotCiAgICAgbV90
ZXh0dXJlTWFwcGVyLmNsZWFyKCk7Ci0KICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9y
ZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="128419"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126638</attachid>
            <date>2012-02-11 09:26:36 -0800</date>
            <delta_ts>2012-02-14 01:10:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>79887</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDMzNGM4Li4zMTBjMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBubyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hyb25pemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpnZXRDb250
ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAgICAoVGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6YmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1
cGRhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZh
Y2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vy
c2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnM6OlRleHR1cmVNYXBw
ZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRl
eHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6Y3JlYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oOgor
ICAgICAgICAoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI6OnN3YXBCdWZmZXJzKToKKwogMjAxMi0wMi0wOSAg
QWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAg
ICBFbnN1cmUgdGltZXJzIGFuZCBvdGhlciBhY3RpdmUgRE9NIG9iamVjdHMgZG8gbm90IGZpcmUg
aW4gc3VzcGVuZGVkIGRvY3VtZW50cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGMwOGNiMjUuLjU5ODZmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTcz
NSw2ICs1NzM1LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1h
dGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJDb21wb3NpdGVkSW1hZ2UuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKICAgICAgICAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCkBAIC01NzU3LDYgKzU3NjEsMTAgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDc1OGRk
NGIuLjQxOWY1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzk0NCw2ICszOTQ0LDggQEAgY29udGFpbnMo
Q09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVy
VHJhbnNmb3JtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtMzk1Miw2ICszOTU0
LDggQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjNTlhY2RjLi4wYzZkNzE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0zNTc2LDYgKzM1NzYsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXgg
MDhmYTBhZC4uYzZmZjAzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDYsNiArNDYsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZW5kUGFpbnRpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOworICAgIHZpcnR1
YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7
IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0OwogICAgIHN0YXRpYyBQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRl
eHR1cmVNYXBwZXJHTCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNjZiYzc2ZS4uMmJi
NDZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgog
CiAgICAgUUdMV2lkZ2V0KiBnZXRWaWV3cG9ydEdMV2lkZ2V0KCk7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBU
ZXh0dXJlKiBtYXNrKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spOwogI2Vu
ZGlmCiAKICAgICB2b2lkIHBhaW50KFFQYWludGVyKiwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhp
Y3NJdGVtKiwgUVdpZGdldCopOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgcXVp
bnQzMiBzd2FwQmdyVG9SZ2IocXVpbnQzMiBwaXhlbCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykgY29uc3QK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRl
eHR1cmUqIG1hc2spCiB7CiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3Jl
Q29udGV4dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApp
bmRleCBiNTIxZDFhLi45ZTE1ODFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDggQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWUKICAg
ICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2RlKGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygwKQorICAgICwgbV9uZWVkc0Rp
c3BsYXkoZmFsc2UpCisgICAgLCBtX21lZGlhKDApCiAgICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRU
aW1lcih0aGlzLCAmR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0ZWRU
aW1lckZpcmVkKQogewogfQpAQCAtNDQsOCArNDYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpkaWRTeW5jaHJvbml6ZSgpCiB7CiAgICAgbV9zeW5jUXVldWVkID0gZmFsc2U7
CiAgICAgbV9jaGFuZ2VNYXNrID0gMDsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eSA9IGZhbHNlOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJl
Y3QoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fbmVlZHNEaXNwbGF5UmVj
dCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC02MSw3ICs2Myw3IEBAIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKQogKi8KIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9wZW5k
aW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1
ZTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwog
fQogCkBAIC02OSw4ICs3MSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheSgpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewotICAgIGlmICghbm9kZSgpLT5tZWRpYSgpKQotICAg
ICAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7CisgICAgaWYgKG1faW1h
Z2UpCisgICAgICAgIHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdlLmdldCgpKTsKICAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwogfQogCkBAIC03OCw5
ICs4MCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocmVj
dCk7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJlY3QpOwogICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTEyOCw3ICsxMzAs
NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEFib3ZlKEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5
ZXIqIHNpYmxpbmcpCiB7Ci0KICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVy
LCBzaWJsaW5nKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVu
Q2hhbmdlKTsKIH0KQEAgLTI1OSwyOCArMjYwLDYgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCiAKIC8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09IG1fcGVu
ZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5k
aW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsKLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRCYWNrZ3JvdW5kQ29sb3IodmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKLX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCi0qLwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6Y2xlYXJCYWNrZ3Jv
dW5kQ29sb3IoKQotewotICAgIGlmICghbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IgPSBDb2xvcigpOwotICAgIEdyYXBoaWNzTGF5ZXI6OmNsZWFyQmFja2dyb3VuZENv
bG9yKCk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCiB2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQpAQCAtMzE5LDIyICsyOTgsMzMg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmIHZhbHVlKQogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29u
dGVudHNSZWN0Q2hhbmdlKTsKIH0KIAorVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpnZXRDb250ZW50c0xheWVyKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIpCit7CisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBudWxsIG1faW1hZ2UsIHRo
aXMgd291bGQgcmVzZXQgbV9jb21wb3NpdGVkSW1hZ2UuCisgICAgbV9jb21wb3NpdGVkSW1hZ2Ug
PSBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlOjpnZXQobV9pbWFnZS5nZXQoKSwgdGV4dHVy
ZU1hcHBlcik7CisgICAgbV9jb250ZW50c0xheWVyID0gbV9tZWRpYSA/IG1fbWVkaWEgOiBtX2Nv
bXBvc2l0ZWRJbWFnZS5nZXQoKTsKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyOworfQorCiAv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogeworICAgIGlmIChpbWFn
ZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbWFnZSA9IGltYWdlOworICAg
IG1fY29udGVudHNMYXllciA9IDA7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDb250ZW50Q2hhbmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gaW1h
Z2UgPyBUZXh0dXJlTWFwcGVyTm9kZTo6RGlyZWN0SW1hZ2VDb250ZW50VHlwZSA6IFRleHR1cmVN
YXBwZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5pbWFnZSA9
IGltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWEpCiB7CisgICAgbV9pbWFnZSA9IDA7Cisg
ICAgbV9tZWRpYSA9IG1lZGlhOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9NZWRp
YShtZWRpYSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hh
bmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gbWVkaWEgPyBUZXh0dXJl
TWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJOb2RlOjpIVE1MQ29u
dGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IG1lZGlhOworICAgIG1fY29u
dGVudHNMYXllciA9IG1lZGlhOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAg
LTM1MSwxMyArMzQxLDYgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0Nv
bXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JikKICAgICBtX25vZGUtPnN5bmNDb21wb3Np
dGluZ1N0YXRlKHRoaXMsIFRleHR1cmVNYXBwZXJOb2RlOjpUcmF2ZXJzZURlc2NlbmRhbnRzKTsK
IH0KIAotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwotUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBjb25zdF9jYXN0PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKj4obm9kZSgpLT5tZWRp
YSgpKTsKLX0KLQogYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBk
b3VibGUgdGltZU9mZnNldCkKIHsKICAgICBBU1NFUlQoIWtleWZyYW1lc05hbWUuaXNFbXB0eSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggMTcyZmRkYS4u
ODYwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckNvbXBvc2l0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAK
ICNpZiBFTkFCTEUoV0VCR0wpCkBAIC02NCw4ICs2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NU
b0JvdW5kcyhib29sIGIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBi
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzT3BhcXVlKGJvb2wgYik7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIGIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpOwpAQCAtNzcsMTAgKzc2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKTsKLSAgICBpbmxpbmUgVGV4dHVy
ZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVu
ZGluZ0NvbnRlbnQ7IH0KICAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVy
biBtX2NoYW5nZU1hc2s7IH0KICAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTg5LDEy
ICs4NywyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmKTsKIAogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlLmdldCgpOyB9CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGdldENv
bnRlbnRzTGF5ZXIoVGV4dHVyZU1hcHBlciopOworICAgIGJvb2wgbmVlZHNEaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0Rpc3BsYXk7IH0KKyAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJl
Y3QoKSBjb25zdCB7IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7
IH0KIAogcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKKyAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gbV9jb21wb3NpdGVkSW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAg
IGludCBtX2NoYW5nZU1hc2s7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1f
cGVuZGluZ0NvbnRlbnQ7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKKyAgICBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbV9jb250ZW50c0xheWVyOworICAgIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBtX21lZGlhOworICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7CiAg
ICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHZvaWQgYW5pbWF0
aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7
CiAgICAgVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+IG1fYW5pbWF0aW9uU3RhcnRl
ZFRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4IDVlNTI4ZDQuLjU4ZTRmNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlci5jcHAKQEAgLTczLDcgKzczLDYgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyOjphY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNpemUmIHMKICAg
ICByZXR1cm4gc2VsZWN0ZWRUZXh0dXJlOwogfQogCi0KIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
cj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBp
ZiAobW9kZSA9PSBTb2Z0d2FyZU1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBmMjVjZTBiLi5mZjUx
MzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTEwNiw2ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRp
bmcoKSB7IH0KIAorICAgIHZpcnR1YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7IH0KKwogICAgIC8vIEEgc3VyZmFjZSBp
cyByZWxlYXNlZCBpbXBsaWNpdGx5IHdoZW4gZGVyZWZlcmVuY2VkLgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhY3F1aXJlVGV4dHVyZUZyb21Qb29sKGNvbnN0IEludFNp
emUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTM4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KQoreworICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9y
ZWN0KTsKKyAgICB0YXJnZXRSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOworICAgIGlmICh0YXJn
ZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IHRhcmdldFJlY3Q7CisKKyAgICAvLyBOb3JtYWxpemUgc291cmNlUmVjdCB0byB0aGUgYnVm
ZmVyJ3MgY29vcmRpbmF0ZXMuCisgICAgc291cmNlUmVjdC5tb3ZlKC1kaXJ0eVJlY3QueCgpLCAt
ZGlydHlSZWN0LnkoKSk7CisKKyAgICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4
dHVyZSdzIGNvb3JkaW5hdGVzLgorICAgIHRhcmdldFJlY3QubW92ZSgtbV9yZWN0LngoKSwgLW1f
cmVjdC55KCkpOworICAgIGlmICghbV90ZXh0dXJlKSB7CisgICAgICAgIG1fdGV4dHVyZSA9IHRl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0
YXJnZXRSZWN0LnNpemUoKSwgLyogb3BhcXVlID0gKi8gZmFsc2UpOworICAgIH0KKworICAgIG1f
dGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UsIHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIEJp
dG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjpw
YWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQorewor
ICAgIHRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlKCkuZ2V0KCksIHJlY3QoKSwg
dHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsK
KyAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVj
dFRvUmVjdChyZWN0KCksIHRhcmdldFJlY3QpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fdGlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGlsZXNbaV0ucGFpbnQodGV4dHVyZU1h
cHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZChj
b25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIGlm
IChzaXplID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaXplID0gc2l6ZTsK
KworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVSZWN0c1RvQWRkOworICAgIFZlY3RvcjxpbnQ+
IHRpbGVJbmRpY2VzVG9SZW1vdmU7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxlRXJhc2VUaHJl
c2hvbGQgPSA2OworCisgICAgLy8gVGhpcyBtZXRob2QgcmVjeWNsZXMgdGlsZXMuIFdlIGNoZWNr
IHdoaWNoIHRpbGVzIHdlIG5lZWQgdG8gYWRkLCB3aGljaCB0byByZW1vdmUsIGFuZCB1c2UgYXMg
bWFueQorICAgIC8vIHJlbW92YWJsZSB0aWxlcyBhcyByZXBsYWNlbWVudCBmb3IgbmV3IHRpbGVz
IHdoZW4gcG9zc2libGUuCisgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQo
KTsgeSArPSB0aWxlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBmb3IgKGZsb2F0IHggPSAwOyB4
IDwgbV9zaXplLndpZHRoKCk7IHggKz0gdGlsZVNpemUud2lkdGgoKSkgeworICAgICAgICAgICAg
RmxvYXRSZWN0IHRpbGVSZWN0KHgsIHksIHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChyZWN0KCkpOworICAgICAgICAg
ICAgdGlsZVJlY3RzVG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENoZWNrIHdoaWNoIHRpbGVzIG5lZWQgdG8gYmUgcmVtb3ZlZCwgYW5kIHdoaWNoIGFs
cmVhZHkgZXhpc3QuCisgICAgZm9yIChpbnQgaSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3QoKTsK
KyAgICAgICAgYm9vbCBleGlzdHNBbHJlYWR5ID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQg
aiA9IHRpbGVSZWN0c1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAg
ICBGbG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVSZWN0c1RvQWRkW2pdOworICAgICAgICAgICAgaWYg
KG9sZFRpbGUgIT0gbmV3VGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgLy8gQSB0aWxlIHRoYXQgd2Ugd2FudCB0byBhZGQgYWxyZWFkeSBleGlzdHMsIG5vIG5l
ZWQgdG8gYWRkIG9yIHJlbW92ZSBpdC4KKyAgICAgICAgICAgIGV4aXN0c0FscmVhZHkgPSB0cnVl
OworICAgICAgICAgICAgdGlsZVJlY3RzVG9BZGQucmVtb3ZlKGopOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHRpbGUgaXMgbm90IG5lZWRlZC4KKyAg
ICAgICAgaWYgKCFleGlzdHNBbHJlYWR5KQorICAgICAgICAgICAgdGlsZUluZGljZXNUb1JlbW92
ZS5hcHBlbmQoaSk7CisgICAgfQorCisgICAgLy8gUmVjeWNsZSByZW1vdmFibGUgdGlsZXMgdG8g
YmUgdXNlZCBmb3IgbmV3bHkgcmVxdWVzdGVkIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGlsZVJlY3RzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aWxlSW5k
aWNlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gV2UgcmVjeWNsZSBhbiBl
eGlzdGluZyB0aWxlIGZvciB1c2FnZSB3aXRoIGEgbmV3IHRpbGUgcmVjdC4KKyAgICAgICAgICAg
IFRleHR1cmVNYXBwZXJUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlSW5kaWNlc1RvUmVtb3ZlLmxh
c3QoKV07CisgICAgICAgICAgICB0aWxlSW5kaWNlc1RvUmVtb3ZlLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIHRpbGUuc2V0UmVjdCh0aWxlUmVjdHNUb0FkZFtpXSk7CisgICAgICAgICAgICBp
ZiAodGlsZS50ZXh0dXJlKCkpCisgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlKCktPnJlc2V0
KGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KCkpLnNpemUoKSwgZmFsc2UpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtX3RpbGVzLmFwcGVuZChUZXh0dXJl
TWFwcGVyVGlsZSh0aWxlUmVjdHNUb0FkZFtpXSkpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB1
bm5lY2Vzc2FyeSB0aWxlcywgaWYgdGhleSB3ZXJlbid0IHJlY3ljbGVkLgorICAgIC8vIFdlIHVz
ZSBhIHRocmVzaG9sZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlL2Rlc3Ryb3kgdGlsZXMg
dG9vIGVhZ2VybHkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlSW5kaWNlc1RvUmVt
b3ZlLnNpemUoKSAmJiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQor
ICAgICAgICBtX3RpbGVzLnJlbW92ZSh0aWxlSW5kaWNlc1RvUmVtb3ZlW2ldKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiB0b3Rh
bFNpemUsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBjcmVhdGVPckRlc3Ryb3lU
aWxlc0lmTmVlZGVkKHRvdGFsU2l6ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX3RpbGVzW2ldLnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBkaXJ0eVJl
Y3QpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3RpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0
ZXh0dXJlID0gbV90aWxlc1tpXS50ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4oKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5NjBlZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZV9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIsIHB1YmxpYyBSZWZDb3VudGVk
PFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKSA9IDA7
CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSgpIHsgfQorfTsKKworY2xh
c3MgVGV4dHVyZU1hcHBlclRpbGUgeworcHVibGljOgorICAgIGlubGluZSBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KKyAgICBp
bmxpbmUgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBpbmxp
bmUgdm9pZCBzZXRUZXh0dXJlKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpIHsgbV90ZXh0dXJlID0g
dGV4dHVyZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KSB7IG1fcmVjdCA9IHJlY3Q7IH0KKworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1h
cHBlciosIEltYWdlKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChU
ZXh0dXJlTWFwcGVyKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFw
VGV4dHVyZSopOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJUaWxlKCkgeyB9CisKKyAgICBU
ZXh0dXJlTWFwcGVyVGlsZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gbV90ZXh0dXJlOworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBUZXh0dXJl
TWFwcGVyVGlsZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZSB7CitwdWJsaWM6CisgICAgdm9pZCB1cGRhdGVDb250ZW50c0Zyb21MYXllcihUZXh0dXJlTWFw
cGVyKiwgR3JhcGhpY3NMYXllciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQgdXBk
YXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgSW50UmVjdCYpOworICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUpOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUoKSB7IH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29uc3QgRmxvYXRTaXplJiBi
YWNraW5nU3RvcmVTaXplLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CisKKyAgICBWZWN0b3I8
VGV4dHVyZU1hcHBlclRpbGU+IG1fdGlsZXM7CisgICAgRmxvYXRTaXplIG1fc2l6ZTsKK307CisK
K30KKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yNjYyNTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuY3BwCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFn
ZS5oIgorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZSo+IENvbXBvc2l0ZWRJ
bWFnZU1hcDsKK3N0YXRpYyBDb21wb3NpdGVkSW1hZ2VNYXAmIGNvbXBvc2l0ZWRJbWFnZU1hcCgp
Cit7CisgICAgc3RhdGljIENvbXBvc2l0ZWRJbWFnZU1hcCBzX2NvbXBvc2l0ZWRJbWFnZU1hcDsK
KyAgICByZXR1cm4gc19jb21wb3NpdGVkSW1hZ2VNYXA7Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdl
dFVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICByZXR1
cm4gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPmNhY2hlS2V5KCk7CisjZW5k
aWYKKyAgICByZXR1cm4gaW50NjRfdChpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSk7Cit9CisKK1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6On5UZXh0dXJlTWFwcGVyQ29t
cG9zaXRlZEltYWdlKCkKK3sKKyAgICBjb21wb3NpdGVkSW1hZ2VNYXAoKS5yZW1vdmUobV91aWQp
OworfQorCitUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlOjpUZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlKEltYWdlKiBpbWFnZSwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgaW50
NjRfdCB1aWQpCisgICAgOiBtX3VpZCh1aWQpCit7CisgICAgQVNTRVJUKHRleHR1cmVNYXBwZXIp
OworICAgIEFTU0VSVChpbWFnZSk7CisgICAgdXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwg
aW1hZ2UsIGltYWdlLT5zaXplKCksIGltYWdlLT5yZWN0KCkpOworCisgICAgaWYgKCF1aWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHJlbW92ZSB0aGUgbWFwIGVudHJ5IHdoZW4gYWxs
IG90aGVyIHJlZmVyZW5jZXMgYXJlIGdvbmUsIHNvIHRoZSByZWZlcmVuY2UgaGFzIHRvIGJlIHdl
YWsuCisgICAgY29tcG9zaXRlZEltYWdlTWFwKCkuc2V0KG1fdWlkLCB0aGlzKTsKK30KKworUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlPiBUZXh0dXJlTWFwcGVyQ29tcG9z
aXRlZEltYWdlOjpjcmVhdGUoSW1hZ2UqIGltYWdlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyLCBpbnQ2NF90IHVpZCkKK3sKKyAgICBpZiAoIXVpZCkKKyAgICAgICAgdWlkID0gZ2V0VWlk
Rm9ySW1hZ2UoaW1hZ2UpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckNv
bXBvc2l0ZWRJbWFnZShpbWFnZSwgdGV4dHVyZU1hcHBlciwgdWlkKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZT4gVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJ
bWFnZTo6Z2V0KEltYWdlKiBpbWFnZSwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
Q29tcG9zaXRlZEltYWdlPigpOworICAgIGludDY0X3QgdWlkID0gZ2V0VWlkRm9ySW1hZ2UoaW1h
Z2UpOworICAgIENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBjb21wb3NpdGVkSW1h
Z2VNYXAoKS5maW5kKHVpZCk7CisgICAgaWYgKGl0ID09IGNvbXBvc2l0ZWRJbWFnZU1hcCgpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlKGltYWdlLCB0ZXh0dXJlTWFwcGVyLCB1aWQpOwor
ICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJD
b21wb3NpdGVkSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJm
YzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UuaApAQCAtMCwwICsxLDM5IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFw
cGVyQ29tcG9zaXRlZEltYWdlX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFn
ZV9oCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+IGdldChJbWFnZSosIFRleHR1
cmVNYXBwZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRl
ZEltYWdlPiBjcmVhdGUoSW1hZ2UqLCBUZXh0dXJlTWFwcGVyKiwgaW50NjRfdCB1aWQgPSAwKTsK
KyAgICB+VGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZSgpOworCitwcml2YXRlOgorICAgIFRl
eHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UoSW1hZ2UqLCBUZXh0dXJlTWFwcGVyKiwgaW50NjRf
dCk7CisgICAgaW50NjRfdCBtX3VpZDsKK307CisKK30KKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVy
Q29tcG9zaXRlZEltYWdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IDQ1Yjk0YmQu
LjAxY2RmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtMjAsMTYgKzIwLDE0IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKIAor
I2luY2x1ZGUgInN0ZGlvLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCi1uYW1lc3BhY2UgewotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsKLX0KLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFw
aGljc0xheWVyKiBsYXllcikKQEAgLTUxLDYgKzQ5LDE2IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogICAg
IG1fdHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1hdHJpeCk7CiB9CiAKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpCit7CisgICAgbV9iYWNr
aW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJl
bltpXS0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CisgICAgaWYgKG1fc3RhdGUubWFz
a0xheWVyKQorICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVj
dXJzaXZlKCk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1z
UmVjdXJzaXZlKCkKIHsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRlLm1hc2tz
VG9Cb3VuZHMpCkBAIC04MSwxMDAgKzg5LDI3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCkKICAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRy
ZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
Y29tcHV0ZVRpbGVzKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwZGF0ZUJhY2tpbmdTdG9y
ZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsK
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJz
aGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCisgICAgaWYgKCFsYXllciB8fCAhdGV4dHVy
ZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgaWYgKG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmICFtX3N0YXRlLmRyYXdzQ29udGVu
dCkgewotICAgICAgICBtX293bmVkVGlsZXMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlc1RvQWRkOwotICAgIFZlY3RvcjxpbnQ+IHRp
bGVzVG9SZW1vdmU7Ci0gICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVzaG9sZCA9IDY7Ci0gICAg
RmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOwotICAgIEZsb2F0UmVjdCBjb250ZW50UmVj
dCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgZm9yIChmbG9hdCB5
ID0gMDsgeSA8IGNvbnRlbnRSZWN0LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0g
ICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4ICs9IGdU
aWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgZ1Rp
bGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVy
c2VjdChjb250ZW50UmVjdCk7Ci0gICAgICAgICAgICB0aWxlc1RvQWRkLmFwcGVuZCh0aWxlUmVj
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gbV9vd25lZFRpbGVzLnNp
emUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UmVjdCBvbGRUaWxl
ID0gbV9vd25lZFRpbGVzW2ldLnJlY3Q7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKIAot
ICAgICAgICBmb3IgKGludCBqID0gdGlsZXNUb0FkZC5zaXplKCkgLSAxOyBqID49IDA7IC0taikg
ewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0IG5ld1RpbGUgPSB0aWxlc1RvQWRkW2pdOwot
ICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0gbmV3VGlsZSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgdGlsZXNUb0Fk
ZC5yZW1vdmUoaik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghZm91bmQpCi0gICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZChpKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCF0aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgT3duZWRU
aWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVzVG9SZW1vdmVbMF1dOwotICAgICAgICAgICAg
dGlsZXNUb1JlbW92ZS5yZW1vdmUoMCk7Ci0gICAgICAgICAgICB0aWxlLnJlY3QgPSB0aWxlc1Rv
QWRkW2ldOwotICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgT3duZWRUaWxlIHRpbGU7Ci0gICAgICAg
IHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Ci0gICAgICAgIHRpbGUubmVlZHNSZXNldCA9IHRy
dWU7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5hcHBlbmQodGlsZSk7Ci0gICAgfQotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKSAmJiBtX293bmVkVGlsZXMu
c2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNob2xkOyArK2kpCi0gICAgICAgIG1fb3duZWRUaWxlcy5y
ZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJl
bmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllciog
bGF5ZXIpCi17Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fc3RhdGUu
dGlsZU93bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQorICAgIGlmICghbV9zaG91
bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIpCiAgICAgICAgIHJldHVybjsKLSNlbmRpZgog
Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICghbV9zdGF0ZS5kcmF3c0Nv
bnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUp
KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOworICAgIGlmICghbV9zdGF0ZS5kcmF3
c0NvbnRlbnQgfHwgbV9zaXplLmlzRW1wdHkoKSkgeworICAgICAgICBtX2JhY2tpbmdTdG9yZS5j
bGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0ZXh0dXJlTWFwcGVy
KQorICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLm5lZWRz
RGlzcGxheSA/IGxheWVyUmVjdCgpIDogbV9zdGF0ZS5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBp
ZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5
ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAg
ICBpZiAoIW1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CiAKLSAgICBmb3IgKHNpemVfdCB0aWxl
SW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkg
ewotICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4XTsKLSAg
ICAgICAgaWYgKCF0aWxlLnRleHR1cmUpCi0gICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0
dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiYgdGV4dHVyZSA9IHRpbGUudGV4dHVyZTsKLSAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IGVu
Y2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KS5zaXplKCk7Ci0KLSAgICAgICAgaWYgKHRpbGUubmVl
ZHNSZXNldCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8ICF0ZXh0dXJl
LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZhbHNlOwotICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUp
OwotICAgICAgICAgICAgZGlydHlSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkeW5hbWljX2Nhc3Q8VGV4dHVlck1hcHBlclRpbGVk
QmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKIAogICAgIC8vIFBhaW50IHRo
ZSBlbnRpcmUgZGlydHkgcmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1cmVzIHdl
IG9ubHkgcGFpbnQgb25jZS4KICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKQEAgLTE4Myw4ICsxMTgsNiBA
QCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9k
ZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CiAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CiAgICAgbGF5ZXItPnBhaW50R3Jh
cGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGlmIChtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCi0gICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CiAKICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlOwogCkBAIC0xOTUsMTA0ICsxMjgsMzUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUK
ICAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAj
ZW5kaWYKIAotICAgIC8vIERpdmlkZSB0aGUgaW1hZ2UgdG8gdGlsZXMuCi0gICAgZm9yIChzaXpl
X3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxl
SW5kZXgpIHsKLSAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRl
eF07Ci0gICAgICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5y
ZWN0KTsKLSAgICAgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKLSAgICAgICAg
aWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IEludFJlY3Qgc291cmNlUmVjdCA9IHRhcmdldFJlY3Q7Ci0KLSAgICAgICAgLy8gTm9ybWFsaXpl
IHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgotICAgICAgICBzb3VyY2VS
ZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKLQotICAgICAgICAvLyBO
b3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4KLSAgICAg
ICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7Ci0gICAg
ICAgIHRpbGUudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldFJlY3Qs
IHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwotICAgIH0KLQotICAgIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9jdXJyZW50Q29udGVu
dC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKS0+dXBkYXRlQ29u
dGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGlydHlSZWN0KTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoKQogewotICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2
ZSgpOwogCi0gICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHQ7Ci0gICAgb3B0LnRleHR1
cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKDApOwotICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7Ci19Ci0KLUZsb2F0UmVjdCBUZXh0
dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0Lngo
KSAtIHRhcmdldFJlY3QueCgpKSwKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LnkoKSArICh0
aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgdGlsZVJlY3Qu
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSk7CisgICAgVGV4dHVy
ZU1hcHBlclBhaW50T3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlciA9
IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNl
KDApOworICAgIHBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOwogfQogCiB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50
ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKLSAg
ICBCaXRtYXBUZXh0dXJlKiBtYXNrID0gb3B0aW9ucy5tYXNrOwotICAgIEZsb2F0UmVjdCB0YXJn
ZXRSZWN0ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOwotCiAgICAgLy8gV2UgYXBwbHkgdGhlIGZvbGxv
d2luZyB0cmFuc2Zvcm0gdG8gY29tcGVuc2F0ZSBmb3IgcGFpbnRpbmcgaW50byBhIHN1cmZhY2Us
IGFuZCB0aGVuIGFwcGx5IHRoZSBvZmZzZXQgc28gdGhhdCB0aGUgcGFpbnRpbmcgZml0cyBpbiB0
aGUgdGFyZ2V0IHJlY3QuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0KICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG9wdGlvbnMudHJhbnNmb3JtKQogICAgICAg
ICAgICAgLm11bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkpCiAgICAgICAgICAgICAudHJh
bnNsYXRlKG9wdGlvbnMub2Zmc2V0LndpZHRoKCksIG9wdGlvbnMub2Zmc2V0LmhlaWdodCgpKTsK
IAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFZlY3RvcjxFeHRlcm5hbGx5TWFu
YWdlZFRpbGU+IHRpbGVzVG9QYWludDsKLQotICAgIGlmIChtX3N0YXRlLnRpbGVPd25lcnNoaXAg
PT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykgewotICAgICAgICAvLyBTb3J0IHRpbGVzLCB3aXRo
IGN1cnJlbnQgc2NhbGUgZmFjdG9yIGxhc3QuCi0gICAgICAgIFZlY3RvcjxFeHRlcm5hbGx5TWFu
YWdlZFRpbGUqPiB0aWxlczsKLSAgICAgICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2Vk
VGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsKLSAg
ICAgICAgZm9yIChIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3Ig
aXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQuZnJvbnRCdWZmZXIudGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuc2NhbGUg
PT0gbV9zdGF0ZS5jb250ZW50U2NhbGUpIHsKLSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQo
Jml0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSB0cmFuc2l0aW9uYWwgZWZmZWN0IGxvb2tz
IGdvb2Qgb25seSB3aGVuIHRoZXJlJ3Mgbm8gdHJhbnNwYXJlbmN5LCBzbyB3ZSBvbmx5IHVzZSBp
dCB3aGVuIHRoZSBvcGFjaXR5IGZvciB0aGUgbGF5ZXIgaXMgYWJvdmUgYSBjZXJ0YWluIHRocmVz
aG9sZC4KLSAgICAgICAgICAgIGlmIChvcGFjaXR5ID4gMC45NSkKLSAgICAgICAgICAgICAgICB0
aWxlcy5wcmVwZW5kKCZpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdGlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEV4dGVybmFsbHlN
YW5hZ2VkVGlsZSYgdGlsZSA9ICp0aWxlc1tpXTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0
ID0gdGlsZS5mcm9udEJ1ZmZlci50YXJnZXRSZWN0OwotICAgICAgICAgICAgQml0bWFwVGV4dHVy
ZSYgdGV4dHVyZSA9ICp0aWxlLmZyb250QnVmZmVyLnRleHR1cmU7Ci0gICAgICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlY3QsIHRyYW5zZm9ybSwg
b3BhY2l0eSwgbWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgorICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7CisgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+IG1hc2sgPSBvcHRpb25zLm1hc2s7CiAKLSAgICAvLyBOb3cgd2UgcGFpbnQgb3du
ZWQgdGlsZXMsIGlmIHdlJ3JlIGluIE93bmVkVGlsZU1vZGUuCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQml0bWFwVGV4dHVy
ZSogdGV4dHVyZSA9IG1fb3duZWRUaWxlc1tpXS50ZXh0dXJlLmdldCgpOwotICAgICAgICBjb25z
dCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX293
bmVkVGlsZXNbaV0ucmVjdCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1Rl
eHR1cmUoKnRleHR1cmUsIHJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Ci0gICAgfQor
ICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9iYWNraW5nU3RvcmUtPnBhaW50VG9U
ZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbGF5ZXJSZWN0KCksIHRyYW5zZm9y
bSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7CiAKLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVkaWEpCi0g
ICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlv
bnMudGV4dHVyZU1hcHBlciwgdGFyZ2V0UmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsK
KyAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnBhaW50
VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5jb250ZW50c1Jl
Y3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7CiB9CiAKIGludCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0
IHZvaWQqIGIpCkBAIC0zMzIsNyArMTk2LDcgQEAgSW50UmVjdCBUZXh0dXJlTWFwcGVyTm9kZTo6
aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0KIHsK
ICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zv
cm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtYXRyaXgpLm11bHRpcGx5KG1fdHJhbnNmb3JtLmNv
bWJpbmVkKCkpOwotICAgIHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxvY2FsVHJhbnNmb3JtLm1h
cFJlY3QoZW50aXJlUmVjdCgpKSk7CisgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxU
cmFuc2Zvcm0ubWFwUmVjdChsYXllclJlY3QoKSkpOwogICAgIGlmICghbV9zdGF0ZS5tYXNrc1Rv
Qm91bmRzICYmICFtX3N0YXRlLm1hc2tMYXllcikgewogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICByZWN0LnVuaXRlKG1fY2hp
bGRyZW5baV0tPmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KG1hdHJpeCkpOwpAQCAtNDMzLDcgKzI5
Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxh
eWVyKQogICAgICAgICBtYXNrVGV4dHVyZSA9IDA7CiAKLSAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UuZ2V0KCkpOwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRhcmdldFRyYW5zZm9ybSA9CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeChvcHRpb25zLnRyYW5zZm9ybSkKICAgICAgICAgICAgICAgICAubXVsdGlwbHkobV90cmFu
c2Zvcm0uY29tYmluZWQoKSkKQEAgLTQ1MCw4OSArMzE0LDYgQEAgVGV4dHVyZU1hcHBlck5vZGU6
On5UZXh0dXJlTWFwcGVyTm9kZSgpCiAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92
ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKIH0KIAotI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjcmVhdGVDb250ZW50c1RpbGUo
ZmxvYXQgc2NhbGUpCi17Ci0gICAgc3RhdGljIGludCBuZXh0SUQgPSAwOwotICAgIGludCBpZCA9
ICsrbmV4dElEOwotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5hZGQoaWQsIEV4dGVybmFs
bHlNYW5hZ2VkVGlsZShzY2FsZSkpOwotICAgIG1fc3RhdGUuY29udGVudFNjYWxlID0gc2NhbGU7
Ci0gICAgcmV0dXJuIGlkOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW1vdmVDb250
ZW50c1RpbGUoaW50IGlkKQotewotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5yZW1vdmUo
aWQpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwdXJnZU5vZGVUZXh0dXJlc1JlY3Vy
c2l2ZSgpCi17Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmNsZWFyKCk7Ci0KLSAgICBm
b3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAg
bV9jaGlsZHJlbltpXS0+cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgSGFzaE1h
cDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5
TWFuYWdlZFRpbGVzLmZpbmQoaWQpOwotCi0gICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxseU1hbmFn
ZWRUaWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXh0ZXJuYWxseU1hbmFnZWRU
aWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLQotICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0
ID0gc291cmNlUmVjdDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IHRhcmdldFJl
Y3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSB0ZXh0dXJlOwotICAgIHRpbGUuaXNC
YWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7Ci0gICAgdGlsZS5pc0RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKLXsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRlcm5h
bGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5i
ZWdpbigpOyBpdCAhPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQuaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSkKLSAgICAgICAg
ICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5yZW1vdmUoaXQpOwotICAgIH0KLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IHZvaWQqIGRhdGEpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0KLSAgICBIYXNo
TWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFs
bHlNYW5hZ2VkVGlsZXMuZmluZChpZCk7Ci0gICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxseU1hbmFn
ZWRUaWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXh0ZXJuYWxseU1hbmFnZWRU
aWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLQotICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0
ID0gc291cmNlUmVjdDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IEZsb2F0UmVj
dCh0YXJnZXRSZWN0KTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdC5zY2FsZSgxLjAg
LyB0aWxlLnNjYWxlKTsKLQotICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCi0gICAg
ICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0
dXJlKCk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6
ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRz
KGRhdGEsIHNvdXJjZVJlY3QpOwotICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN3YXBDb250ZW50c0J1ZmZlcnMoKQotewot
ICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBlbmQgPSBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgRXh0
ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGls
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2Vk
VGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghdGlsZS5pc0JhY2tCdWZmZXJV
cGRhdGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRpbGUuaXNCYWNrQnVmZmVy
VXBkYXRlZCA9IGZhbHNlOwotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIgc3dh
cEJ1ZmZlciA9IHRpbGUuZnJvbnRCdWZmZXI7Ci0gICAgICAgIHRpbGUuZnJvbnRCdWZmZXIgPSB0
aWxlLmJhY2tCdWZmZXI7Ci0gICAgICAgIHRpbGUuYmFja0J1ZmZlciA9IHN3YXBCdWZmZXI7Ci0g
ICAgfQotfQotI2VuZGlmCi0KIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBpbnQgb3B0
aW9ucykKIHsKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZShncmFwaGljc0xheWVyLCByb290TGF5
ZXIoKS0+bV90ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKQEAgLTU0MSwxNCArMzIyLDExIEBAIHZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBncmFwaGljCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIs
IFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7CiAgICAgaW50IGNoYW5nZU1hc2sgPSBn
cmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7Ci0gICAgY29uc3QgVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRpbmdDb250
ZW50KCk7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3dhcENvbnRlbnRzQnVm
ZmVycygpOwotI2VuZGlmCi0gICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBo
aWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKwor
ICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBncmFwaGljc0xheWVyLT5tX2FuaW1h
dGlvbnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKGNoYW5nZU1hc2sgJiBQYXJl
bnRDaGFuZ2UpKSB7CisgICAgaWYgKGNoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpIHsKICAgICAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5ld1BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3Jh
cGhpY3NMYXllci0+cGFyZW50KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50ICE9IG1fcGFyZW50
KSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIGN1cnJlbnQgZnJvbSBjaGlsZCBs
aXN0IGZpcnN0LgpAQCAtNTgwLDE2ICszNTgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENv
bnRlbnRzUmVjdENoYW5nZSkpIHsKLSAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUoZ3JhcGhp
Y3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7
Ci0gICAgICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVudC5jb250
ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXplID0gRmxv
YXRTaXplKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5
ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKLQotICAgICAgICBpZiAod2FudGVkU2l6ZSAh
PSBtX3NpemUpCi0gICAgICAgICAgICBtX293bmVkVGlsZXMuY2xlYXIoKTsKLQotICAgICAgICBt
X3NpemUgPSB3YW50ZWRTaXplOwotICAgIH0KKyAgICBtX3NpemUgPSBncmFwaGljc0xheWVyLT5z
aXplKCk7CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkgewogICAgICAg
IGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBo
aWNzTGF5ZXItPm1hc2tMYXllcigpKSkKQEAgLTYxOSwxMyArMzg4LDEwIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlciogZ3JhCiAgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgPSBncmFwaGljc0xh
eWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3Jt
ID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLm9wYWNp
dHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7Ci0KLSAgICBtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlID0gcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGU7Ci0gICAgbV9jdXJyZW50Q29u
dGVudC5pbWFnZSA9IHBlbmRpbmdDb250ZW50LmltYWdlOwotICAgIG1fY3VycmVudENvbnRlbnQu
bWVkaWEgPSBwZW5kaW5nQ29udGVudC5tZWRpYTsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRz
RGlzcGxheSA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IHBlbmRpbmdDb250ZW50
Lm5lZWRzRGlzcGxheTsKLSAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQot
ICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgPSBtX3N0
YXRlLm5lZWRzRGlzcGxheSB8fCBncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXkoKTsKKyAgICBp
ZiAoIW1fc3RhdGUubmVlZHNEaXNwbGF5KQorICAgICAgICBtX3N0YXRlLm5lZWRzRGlzcGxheVJl
Y3QudW5pdGUoZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpKTsKKyAgICBtX2NvbnRl
bnRzTGF5ZXIgPSBncmFwaGljc0xheWVyLT5nZXRDb250ZW50c0xheWVyKHRleHR1cmVNYXBwZXIp
OwogCiAgICAgbV90cmFuc2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3MpOwogICAgIG1fdHJh
bnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwpAQCAtNjY2LDYgKzQz
Miw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHko
KQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgaW50IG9wdGlvbnMpCiB7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQorICAgICAg
ICByZXR1cm47CisKICAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiAhKG9wdGlvbnMgJiBDb21wdXRh
dGlvbnNPbmx5KSkgewogICAgICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NM
YXllciwgdGV4dHVyZU1hcHBlcik7CiAgICAgICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9u
aXplKCk7CkBAIC02ODMsMTAgKzQ1Miw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmND
b21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiAgICAg
ICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0b0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKSwgdGV4dHVy
ZU1hcHBlcik7CiAKICAgICBzeW5jQW5pbWF0aW9ucygpOwotICAgIGNvbXB1dGVUaWxlcygpOwot
Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIHJlbmRlckNvbnRlbnQodGV4dHVyZU1h
cHBlciwgZ3JhcGhpY3NMYXllcik7CisgICAgdXBkYXRlQmFja2luZ1N0b3JlKHRleHR1cmVNYXBw
ZXIsIGdyYXBoaWNzTGF5ZXIpOwogCiAgICAgaWYgKCEob3B0aW9ucyAmIFRyYXZlcnNlRGVzY2Vu
ZGFudHMpKQogICAgICAgICBvcHRpb25zID0gQ29tcHV0YXRpb25zT25seTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmgKaW5kZXggMjMwYzllMC4uMTM3YmYwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KQEAgLTQyLDE2ICs0MywxNCBAQCBjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CiBwdWJsaWM6Ci0gICAg
Qml0bWFwVGV4dHVyZSogc3VyZmFjZTsKLSAgICBCaXRtYXBUZXh0dXJlKiBtYXNrOworICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBzdXJmYWNlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBt
YXNrOwogICAgIGZsb2F0IG9wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNm
b3JtOwogICAgIEludFNpemUgb2Zmc2V0OwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXI7CiAgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucygpCi0gICAgICAgIDogc3VyZmFjZSgw
KQotICAgICAgICAsIG1hc2soMCkKLSAgICAgICAgLCBvcGFjaXR5KDEpCisgICAgICAgIDogb3Bh
Y2l0eSgxKQogICAgICAgICAsIHRleHR1cmVNYXBwZXIoMCkKICAgICB7IH0KIH07CkBAIC05Nywz
NyArOTYsMTMgQEAgcHVibGljOgogICAgICAgICBDb21wdXRhdGlvbnNPbmx5ID0gMgogICAgIH07
CiAKLSAgICBlbnVtIFRpbGVPd25lcnNoaXAgewotICAgICAgICBPd25lZFRpbGVzLAotICAgICAg
ICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzCi0gICAgfTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxU
ZXh0dXJlTWFwcGVyTm9kZSosIEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7Ci0KLSAgICAvLyBUaGUg
Y29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2Ug
dHJ5IHRvIGRvIHNvLgotICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERp
cmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUs
IENhbnZhczNEQ29udGVudFR5cGV9OwotICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OwotICAgICAgICBib29sIG5lZWRzRGlzcGxheTsK
LSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAgIENvbnRlbnRUeXBlIGNv
bnRlbnRUeXBlOwotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotICAgICAgICBjb25zdCBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWE7Ci0gICAgICAgIENvbnRlbnREYXRhKCkK
LSAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50
VHlwZShIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICAsIGltYWdlKDApCi0gICAgICAgICAg
ICAsIG1lZGlhKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICBUZXh0dXJl
TWFwcGVyTm9kZSgpCiAgICAgICAgIDogbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX2VmZmVjdFRh
cmdldCgwKQorICAgICAgICAsIG1fY29udGVudHNMYXllcigwKQogICAgICAgICAsIG1fb3BhY2l0
eSgxKQogICAgICAgICAsIG1fY2VudGVyWigwKQorICAgICAgICAsIG1fc2hvdWxkVXBkYXRlQmFj
a2luZ1N0b3JlRnJvbUxheWVyKHRydWUpCiAgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCiAg
ICAgeyB9CiAKQEAgLTE0NCwxOSArMTE5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQo
KTsKIAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHZvaWQgc2V0VGlsZU93bmVy
c2hpcChUaWxlT3duZXJzaGlwIG93bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBv
d25lcnNoaXA7IH0KLSAgICBpbnQgY3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKLSAg
ICB2b2lkIHJlbW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpOwotICAgIHZvaWQgc2V0Q29udGVudHNU
aWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IHZvaWQqKTsKLSAgICB2b2lkIHNldFRpbGVCYWNrQnVm
ZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJl
Kik7Ci0gICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKLSAg
ICB2b2lkIHB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZlKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNl
dElEKGludCBpZCkgeyBtX2lkID0gaWQ7IH0KLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9Ci0KLSAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWEoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhOyB9CisgICAgdm9pZCBzZXRTaG91
bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoYm9vbCBiKSB7IG1fc2hvdWxkVXBkYXRlQmFj
a2luZ1N0b3JlRnJvbUxheWVyID0gYjsgfQorICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJh
Y2tpbmdTdG9yZTsgfQorICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmU7IH0KKyAgICB2b2lkIGNsZWFy
QmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJO
b2RlKiByb290TGF5ZXIoKTsKQEAgLTE3NCwxMyArMTQwLDEzIEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGludCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYik7CiAgICAgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFw
cGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgQml0bWFwVGV4
dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fb3duZWRUaWxlcy5pc0VtcHR5KCkgPyAwIDogbV9v
d25lZFRpbGVzWzBdLnRleHR1cmUuZ2V0KCk7IH0KKyAgICBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IHRleHR1cmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT50
ZXh0dXJlKCkgOiAwOyB9CiAKICAgICB2b2lkIHBhaW50UmVjdXJzaXZlKGNvbnN0IFRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFw
cGVyUGFpbnRPcHRpb25zJik7CiAgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBU
ZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7CiAgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJl
bldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKLSAgICB2b2lk
IHJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lk
IHVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciopOwogCiAg
ICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7CkBA
IC0xODgsNjMgKzE1NCwyMSBAQCBwcml2YXRlOgogCiAgICAgTGF5ZXJUcmFuc2Zvcm0gbV90cmFu
c2Zvcm07CiAKLSAgICBpbmxpbmUgRmxvYXRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7Ci0gICAgfQotCi0g
ICAgaW5saW5lIEZsb2F0UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgfQotCi0gICAgRmxvYXRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QKKyAgICBpbmxpbmUgRmxv
YXRSZWN0IGxheWVyUmVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVu
dENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOwog
ICAgIH0KLSAgICBzdHJ1Y3QgT3duZWRUaWxlIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0g
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOwotICAgICAgICBib29sIG5lZWRz
UmVzZXQ7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxPd25lZFRpbGU+IG1fb3duZWRUaWxlczsKLQot
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdl
ZFRpbGVCdWZmZXIgewotICAgICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgRmxv
YXRSZWN0IHRhcmdldFJlY3Q7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJl
OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRXh0ZXJuYWxseU1hbmFnZWRUaWxlIHsKLSAgICAgICAg
Ym9vbCBpc0JhY2tCdWZmZXJVcGRhdGVkOwotICAgICAgICBib29sIGlzRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2U7Ci0gICAgICAgIGZsb2F0IHNjYWxlOwotICAgICAgICBFeHRlcm5hbGx5TWFuYWdl
ZFRpbGVCdWZmZXIgZnJvbnRCdWZmZXI7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1
ZmZlciBiYWNrQnVmZmVyOwotCi0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZShmbG9hdCBz
Y2FsZSA9IDEuMCkKLSAgICAgICAgICAgIDogaXNCYWNrQnVmZmVyVXBkYXRlZChmYWxzZSkKLSAg
ICAgICAgICAgICwgaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShmYWxzZSkKLSAgICAgICAgICAg
ICwgc2NhbGUoc2NhbGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBIYXNo
TWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPiBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXM7
Ci0jZW5kaWYKLQotICAgIENvbnRlbnREYXRhIG1fY3VycmVudENvbnRlbnQ7CiAKICAgICBWZWN0
b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBtX3BhcmVudDsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7CisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7CiAgICAgRmxvYXRTaXpl
IG1fc2l6ZTsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgZmxvYXQgbV9jZW50ZXJaOwogICAg
IFN0cmluZyBtX25hbWU7Ci0gICAgaW50IG1faWQ7CisgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZUJh
Y2tpbmdTdG9yZUZyb21MYXllcjsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CiAgICAgICAgIEZsb2F0
UG9pbnQgcG9zOwpAQCAtMjU0LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwogICAgICAgICBmbG9hdCBvcGFjaXR5Owog
ICAgICAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OworICAgICAgICBGbG9hdFJlY3QgbmVlZHNE
aXNwbGF5UmVjdDsKICAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7CiAgICAgICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiByZXBsaWNhTGF5ZXI7CkBAIC0yNjMsMTMgKzE4OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgY29udGVudHNPcGFxdWUgOiAxOwogICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eSA6
IDE7CiAgICAgICAgIGJvb2wgdmlzaWJsZSA6IDE7Ci0gICAgICAgIGJvb2wgbmVlZHNSZXNldDog
MTsKKyAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk6IDE7CiAgICAgICAgIGJvb2wgbWlnaHRIYXZl
T3ZlcmxhcHMgOiAxOwogICAgICAgICBib29sIG5lZWRzUmVwYWludDsKLSAgICAgICAgZmxvYXQg
Y29udGVudFNjYWxlOwotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICAgICBUaWxl
T3duZXJzaGlwIHRpbGVPd25lcnNoaXA7Ci0jZW5kaWYKICAgICAgICAgU3RhdGUoKQogICAgICAg
ICAgICAgOiBvcGFjaXR5KDEuZikKICAgICAgICAgICAgICwgbWFza0xheWVyKDApCkBAIC0yODAs
MTMgKzIwMSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIGNvbnRlbnRzT3BhcXVlKGZhbHNl
KQogICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpCiAgICAgICAgICAgICAs
IHZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbmVlZHNSZXNldChmYWxzZSkKKyAgICAgICAg
ICAgICwgbmVlZHNEaXNwbGF5KHRydWUpCiAgICAgICAgICAgICAsIG1pZ2h0SGF2ZU92ZXJsYXBz
KGZhbHNlKQogICAgICAgICAgICAgLCBuZWVkc1JlcGFpbnQoZmFsc2UpCi0gICAgICAgICAgICAs
IGNvbnRlbnRTY2FsZSgxLjBmKQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICAg
ICAgICAgLCB0aWxlT3duZXJzaGlwKE93bmVkVGlsZXMpCi0jZW5kaWYKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKaW5k
ZXggMWIyOTI5MC4uYzY5YzFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJfaAogI2RlZmluZSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCiAKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zMCw3ICsyOSw4IEBAIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0g
MCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkg
PSAxLjAsIEJpdG1hcFRleHR1cmUqIG1hc2sgPSAwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN3
YXBCdWZmZXJzKCkgeyB9CiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGM1M2U5NTUuLmVlNjVkZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMi0wMi0wOSAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZh
Y3RvciBiYWNraW5nLXN0b3JlIGNvZGUgaW4gVGV4dHVyZU1hcHBlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgzMDUKKworICAgICAgICBNb3ZlIHRo
ZSBiYWNraW5nLXN0b3JlIGNvZGUgdG8gTGF5ZXJUcmVlQmFja2luZ1N0b3JlLCBpbXBsZW1lbnRp
bmcgdGhlIHZpcnR1YWwgZnVuY3Rpb25zCisgICAgICAgIGluIFRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuCisgICAgICAgIFdlIHNhdmUgdGhlIGRvdWJsZS1idWZmZXJlZCB0aWxlIGluIHRoZSBi
YWNraW5nLXN0b3JlLCBhbmQgdGhlbiBjb252ZXJ0IHRoZW0gdG8gcmVndWxhcgorICAgICAgICB0
aWxlcyBpbiB1cGRhdGVDb250ZW50cywgYmFzZWQgb24gdGhlIG9yZGVyIG9mIHBhaW50aW5nLgor
ICAgICAgICBVc2UgVGV4dHVyZU1hcHBlckNvbXBvc2l0ZWRJbWFnZSBmb3IgaW1hZ2VzIGluc3Rl
YWQgb2Ygc2F2aW5nIG91ciBvd24gY29tcG9zaXRlZCBpbWFnZQorICAgICAgICByZWdpc3RyeS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OmdldEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6
cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRl
VGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2Up
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmFzc2lnbkltYWdlVG9MYXll
cik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNl
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86CisKIDIwMTItMDItMDcgIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZldGNo
IHRoZSB2aXNpYmxlIHJlY3QgZnJvbSBMYXllclRyZWVIb3N0IGluc3RlYWQgb2Yga2VlcGluZyBh
IGNvcHkgaW4gZWFjaCBsYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGNlZGU0ZWEuLmZhZTY1ZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQpAQCAtMjUzLDYgKzI1Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmggXAorICAgIFVJ
UHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJD
b250ZXh0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCkBAIC01ODEsNiArNTgyLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
YkNvbnRleHQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2Vz
dHVyZVJlY29nbml6ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaAppbmRleCA0Yzk3MTg3Li41YjQ3MmI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0zMCwxNSArMzAsMTcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLmgiCiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVyQmFja2luZ1N0b3JlOwogY2xhc3MgV2ViTGF5
ZXJJbmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCkBAIC05OCwxMiArMTAwLDYgQEAg
cHJvdGVjdGVkOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSAgICB0eXBlZGVmIEhhc2hN
YXA8V2ViQ29yZTo6SW50UG9pbnQsIFJlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiA+IFRp
bGVkSW1hZ2U7Ci0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1f
bm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKLSAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVU
b05vZGVUaWxlOwotICAgIGludCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkg
Y29uc3Q7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlczsKLQogICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CiAgICAgdm9p
ZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklE
KTsKQEAgLTExOCwxMSArMTE0LDE0IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZsdXNoTGF5ZXJD
aGFuZ2VzKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGVuc3VyZUxh
eWVyKFdlYkxheWVySUQpOwotCisgICAgUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0
QmFja2luZ1N0b3JlKFdlYkxheWVySUQpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKICNlbmRp
ZgogCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAg
IFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworICAgIEhhc2hNYXA8aW50NjRf
dCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U+ID4gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAgSGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3Rv
cmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwogCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgdm9pZCBkaWRGaXJlVmlld3BvcnRVcGRhdGVUaW1lcihXZWJDb3JlOjpUaW1lcjxM
YXllclRyZWVIb3N0UHJveHk+Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYTY0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
YXllckJhY2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworI2luY2x1ZGUgInN0ZGlvLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBMYXllckJhY2tpbmdT
dG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIpCit7CisgICAgaWYgKCFtX2JhY2tCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEZs
b2F0UmVjdCB0YXJnZXRSZWN0ID0gbV90YXJnZXRSZWN0OworICAgIHRhcmdldFJlY3Quc2NhbGUo
MS4gLyBtX3NjYWxlKTsKKyAgICBzZXRSZWN0KHRhcmdldFJlY3QpOworICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVyZSgpOworICAgIGlmICghdGV4dHVyZSkg
eworICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAg
ICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOworICAgIH0KKworICAgIHRleHR1cmUtPnJl
c2V0KGVuY2xvc2luZ0ludFJlY3QobV9zb3VyY2VSZWN0KS5zaXplKCksIGZhbHNlKTsKKyAgICB0
ZXh0dXJlLT51cGRhdGVDb250ZW50cyhtX2JhY2tCdWZmZXItPmNyZWF0ZVFJbWFnZSgpLmNvbnN0
Qml0cygpLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja0J1ZmZlci0+c2l6ZSgpKSk7
CisgICAgbV9iYWNrQnVmZmVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6
OmNyZWF0ZVRpbGUoaW50IGlkLCBmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwg
TGF5ZXJCYWNraW5nU3RvcmVUaWxlKHNjYWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQor
Cit2b2lkIExheWVyQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBpZCkKK3sKKyAgICBtX3Rp
bGVzLnJlbW92ZShpZCk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUo
aW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBTaGFyZWFibGVCaXRtYXAqIGJhY2tCdWZmZXIpCit7CisgICAgSGFzaE1hcDxpbnQsIExh
eWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKKyAg
ICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7CisgICAgaXQtPnNlY29uZC5zZXRCYWNrQnVm
ZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIpOworfQorCitQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAg
ICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9y
ZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29u
ZC50ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRl
eHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsK
K30KKwordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFz
aykKK3sKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7CisKKyAg
ICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUg
b3BhY2l0eSBoYXMgY2hhbmdlZC4KKyAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVU
aWxlPjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8aW50
LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIExheWVyQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAodGlsZS5zY2FsZSgpID09IG1fc2NhbGUpIHsKKyAgICAg
ICAgICAgIHRpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHByZXZpb3VzIHRpbGUgaWYg
dGhlIG9wYWNpdHkgaXMgaGlnaCwgb3RoZXJ3aXNlIGVmZmVjdCBsb29rcyBsaWtlIGEgYnVnLgor
ICAgICAgICBpZiAob3BhY2l0eSA+IDAuOTUpCisgICAgICAgICAgICB0aWxlc1RvUGFpbnQucHJl
cGVuZCgmdGlsZSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1Rv
UGFpbnQuc2l6ZSgpOyArK2kpCisgICAgICAgIHRpbGVzVG9QYWludFtpXS0+cGFpbnQodGV4dHVy
ZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKK30KKwordm9pZCBMYXllckJhY2tp
bmdTdG9yZTo6c3dhcEJ1ZmZlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAg
ICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2E4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDcz
IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBMYXll
ckJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIExheWVyQmFja2luZ1N0b3JlX2gKKworI2luY2x1ZGUg
Ikhhc2hNYXAuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmVUaWxlIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAgICBMYXllckJhY2tpbmdT
dG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQorICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKFdl
YkNvcmU6OkZsb2F0UmVjdCgpKQorICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCisgICAgeworICAg
IH0KKworICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0K
KyAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lk
IHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBTaGFyZWFibGVCaXRtYXAqIGJ1ZmZlcikKKyAgICB7
CisgICAgICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldDsKKyAgICAgICAgbV9zb3VyY2VSZWN0ID0g
c291cmNlOworICAgICAgICBtX2JhY2tCdWZmZXIgPSBidWZmZXI7CisgICAgfQorCitwcml2YXRl
OgorICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFja0J1ZmZlcjsKKyAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgbV9zb3VyY2VSZWN0OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Rhcmdl
dFJlY3Q7CisgICAgZmxvYXQgbV9zY2FsZTsKK307CisKK2NsYXNzIExheWVyQmFja2luZ1N0b3Jl
IDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgeworcHVibGljOgor
ICAgIHZvaWQgY3JlYXRlVGlsZShpbnQsIGZsb2F0KTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoaW50
KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIFNoYXJlYWJsZUJpdG1hcCopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TGF5ZXJCYWNraW5nU3RvcmUpOyB9CisgICAgdm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyKik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0
dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
Kik7CisKK3ByaXZhdGU6CisgICAgTGF5ZXJCYWNraW5nU3RvcmUoKQorICAgICAgICA6IG1fc2Nh
bGUoMS4pCisgICAgeyB9CisgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT4g
bV90aWxlczsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworfQorI2VuZGlmIC8vIExheWVyQmFj
a2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
clRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IGM3Y2E3ZjEuLjAyZTM3ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAt
MjIsMTkgKzIyLDIwIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJl
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5oIgogI2luY2x1ZGUgPFFEYXRlVGltZT4KICNpbmNsdWRlIDxjYWlyby9P
cGVuR0xTaGltcy5oPgogCkBAIC0xNDksOCArMTUwLDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
IHsKICAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobmV3TGF5ZXIpOwotICAgIG5vZGUtPnNldElEKGxheWVySUQpOwotICAgIG5vZGUt
PnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGls
ZXMpOworICAgIG5vZGUtPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcihmYWxz
ZSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKIH0KIApAQCAtMjM1LDIxICsyMzUs
MTMgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKICAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKLWludCBMYXllclRyZWVIb3N0
UHJveHk6OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAotewotICAg
IEhhc2hNYXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9kZVRpbGUu
ZmluZCh0aWxlSUQpOwotICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQogdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXll
ckluZm8pCiB7CiAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKICAgICBlbnN1cmVM
YXllcihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7
CiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGJvb2wgbmVlZHNU
b1VwZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgbGF5ZXJJbmZv
LmNvbnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgYm9vbCBuZWVkc1Rv
VXBkYXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAobGF5ZXJJbmZv
LmNvbnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpOwogCiAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOwog
CkBAIC0zNDgsNjkgKzM0MCwzOSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExh
eWVySUQoV2ViTGF5ZXJJRCBsYXllcklEKQogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXll
cik7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCitQYXNzUmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiBMYXllclRyZWVIb3N0UHJveHk6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlk
KQogewotICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBu
b2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGVuc3Vy
ZUxheWVyKGlkKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUobGF5ZXJCeUlEKGlkKSk7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KG5vZGUtPmJhY2tpbmdT
dG9yZSgpLmdldCgpKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBiYWNraW5n
U3RvcmUgPSBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgICAgIG5vZGUtPnNldEJh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIH0KKyAgICBBU1NFUlQoYmFja2lu
Z1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlOworfQogCi0gICAgaW50IG5vZGVUaWxl
SUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoc2NhbGUpOwotICAgIG1fdGlsZVRvTm9kZVRp
bGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3Jl
YXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQorewor
ICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsK
IH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXll
cklELCBpbnQgdGlsZUlEKQogewotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0
dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxl
SUQodGlsZUlEKTsKLSAgICBpZiAoIW5vZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2RlVGlsZUlEKTsKLSAgICBtX3RpbGVUb05vZGVU
aWxlLnJlbW92ZSh0aWxlSUQpOworICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3Zl
VGlsZSh0aWxlSUQpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKQogewot
ICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05v
ZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAoIW5vZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAg
ICBRSW1hZ2UgaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgIG5vZGUtPnNldENv
bnRlbnRzVGlsZUJhY2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwg
aW1hZ2UuY29uc3RCaXRzKCkpOworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOworICAgIGJhY2tpbmdTdG9yZS0+dXBk
YXRlVGlsZSh0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCk7CisgICAgbV9i
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCiB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBTaGFy
ZWFibGVCaXRtYXAqIGJpdG1hcCkKIHsKLSAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7Ci0gICAg
c3RhdGljIGNvbnN0IGludCBUaWxlRGltZW5zaW9uID0gMTAyNDsKLSAgICBRSW1hZ2UgaW1hZ2Ug
PSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgIGJvb2wgaW1hZ2VIYXNBbHBoYSA9IGltYWdl
Lmhhc0FscGhhQ2hhbm5lbCgpOwotICAgIEludFJlY3QgaW1hZ2VSZWN0KDAsIDAsIGltYWdlLndp
ZHRoKCksIGltYWdlLmhlaWdodCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlLmhl
aWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIFFJbWFn
ZSBzdWJJbWFnZTsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCh4LCB5LCBUaWxlRGltZW5zaW9u
LCBUaWxlRGltZW5zaW9uKTsKLSAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7
Ci0gICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXplKCkpID09IGltYWdlLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsKLSAgICAgICAgICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNpemUoKSwgIWltYWdlSGFzQWxw
aGEpOwotICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoc3ViSW1hZ2UuY29uc3RC
aXRzKCksIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpKTsKLSAgICAgICAg
ICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24oKSwgdGV4dHVyZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgdGls
ZWRJbWFnZSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIFRl
eHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2U6OmNyZWF0ZShiaXRtYXAtPmNyZWF0ZUltYWdlKCku
Z2V0KCksIG1fdGV4dHVyZU1hcHBlci5nZXQoKSkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJRCkKQEAgLTQyMCwzOCArMzgyLDI1IEBA
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQog
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCiB7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5v
ZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghaW1hZ2VJRCkgewotICAgICAgICBub2RlLT5jbGVhckFsbERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlPiA+
OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7
CisgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKKyAg
ICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworfQogCi0gICAg
RmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVj
dChsYXllci0+Y29udGVudHNSZWN0KCkpOwotICAgIGZsb2F0IGhvcml6b250YWxGYWN0b3IgPSBj
b250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEZh
Y3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7Ci0gICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kKGltYWdlSUQpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgp
OworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9y
IGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgKCppdCktPnN3YXBCdWZmZXJzKG1fdGV4dHVyZU1hcHBlci5nZXQo
KSk7CiAKLSAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBpdC0+c2Vj
b25kLmVuZCgpOwotICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0gaXQtPnNl
Y29uZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkgewotICAg
ICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3QpLCBGbG9h
dFNpemUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0
UmVjdChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1JlY3QueCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZlcnRpY2Fs
RmFjdG9yICsgY29udGVudHNSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsKLSAgICAg
ICAgaW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOwotICAgICAg
ICBub2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShuZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJdC0+c2Vj
b25kLmdldCgpKTsKLSAgICB9CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmNsZWFyKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hhbmdl
cygpCiB7CiAgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgp
KTsKKyAgICBzd2FwQnVmZmVycygpOworCiAgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUg
aXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVu
ZGVyIHRoZSBuZXh0IG9uZS4KICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KQEAgLTYyOSwxMiArNTc4LDEx
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkKICAgICBUZXh0
dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUocm9vdExheWVyKCkpOwog
CiAgICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUtPnB1cmdlTm9kZVRleHR1cmVzUmVjdXJzaXZl
KCk7CisgICAgICAgIG5vZGUtPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCiAgICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLQogICAgIG1fdGV4dHVyZU1hcHBl
ci5jbGVhcigpOwotCisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFy
KCk7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126927</attachid>
            <date>2012-02-14 01:10:25 -0800</date>
            <delta_ts>2012-02-14 01:36:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>74444</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhODVlZTM2Li5lYWM2NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hy
b25pemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpnZXRDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpsYXllclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Ojpzd2FwQnVmZmVycyk6CisKIDIwMTItMDItMTMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBbSlNDdXN0b21Ub0pTT2JqZWN0XSBJREwgYXR0cmli
dXRlIHRvIGludGVyZmFjZXMgdGhhdCBoYXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0NTE0OWQyLi5kMGJkMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTU3NDcsNiArNTc0Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAogICAgICAgICBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXApAQCAtNTc2OSw2
ICs1NzcxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA3MjU3YzU2Li41YWMwZGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTM5NTUsNiArMzk1NSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaApAQCAtMzk2Myw2ICszOTY0LDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXht
YXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0ZTky
MTQ5Li42NWY1NThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTg2LDYgKzM1ODYsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi5jNmZmMDNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwog
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1
cmVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
ckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA2NmJjNzZlLi4yYmI0NmMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICBRR0xXaWRnZXQqIGdl
dFZpZXdwb3J0R0xXaWRnZXQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFp
bnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7
CkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1JnYihx
dWludDMyIHBpeGVsKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKICAg
ICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI1MjFkMWEuLjliODlj
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgs
NiArMjgsOCBAQCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZQogICAgIDogR3JhcGhpY3NMYXllcihj
bGllbnQpCiAgICAgLCBtX25vZGUoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpKQog
ICAgICwgbV9jaGFuZ2VNYXNrKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAs
IG1fbWVkaWEoMCkKICAgICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiB7CiB9CkBA
IC00NCw4ICs0Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmRpZFN5bmNo
cm9uaXplKCkKIHsKICAgICBtX3N5bmNRdWV1ZWQgPSBmYWxzZTsKICAgICBtX2NoYW5nZU1hc2sg
PSAwOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9w
ZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fbmVlZHNE
aXNwbGF5ID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwogfQog
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYg
bmFtZSkKQEAgLTYxLDcgKzYzLDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcigpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheSA9IHRydWU7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTY5LDggKzcxLDgg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKICov
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpCiB7Ci0gICAgaWYgKCFub2RlKCktPm1lZGlhKCkpCi0gICAgICAgIG1fcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0Q29u
dGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTc4LDkgKzgwLDkgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogKi8KIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5KQorICAgIGlmIChtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVu
ZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBtX25lZWRzRGlz
cGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMTI4LDcgKzEzMCw2IEBAIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdy
YXBoaWNzTGF5CiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKLQog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwogICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogfQpAQCAtMjU5
LDI4ICsyNjAsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0Nv
bnRlbnQoYm9vbCB2YWx1ZSkKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwotdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvciA9IHZhbHVlOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2
YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpCi17Ci0gICAg
aWYgKCFtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7
Ci0gICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Ci19Ci0KLS8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09
IGNvbnRlbnRzT3BhcXVlKCkpCkBAIC0zMjMsOSArMzAyLDE5IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKICov
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogeworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgaWYgKG1faW1hZ2UpIHsKKyAgICAgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4dHVy
ZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2luZ1N0b3Jl
LT5zZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9
IGJhY2tpbmdTdG9yZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAw
OworCisgICAgc2V0Q29udGVudHNUb01lZGlhKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1f
cGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlw
ZTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIApAQCAtMzMzLDggKzMyMiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcioKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
TWVkaWEobWVkaWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dENoYW5nZSk7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4
dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRN
TENvbnRlbnRUeXBlOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRpYTsKKyAgICBt
X2NvbnRlbnRzTGF5ZXIgPSBtZWRpYTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CkBAIC0zNTEsMTMgKzMzOSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpCiAgICAgbV9ub2RlLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSh0aGlzLCBUZXh0dXJlTWFwcGVyTm9kZTo6VHJhdmVyc2VEZXNjZW5kYW50
cyk7CiB9CiAKLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLVBsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcio+KG5vZGUoKS0+
bWVkaWEoKSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFrZXlmcmFtZXNOYW1lLmlzRW1w
dHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDE3MmZk
ZGEuLjhlN2NjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBA
IC02NCw4ICs2NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0Qo
Ym9vbCBiKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sIGIpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
QmFja2dyb3VuZENvbG9yKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJv
b2wgYik7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwpAQCAtNzcsMTAgKzc1
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25z
dCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBu
YW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdl
TWFzayBjaGFuZ2VNYXNrKTsKLSAgICBpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRE
YXRhJiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVuZGluZ0NvbnRlbnQ7IH0KICAgICBp
bmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAg
ICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTg5LDEyICs4NiwyMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKTsKIAogICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9Cisg
ICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KKyAgICBib29sIG5lZWRzRGlzcGxheSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CisgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX25lZWRzRGlzcGxheVJlY3QpOyB9CiAK
IHByaXZhdGU6CiAgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fY29tcG9zaXRlZEltYWdlOworICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsKICAgICBpbnQgbV9j
aGFuZ2VNYXNrOwotICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBtX3BlbmRpbmdD
b250ZW50OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CisgICAgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqIG1fY29udGVudHNMYXllcjsKKyAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciogbV9tZWRpYTsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIFRleHR1
cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0
ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopOwogICAgIFRp
bWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCA1ZTUyOGQ0Li41OGU0ZjU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
Y3BwCkBAIC03Myw3ICs3Myw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1h
cHBlcjo6YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAgICAgcmV0dXJu
IHNlbGVjdGVkVGV4dHVyZTsKIH0KIAotCiBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1
cmVNYXBwZXI6OmNyZWF0ZShBY2NlbGVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUg
PT0gU29mdHdhcmVNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZjI1Y2UwYi4uZmY1MTMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oCkBAIC0xMDYsNiArMTA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblBhaW50aW5nKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9
CiAKKyAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBJ
bnRTaXplKElOVF9NQVgsIElOVF9NQVgpOyB9CisKICAgICAvLyBBIHN1cmZhY2UgaXMgcmVsZWFz
ZWQgaW1wbGljaXRseSB3aGVuIGRlcmVmZXJlbmNlZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gYWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yYjlmN2M3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
Y3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7Cisg
ICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJn
ZXRSZWN0OworCisgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNv
b3JkaW5hdGVzLgorICAgIHNvdXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVj
dC55KCkpOworCisgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBj
b29yZGluYXRlcy4KKyAgICB0YXJnZXRSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgp
KTsKKyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQodGFyZ2V0UmVj
dC5zaXplKCksIC8qIG9wYXF1ZSA9ICovIGZhbHNlKTsKKyAgICB9CisKKyAgICBtX3RleHR1cmUt
PnVwZGF0ZUNvbnRlbnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0
dXJlOjpSR0JBRm9ybWF0KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6cGFpbnQoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICB0ZXh0
dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSgpLmdldCgpLCByZWN0KCksIHRyYW5zZm9y
bSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOjp1cGRhdGVDb250ZW50c0Zyb21JbWFnZUlmTmVlZGVkKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB1
cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBtX2ltYWdlLmdldCgpLCBtX2ltYWdlLT5zaXpl
KCksIG1faW1hZ2UtPnJlY3QoKSk7CisgICAgbV9pbWFnZS5jbGVhcigpOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBU
ZXh0dXJlKiBtYXNrKQoreworICAgIHVwZGF0ZUNvbnRlbnRzRnJvbUltYWdlSWZOZWVkZWQodGV4
dHVyZU1hcHBlcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm07CisgICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RpbGVzW2ldLnBh
aW50KHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRp
bGVzSWZOZWVkZWQoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2l6ZSA9IHNpemU7CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlUmVjdHNUb0FkZDsKKyAg
ICBWZWN0b3I8aW50PiB0aWxlSW5kaWNlc1RvUmVtb3ZlOworICAgIHN0YXRpYyBjb25zdCBpbnQg
VGlsZUVyYXNlVGhyZXNob2xkID0gNjsKKworICAgIC8vIFRoaXMgbWV0aG9kIHJlY3ljbGVzIHRp
bGVzLiBXZSBjaGVjayB3aGljaCB0aWxlcyB3ZSBuZWVkIHRvIGFkZCwgd2hpY2ggdG8gcmVtb3Zl
LCBhbmQgdXNlIGFzIG1hbnkKKyAgICAvLyByZW1vdmFibGUgdGlsZXMgYXMgcmVwbGFjZW1lbnQg
Zm9yIG5ldyB0aWxlcyB3aGVuIHBvc3NpYmxlLgorICAgIGZvciAoZmxvYXQgeSA9IDA7IHkgPCBt
X3NpemUuaGVpZ2h0KCk7IHkgKz0gdGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgZm9yIChm
bG9hdCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4ICs9IHRpbGVTaXplLndpZHRoKCkpIHsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4LCB5LCB0aWxlU2l6ZS53aWR0aCgpLCB0
aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QocmVjdCgp
KTsKKyAgICAgICAgICAgIHRpbGVSZWN0c1RvQWRkLmFwcGVuZCh0aWxlUmVjdCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB3aGljaCB0aWxlcyBuZWVkIHRvIGJlIHJlbW92ZWQs
IGFuZCB3aGljaCBhbHJlYWR5IGV4aXN0LgorICAgIGZvciAoaW50IGkgPSBtX3RpbGVzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIEZsb2F0UmVjdCBvbGRUaWxlID0gbV90aWxl
c1tpXS5yZWN0KCk7CisgICAgICAgIGJvb2wgZXhpc3RzQWxyZWFkeSA9IGZhbHNlOworCisgICAg
ICAgIGZvciAoaW50IGogPSB0aWxlUmVjdHNUb0FkZC5zaXplKCkgLSAxOyBqID49IDA7IC0taikg
eworICAgICAgICAgICAgRmxvYXRSZWN0IG5ld1RpbGUgPSB0aWxlUmVjdHNUb0FkZFtqXTsKKyAg
ICAgICAgICAgIGlmIChvbGRUaWxlICE9IG5ld1RpbGUpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIC8vIEEgdGlsZSB0aGF0IHdlIHdhbnQgdG8gYWRkIGFscmVhZHkg
ZXhpc3RzLCBubyBuZWVkIHRvIGFkZCBvciByZW1vdmUgaXQuCisgICAgICAgICAgICBleGlzdHNB
bHJlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRpbGVSZWN0c1RvQWRkLnJlbW92ZShqKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyB0aWxlIGlzIG5v
dCBuZWVkZWQuCisgICAgICAgIGlmICghZXhpc3RzQWxyZWFkeSkKKyAgICAgICAgICAgIHRpbGVJ
bmRpY2VzVG9SZW1vdmUuYXBwZW5kKGkpOworICAgIH0KKworICAgIC8vIFJlY3ljbGUgcmVtb3Zh
YmxlIHRpbGVzIHRvIGJlIHVzZWQgZm9yIG5ld2x5IHJlcXVlc3RlZCB0aWxlcy4KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRpbGVSZWN0c1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghdGlsZUluZGljZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFdl
IHJlY3ljbGUgYW4gZXhpc3RpbmcgdGlsZSBmb3IgdXNhZ2Ugd2l0aCBhIG5ldyB0aWxlIHJlY3Qu
CisgICAgICAgICAgICBUZXh0dXJlTWFwcGVyVGlsZSYgdGlsZSA9IG1fdGlsZXNbdGlsZUluZGlj
ZXNUb1JlbW92ZS5sYXN0KCldOworICAgICAgICAgICAgdGlsZUluZGljZXNUb1JlbW92ZS5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICB0aWxlLnNldFJlY3QodGlsZVJlY3RzVG9BZGRbaV0pOwor
ICAgICAgICAgICAgaWYgKHRpbGUudGV4dHVyZSgpKQorICAgICAgICAgICAgICAgIHRpbGUudGV4
dHVyZSgpLT5yZXNldChlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCgpKS5zaXplKCksIGZhbHNl
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbV90aWxlcy5h
cHBlbmQoVGV4dHVyZU1hcHBlclRpbGUodGlsZVJlY3RzVG9BZGRbaV0pKTsKKyAgICB9CisKKyAg
ICAvLyBSZW1vdmUgdW5uZWNlc3NhcnkgdGlsZXMsIGlmIHRoZXkgd2VyZW4ndCByZWN5Y2xlZC4K
KyAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyZWF0ZS9k
ZXN0cm95IHRpbGVzIHRvbyBlYWdlcmx5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGls
ZUluZGljZXNUb1JlbW92ZS5zaXplKCkgJiYgbV90aWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJl
c2hvbGQ7ICsraSkKKyAgICAgICAgbV90aWxlcy5yZW1vdmUodGlsZUluZGljZXNUb1JlbW92ZVtp
XSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVDb250
ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdG90YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgY3Jl
YXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3RhbFNpemUsIHRleHR1cmVNYXBwZXItPm1heFRl
eHR1cmVTaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBp
bWFnZSwgZGlydHlSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJl
TWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGlsZXNbaV0udGV4dHVyZSgpOworICAgICAgICBpZiAo
dGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAgIH0KKworICAgIHJldHVy
biBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2
Yzg5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlX2gKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVm
UHRyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0xheWVyOworCitjbGFzcyBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLCBwdWJs
aWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBU
ZXh0dXJlKikgPSAwOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUoKSB7
IH0KK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAgICBpbmxpbmUg
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
dXJlOyB9CisgICAgaW5saW5lIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgaW5saW5lIHZvaWQgc2V0VGV4dHVyZShCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSB7
IG1fdGV4dHVyZSA9IHRleHR1cmU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgeyBtX3JlY3QgPSByZWN0OyB9CisKKyAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqLCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoVGV4dHVyZU1hcHBlciosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZSgp
IHsgfQorCisgICAgVGV4dHVyZU1hcHBlclRpbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICA6IG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKwor
Y2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlIDogcHVibGljIFRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHZvaWQgdXBkYXRlQ29udGVudHNGcm9tTGF5
ZXIoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB+VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBJbWFnZSosIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBpbmxpbmUgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOyB9Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3Jl
KTsgfQorICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkgeyBtX2ltYWdl
ID0gaW1hZ2U7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3Rv
cmUoKSB7IH0KKyAgICB2b2lkIGNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29uc3QgRmxv
YXRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CisgICAg
dm9pZCB1cGRhdGVDb250ZW50c0Zyb21JbWFnZUlmTmVlZGVkKFRleHR1cmVNYXBwZXIqKTsKKwor
ICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZT4gbV90aWxlczsKKyAgICBGbG9hdFNpemUgbV9z
aXplOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKK307CisKK30KKyNlbmRpZiAvLyBUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IDQ1
Yjk0YmQuLmRmMmE1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtMjAsMTYgKzIw
LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUu
aCIKIAorI2luY2x1ZGUgInN0ZGlvLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogCi1uYW1lc3BhY2Ugewot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsKLX0KLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9k
ZShHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTUxLDYgKzQ5LDE2IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KQogICAgIG1fdHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1hdHJpeCk7CiB9CiAKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpCit7CisgICAg
bV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9j
aGlsZHJlbltpXS0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CisgICAgaWYgKG1fc3Rh
dGUubWFza0xheWVyKQorICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+Y2xlYXJCYWNraW5nU3Rv
cmVzUmVjdXJzaXZlKCk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFu
c2Zvcm1zUmVjdXJzaXZlKCkKIHsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRl
Lm1hc2tzVG9Cb3VuZHMpCkBAIC04MSwxMDAgKzg5LDI3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OmNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCkKICAgICAgICAgc29ydEJ5Wk9yZGVyKG1f
Y2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZVRpbGVzKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwZGF0ZUJhY2tp
bmdTdG9yZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXll
cikKIHsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9zdGF0ZS50aWxl
T3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCisgICAgaWYgKCFsYXllciB8fCAh
dGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmICFtX3N0YXRlLmRyYXdz
Q29udGVudCkgewotICAgICAgICBtX293bmVkVGlsZXMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlc1RvQWRkOwotICAgIFZlY3Rvcjxp
bnQ+IHRpbGVzVG9SZW1vdmU7Ci0gICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVzaG9sZCA9IDY7
Ci0gICAgRmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOwotICAgIEZsb2F0UmVjdCBjb250
ZW50UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgZm9yIChm
bG9hdCB5ID0gMDsgeSA8IGNvbnRlbnRSZWN0LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9u
KSB7Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4
ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwg
eSwgZ1RpbGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKLSAgICAgICAgICAgIHRpbGVSZWN0
LmludGVyc2VjdChjb250ZW50UmVjdCk7Ci0gICAgICAgICAgICB0aWxlc1RvQWRkLmFwcGVuZCh0
aWxlUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gbV9vd25lZFRp
bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UmVjdCBv
bGRUaWxlID0gbV9vd25lZFRpbGVzW2ldLnJlY3Q7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKIAotICAgICAgICBmb3IgKGludCBqID0gdGlsZXNUb0FkZC5zaXplKCkgLSAxOyBqID49IDA7
IC0taikgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0IG5ld1RpbGUgPSB0aWxlc1RvQWRk
W2pdOwotICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0gbmV3VGlsZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgdGls
ZXNUb0FkZC5yZW1vdmUoaik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZChpKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9BZGQuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCF0aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
T3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVzVG9SZW1vdmVbMF1dOwotICAgICAg
ICAgICAgdGlsZXNUb1JlbW92ZS5yZW1vdmUoMCk7Ci0gICAgICAgICAgICB0aWxlLnJlY3QgPSB0
aWxlc1RvQWRkW2ldOwotICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgT3duZWRUaWxlIHRpbGU7Ci0g
ICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Ci0gICAgICAgIHRpbGUubmVlZHNSZXNl
dCA9IHRydWU7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5hcHBlbmQodGlsZSk7Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKSAmJiBtX293bmVk
VGlsZXMuc2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNob2xkOyArK2kpCi0gICAgICAgIG1fb3duZWRU
aWxlcy5yZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NM
YXllciogbGF5ZXIpCi17Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1f
c3RhdGUudGlsZU93bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQorICAgIGlmICgh
bV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIpCiAgICAgICAgIHJldHVybjsKLSNl
bmRpZgogCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICghbV9zdGF0ZS5k
cmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVu
dFR5cGUpKSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOworICAgIGlmICghbV9zdGF0
ZS5kcmF3c0NvbnRlbnQgfHwgbV9zaXplLmlzRW1wdHkoKSkgeworICAgICAgICBtX2JhY2tpbmdT
dG9yZS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0ZXh0dXJl
TWFwcGVyKQorICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRl
Lm5lZWRzRGlzcGxheSA/IGxheWVyUmVjdCgpIDogbV9zdGF0ZS5uZWVkc0Rpc3BsYXlSZWN0KTsK
KyAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50
UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNE
aXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0
KTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IFRl
eHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CiAKLSAgICBmb3IgKHNpemVf
dCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJ
bmRleCkgewotICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4
XTsKLSAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUpCi0gICAgICAgICAgICB0aWxlLnRleHR1cmUg
PSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiYgdGV4dHVyZSA9IHRpbGUudGV4dHVyZTsKLSAgICAgICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0KS5zaXplKCk7Ci0KLSAgICAgICAgaWYgKHRp
bGUubmVlZHNSZXNldCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8ICF0
ZXh0dXJlLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZhbHNl
OwotICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fc3RhdGUuY29udGVudHNP
cGFxdWUpOwotICAgICAgICAgICAgZGlydHlSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodGls
ZS5yZWN0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkeW5hbWljX2Nhc3Q8VGV4dHVlck1hcHBl
clRpbGVkQmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKIAogICAgIC8vIFBh
aW50IHRoZSBlbnRpcmUgZGlydHkgcmVjdCBpbnRvIGFuIGltYWdlIGJ1ZmZlci4gVGhpcyBlbnN1
cmVzIHdlIG9ubHkgcGFpbnQgb25jZS4KICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpKTsKQEAgLTE4Myw4ICsx
MTgsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogICAgIGNvbnRleHQtPnNldFRleHREcmF3
aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CiAgICAgY29udGV4dC0+
dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CiAgICAgbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGlmICht
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCi0g
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CiAKICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlOwogCkBAIC0xOTUsMTA0ICsxMjgsMzUgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGlj
c0xheWUKICAgICBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7CiAjZW5kaWYKIAotICAgIC8vIERpdmlkZSB0aGUgaW1hZ2UgdG8gdGlsZXMuCi0gICAgZm9y
IChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsg
Kyt0aWxlSW5kZXgpIHsKLSAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3Rp
bGVJbmRleF07Ci0gICAgICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
dGlsZS5yZWN0KTsKLSAgICAgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKLSAg
ICAgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRhcmdldFJlY3Q7Ci0KLSAgICAgICAgLy8gTm9y
bWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNvb3JkaW5hdGVzLgotICAgICAgICBz
b3VyY2VSZWN0Lm1vdmUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKLQotICAgICAg
ICAvLyBOb3JtYWxpemUgdGFyZ2V0UmVjdCB0byB0aGUgdGV4dHVyZSdzIGNvb3JkaW5xYXRlcy4K
LSAgICAgICAgdGFyZ2V0UmVjdC5tb3ZlKC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7
Ci0gICAgICAgIHRpbGUudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdl
dFJlY3QsIHNvdXJjZVJlY3QsIEJpdG1hcFRleHR1cmU6OlJHQkFGb3JtYXQpOwotICAgIH0KLQot
ICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIHN0YXRpY19jYXN0PFRl
eHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKS0+dXBk
YXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGlydHlSZWN0
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoKQogewotICAgIGlmIChtX3Np
emUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb21wdXRlVHJhbnNmb3Jtc1Jl
Y3Vyc2l2ZSgpOwogCi0gICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHQ7Ci0gICAgb3B0
LnRleHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKDApOwotICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7Ci19Ci0KLUZsb2F0UmVj
dCBUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVS
ZWN0LngoKSAtIHRhcmdldFJlY3QueCgpKSwKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0Lnko
KSArICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgdGls
ZVJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSk7CisgICAg
VGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlciA9IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKDApOworICAgIHBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOwogfQogCiB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAoIW1fc3RhdGUuZHJhd3ND
b250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBl
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0
eTsKLSAgICBCaXRtYXBUZXh0dXJlKiBtYXNrID0gb3B0aW9ucy5tYXNrOwotICAgIEZsb2F0UmVj
dCB0YXJnZXRSZWN0ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOwotCiAgICAgLy8gV2UgYXBwbHkgdGhl
IGZvbGxvd2luZyB0cmFuc2Zvcm0gdG8gY29tcGVuc2F0ZSBmb3IgcGFpbnRpbmcgaW50byBhIHN1
cmZhY2UsIGFuZCB0aGVuIGFwcGx5IHRoZSBvZmZzZXQgc28gdGhhdCB0aGUgcGFpbnRpbmcgZml0
cyBpbiB0aGUgdGFyZ2V0IHJlY3QuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
ID0KICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG9wdGlvbnMudHJhbnNmb3JtKQog
ICAgICAgICAgICAgLm11bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkpCiAgICAgICAgICAg
ICAudHJhbnNsYXRlKG9wdGlvbnMub2Zmc2V0LndpZHRoKCksIG9wdGlvbnMub2Zmc2V0LmhlaWdo
dCgpKTsKIAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFZlY3RvcjxFeHRlcm5h
bGx5TWFuYWdlZFRpbGU+IHRpbGVzVG9QYWludDsKLQotICAgIGlmIChtX3N0YXRlLnRpbGVPd25l
cnNoaXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykgewotICAgICAgICAvLyBTb3J0IHRpbGVz
LCB3aXRoIGN1cnJlbnQgc2NhbGUgZmFjdG9yIGxhc3QuCi0gICAgICAgIFZlY3RvcjxFeHRlcm5h
bGx5TWFuYWdlZFRpbGUqPiB0aWxlczsKLSAgICAgICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlN
YW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQo
KTsKLSAgICAgICAgZm9yIChIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQuZnJvbnRCdWZmZXIudGV4dHVyZSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
c2NhbGUgPT0gbV9zdGF0ZS5jb250ZW50U2NhbGUpIHsKLSAgICAgICAgICAgICAgICB0aWxlcy5h
cHBlbmQoJml0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSB0cmFuc2l0aW9uYWwgZWZmZWN0
IGxvb2tzIGdvb2Qgb25seSB3aGVuIHRoZXJlJ3Mgbm8gdHJhbnNwYXJlbmN5LCBzbyB3ZSBvbmx5
IHVzZSBpdCB3aGVuIHRoZSBvcGFjaXR5IGZvciB0aGUgbGF5ZXIgaXMgYWJvdmUgYSBjZXJ0YWlu
IHRocmVzaG9sZC4KLSAgICAgICAgICAgIGlmIChvcGFjaXR5ID4gMC45NSkKLSAgICAgICAgICAg
ICAgICB0aWxlcy5wcmVwZW5kKCZpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9ICp0aWxlc1tpXTsKLSAgICAgICAgICAgIEZsb2F0UmVj
dCByZWN0ID0gdGlsZS5mcm9udEJ1ZmZlci50YXJnZXRSZWN0OwotICAgICAgICAgICAgQml0bWFw
VGV4dHVyZSYgdGV4dHVyZSA9ICp0aWxlLmZyb250QnVmZmVyLnRleHR1cmU7Ci0gICAgICAgICAg
ICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlY3QsIHRyYW5z
Zm9ybSwgb3BhY2l0eSwgbWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgorICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IG1hc2sgPSBvcHRpb25zLm1hc2s7CiAKLSAgICAvLyBOb3cgd2UgcGFp
bnQgb3duZWQgdGlsZXMsIGlmIHdlJ3JlIGluIE93bmVkVGlsZU1vZGUuCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQml0bWFw
VGV4dHVyZSogdGV4dHVyZSA9IG1fb3duZWRUaWxlc1tpXS50ZXh0dXJlLmdldCgpOwotICAgICAg
ICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0
LCBtX293bmVkVGlsZXNbaV0ucmVjdCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
ZHJhd1RleHR1cmUoKnRleHR1cmUsIHJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Ci0g
ICAgfQorICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9iYWNraW5nU3RvcmUtPnBh
aW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbGF5ZXJSZWN0KCksIHRy
YW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7CiAKLSAgICBpZiAobV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVk
aWEpCi0gICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBhaW50VG9UZXh0dXJlTWFwcGVy
KG9wdGlvbnMudGV4dHVyZU1hcHBlciwgdGFyZ2V0UmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBt
YXNrKTsKKyAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBtX2NvbnRlbnRzTGF5ZXIt
PnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5jb250
ZW50c1JlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7CiB9CiAKIGludCBUZXh0
dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEs
IGNvbnN0IHZvaWQqIGIpCkBAIC0zMzIsNyArMTk2LDcgQEAgSW50UmVjdCBUZXh0dXJlTWFwcGVy
Tm9kZTo6aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0KIHsKICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxU
cmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtYXRyaXgpLm11bHRpcGx5KG1fdHJhbnNm
b3JtLmNvbWJpbmVkKCkpOwotICAgIHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxvY2FsVHJhbnNm
b3JtLm1hcFJlY3QoZW50aXJlUmVjdCgpKSk7CisgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
bG9jYWxUcmFuc2Zvcm0ubWFwUmVjdChsYXllclJlY3QoKSkpOwogICAgIGlmICghbV9zdGF0ZS5t
YXNrc1RvQm91bmRzICYmICFtX3N0YXRlLm1hc2tMYXllcikgewogICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICByZWN0LnVuaXRl
KG1fY2hpbGRyZW5baV0tPmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KG1hdHJpeCkpOwpAQCAtNDMz
LDcgKzI5Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKGNvbnN0
IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyKQogICAgICAgICBtYXNrVGV4dHVyZSA9IDA7CiAKLSAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UuZ2V0KCkpOwogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRhcmdldFRyYW5zZm9ybSA9CiAgICAgICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChvcHRpb25zLnRyYW5zZm9ybSkKICAgICAgICAgICAgICAgICAubXVsdGlwbHko
bV90cmFuc2Zvcm0uY29tYmluZWQoKSkKQEAgLTQ1MCw4OSArMzE0LDYgQEAgVGV4dHVyZU1hcHBl
ck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCiAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVu
LnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKIH0KIAotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjcmVhdGVDb250ZW50
c1RpbGUoZmxvYXQgc2NhbGUpCi17Ci0gICAgc3RhdGljIGludCBuZXh0SUQgPSAwOwotICAgIGlu
dCBpZCA9ICsrbmV4dElEOwotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5hZGQoaWQsIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZShzY2FsZSkpOwotICAgIG1fc3RhdGUuY29udGVudFNjYWxlID0g
c2NhbGU7Ci0gICAgcmV0dXJuIGlkOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW1v
dmVDb250ZW50c1RpbGUoaW50IGlkKQotewotICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5y
ZW1vdmUoaWQpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwdXJnZU5vZGVUZXh0dXJl
c1JlY3Vyc2l2ZSgpCi17Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmNsZWFyKCk7Ci0K
LSAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKLSAg
ICAgICAgbV9jaGlsZHJlbltpXS0+cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKLX0KLQot
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAg
SGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRl
cm5hbGx5TWFuYWdlZFRpbGVzLmZpbmQoaWQpOwotCi0gICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxs
eU1hbmFnZWRUaWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLQotICAgIHRpbGUuYmFja0J1ZmZlci5zb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IHRh
cmdldFJlY3Q7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSB0ZXh0dXJlOwotICAgIHRp
bGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7Ci0gICAgdGlsZS5pc0RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCkKLXsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBF
eHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRU
aWxlcy5iZWdpbigpOyBpdCAhPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSkKLSAg
ICAgICAgICAgIG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5yZW1vdmUoaXQpOwotICAgIH0KLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0KLSAg
ICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4
dGVybmFsbHlNYW5hZ2VkVGlsZXMuZmluZChpZCk7Ci0gICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxs
eU1hbmFnZWRUaWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLQotICAgIHRpbGUuYmFja0J1ZmZlci5zb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IEZs
b2F0UmVjdCh0YXJnZXRSZWN0KTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdC5zY2Fs
ZSgxLjAgLyB0aWxlLnNjYWxlKTsKLQotICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUp
Ci0gICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVh
dGVUZXh0dXJlKCk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJl
Y3Quc2l6ZSgpLCBmYWxzZSk7Ci0gICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNv
bnRlbnRzKGRhdGEsIHNvdXJjZVJlY3QpOwotICAgIHRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCA9
IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN3YXBDb250ZW50c0J1ZmZlcnMo
KQotewotICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBl
bmQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGlu
dCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5h
Z2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEV4dGVybmFsbHlN
YW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghdGlsZS5pc0JhY2tC
dWZmZXJVcGRhdGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRpbGUuaXNCYWNr
QnVmZmVyVXBkYXRlZCA9IGZhbHNlOwotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZm
ZXIgc3dhcEJ1ZmZlciA9IHRpbGUuZnJvbnRCdWZmZXI7Ci0gICAgICAgIHRpbGUuZnJvbnRCdWZm
ZXIgPSB0aWxlLmJhY2tCdWZmZXI7Ci0gICAgICAgIHRpbGUuYmFja0J1ZmZlciA9IHN3YXBCdWZm
ZXI7Ci0gICAgfQotfQotI2VuZGlmCi0KIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBp
bnQgb3B0aW9ucykKIHsKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZShncmFwaGljc0xheWVyLCBy
b290TGF5ZXIoKS0+bV90ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKQEAgLTU0MSwxNCArMzIyLDEx
IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNz
TGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7CiAgICAgaW50IGNoYW5nZU1h
c2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7Ci0gICAgY29uc3QgVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRp
bmdDb250ZW50KCk7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3dhcENvbnRl
bnRzQnVmZmVycygpOwotI2VuZGlmCi0gICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYm
IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQu
bmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eSkKKworICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBncmFwaGljc0xheWVyLT5t
X2FuaW1hdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKGNoYW5nZU1hc2sg
JiBQYXJlbnRDaGFuZ2UpKSB7CisgICAgaWYgKGNoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpIHsK
ICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5ld1BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUoZ3JhcGhpY3NMYXllci0+cGFyZW50KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50ICE9IG1f
cGFyZW50KSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIGN1cnJlbnQgZnJvbSBj
aGlsZCBsaXN0IGZpcnN0LgpAQCAtNTgwLDE2ICszNTgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
IGdyYQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiAoU2l6ZUNoYW5n
ZSB8IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKLSAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUo
Z3JhcGhpY3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWln
aHQoKSk7Ci0gICAgICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVu
dC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXpl
ID0gRmxvYXRTaXplKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBo
aWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKLQotICAgICAgICBpZiAod2FudGVk
U2l6ZSAhPSBtX3NpemUpCi0gICAgICAgICAgICBtX293bmVkVGlsZXMuY2xlYXIoKTsKLQotICAg
ICAgICBtX3NpemUgPSB3YW50ZWRTaXplOwotICAgIH0KKyAgICBtX3NpemUgPSBncmFwaGljc0xh
eWVyLT5zaXplKCk7CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkgewog
ICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKSkKQEAgLTYxOSwxMyArMzg4LDEwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogZ3JhCiAgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgPSBncmFw
aGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBtX3N0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKICAgICBtX3N0YXRl
Lm9wYWNpdHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7Ci0KLSAgICBtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID0gcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGU7Ci0gICAgbV9jdXJy
ZW50Q29udGVudC5pbWFnZSA9IHBlbmRpbmdDb250ZW50LmltYWdlOwotICAgIG1fY3VycmVudENv
bnRlbnQubWVkaWEgPSBwZW5kaW5nQ29udGVudC5tZWRpYTsKLSAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IHBlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheTsKLSAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5KQotICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVu
ZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgbV9zdGF0ZS5uZWVkc0Rpc3BsYXkg
PSBtX3N0YXRlLm5lZWRzRGlzcGxheSB8fCBncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXkoKTsK
KyAgICBpZiAoIW1fc3RhdGUubmVlZHNEaXNwbGF5KQorICAgICAgICBtX3N0YXRlLm5lZWRzRGlz
cGxheVJlY3QudW5pdGUoZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpKTsKKyAgICBt
X2NvbnRlbnRzTGF5ZXIgPSBncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCk7CiAKICAgICBt
X3RyYW5zZm9ybS5zZXRQb3NpdGlvbihtX3N0YXRlLnBvcyk7CiAgICAgbV90cmFuc2Zvcm0uc2V0
QW5jaG9yUG9pbnQobV9zdGF0ZS5hbmNob3JQb2ludCk7CkBAIC02NjYsNiArNDMyLDkgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpCiAKIHZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBp
bnQgb3B0aW9ucykKIHsKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCisgICAgICAgIHJldHVybjsK
KwogICAgIGlmIChncmFwaGljc0xheWVyICYmICEob3B0aW9ucyAmIENvbXB1dGF0aW9uc09ubHkp
KSB7CiAgICAgICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVyLCB0ZXh0
dXJlTWFwcGVyKTsKICAgICAgICAgZ3JhcGhpY3NMYXllci0+ZGlkU3luY2hyb25pemUoKTsKQEAg
LTY4MywxMCArNDUyLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICAgICAgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCB0ZXh0dXJlTWFwcGVyKTsK
IAogICAgIHN5bmNBbmltYXRpb25zKCk7Ci0gICAgY29tcHV0ZVRpbGVzKCk7Ci0KLSAgICBpZiAo
Z3JhcGhpY3NMYXllcikKLSAgICAgICAgcmVuZGVyQ29udGVudCh0ZXh0dXJlTWFwcGVyLCBncmFw
aGljc0xheWVyKTsKKyAgICB1cGRhdGVCYWNraW5nU3RvcmUodGV4dHVyZU1hcHBlciwgZ3JhcGhp
Y3NMYXllcik7CiAKICAgICBpZiAoIShvcHRpb25zICYgVHJhdmVyc2VEZXNjZW5kYW50cykpCiAg
ICAgICAgIG9wdGlvbnMgPSBDb21wdXRhdGlvbnNPbmx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApp
bmRleCAyMzBjOWUwLi4xMzdiZjA2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJMYXllclRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpA
QCAtNDIsMTYgKzQzLDE0IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIHsKIHB1YmxpYzoKLSAgICBCaXRtYXBUZXh0
dXJlKiBzdXJmYWNlOwotICAgIEJpdG1hcFRleHR1cmUqIG1hc2s7CisgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+IHN1cmZhY2U7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2s7CiAgICAg
ZmxvYXQgb3BhY2l0eTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAg
SW50U2l6ZSBvZmZzZXQ7CiAgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKICAgICBU
ZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKCkKLSAgICAgICAgOiBzdXJmYWNlKDApCi0gICAgICAg
ICwgbWFzaygwKQotICAgICAgICAsIG9wYWNpdHkoMSkKKyAgICAgICAgOiBvcGFjaXR5KDEpCiAg
ICAgICAgICwgdGV4dHVyZU1hcHBlcigwKQogICAgIHsgfQogfTsKQEAgLTk3LDM3ICs5NiwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIENvbXB1dGF0aW9uc09ubHkgPSAyCiAgICAgfTsKIAotICAgIGVu
dW0gVGlsZU93bmVyc2hpcCB7Ci0gICAgICAgIE93bmVkVGlsZXMsCi0gICAgICAgIEV4dGVybmFs
bHlNYW5hZ2VkVGlsZXMKLSAgICB9OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFRleHR1cmVNYXBw
ZXJOb2RlKiwgRmxvYXRSZWN0PiBOb2RlUmVjdE1hcDsKLQotICAgIC8vIFRoZSBjb21wb3NpdG9y
IGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8g
c28uCi0gICAgZW51bSBDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VD
b250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RD
b250ZW50VHlwZX07Ci0gICAgc3RydWN0IENvbnRlbnREYXRhIHsKLSAgICAgICAgRmxvYXRSZWN0
IG5lZWRzRGlzcGxheVJlY3Q7Ci0gICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OwotICAgICAgICBD
b2xvciBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAgICAgQ29udGVudFR5cGUgY29udGVudFR5cGU7
Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyKiBtZWRpYTsKLSAgICAgICAgQ29udGVudERhdGEoKQotICAgICAgICAg
ICAgOiBuZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgICAgICAgICAsIGNvbnRlbnRUeXBlKEhUTUxD
b250ZW50VHlwZSkKLSAgICAgICAgICAgICwgaW1hZ2UoMCkKLSAgICAgICAgICAgICwgbWVkaWEo
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQogICAgIFRleHR1cmVNYXBwZXJOb2Rl
KCkKICAgICAgICAgOiBtX3BhcmVudCgwKQogICAgICAgICAsIG1fZWZmZWN0VGFyZ2V0KDApCisg
ICAgICAgICwgbV9jb250ZW50c0xheWVyKDApCiAgICAgICAgICwgbV9vcGFjaXR5KDEpCiAgICAg
ICAgICwgbV9jZW50ZXJaKDApCisgICAgICAgICwgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIodHJ1ZSkKICAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIoMCkKICAgICB7IH0KIApA
QCAtMTQ0LDE5ICsxMTksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludCgpOwogCi0jaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdm9pZCBzZXRUaWxlT3duZXJzaGlwKFRpbGVP
d25lcnNoaXAgb3duZXJzaGlwKSB7IG1fc3RhdGUudGlsZU93bmVyc2hpcCA9IG93bmVyc2hpcDsg
fQotICAgIGludCBjcmVhdGVDb250ZW50c1RpbGUoZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVt
b3ZlQ29udGVudHNUaWxlKGludCBpZCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1RpbGVCYWNrQnVm
ZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3Qgdm9pZCopOwotICAgIHZvaWQgc2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJl
Rm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqKTsKLSAgICB2
b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOwotICAgIHZvaWQgcHVy
Z2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0SUQoaW50IGlk
KSB7IG1faWQgPSBpZDsgfQotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQot
ICAgIGNvbnN0IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtZWRpYSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudENvbnRlbnQubWVkaWE7IH0KKyAgICB2b2lkIHNldFNob3VsZFVwZGF0ZUJh
Y2tpbmdTdG9yZUZyb21MYXllcihib29sIGIpIHsgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIgPSBiOyB9CisgICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3Jl
OyB9CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZTsgfQorICAgIHZvaWQgY2xlYXJCYWNraW5nU3Rv
cmVzUmVjdXJzaXZlKCk7CiAKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RM
YXllcigpOwpAQCAtMTc0LDEzICsxNDAsMTMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGNv
bXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsK
ICAgICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+
JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiAKLSAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0
dXJlKCkgeyByZXR1cm4gbV9vd25lZFRpbGVzLmlzRW1wdHkoKSA/IDAgOiBtX293bmVkVGlsZXNb
MF0udGV4dHVyZS5nZXQoKTsgfQorICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPnRleHR1cmUoKSA6
IDA7IH0KIAogICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9w
dGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBw
ZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxp
Y2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwotICAgIHZvaWQgcmVuZGVyQ29u
dGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgdXBkYXRlQmFj
a2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7CiAKICAgICB2b2lkIHN5
bmNBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKQEAgLTE4OCw2MyAr
MTU0LDIxIEBAIHByaXZhdGU6CiAKICAgICBMYXllclRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIAot
ICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgPyBl
bnRpcmVSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
RmxvYXRSZWN0IGVudGlyZVJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICBGbG9hdFNpemUgY29udGVudFNpemUoKSBjb25zdAorICAgIGlubGluZSBGbG9hdFJlY3QgbGF5
ZXJSZWN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5p
bWFnZSA/IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7CiAgICAgfQotICAg
IHN0cnVjdCBPd25lZFRpbGUgewotICAgICAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0gICAgICAgIGJvb2wgbmVlZHNSZXNldDsKLSAg
ICB9OwotCi0gICAgVmVjdG9yPE93bmVkVGlsZT4gbV9vd25lZFRpbGVzOwotCi0jaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZl
ciB7Ci0gICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0OwotICAgICAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdDsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7Ci0gICAgfTsK
LQotICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUgewotICAgICAgICBib29sIGlzQmFj
a0J1ZmZlclVwZGF0ZWQ7Ci0gICAgICAgIGJvb2wgaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZTsK
LSAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZl
ciBmcm9udEJ1ZmZlcjsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIGJhY2tC
dWZmZXI7Ci0KLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlKGZsb2F0IHNjYWxlID0gMS4w
KQotICAgICAgICAgICAgOiBpc0JhY2tCdWZmZXJVcGRhdGVkKGZhbHNlKQotICAgICAgICAgICAg
LCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGZhbHNlKQotICAgICAgICAgICAgLCBzY2FsZShz
Y2FsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEhhc2hNYXA8aW50LCBF
eHRlcm5hbGx5TWFuYWdlZFRpbGU+IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlczsKLSNlbmRpZgot
Ci0gICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVudDsKIAogICAgIFZlY3RvcjxUZXh0dXJl
TWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50
OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX2VmZmVjdFRhcmdldDsKKyAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIqIG1fY29udGVudHNMYXllcjsKICAgICBGbG9hdFNpemUgbV9zaXplOwog
ICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBmbG9hdCBtX2NlbnRlclo7CiAgICAgU3RyaW5nIG1f
bmFtZTsKLSAgICBpbnQgbV9pZDsKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3Jl
RnJvbUxheWVyOwogCiAgICAgc3RydWN0IFN0YXRlIHsKICAgICAgICAgRmxvYXRQb2ludCBwb3M7
CkBAIC0yNTQsNiArMTc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY2hpbGRyZW5UcmFuc2Zvcm07CiAgICAgICAgIGZsb2F0IG9wYWNpdHk7CiAgICAgICAgIEZs
b2F0UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0
OwogICAgICAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudDsKICAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIG1hc2tMYXllcjsKICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FM
YXllcjsKQEAgLTI2MywxMyArMTg4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjb250ZW50
c09wYXF1ZSA6IDE7CiAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5IDogMTsKICAgICAg
ICAgYm9vbCB2aXNpYmxlIDogMTsKLSAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OiAxOworICAgICAg
ICBib29sIG5lZWRzRGlzcGxheTogMTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVybGFwcyA6
IDE7CiAgICAgICAgIGJvb2wgbmVlZHNSZXBhaW50OwotICAgICAgICBmbG9hdCBjb250ZW50U2Nh
bGU7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIFRpbGVPd25lcnNoaXAg
dGlsZU93bmVyc2hpcDsKLSNlbmRpZgogICAgICAgICBTdGF0ZSgpCiAgICAgICAgICAgICA6IG9w
YWNpdHkoMS5mKQogICAgICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKQEAgLTI4MCwxMyArMjAxLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgY29udGVudHNPcGFxdWUoZmFsc2UpCiAgICAgICAg
ICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKICAgICAgICAgICAgICwgdmlzaWJsZSh0
cnVlKQotICAgICAgICAgICAgLCBuZWVkc1Jlc2V0KGZhbHNlKQorICAgICAgICAgICAgLCBuZWVk
c0Rpc3BsYXkodHJ1ZSkKICAgICAgICAgICAgICwgbWlnaHRIYXZlT3ZlcmxhcHMoZmFsc2UpCiAg
ICAgICAgICAgICAsIG5lZWRzUmVwYWludChmYWxzZSkKLSAgICAgICAgICAgICwgY29udGVudFNj
YWxlKDEuMGYpCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgICAgICAsIHRp
bGVPd25lcnNoaXAoT3duZWRUaWxlcykKLSNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KICAg
ICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAppbmRleCAxYjI5Mjkw
Li5jNjljMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAt
MjAsNyArMjAsNiBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCiAjZGVm
aW5lIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMwLDcgKzI5LDggQEAgY2xhc3MgQml0bWFwVGV4dHVyZTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIGZsb2F0IG9wYWNpdHkgPSAxLjAsIEJpdG1hcFRleHR1cmUqIG1hc2sgPSAwKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIq
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0
bWFwVGV4dHVyZSogbWFzayA9IDApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMo
KSB7IH0KIH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzMxYzAzMC4uNmYzNTI1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAyLTEzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJv
c2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtUZXhtYXBdIFJlZmFjdG9yIGJhY2tp
bmctc3RvcmUgY29kZSBpbiBUZXh0dXJlTWFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODMwNQorCisgICAgICAgIE1vdmUgdGhlIGJhY2tpbmct
c3RvcmUgY29kZSB0byBMYXllclRyZWVCYWNraW5nU3RvcmUsIGltcGxlbWVudGluZyB0aGUgdmly
dHVhbCBmdW5jdGlvbnMKKyAgICAgICAgaW4gVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS4KKyAg
ICAgICAgV2Ugc2F2ZSB0aGUgZG91YmxlLWJ1ZmZlcmVkIHRpbGUgaW4gdGhlIGJhY2tpbmctc3Rv
cmUsIGFuZCB0aGVuIGNvbnZlcnQgdGhlbSB0byByZWd1bGFyCisgICAgICAgIHRpbGVzIGluIHVw
ZGF0ZUNvbnRlbnRzLCBiYXNlZCBvbiB0aGUgb3JkZXIgb2YgcGFpbnRpbmcuCisgICAgICAgIFVz
ZSBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlIGZvciBpbWFnZXMgaW5zdGVhZCBvZiBzYXZp
bmcgb3VyIG93biBjb21wb3NpdGVkIGltYWdlCisgICAgICAgIHJlZ2lzdHJ5LgorCisgICAgICAg
IFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRh
dGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6YXNzaWduSW1hZ2VUb0xh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3Vy
Y2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzLnBybzoKKworCiAyMDEyLTAyLTExICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTA3NDM1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggY2VkZTRlYS4uZmFlNjVkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCkBAIC0yNTMsNiArMjUzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9j
ZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZENsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaCBcCisgICAg
VUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
YkNvbnRleHQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIFwKQEAgLTU4MSw2ICs1ODIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmNw
cCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViQ29udGV4dC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5oCmluZGV4IDRjOTcxODcuLjNkYjBjZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTMwLDE1ICszMCwxNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7CiBjbGFzcyBXZWJMYXll
ckluZm87CiBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiAKQEAgLTk4LDEyICsxMDAsNiBAQCBw
cm90ZWN0ZWQ6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQotICAgIHR5cGVkZWYgSGFzaE1h
cDxXZWJDb3JlOjpJbnRQb2ludCwgUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+ID4gVGls
ZWRJbWFnZTsKLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RNYXAgbV9u
b2RlVmlzdWFsQ29udGVudHNSZWN0TWFwOwotICAgIEhhc2hNYXA8aW50LCBpbnQ+IG1fdGlsZVRv
Tm9kZVRpbGU7Ci0gICAgaW50IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBj
b25zdDsKLSAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzOwotCiAgICAgdm9pZCBzY2hlZHVsZVdlYlZpZXdVcGRhdGUoKTsKICAgICB2b2lk
IHN5bmNocm9uaXplVmlld3BvcnQoKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQp
OwpAQCAtMTE4LDExICsxMTQsMTQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmx1c2hMYXllckNo
YW5nZXMoKTsKICAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwogICAgIHZvaWQgZW5zdXJlTGF5
ZXIoV2ViTGF5ZXJJRCk7Ci0KKyAgICBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBnZXRC
YWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzd2FwQnVmZmVycygpOwogI2VuZGlm
CiAKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAg
VmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
PiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CiAKICNpZiBQTEFURk9STShRVCkK
ICAgICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExheWVy
VHJlZUhvc3RQcm94eT4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFh
NjRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVy
QmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSAic3RkaW8uaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIExheWVyQmFja2luZ1N0b3Jl
VGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
K3sKKyAgICBpZiAoIW1fYmFja0J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QgPSBtX3RhcmdldFJlY3Q7CisgICAgdGFyZ2V0UmVjdC5zY2FsZSgxLiAv
IG1fc2NhbGUpOworICAgIHNldFJlY3QodGFyZ2V0UmVjdCk7CisgICAgUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlKSB7Cisg
ICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAg
IHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7CisgICAgfQorCisgICAgdGV4dHVyZS0+cmVzZXQo
ZW5jbG9zaW5nSW50UmVjdChtX3NvdXJjZVJlY3QpLnNpemUoKSwgZmFsc2UpOworICAgIHRleHR1
cmUtPnVwZGF0ZUNvbnRlbnRzKG1fYmFja0J1ZmZlci0+Y3JlYXRlUUltYWdlKCkuY29uc3RCaXRz
KCksIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9iYWNrQnVmZmVyLT5zaXplKCkpKTsKKyAg
ICBtX2JhY2tCdWZmZXIuY2xlYXIoKTsKK30KKwordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y3Jl
YXRlVGlsZShpbnQgaWQsIGZsb2F0IHNjYWxlKQoreworICAgIG1fdGlsZXMuYWRkKGlkLCBMYXll
ckJhY2tpbmdTdG9yZVRpbGUoc2NhbGUpKTsKKyAgICBtX3NjYWxlID0gc2NhbGU7Cit9CisKK3Zv
aWQgTGF5ZXJCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50IGlkKQoreworICAgIG1fdGlsZXMu
cmVtb3ZlKGlkKTsKK30KKwordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IFNoYXJlYWJsZUJpdG1hcCogYmFja0J1ZmZlcikKK3sKKyAgICBIYXNoTWFwPGludCwgTGF5ZXJC
YWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFT
U0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKKyAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIo
dGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7Cit9CisKK1Bhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gTGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGls
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRl
eHR1cmUoKTsKKyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4gdGV4dHVy
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOworfQor
Cit2b2lkIExheWVyQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQor
eworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRpbGVzVG9QYWludDsKKworICAgIC8v
IFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50LCBpbiBjYXNlIHRoZSBvcGFj
aXR5IGhhcyBjaGFuZ2VkLgorICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIExh
eWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTGF5ZXJCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQt
PnNlY29uZDsKKyAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmICh0aWxlLnNjYWxlKCkgPT0gbV9zY2FsZSkgeworICAgICAgICAg
ICAgdGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgcHJldmlvdXMgdGlsZSBpZiB0aGUg
b3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZmZWN0IGxvb2tzIGxpa2UgYSBidWcuCisgICAg
ICAgIGlmIChvcGFjaXR5ID4gMC45NSkKKyAgICAgICAgICAgIHRpbGVzVG9QYWludC5wcmVwZW5k
KCZ0aWxlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9QYWlu
dC5zaXplKCk7ICsraSkKKyAgICAgICAgdGlsZXNUb1BhaW50W2ldLT5wYWludCh0ZXh0dXJlTWFw
cGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOworfQorCit2b2lkIExheWVyQmFja2luZ1N0
b3JlOjpzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0
LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODAzYThkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIExheWVyQmFj
a2luZ1N0b3JlX2gKKyNkZWZpbmUgTGF5ZXJCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiSGFz
aE1hcC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZVRpbGUgOiBwdWJsaWMgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclRpbGUgeworcHVibGljOgorICAgIExheWVyQmFja2luZ1N0b3Jl
VGlsZShmbG9hdCBzY2FsZSA9IDEpCisgICAgICAgIDogVGV4dHVyZU1hcHBlclRpbGUoV2ViQ29y
ZTo6RmxvYXRSZWN0KCkpCisgICAgICAgICwgbV9zY2FsZShzY2FsZSkKKyAgICB7CisgICAgfQor
CisgICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAg
IHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgc2V0
QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzb3VyY2UsIFNoYXJlYWJsZUJpdG1hcCogYnVmZmVyKQorICAgIHsKKyAg
ICAgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0OworICAgICAgICBtX3NvdXJjZVJlY3QgPSBzb3Vy
Y2U7CisgICAgICAgIG1fYmFja0J1ZmZlciA9IGJ1ZmZlcjsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iYWNrQnVmZmVyOworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdGFyZ2V0UmVj
dDsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmUgOiBw
dWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAg
dm9pZCBjcmVhdGVUaWxlKGludCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGlsZShpbnQpOwor
ICAgIHZvaWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgU2hhcmVhYmxlQml0bWFwKik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXll
ckJhY2tpbmdTdG9yZSk7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXIqKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsK
KworcHJpdmF0ZToKKyAgICBMYXllckJhY2tpbmdTdG9yZSgpCisgICAgICAgIDogbV9zY2FsZSgx
LikKKyAgICB7IH0KKyAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPiBtX3Rp
bGVzOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCit9CisjZW5kaWYgLy8gTGF5ZXJCYWNraW5n
U3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJl
ZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAKaW5kZXggYzdjYTdmMS4uN2Q3MDM5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC0yMiwx
OSArMjIsMjAgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIgorI2luY2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIk1l
c3NhZ2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5m
by5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgotI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2lu
Y2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgiCiAjaW5jbHVkZSA8UURhdGVUaW1lPgogI2luY2x1ZGUgPGNhaXJvL09wZW5H
TFNoaW1zLmg+CiAKQEAgLTE0OSw4ICsxNTAsNyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+
IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQogewog
ICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKHRoaXMpOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVy
Tm9kZShuZXdMYXllcik7Ci0gICAgbm9kZS0+c2V0SUQobGF5ZXJJRCk7Ci0gICAgbm9kZS0+c2V0
VGlsZU93bmVyc2hpcChUZXh0dXJlTWFwcGVyTm9kZTo6RXh0ZXJuYWxseU1hbmFnZWRUaWxlcyk7
CisgICAgbm9kZS0+c2V0U2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyKGZhbHNlKTsK
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3TGF5ZXIpOwogfQogCkBAIC0yMzUsMjEgKzIzNSwxMyBA
QCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQogICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKIH0KIAotaW50IExheWVyVHJlZUhvc3RQcm94
eTo6cmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0Ci17Ci0gICAgSGFz
aE1hcDxpbnQsIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlVG9Ob2RlVGlsZS5maW5k
KHRpbGVJRCk7Ci0gICAgaWYgKGl0ID09IG1fdGlsZVRvTm9kZVRpbGUuZW5kKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOwotfQotCiB2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5m
bykKIHsKICAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwogICAgIGVuc3VyZUxheWVy
KGlkKTsKICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0gICAgYm9vbCBuZWVkc1RvVXBk
YXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCBsYXllckluZm8uY29u
dGVudHNSZWN0ICE9IGxheWVyLT5jb250ZW50c1JlY3QoKTsKKyAgICBib29sIG5lZWRzVG9VcGRh
dGVJbWFnZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkIHx8IChsYXllckluZm8uY29u
dGVudHNSZWN0ICE9IGxheWVyLT5jb250ZW50c1JlY3QoKSAmJiBsYXllckluZm8uaW1hZ2VCYWNr
aW5nU3RvcmVJRCk7CiAKICAgICBsYXllci0+c2V0TmFtZShsYXllckluZm8ubmFtZSk7CiAKQEAg
LTM0OCw2OSArMzQwLDQxIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290TGF5ZXJJ
RChXZWJMYXllcklEIGxheWVySUQpCiAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsK
IH0KIAotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXll
cklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK1Bhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3Rv
cmU+IExheWVyVHJlZUhvc3RQcm94eTo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCiB7
Ci0gICAgZW5zdXJlTGF5ZXIobGF5ZXJJRCk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUg
PSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7CisgICAgZW5zdXJlTGF5
ZXIoaWQpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9k
ZShsYXllckJ5SUQoaWQpKTsKKyAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IHN0YXRpY19jYXN0PExheWVyQmFja2luZ1N0b3JlKj4obm9kZS0+YmFja2luZ1N0b3Jl
KCkuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGJhY2tpbmdTdG9y
ZSA9IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgbm9kZS0+c2V0QmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgfQorICAgIEFTU0VSVChiYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBiYWNraW5nU3RvcmU7Cit9CiAKLSAgICBpbnQgbm9kZVRpbGVJRCA9
IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZShzY2FsZSk7Ci0gICAgbV90aWxlVG9Ob2RlVGlsZS5h
ZGQodGlsZUlELCBub2RlVGlsZUlEKTsKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAg
Z2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOwogfQog
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQs
IGludCB0aWxlSUQpCiB7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnQgbm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0
aWxlSUQpOwotICAgIGlmICghbm9kZVRpbGVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm9k
ZS0+cmVtb3ZlQ29udGVudHNUaWxlKG5vZGVUaWxlSUQpOwotICAgIG1fdGlsZVRvTm9kZVRpbGUu
cmVtb3ZlKHRpbGVJRCk7CisgICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5yZW1vdmVUaWxl
KHRpbGVJRCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgU2hhcmVhYmxlQml0bWFwKiBiaXRtYXApCiB7Ci0gICAg
ZW5zdXJlTGF5ZXIobGF5ZXJJRCk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1Rl
eHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbnQgbm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRp
bGVJRCh0aWxlSUQpOwotICAgIGlmICghbm9kZVRpbGVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIFFJ
bWFnZSBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgbm9kZS0+c2V0Q29udGVu
dHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBpbWFn
ZS5jb25zdEJpdHMoKSk7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVU
aWxlKHRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgYml0bWFwKTsKKyAgICBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFNoYXJlYWJs
ZUJpdG1hcCogYml0bWFwKQogewotICAgIFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsKLSAgICBzdGF0
aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OwotICAgIFFJbWFnZSBpbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgYm9vbCBpbWFnZUhhc0FscGhhID0gaW1hZ2UuaGFz
QWxwaGFDaGFubmVsKCk7Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgo
KSwgaW1hZ2UuaGVpZ2h0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2UuaGVpZ2h0
KCk7IHkgKz0gVGlsZURpbWVuc2lvbikgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlt
YWdlLndpZHRoKCk7IHggKz0gVGlsZURpbWVuc2lvbikgewotICAgICAgICAgICAgUUltYWdlIHN1
YkltYWdlOwotICAgICAgICAgICAgSW50UmVjdCByZWN0KHgsIHksIFRpbGVEaW1lbnNpb24sIFRp
bGVEaW1lbnNpb24pOwotICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KTsKLSAg
ICAgICAgICAgIGlmIChRU2l6ZShyZWN0LnNpemUoKSkgPT0gaW1hZ2Uuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2U7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc3ViSW1hZ2UgPSBpbWFnZS5jb3B5KHJlY3QpOwotICAgICAgICAgICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsK
LSAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KHJlY3Quc2l6ZSgpLCAhaW1hZ2VIYXNBbHBoYSk7
Ci0gICAgICAgICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhzdWJJbWFnZS5jb25zdEJpdHMo
KSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNpemUoKSkpOwotICAgICAgICAgICAg
dGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCB0aWxlZElt
YWdlKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgIGJh
Y2tpbmdTdG9yZS0+c2V0Q29udGVudHNUb0ltYWdlKGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQo
KSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdT
dG9yZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UoaW50NjRf
dCBpbWFnZUlEKQpAQCAtNDIwLDM4ICszODQsMjUgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJ
RCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bGF5ZXIpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbWFn
ZUlEKSB7Ci0gICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxl
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRy
PFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEo
aXQtPnNlY29uZC5nZXQoKSk7Cit9CiAKLSAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+c2l6ZSgp
KTsKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3QoKSk7Ci0g
ICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8gc2l6ZS53
aWR0aCgpOwotICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0LmhlaWdodCgp
IC8gc2l6ZS5oZWlnaHQoKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAg
aWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQotICAgICAgICByZXR1
cm47Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIEhhc2hT
ZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxM
YXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c3dh
cEJ1ZmZlcnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIAotICAgIFRpbGVkSW1hZ2U6Oml0ZXJh
dG9yIGVuZFRpbGVJdGVyYXRvciA9IGl0LT5zZWNvbmQuZW5kKCk7Ci0gICAgZm9yIChUaWxlZElt
YWdlOjppdGVyYXRvciB0aWxlSXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IHRpbGVJdCAhPSBlbmRU
aWxlSXRlcmF0b3I7ICsrdGlsZUl0KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0KEZs
b2F0UG9pbnQodGlsZUl0LT5maXJzdCksIEZsb2F0U2l6ZSh0aWxlSXQtPnNlY29uZC0+c2l6ZSgp
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KHNvdXJjZVJlY3QueCgpICogaG9yaXpv
bnRhbEZhY3RvciArIGNvbnRlbnRzUmVjdC54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZVJlY3QueSgpICogdmVydGljYWxGYWN0b3IgKyBjb250ZW50c1JlY3QueSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoKCkgKiBob3Jpem9u
dGFsRmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdo
dCgpICogdmVydGljYWxGYWN0b3IpOwotICAgICAgICBpbnQgbmV3VGlsZUlEID0gbm9kZS0+Y3Jl
YXRlQ29udGVudHNUaWxlKDEuMCk7Ci0gICAgICAgIG5vZGUtPnNldFRpbGVCYWNrQnVmZmVyVGV4
dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKG5ld1RpbGVJRCwgSW50UmVjdChzb3VyY2VS
ZWN0KSwgdGFyZ2V0UmVjdCwgdGlsZUl0LT5zZWNvbmQuZ2V0KCkpOwotICAgIH0KKyAgICBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAogdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsKICAgICBtX3Jvb3RMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworICAgIHN3YXBCdWZmZXJzKCk7CisKICAg
ICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVu
LCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgogICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwogfQpAQCAtNjI5LDEyICs1ODAsMTEgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0
dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKICAgICBpZiAobm9kZSkKLSAgICAgICAgbm9k
ZS0+cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKKyAgICAgICAgbm9kZS0+Y2xlYXJCYWNr
aW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5j
bGVhcigpOwotCiAgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7Ci0KKyAgICBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJh
Y2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126934</attachid>
            <date>2012-02-14 01:36:18 -0800</date>
            <delta_ts>2012-02-14 04:31:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>74570</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhODVlZTM2Li5lYWM2NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hy
b25pemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpnZXRDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpsYXllclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Ojpzd2FwQnVmZmVycyk6CisKIDIwMTItMDItMTMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBbSlNDdXN0b21Ub0pTT2JqZWN0XSBJREwgYXR0cmli
dXRlIHRvIGludGVyZmFjZXMgdGhhdCBoYXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0NTE0OWQyLi5kMGJkMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTU3NDcsNiArNTc0Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAogICAgICAgICBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXApAQCAtNTc2OSw2
ICs1NzcxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA3MjU3YzU2Li41YWMwZGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTM5NTUsNiArMzk1NSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaApAQCAtMzk2Myw2ICszOTY0LDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXht
YXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0ZTky
MTQ5Li42NWY1NThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTg2LDYgKzM1ODYsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi5jNmZmMDNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwog
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1
cmVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
ckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA2NmJjNzZlLi4yYmI0NmMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICBRR0xXaWRnZXQqIGdl
dFZpZXdwb3J0R0xXaWRnZXQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFp
bnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7
CkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1JnYihx
dWludDMyIHBpeGVsKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKICAg
ICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI1MjFkMWEuLjliODlj
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgs
NiArMjgsOCBAQCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZQogICAgIDogR3JhcGhpY3NMYXllcihj
bGllbnQpCiAgICAgLCBtX25vZGUoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpKQog
ICAgICwgbV9jaGFuZ2VNYXNrKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAs
IG1fbWVkaWEoMCkKICAgICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiB7CiB9CkBA
IC00NCw4ICs0Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmRpZFN5bmNo
cm9uaXplKCkKIHsKICAgICBtX3N5bmNRdWV1ZWQgPSBmYWxzZTsKICAgICBtX2NoYW5nZU1hc2sg
PSAwOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9w
ZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fbmVlZHNE
aXNwbGF5ID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwogfQog
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYg
bmFtZSkKQEAgLTYxLDcgKzYzLDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcigpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheSA9IHRydWU7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTY5LDggKzcxLDgg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKICov
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpCiB7Ci0gICAgaWYgKCFub2RlKCktPm1lZGlhKCkpCi0gICAgICAgIG1fcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0Q29u
dGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTc4LDkgKzgwLDkgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogKi8KIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5KQorICAgIGlmIChtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVu
ZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBtX25lZWRzRGlz
cGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMTI4LDcgKzEzMCw2IEBAIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdy
YXBoaWNzTGF5CiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKLQog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwogICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogfQpAQCAtMjU5
LDI4ICsyNjAsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0Nv
bnRlbnQoYm9vbCB2YWx1ZSkKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwotdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvciA9IHZhbHVlOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2
YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UpOwotfQotCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpCi17Ci0gICAg
aWYgKCFtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7
Ci0gICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Ci19Ci0KLS8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09
IGNvbnRlbnRzT3BhcXVlKCkpCkBAIC0zMjMsOSArMzAyLDE5IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKICov
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogeworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgaWYgKG1faW1hZ2UpIHsKKyAgICAgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4dHVy
ZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2luZ1N0b3Jl
LT5zZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9
IGJhY2tpbmdTdG9yZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAw
OworCisgICAgc2V0Q29udGVudHNUb01lZGlhKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1f
cGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlw
ZTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIApAQCAtMzMzLDggKzMyMiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcioKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
TWVkaWEobWVkaWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dENoYW5nZSk7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4
dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRN
TENvbnRlbnRUeXBlOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRpYTsKKyAgICBt
X2NvbnRlbnRzTGF5ZXIgPSBtZWRpYTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CkBAIC0zNTEsMTMgKzMzOSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpCiAgICAgbV9ub2RlLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSh0aGlzLCBUZXh0dXJlTWFwcGVyTm9kZTo6VHJhdmVyc2VEZXNjZW5kYW50
cyk7CiB9CiAKLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLVBsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcio+KG5vZGUoKS0+
bWVkaWEoKSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFrZXlmcmFtZXNOYW1lLmlzRW1w
dHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDE3MmZk
ZGEuLjhlN2NjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBA
IC02NCw4ICs2NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0Qo
Ym9vbCBiKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sIGIpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
QmFja2dyb3VuZENvbG9yKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJv
b2wgYik7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwpAQCAtNzcsMTAgKzc1
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25z
dCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBu
YW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdl
TWFzayBjaGFuZ2VNYXNrKTsKLSAgICBpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRE
YXRhJiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVuZGluZ0NvbnRlbnQ7IH0KICAgICBp
bmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAg
ICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTg5LDEyICs4NiwyMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKTsKIAogICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9Cisg
ICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KKyAgICBib29sIG5lZWRzRGlzcGxheSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CisgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX25lZWRzRGlzcGxheVJlY3QpOyB9CiAK
IHByaXZhdGU6CiAgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fY29tcG9zaXRlZEltYWdlOworICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsKICAgICBpbnQgbV9j
aGFuZ2VNYXNrOwotICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBtX3BlbmRpbmdD
b250ZW50OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CisgICAgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqIG1fY29udGVudHNMYXllcjsKKyAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciogbV9tZWRpYTsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIFRleHR1
cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0
ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopOwogICAgIFRp
bWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCA1ZTUyOGQ0Li41OGU0ZjU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
Y3BwCkBAIC03Myw3ICs3Myw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1h
cHBlcjo6YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAgICAgcmV0dXJu
IHNlbGVjdGVkVGV4dHVyZTsKIH0KIAotCiBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1
cmVNYXBwZXI6OmNyZWF0ZShBY2NlbGVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUg
PT0gU29mdHdhcmVNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZjI1Y2UwYi4uZmY1MTMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oCkBAIC0xMDYsNiArMTA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblBhaW50aW5nKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9
CiAKKyAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBJ
bnRTaXplKElOVF9NQVgsIElOVF9NQVgpOyB9CisKICAgICAvLyBBIHN1cmZhY2UgaXMgcmVsZWFz
ZWQgaW1wbGljaXRseSB3aGVuIGRlcmVmZXJlbmNlZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gYWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44NDhlNzhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
Y3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7Cisg
ICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0YXJn
ZXRSZWN0OworCisgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1ZmZlcidzIGNv
b3JkaW5hdGVzLgorICAgIHNvdXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVj
dC55KCkpOworCisgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRleHR1cmUncyBj
b29yZGluYXRlcy4KKyAgICB0YXJnZXRSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgp
KTsKKyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQodGFyZ2V0UmVj
dC5zaXplKCksIC8qIG9wYXF1ZSA9ICovIGZhbHNlKTsKKyAgICB9CisKKyAgICBtX3RleHR1cmUt
PnVwZGF0ZUNvbnRlbnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0
dXJlOjpSR0JBRm9ybWF0KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6cGFpbnQoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICB0ZXh0
dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSgpLmdldCgpLCByZWN0KCksIHRyYW5zZm9y
bSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOjp1cGRhdGVDb250ZW50c0Zyb21JbWFnZUlmTmVlZGVkKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB1
cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBtX2ltYWdlLmdldCgpKTsKKyAgICBtX2ltYWdl
LmNsZWFyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCit7CisgICAgdXBkYXRlQ29udGVu
dHNGcm9tSW1hZ2VJZk5lZWRlZCh0ZXh0dXJlTWFwcGVyKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBhZGp1c3RlZFRyYW5zZm9y
bS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0KCksIHRhcmdl
dFJlY3QpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fdGlsZXNbaV0ucGFpbnQodGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zv
cm0sIG9wYWNpdHksIG1hc2spOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTo6Y3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZChjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIGlmIChzaXplID09IG1fc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaXplID0gc2l6ZTsKKworICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IHRpbGVSZWN0c1RvQWRkOworICAgIFZlY3RvcjxpbnQ+IHRpbGVJbmRpY2VzVG9SZW1vdmU7
CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxlRXJhc2VUaHJlc2hvbGQgPSA2OworCisgICAgLy8g
VGhpcyBtZXRob2QgcmVjeWNsZXMgdGlsZXMuIFdlIGNoZWNrIHdoaWNoIHRpbGVzIHdlIG5lZWQg
dG8gYWRkLCB3aGljaCB0byByZW1vdmUsIGFuZCB1c2UgYXMgbWFueQorICAgIC8vIHJlbW92YWJs
ZSB0aWxlcyBhcyByZXBsYWNlbWVudCBmb3IgbmV3IHRpbGVzIHdoZW4gcG9zc2libGUuCisgICAg
Zm9yIChmbG9hdCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgeSArPSB0aWxlU2l6ZS5oZWln
aHQoKSkgeworICAgICAgICBmb3IgKGZsb2F0IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgg
Kz0gdGlsZVNpemUud2lkdGgoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0KHgs
IHksIHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHRp
bGVSZWN0LmludGVyc2VjdChyZWN0KCkpOworICAgICAgICAgICAgdGlsZVJlY3RzVG9BZGQuYXBw
ZW5kKHRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIHdoaWNoIHRp
bGVzIG5lZWQgdG8gYmUgcmVtb3ZlZCwgYW5kIHdoaWNoIGFscmVhZHkgZXhpc3QuCisgICAgZm9y
IChpbnQgaSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgRmxv
YXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3QoKTsKKyAgICAgICAgYm9vbCBleGlzdHNB
bHJlYWR5ID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IHRpbGVSZWN0c1RvQWRkLnNp
emUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgbmV3VGlsZSA9
IHRpbGVSZWN0c1RvQWRkW2pdOworICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0gbmV3VGlsZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQSB0aWxlIHRoYXQg
d2Ugd2FudCB0byBhZGQgYWxyZWFkeSBleGlzdHMsIG5vIG5lZWQgdG8gYWRkIG9yIHJlbW92ZSBp
dC4KKyAgICAgICAgICAgIGV4aXN0c0FscmVhZHkgPSB0cnVlOworICAgICAgICAgICAgdGlsZVJl
Y3RzVG9BZGQucmVtb3ZlKGopOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUaGlzIHRpbGUgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgaWYgKCFleGlzdHNBbHJl
YWR5KQorICAgICAgICAgICAgdGlsZUluZGljZXNUb1JlbW92ZS5hcHBlbmQoaSk7CisgICAgfQor
CisgICAgLy8gUmVjeWNsZSByZW1vdmFibGUgdGlsZXMgdG8gYmUgdXNlZCBmb3IgbmV3bHkgcmVx
dWVzdGVkIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZVJlY3RzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aWxlSW5kaWNlc1RvUmVtb3ZlLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgLy8gV2UgcmVjeWNsZSBhbiBleGlzdGluZyB0aWxlIGZvciB1c2Fn
ZSB3aXRoIGEgbmV3IHRpbGUgcmVjdC4KKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJUaWxlJiB0
aWxlID0gbV90aWxlc1t0aWxlSW5kaWNlc1RvUmVtb3ZlLmxhc3QoKV07CisgICAgICAgICAgICB0
aWxlSW5kaWNlc1RvUmVtb3ZlLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHRpbGUuc2V0UmVj
dCh0aWxlUmVjdHNUb0FkZFtpXSk7CisgICAgICAgICAgICBpZiAodGlsZS50ZXh0dXJlKCkpCisg
ICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlKCktPnJlc2V0KGVuY2xvc2luZ0ludFJlY3QodGls
ZS5yZWN0KCkpLnNpemUoKSwgZmFsc2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBtX3RpbGVzLmFwcGVuZChUZXh0dXJlTWFwcGVyVGlsZSh0aWxlUmVjdHNU
b0FkZFtpXSkpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB1bm5lY2Vzc2FyeSB0aWxlcywgaWYg
dGhleSB3ZXJlbid0IHJlY3ljbGVkLgorICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZCB0byBtYWtl
IHN1cmUgd2UgZG9uJ3QgY3JlYXRlL2Rlc3Ryb3kgdGlsZXMgdG9vIGVhZ2VybHkuCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlSW5kaWNlc1RvUmVtb3ZlLnNpemUoKSAmJiBtX3RpbGVz
LnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAgICBtX3RpbGVzLnJlbW92
ZSh0aWxlSW5kaWNlc1RvUmVtb3ZlW2ldKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IEltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiB0b3RhbFNpemUsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKHRvdGFsU2l6
ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RpbGVzW2ldLnVwZGF0ZUNv
bnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBkaXJ0eVJlY3QpOworfQorCitQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgp
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90aWxlc1tpXS50
ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1
cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ODkzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIFRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzTGF5
ZXI7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIsIHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmU+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
dGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKSA9IDA7CisgICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZSgpIHsgfQorfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclRpbGUg
eworcHVibGljOgorICAgIGlubGluZSBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KKyAgICBpbmxpbmUgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRUZXh0dXJlKEJp
dG1hcFRleHR1cmUqIHRleHR1cmUpIHsgbV90ZXh0dXJlID0gdGV4dHVyZTsgfQorICAgIGlubGlu
ZSB2b2lkIHNldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0K
KworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSopOworICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJUaWxlKCkgeyB9CisKKyAgICBUZXh0dXJlTWFwcGVyVGlsZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIEZs
b2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3Rv
cmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgdm9p
ZCB1cGRhdGVDb250ZW50c0Zyb21MYXllcihUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllcios
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5n
U3RvcmUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1h
cHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgSW1hZ2UqIGlt
YWdlKSB7IHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBpbWFnZS0+c2l6ZSgp
LCBpbWFnZS0+cmVjdCgpKTsgfQorICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUpOyB9Cisg
ICAgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKSB7IG1faW1hZ2UgPSBpbWFn
ZTsgfQorICAgIHZvaWQgdXBkYXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZChUZXh0dXJlTWFw
cGVyKik7CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKCkg
eyB9CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKGNvbnN0IEZsb2F0U2l6
ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworCisgICAgVmVj
dG9yPFRleHR1cmVNYXBwZXJUaWxlPiBtX3RpbGVzOworICAgIEZsb2F0U2l6ZSBtX3NpemU7Cisg
ICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworfTsKKworfQorI2VuZGlmIC8vIFRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggNDViOTRiZC4u
ZGYyYTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMCwxNiArMjAsMTQgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgogCisj
aW5jbHVkZSAic3RkaW8uaCIKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAKLW5hbWVzcGFjZSB7Ci0gICAgc3Rh
dGljIGNvbnN0IGZsb2F0IGdUaWxlRGltZW5zaW9uID0gMTAyNC4wOwotfQotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQpAQCAtNTEsNiArNDksMTYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCiAgICAg
bV90cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obWF0cml4KTsKIH0KIAordm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCkKK3sKKyAgICBtX2JhY2tp
bmdTdG9yZS5jbGVhcigpOworICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVu
W2ldLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKyAgICBpZiAobV9zdGF0ZS5tYXNr
TGF5ZXIpCisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1
cnNpdmUoKTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRyYW5zZm9ybXNS
ZWN1cnNpdmUoKQogewogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NU
b0JvdW5kcykKQEAgLTgxLDEwMCArODksMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29t
cHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQogICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJl
biwgMCwgbV9jaGlsZHJlbi5zaXplKCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpj
b21wdXRlVGlsZXMoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0b3Jl
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewot
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX3N0YXRlLnRpbGVPd25lcnNo
aXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykKKyAgICBpZiAoIWxheWVyIHx8ICF0ZXh0dXJl
TWFwcGVyKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpZiAobV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3NDb250ZW50
KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7Ci0gICAgVmVjdG9yPGludD4gdGls
ZXNUb1JlbW92ZTsKLSAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0gNjsKLSAgICBG
bG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0
KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBmb3IgKGZsb2F0IHkg
PSAwOyB5IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAg
ICAgICAgZm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7IHggKz0gZ1Rp
bGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4LCB5LCBnVGls
ZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJz
ZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIHRpbGVzVG9BZGQuYXBwZW5kKHRpbGVSZWN0
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBtX293bmVkVGlsZXMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0IG9sZFRpbGUg
PSBtX293bmVkVGlsZXNbaV0ucmVjdDsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0g
ICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7
Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVzVG9BZGRbal07Ci0g
ICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB0aWxlc1RvQWRk
LnJlbW92ZShqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFmb3VuZCkKLSAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKGkpOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0FkZC5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBPd25lZFRp
bGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZXNUb1JlbW92ZVswXV07Ci0gICAgICAgICAgICB0
aWxlc1RvUmVtb3ZlLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9B
ZGRbaV07Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0cnVlOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBPd25lZFRpbGUgdGlsZTsKLSAgICAgICAg
dGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKLSAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1
ZTsKLSAgICAgICAgbV9vd25lZFRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fb3duZWRUaWxlcy5z
aXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgbV9vd25lZFRpbGVzLnJl
bW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVu
ZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9zdGF0ZS50
aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCisgICAgaWYgKCFtX3Nob3Vs
ZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcikKICAgICAgICAgcmV0dXJuOwotI2VuZGlmCiAK
LSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbGF5ZXIgfHwgKCFtX3N0YXRlLmRyYXdzQ29u
dGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkp
IHsKLSAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7CisgICAgaWYgKCFtX3N0YXRlLmRyYXdz
Q29udGVudCB8fCBtX3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLmNs
ZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRleHR1cmVNYXBwZXIp
CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fc3RhdGUubmVlZHNE
aXNwbGF5ID8gbGF5ZXJSZWN0KCkgOiBtX3N0YXRlLm5lZWRzRGlzcGxheVJlY3QpOworICAgIGlm
IChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGRp
cnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
PyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAg
IGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gVGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKIAotICAgIGZvciAoc2l6ZV90IHRpbGVJ
bmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7
Ci0gICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhdOwotICAg
ICAgICBpZiAoIXRpbGUudGV4dHVyZSkKLSAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1
cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwotICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gZW5j
bG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpLnNpemUoKTsKLQotICAgICAgICBpZiAodGlsZS5uZWVk
c1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUt
PmlzVmFsaWQoKSkgewotICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7
Ci0gICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3Qp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dWVyTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOwogCiAgICAgLy8gUGFpbnQgdGhl
IGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVyLiBUaGlzIGVuc3VyZXMgd2Ug
b25seSBwYWludCBvbmNlLgogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOwpAQCAtMTgzLDggKzExOCw2IEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2Rl
KHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKICAgICBjb250ZXh0LT50cmFuc2xh
dGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKICAgICBsYXllci0+cGFpbnRHcmFw
aGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIGRpcnR5UmVjdCk7Ci0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIG1fc3RhdGUuY29udGVudHNSZWN0KTsKIAogICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2U7CiAKQEAgLTE5NSwxMDQgKzEyOCwzNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpy
ZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQog
ICAgIGltYWdlID0gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICNl
bmRpZgogCi0gICAgLy8gRGl2aWRlIHRoZSBpbWFnZSB0byB0aWxlcy4KLSAgICBmb3IgKHNpemVf
dCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyArK3RpbGVJ
bmRleCkgewotICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZUluZGV4
XTsKLSAgICAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJl
Y3QpOwotICAgICAgICB0YXJnZXRSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBp
ZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVjdDsKLQotICAgICAgICAvLyBOb3JtYWxpemUg
c291cmNlUmVjdCB0byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMuCi0gICAgICAgIHNvdXJjZVJl
Y3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwotCi0gICAgICAgIC8vIE5v
cm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbnFhdGVzLgotICAgICAg
ICB0YXJnZXRSZWN0Lm1vdmUoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKLSAgICAg
ICAgdGlsZS50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwg
c291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7Ci0gICAgfQotCi0gICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0KCkpLT51cGRhdGVDb250
ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZS5nZXQoKSwgbV9zaXplLCBkaXJ0eVJlY3QpOwogfQog
CiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludCgpCiB7Ci0gICAgaWYgKG1fc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZl
KCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdDsKLSAgICBvcHQudGV4dHVy
ZU1hcHBlciA9IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBvcHQudGV4dHVyZU1hcHBlci0+YmluZFN1
cmZhY2UoMCk7Ci0gICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKLX0KLQotRmxvYXRSZWN0IFRleHR1
cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAotewotICAgIHJldHVybiBG
bG9hdFJlY3QoCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3QueCgp
IC0gdGFyZ2V0UmVjdC54KCkpLAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueSgpICsgKHRp
bGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICB0aWxlUmVjdC53
aWR0aCgpLAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICBUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyID0g
bV90ZXh0dXJlTWFwcGVyOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
MCk7CisgICAgcGFpbnRSZWN1cnNpdmUob3B0aW9ucyk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25z
KQogewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
JiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5OwotICAg
IEJpdG1hcFRleHR1cmUqIG1hc2sgPSBvcHRpb25zLm1hc2s7Ci0gICAgRmxvYXRSZWN0IHRhcmdl
dFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7Ci0KICAgICAvLyBXZSBhcHBseSB0aGUgZm9sbG93
aW5nIHRyYW5zZm9ybSB0byBjb21wZW5zYXRlIGZvciBwYWludGluZyBpbnRvIGEgc3VyZmFjZSwg
YW5kIHRoZW4gYXBwbHkgdGhlIG9mZnNldCBzbyB0aGF0IHRoZSBwYWludGluZyBmaXRzIGluIHRo
ZSB0YXJnZXQgcmVjdC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPQogICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCiAgICAgICAg
ICAgICAubXVsdGlwbHkobV90cmFuc2Zvcm0uY29tYmluZWQoKSkKICAgICAgICAgICAgIC50cmFu
c2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwog
Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgVmVjdG9yPEV4dGVybmFsbHlNYW5h
Z2VkVGlsZT4gdGlsZXNUb1BhaW50OwotCi0gICAgaWYgKG1fc3RhdGUudGlsZU93bmVyc2hpcCA9
PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKSB7Ci0gICAgICAgIC8vIFNvcnQgdGlsZXMsIHdpdGgg
Y3VycmVudCBzY2FsZSBmYWN0b3IgbGFzdC4KLSAgICAgICAgVmVjdG9yPEV4dGVybmFsbHlNYW5h
Z2VkVGlsZSo+IHRpbGVzOwotICAgICAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRU
aWxlPjo6aXRlcmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBp
dCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC5mcm9udEJ1ZmZlci50ZXh0dXJlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5zY2FsZSA9
PSBtX3N0YXRlLmNvbnRlbnRTY2FsZSkgewotICAgICAgICAgICAgICAgIHRpbGVzLmFwcGVuZCgm
aXQtPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIHRyYW5zaXRpb25hbCBlZmZlY3QgbG9va3Mg
Z29vZCBvbmx5IHdoZW4gdGhlcmUncyBubyB0cmFuc3BhcmVuY3ksIHNvIHdlIG9ubHkgdXNlIGl0
IHdoZW4gdGhlIG9wYWNpdHkgZm9yIHRoZSBsYXllciBpcyBhYm92ZSBhIGNlcnRhaW4gdGhyZXNo
b2xkLgotICAgICAgICAgICAgaWYgKG9wYWNpdHkgPiAwLjk1KQotICAgICAgICAgICAgICAgIHRp
bGVzLnByZXBlbmQoJml0LT5zZWNvbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0aWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlJiB0aWxlID0gKnRpbGVzW2ldOwotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3Qg
PSB0aWxlLmZyb250QnVmZmVyLnRhcmdldFJlY3Q7Ci0gICAgICAgICAgICBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlID0gKnRpbGUuZnJvbnRCdWZmZXIudGV4dHVyZTsKLSAgICAgICAgICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVjdCwgdHJhbnNmb3JtLCBv
cGFjaXR5LCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
CisgICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbWFzayA9IG9wdGlvbnMubWFzazsKIAotICAgIC8vIE5vdyB3ZSBwYWludCBvd25l
ZCB0aWxlcywgaWYgd2UncmUgaW4gT3duZWRUaWxlTW9kZS4KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBCaXRtYXBUZXh0dXJl
KiB0ZXh0dXJlID0gbV9vd25lZFRpbGVzW2ldLnRleHR1cmUuZ2V0KCk7Ci0gICAgICAgIGNvbnN0
IEZsb2F0UmVjdCByZWN0ID0gdGFyZ2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fb3du
ZWRUaWxlc1tpXS5yZWN0KTsKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4
dHVyZSgqdGV4dHVyZSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKLSAgICB9Cisg
ICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cGFpbnRUb1Rl
eHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBsYXllclJlY3QoKSwgdHJhbnNmb3Jt
LCBvcGFjaXR5LCBtYXNrLmdldCgpKTsKIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5tZWRpYSkKLSAg
ICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9u
cy50ZXh0dXJlTWFwcGVyLCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwor
ICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIG1fY29udGVudHNMYXllci0+cGFpbnRU
b1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBtX3N0YXRlLmNvbnRlbnRzUmVj
dCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLmdldCgpKTsKIH0KIAogaW50IFRleHR1cmVNYXBw
ZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKQEAgLTMzMiw3ICsxOTYsNyBAQCBJbnRSZWN0IFRleHR1cmVNYXBwZXJOb2RlOjpp
bnRlcm1lZGlhdGVTdXJmYWNlUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbQogewog
ICAgIEludFJlY3QgcmVjdDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9y
bSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1hdHJpeCkubXVsdGlwbHkobV90cmFuc2Zvcm0uY29t
YmluZWQoKSk7Ci0gICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxUcmFuc2Zvcm0ubWFw
UmVjdChlbnRpcmVSZWN0KCkpKTsKKyAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRy
YW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCgpKSk7CiAgICAgaWYgKCFtX3N0YXRlLm1hc2tzVG9C
b3VuZHMgJiYgIW1fc3RhdGUubWFza0xheWVyKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHJlY3QudW5pdGUobV9jaGls
ZHJlbltpXS0+aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QobWF0cml4KSk7CkBAIC00MzMsNyArMjk3
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVy
ZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCiAgICAgICAgIG1hc2tUZXh0dXJlID0gMDsKIAotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZS5nZXQoKSk7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdGFyZ2V0VHJhbnNmb3JtID0KICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4KG9wdGlvbnMudHJhbnNmb3JtKQogICAgICAgICAgICAgICAgIC5tdWx0aXBseShtX3RyYW5z
Zm9ybS5jb21iaW5lZCgpKQpAQCAtNDUwLDg5ICszMTQsNiBAQCBUZXh0dXJlTWFwcGVyTm9kZTo6
flRleHR1cmVNYXBwZXJOb2RlKCkKICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3Zl
KG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwogfQogCi0jaWYgVVNFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCi1pbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRlbnRzVGlsZShm
bG9hdCBzY2FsZSkKLXsKLSAgICBzdGF0aWMgaW50IG5leHRJRCA9IDA7Ci0gICAgaW50IGlkID0g
KytuZXh0SUQ7Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmFkZChpZCwgRXh0ZXJuYWxs
eU1hbmFnZWRUaWxlKHNjYWxlKSk7Ci0gICAgbV9zdGF0ZS5jb250ZW50U2NhbGUgPSBzY2FsZTsK
LSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbW92ZUNvbnRl
bnRzVGlsZShpbnQgaWQpCi17Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLnJlbW92ZShp
ZCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnB1cmdlTm9kZVRleHR1cmVzUmVjdXJz
aXZlKCkKLXsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuY2xlYXIoKTsKLQotICAgIGZv
ciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBt
X2NoaWxkcmVuW2ldLT5wdXJnZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBIYXNoTWFw
PGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlN
YW5hZ2VkVGlsZXMuZmluZChpZCk7Ci0KLSAgICBpZiAoaXQgPT0gbV9leHRlcm5hbGx5TWFuYWdl
ZFRpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeHRlcm5hbGx5TWFuYWdlZFRp
bGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotCi0gICAgdGlsZS5iYWNrQnVmZmVyLnNvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0ID0gdGFyZ2V0UmVj
dDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgdGlsZS5pc0Jh
Y2tCdWZmZXJVcGRhdGVkID0gdHJ1ZTsKLSAgICB0aWxlLmlzRGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckFsbERpcmVjdGx5
Q29tcG9zaXRlZEltYWdlVGlsZXMoKQotewotICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFs
bHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJl
Z2luKCk7IGl0ICE9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZC5pc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKQotICAgICAgICAg
ICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLnJlbW92ZShpdCk7Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
dm9pZCogZGF0YSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLQotICAgIEhhc2hN
YXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxs
eU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKLSAgICBpZiAoaXQgPT0gbV9leHRlcm5hbGx5TWFuYWdl
ZFRpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeHRlcm5hbGx5TWFuYWdlZFRp
bGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotCi0gICAgdGlsZS5iYWNrQnVmZmVyLnNvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0ID0gRmxvYXRSZWN0
KHRhcmdldFJlY3QpOwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0LnNjYWxlKDEuMCAv
IHRpbGUuc2NhbGUpOwotCi0gICAgaWYgKCF0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSkKLSAgICAg
ICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSBtX3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1
cmUoKTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+cmVzZXQoc291cmNlUmVjdC5zaXpl
KCksIGZhbHNlKTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+dXBkYXRlQ29udGVudHMo
ZGF0YSwgc291cmNlUmVjdCk7Ci0gICAgdGlsZS5pc0JhY2tCdWZmZXJVcGRhdGVkID0gdHJ1ZTsK
LX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3dhcENvbnRlbnRzQnVmZmVycygpCi17Ci0g
ICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1f
ZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRl
cm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRU
aWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKCF0aWxlLmlzQmFja0J1ZmZlclVw
ZGF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGlsZS5pc0JhY2tCdWZmZXJV
cGRhdGVkID0gZmFsc2U7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBzd2Fw
QnVmZmVyID0gdGlsZS5mcm9udEJ1ZmZlcjsKLSAgICAgICAgdGlsZS5mcm9udEJ1ZmZlciA9IHRp
bGUuYmFja0J1ZmZlcjsKLSAgICAgICAgdGlsZS5iYWNrQnVmZmVyID0gc3dhcEJ1ZmZlcjsKLSAg
ICB9Ci19Ci0jZW5kaWYKLQogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGludCBvcHRp
b25zKQogewogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXll
cigpLT5tX3RleHR1cmVNYXBwZXIsIG9wdGlvbnMpOwpAQCAtNTQxLDE0ICszMjIsMTEgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqIGdyYXBoaWMKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKICAgICBpbnQgY2hhbmdlTWFzayA9IGdy
YXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKLSAgICBjb25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6
Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVuZGluZ0NvbnRl
bnQoKTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBzd2FwQ29udGVudHNCdWZm
ZXJzKCk7Ci0jZW5kaWYKLSAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhp
Y3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVudC5uZWVkc0Rp
c3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQorCisg
ICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0
aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAoY2hhbmdlTWFzayAmIFBhcmVu
dENoYW5nZSkpIHsKKyAgICBpZiAoY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkgewogICAgICAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbmV3UGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFw
aGljc0xheWVyLT5wYXJlbnQoKSk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQgIT0gbV9wYXJlbnQp
IHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBub2RlIGZyb20gY3VycmVudCBmcm9tIGNoaWxkIGxp
c3QgZmlyc3QuCkBAIC01ODAsMTYgKzM1OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5
bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIChTaXplQ2hhbmdlIHwgQ29u
dGVudHNSZWN0Q2hhbmdlKSkgewotICAgICAgICBGbG9hdFNpemUgd2FudGVkU2l6ZShncmFwaGlj
c0xheWVyLT5zaXplKCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+c2l6ZSgpLmhlaWdodCgpKTsK
LSAgICAgICAgaWYgKHdhbnRlZFNpemUuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250ZW50LmNvbnRl
bnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkKLSAgICAgICAgICAgIHdhbnRlZFNpemUgPSBGbG9h
dFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIGlmICh3YW50ZWRTaXplICE9
IG1fc2l6ZSkKLSAgICAgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwotCi0gICAgICAgIG1f
c2l6ZSA9IHdhbnRlZFNpemU7Ci0gICAgfQorICAgIG1fc2l6ZSA9IGdyYXBoaWNzTGF5ZXItPnNp
emUoKTsKIAogICAgIGlmIChjaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7CiAgICAgICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhp
Y3NMYXllci0+bWFza0xheWVyKCkpKQpAQCAtNjE5LDEzICszODgsMTAgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKiBncmEKICAgICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IGdyYXBoaWNzTGF5
ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0g
PSBncmFwaGljc0xheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fc3RhdGUub3BhY2l0
eSA9IGdyYXBoaWNzTGF5ZXItPm9wYWNpdHkoKTsKLQotICAgIG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPSBwZW5kaW5nQ29udGVudC5jb250ZW50VHlwZTsKLSAgICBtX2N1cnJlbnRDb250
ZW50LmltYWdlID0gcGVuZGluZ0NvbnRlbnQuaW1hZ2U7Ci0gICAgbV9jdXJyZW50Q29udGVudC5t
ZWRpYSA9IHBlbmRpbmdDb250ZW50Lm1lZGlhOwotICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNE
aXNwbGF5ID0gbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgfHwgcGVuZGluZ0NvbnRlbnQu
bmVlZHNEaXNwbGF5OwotICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCi0g
ICAgICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29u
dGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBtX3N0YXRlLm5lZWRzRGlzcGxheSA9IG1fc3Rh
dGUubmVlZHNEaXNwbGF5IHx8IGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheSgpOworICAgIGlm
ICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkpCisgICAgICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5UmVj
dC51bml0ZShncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCkpOworICAgIG1fY29udGVu
dHNMYXllciA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKTsKIAogICAgIG1fdHJhbnNm
b3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQ
b2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsKQEAgLTY2Niw2ICs0MzIsOSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIAogdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRp
b25zKQogeworICAgIGlmICghdGV4dHVyZU1hcHBlcikKKyAgICAgICAgcmV0dXJuOworCiAgICAg
aWYgKGdyYXBoaWNzTGF5ZXIgJiYgIShvcHRpb25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKICAg
ICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBw
ZXIpOwogICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwpAQCAtNjgzLDEw
ICs0NTIsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgICAgICBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSksIHRleHR1cmVNYXBwZXIpOwogCiAgICAg
c3luY0FuaW1hdGlvbnMoKTsKLSAgICBjb21wdXRlVGlsZXMoKTsKLQotICAgIGlmIChncmFwaGlj
c0xheWVyKQotICAgICAgICByZW5kZXJDb250ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5
ZXIpOworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVy
KTsKIAogICAgIGlmICghKG9wdGlvbnMgJiBUcmF2ZXJzZURlc2NlbmRhbnRzKSkKICAgICAgICAg
b3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IDIz
MGM5ZTAuLjEzN2JmMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC00Miwx
NiArNDMsMTQgQEAgY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI7CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMgewogcHVibGljOgotICAgIEJpdG1hcFRleHR1cmUqIHN1
cmZhY2U7Ci0gICAgQml0bWFwVGV4dHVyZSogbWFzazsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gc3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFzazsKICAgICBmbG9hdCBv
cGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICBJbnRTaXpl
IG9mZnNldDsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMoKQotICAgICAgICA6IHN1cmZhY2UoMCkKLSAgICAgICAgLCBtYXNr
KDApCi0gICAgICAgICwgb3BhY2l0eSgxKQorICAgICAgICA6IG9wYWNpdHkoMSkKICAgICAgICAg
LCB0ZXh0dXJlTWFwcGVyKDApCiAgICAgeyB9CiB9OwpAQCAtOTcsMzcgKzk2LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgQ29tcHV0YXRpb25zT25seSA9IDIKICAgICB9OwogCi0gICAgZW51bSBUaWxl
T3duZXJzaGlwIHsKLSAgICAgICAgT3duZWRUaWxlcywKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFn
ZWRUaWxlcwotICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8VGV4dHVyZU1hcHBlck5vZGUq
LCBGbG9hdFJlY3Q+IE5vZGVSZWN0TWFwOwotCi0gICAgLy8gVGhlIGNvbXBvc2l0b3IgbGV0cyB1
cyBzcGVjaWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNvIHdlIHRyeSB0byBkbyBzby4KLSAg
ICBlbnVtIENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBlLCBEaXJlY3RJbWFnZUNvbnRlbnRU
eXBlLCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRU
eXBlfTsKLSAgICBzdHJ1Y3QgQ29udGVudERhdGEgewotICAgICAgICBGbG9hdFJlY3QgbmVlZHNE
aXNwbGF5UmVjdDsKLSAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7Ci0gICAgICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvcjsKLQotICAgICAgICBDb250ZW50VHlwZSBjb250ZW50VHlwZTsKLSAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKLSAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqIG1lZGlhOwotICAgICAgICBDb250ZW50RGF0YSgpCi0gICAgICAgICAgICA6IG5l
ZWRzRGlzcGxheShmYWxzZSkKLSAgICAgICAgICAgICwgY29udGVudFR5cGUoSFRNTENvbnRlbnRU
eXBlKQotICAgICAgICAgICAgLCBpbWFnZSgwKQotICAgICAgICAgICAgLCBtZWRpYSgwKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlck5vZGUoKQogICAg
ICAgICA6IG1fcGFyZW50KDApCiAgICAgICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKKyAgICAgICAg
LCBtX2NvbnRlbnRzTGF5ZXIoMCkKICAgICAgICAgLCBtX29wYWNpdHkoMSkKICAgICAgICAgLCBt
X2NlbnRlclooMCkKKyAgICAgICAgLCBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cih0cnVlKQogICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigwKQogICAgIHsgfQogCkBAIC0xNDQs
MTkgKzExOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSNpZiBVU0UoVElM
RURfQkFDS0lOR19TVE9SRSkKLSAgICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVyc2hp
cCBvd25lcnNoaXApIHsgbV9zdGF0ZS50aWxlT3duZXJzaGlwID0gb3duZXJzaGlwOyB9Ci0gICAg
aW50IGNyZWF0ZUNvbnRlbnRzVGlsZShmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVDb250
ZW50c1RpbGUoaW50IGlkKTsKLSAgICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIoaW50
IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSopOwotICAgIHZvaWQgY2xl
YXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7Ci0gICAgdm9pZCBwdXJnZU5vZGVU
ZXh0dXJlc1JlY3Vyc2l2ZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRJRChpbnQgaWQpIHsgbV9p
ZCA9IGlkOyB9Ci0gICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotCi0gICAgY29u
c3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50Q29udGVudC5tZWRpYTsgfQorICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlQmFja2luZ1N0
b3JlRnJvbUxheWVyKGJvb2wgYikgeyBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
ciA9IGI7IH0KKyAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUpIHsgbV9iYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmU7IH0KKyAg
ICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIHsg
cmV0dXJuIG1fYmFja2luZ1N0b3JlOyB9CisgICAgdm9pZCBjbGVhckJhY2tpbmdTdG9yZXNSZWN1
cnNpdmUoKTsKIAogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyKCk7
CkBAIC0xNzQsMTMgKzE0MCwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgY29tcGFyZUdy
YXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpOwogICAgIHN0
YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5
LCBpbnQgZmlyc3QsIGludCBsYXN0KTsKIAotICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7
IHJldHVybiBtX293bmVkVGlsZXMuaXNFbXB0eSgpID8gMCA6IG1fb3duZWRUaWxlc1swXS50ZXh0
dXJlLmdldCgpOyB9CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgeyBy
ZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+dGV4dHVyZSgpIDogMDsgfQog
CiAgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
Jik7CiAgICAgdm9pZCBwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYp
OwogICAgIHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVwbGljYShjb25z
dCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7Ci0gICAgdm9pZCByZW5kZXJDb250ZW50KFRl
eHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCB1cGRhdGVCYWNraW5nU3Rv
cmUoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIHZvaWQgc3luY0FuaW1h
dGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwpAQCAtMTg4LDYzICsxNTQsMjEg
QEAgcHJpdmF0ZToKIAogICAgIExheWVyVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogCi0gICAgaW5s
aW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGVudGlyZVJl
Y3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OwotICAgIH0KLQotICAgIGlubGluZSBGbG9hdFJl
Y3QgZW50aXJlUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIEZsb2F0
U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0CisgICAgaW5saW5lIEZsb2F0UmVjdCBsYXllclJlY3Qo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8g
bV9jdXJyZW50Q29udGVudC5pbWFnZS0+c2l6ZSgpIDogbV9zaXplOworICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXplKTsKICAgICB9Ci0gICAgc3RydWN0
IE93bmVkVGlsZSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OwotICAgIH07Ci0K
LSAgICBWZWN0b3I8T3duZWRUaWxlPiBtX293bmVkVGlsZXM7Ci0KLSNpZiBVU0UoVElMRURfQkFD
S0lOR19TVE9SRSkKLSAgICBzdHJ1Y3QgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIHsKLSAg
ICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0
OwotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICB9OwotCi0gICAg
c3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZSB7Ci0gICAgICAgIGJvb2wgaXNCYWNrQnVmZmVy
VXBkYXRlZDsKLSAgICAgICAgYm9vbCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlOwotICAgICAg
ICBmbG9hdCBzY2FsZTsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIGZyb250
QnVmZmVyOwotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIgYmFja0J1ZmZlcjsK
LQotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoZmxvYXQgc2NhbGUgPSAxLjApCi0gICAg
ICAgICAgICA6IGlzQmFja0J1ZmZlclVwZGF0ZWQoZmFsc2UpCi0gICAgICAgICAgICAsIGlzRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UoZmFsc2UpCi0gICAgICAgICAgICAsIHNjYWxlKHNjYWxlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgSGFzaE1hcDxpbnQsIEV4dGVybmFs
bHlNYW5hZ2VkVGlsZT4gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzOwotI2VuZGlmCi0KLSAgICBD
b250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50OwogCiAgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJO
b2RlKj4gbV9jaGlsZHJlbjsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CiAgICAg
VGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0OworICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciogbV9jb250ZW50c0xheWVyOwogICAgIEZsb2F0U2l6ZSBtX3NpemU7CiAgICAgZmxv
YXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1fY2VudGVyWjsKICAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIGludCBtX2lkOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5
ZXI7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBGbG9hdFBvaW50IHBvczsKQEAgLTI1
NCw2ICsxNzgsNyBAQCBwcml2YXRlOgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGls
ZHJlblRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQgb3BhY2l0eTsKICAgICAgICAgRmxvYXRSZWN0
IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CiAgICAg
ICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50OwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbWFza0xheWVyOwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYUxheWVyOwpA
QCAtMjYzLDEzICsxODgsOSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVl
IDogMTsKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkgOiAxOwogICAgICAgICBib29s
IHZpc2libGUgOiAxOwotICAgICAgICBib29sIG5lZWRzUmVzZXQ6IDE7CisgICAgICAgIGJvb2wg
bmVlZHNEaXNwbGF5OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKICAg
ICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAgICAgIGZsb2F0IGNvbnRlbnRTY2FsZTsKLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgVGlsZU93bmVyc2hpcCB0aWxlT3du
ZXJzaGlwOwotI2VuZGlmCiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgx
LmYpCiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQpAQCAtMjgwLDEzICsyMDEsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKICAgICAgICAgICAgICwg
YmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCi0g
ICAgICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRzRGlzcGxh
eSh0cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKICAgICAgICAg
ICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50U2NhbGUoMS4w
ZikKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICwgdGlsZU93bmVy
c2hpcChPd25lZFRpbGVzKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4IDFiMjkyOTAuLmM2OWMx
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0yMCw3ICsy
MCw2IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzAsNyArMjksOCBAQCBjbGFzcyBCaXRtYXBUZXh0dXJlOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxv
YXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVyZSogbWFzayA9IDApIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgg
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0
dXJlKiBtYXNrID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpIHsgfQog
fTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMzFjMDMwLi42ZjM1MjVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTItMDItMTMgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFs
QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9y
ZSBjb2RlIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4MzA1CisKKyAgICAgICAgTW92ZSB0aGUgYmFja2luZy1zdG9yZSBj
b2RlIHRvIExheWVyVHJlZUJhY2tpbmdTdG9yZSwgaW1wbGVtZW50aW5nIHRoZSB2aXJ0dWFsIGZ1
bmN0aW9ucworICAgICAgICBpbiBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLgorICAgICAgICBX
ZSBzYXZlIHRoZSBkb3VibGUtYnVmZmVyZWQgdGlsZSBpbiB0aGUgYmFja2luZy1zdG9yZSwgYW5k
IHRoZW4gY29udmVydCB0aGVtIHRvIHJlZ3VsYXIKKyAgICAgICAgdGlsZXMgaW4gdXBkYXRlQ29u
dGVudHMsIGJhc2VkIG9uIHRoZSBvcmRlciBvZiBwYWludGluZy4KKyAgICAgICAgVXNlIFRleHR1
cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UgZm9yIGltYWdlcyBpbnN0ZWFkIG9mIHNhdmluZyBvdXIg
b3duIGNvbXBvc2l0ZWQgaW1hZ2UKKyAgICAgICAgcmVnaXN0cnkuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9MYXllckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5
OjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6
OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbW92
ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MucHJvOgorCisKIDIwMTItMDItMTEgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMDc0MzUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBjZWRlNGVhLi5mYWU2NWQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKQEAgLTI1Myw2ICsyNTMsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oIFwKKyAgICBVSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4
dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJ
UHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTgxLDYgKzU4Miw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250
ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVS
ZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5LmgKaW5kZXggNGM5NzE4Ny4uM2RiMGNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtMzAsMTUgKzMwLDE3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsKIGNsYXNzIFdlYkxheWVySW5mbzsK
IGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIApAQCAtOTgsMTIgKzEwMCw2IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNv
cmU6OkludFBvaW50LCBSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gPiBUaWxlZEltYWdl
OwotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBtX25vZGVWaXN1
YWxDb250ZW50c1JlY3RNYXA7Ci0gICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlVG9Ob2RlVGls
ZTsKLSAgICBpbnQgcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0Owot
ICAgIEhhc2hNYXA8aW50NjRfdCwgVGlsZWRJbWFnZT4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXM7Ci0KICAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwogICAgIHZvaWQgc3luY2hy
b25pemVWaWV3cG9ydCgpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CkBAIC0x
MTgsMTEgKzExNCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygp
OwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVMYXllcihXZWJM
YXllcklEKTsKLQorICAgIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdT
dG9yZShXZWJMYXllcklEKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CiAjZW5kaWYKIAogICAg
IE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBWZWN0b3I8
V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKKyAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0
cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzOworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+IG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZv
aWQgZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9z
dFByb3h5PiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2NGFkMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJCYWNraW5n
U3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCisKKyNpbmNsdWRlICJzdGRpby5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpz
d2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAg
IGlmICghbV9iYWNrQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdCA9IG1fdGFyZ2V0UmVjdDsKKyAgICB0YXJnZXRSZWN0LnNjYWxlKDEuIC8gbV9zY2Fs
ZSk7CisgICAgc2V0UmVjdCh0YXJnZXRSZWN0KTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
dGV4dHVyZSA9IHRoaXMtPnRleHR1cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAg
dGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgc2V0VGV4
dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5yZXNldChlbmNsb3Np
bmdJbnRSZWN0KG1fc291cmNlUmVjdCkuc2l6ZSgpLCBmYWxzZSk7CisgICAgdGV4dHVyZS0+dXBk
YXRlQ29udGVudHMobV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKS5jb25zdEJpdHMoKSwgSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBtX2JhY2tCdWZmZXItPnNpemUoKSkpOworICAgIG1fYmFj
a0J1ZmZlci5jbGVhcigpOworfQorCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxl
KGludCBpZCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV90aWxlcy5hZGQoaWQsIExheWVyQmFja2lu
Z1N0b3JlVGlsZShzY2FsZSkpOworICAgIG1fc2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBMYXll
ckJhY2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShpbnQgaWQpCit7CisgICAgbV90aWxlcy5yZW1vdmUo
aWQpOworfQorCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgU2hhcmVh
YmxlQml0bWFwKiBiYWNrQnVmZmVyKQoreworICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdT
dG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0
ICE9IG1fdGlsZXMuZW5kKCkpOworICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRS
ZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxp
bnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgp
OworICAgICAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAg
IH0KKworICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Cit9CisKK3ZvaWQg
TGF5ZXJCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCit7CisgICAg
VmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGlsZXNUb1BhaW50OworCisgICAgLy8gV2UgaGF2
ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQsIGluIGNhc2UgdGhlIG9wYWNpdHkgaGFz
IGNoYW5nZWQuCisgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7CisgICAgICAgICAgICB0aWxl
c1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5
IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KKyAgICAgICAgaWYg
KG9wYWNpdHkgPiAwLjk1KQorICAgICAgICAgICAgdGlsZXNUb1BhaW50LnByZXBlbmQoJnRpbGUp
OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1BhaW50LnNpemUo
KTsgKytpKQorICAgICAgICB0aWxlc1RvUGFpbnRbaV0tPnBhaW50KHRleHR1cmVNYXBwZXIsIHRy
YW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnN3
YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgSGFzaE1hcDxp
bnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7
CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29u
ZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MDNhOGQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTGF5ZXJCYWNraW5nU3Rv
cmVfaAorI2RlZmluZSBMYXllckJhY2tpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgi
CisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIExheWVyQmFja2luZ1N0b3JlVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgTGF5ZXJCYWNraW5nU3RvcmVUaWxlKGZs
b2F0IHNjYWxlID0gMSkKKyAgICAgICAgOiBUZXh0dXJlTWFwcGVyVGlsZShXZWJDb3JlOjpGbG9h
dFJlY3QoKSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQorICAgIHsKKyAgICB9CisKKyAgICBp
bmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisgICAgdm9pZCBz
d2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBzZXRCYWNrQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNvdXJjZSwgU2hhcmVhYmxlQml0bWFwKiBidWZmZXIpCisgICAgeworICAgICAgICBt
X3RhcmdldFJlY3QgPSB0YXJnZXQ7CisgICAgICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZTsKKyAg
ICAgICAgbV9iYWNrQnVmZmVyID0gYnVmZmVyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG1fc291cmNlUmVjdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV90YXJnZXRSZWN0OworICAg
IGZsb2F0IG1fc2NhbGU7Cit9OworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICB2b2lkIGNy
ZWF0ZVRpbGUoaW50LCBmbG9hdCk7CisgICAgdm9pZCByZW1vdmVUaWxlKGludCk7CisgICAgdm9p
ZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBTaGFyZWFibGVCaXRtYXAqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
ckJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQmFja2lu
Z1N0b3JlKTsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciop
OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSopOworCitwcml2
YXRlOgorICAgIExheWVyQmFja2luZ1N0b3JlKCkKKyAgICAgICAgOiBtX3NjYWxlKDEuKQorICAg
IHsgfQorICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+IG1fdGlsZXM7Cisg
ICAgZmxvYXQgbV9zY2FsZTsKK307CisKK30KKyNlbmRpZiAvLyBMYXllckJhY2tpbmdTdG9yZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcAppbmRleCBjN2NhN2YxLi40YzRmNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTIyLDE5ICsyMiwy
MCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyTm9kZS5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0j
aW5jbHVkZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAi
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCIKICNpbmNsdWRlIDxRRGF0ZVRpbWU+CiAjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMu
aD4KIApAQCAtMTQ5LDggKzE1MCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJU
cmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVySUQpCiB7CiAgICAgR3Jh
cGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIodGhp
cyk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG5l
d0xheWVyKTsKLSAgICBub2RlLT5zZXRJRChsYXllcklEKTsKLSAgICBub2RlLT5zZXRUaWxlT3du
ZXJzaGlwKFRleHR1cmVNYXBwZXJOb2RlOjpFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKTsKKyAgICBu
b2RlLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFsc2UpOwogICAgIHJl
dHVybiBhZG9wdFB0cihuZXdMYXllcik7CiB9CiAKQEAgLTIzNSwyMSArMjM1LDEzIEBAIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAgICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCi1pbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1v
dGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKLXsKLSAgICBIYXNoTWFwPGlu
dCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlE
KTsKLSAgICBpZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQogewog
ICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwog
ICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwogICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLSAgICBib29sIG5lZWRzVG9VcGRhdGVJbWFn
ZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkIHx8IGxheWVySW5mby5jb250ZW50c1Jl
Y3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUltYWdl
VGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5jb250ZW50c1Jl
Y3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKIApAQCAtMzQ4LDY5
ICszNDAsNDEgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxh
eWVySUQgbGF5ZXJJRCkKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwogfQogCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQorUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gTGF5
ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKIHsKLSAgICBl
bnN1cmVMYXllcihsYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBlbnN1cmVMYXllcihpZCk7
CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVy
QnlJRChpZCkpOworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
c3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihub2RlLT5iYWNraW5nU3RvcmUoKS5nZXQo
KSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gTGF5
ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAgICBub2RlLT5zZXRCYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICB9CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Cisg
ICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKK30KIAotICAgIGludCBub2RlVGlsZUlEID0gbm9kZS0+
Y3JlYXRlQ29udGVudHNUaWxlKHNjYWxlKTsKLSAgICBtX3RpbGVUb05vZGVUaWxlLmFkZCh0aWxl
SUQsIG5vZGVUaWxlSUQpOwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUoV2Vi
TGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBnZXRCYWNr
aW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CiB9CiAKIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7
Ci0gICAgaWYgKCFub2RlVGlsZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub2RlLT5yZW1v
dmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7Ci0gICAgbV90aWxlVG9Ob2RlVGlsZS5yZW1vdmUo
dGlsZUlEKTsKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlE
KTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKIHsKLSAgICBlbnN1cmVM
YXllcihsYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRp
bGVJRCk7Ci0gICAgaWYgKCFub2RlVGlsZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub2Rl
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgUUltYWdlIGlt
YWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKLSAgICBub2RlLT5zZXRDb250ZW50c1RpbGVC
YWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGltYWdlLmNvbnN0
Qml0cygpKTsKKyAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdl
dEJhY2tpbmdTdG9yZShsYXllcklEKTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGls
ZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApOworICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIAogdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgU2hhcmVhYmxlQml0bWFw
KiBiaXRtYXApCiB7Ci0gICAgVGlsZWRJbWFnZSB0aWxlZEltYWdlOwotICAgIHN0YXRpYyBjb25z
dCBpbnQgVGlsZURpbWVuc2lvbiA9IDEwMjQ7Ci0gICAgUUltYWdlIGltYWdlID0gYml0bWFwLT5j
cmVhdGVRSW1hZ2UoKTsKLSAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBoYUNo
YW5uZWwoKTsKLSAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBpbWFn
ZS5oZWlnaHQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsgeSAr
PSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uud2lk
dGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBRSW1hZ2Ugc3ViSW1hZ2U7
Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURpbWVu
c2lvbik7Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOwotICAgICAgICAg
ICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgc3ViSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7Ci0gICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAg
ICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAg
ICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHN1YkltYWdlLmNvbnN0Qml0cygpLCBJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgICAgICB0aWxlZElt
YWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIHRpbGVkSW1hZ2UpOwor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgYmFja2luZ1N0
b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRl
SW1hZ2UoKS5nZXQoKSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdl
SUQsIGJhY2tpbmdTdG9yZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95
SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQpAQCAtNDIwLDM4ICszODQsMjUgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCiAKIHZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGlu
dDY0X3QgaW1hZ2VJRCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUobGF5ZXIpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFpbWFnZUlEKSB7Ci0gICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VUaWxlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEhhc2hNYXA8aW50
NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOworICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Cit9CiAKLSAgICBGbG9hdFNpemUgc2l6ZShs
YXllci0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50
c1JlY3QoKSk7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0
aCgpIC8gc2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNS
ZWN0LmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVk
SW1hZ2U+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1h
Z2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQot
ICAgICAgICByZXR1cm47Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3dhcEJ1ZmZlcnMoKQor
eworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQg
PSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgZm9yIChIYXNo
U2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAoKml0KS0+c3dhcEJ1ZmZlcnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIAotICAgIFRpbGVk
SW1hZ2U6Oml0ZXJhdG9yIGVuZFRpbGVJdGVyYXRvciA9IGl0LT5zZWNvbmQuZW5kKCk7Ci0gICAg
Zm9yIChUaWxlZEltYWdlOjppdGVyYXRvciB0aWxlSXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IHRp
bGVJdCAhPSBlbmRUaWxlSXRlcmF0b3I7ICsrdGlsZUl0KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBz
b3VyY2VSZWN0KEZsb2F0UG9pbnQodGlsZUl0LT5maXJzdCksIEZsb2F0U2l6ZSh0aWxlSXQtPnNl
Y29uZC0+c2l6ZSgpKSk7Ci0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KHNvdXJjZVJlY3Qu
eCgpICogaG9yaXpvbnRhbEZhY3RvciArIGNvbnRlbnRzUmVjdC54KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVJlY3QueSgpICogdmVydGljYWxGYWN0b3IgKyBjb250ZW50
c1JlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRo
KCkgKiBob3Jpem9udGFsRmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmhlaWdodCgpICogdmVydGljYWxGYWN0b3IpOwotICAgICAgICBpbnQgbmV3VGlsZUlE
ID0gbm9kZS0+Y3JlYXRlQ29udGVudHNUaWxlKDEuMCk7Ci0gICAgICAgIG5vZGUtPnNldFRpbGVC
YWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKG5ld1RpbGVJRCwgSW50
UmVjdChzb3VyY2VSZWN0KSwgdGFyZ2V0UmVjdCwgdGlsZUl0LT5zZWNvbmQuZ2V0KCkpOwotICAg
IH0KKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAog
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsKICAgICBtX3Jv
b3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworICAgIHN3YXBCdWZm
ZXJzKCk7CisKICAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZv
ciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25l
LgogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOwogfQpAQCAtNjI5LDEyICs1ODAsMTEgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBu
b2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKICAgICBpZiAobm9kZSkK
LSAgICAgICAgbm9kZS0+cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKKyAgICAgICAgbm9k
ZS0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKICAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5jbGVhcigpOwotCiAgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7Ci0KKyAg
ICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBh
Z2VJRCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126957</attachid>
            <date>2012-02-14 04:31:13 -0800</date>
            <delta_ts>2012-02-14 04:53:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>74579</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhODVlZTM2Li5lYWM2NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTItMDItMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGlu
IFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MzA1CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGlsaW5nIGlu
c2lkZSBvZiBUZXh0dXJlTWFwcGVyTm9kZSwgd2Ugbm93IGRlYWwgd2l0aCB0aGF0IGluIGEgbmV3
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgY2xhc3MuIFNpbmNlIHRoZSBjbGFz
cyBpcyBhYnN0cmFjdCwgV2ViS2l0MiBjYW4gb3ZlcmxvYWQgaXQgdG8KKyAgICAgICAgc3VwcG9y
dCByZW1vdGVseS1tYW5hZ2VkIHRpbGVzLgorICAgICAgICBUaGUgYmFja2luZy1zdG9yZSBmb3Ig
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpbiBhIG5l
dyBjbGFzcworICAgICAgICBUZXh0dXJlTWFwcGVyQ29tcG9zaXRlZEltYWdlLiBUaGUgVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbiBkZWNpZGVzIHRoZSBkaW1lbnNpb24gb2YKKyAgICAgICAg
dGhlIHRpbGVzLCBmb3IgZXhhbXBsZSAyMDAwIGluIHRoZSBjYXNlIG9mIE9wZW5HTC4KKyAgICAg
ICAgQWxzbywgZGlyZWN0bHkgY29tcG9zaXRlZCBjb250ZW50IGlzIG5vdyBoYW5kbGVkIGNvcnJl
Y3RseSwgYnkgcGFpbnRpbmcgaXQgYWZ0ZXIgdGhlIHJlZ3VsYXIKKyAgICAgICAgY29udGVudCBh
bmQgbm90IGFzIHBhcnQgb2YgdGhlIHNhbWUgdGV4dHVyZS4KKworICAgICAgICBUbyBtYWtlIHRo
aXMgd29yaywgdGhlIGZ1bmN0aW9ucyBpbiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcnMgaGFk
IHRvIGJlY29tZSBub24tY29uc3QsCisgICAgICAgIHRodXMgdGhlIGNoYW5nZXMgdG8gdGhhdCBm
aWxlIGFuZCBHcmFwaGljc0NvbnRleHQzRFF0LgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6bWF4VGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6ZGlkU3luY2hy
b25pemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpnZXRDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpuZWVkc0Rpc3BsYXlSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6Om1heFRleHR1cmVEaW1lbnNpb24pOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpsYXllclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Ojpzd2FwQnVmZmVycyk6CisKIDIwMTItMDItMTMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBbSlNDdXN0b21Ub0pTT2JqZWN0XSBJREwgYXR0cmli
dXRlIHRvIGludGVyZmFjZXMgdGhhdCBoYXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0NTE0OWQyLi5kMGJkMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTU3NDcsNiArNTc0Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAogICAgICAgICBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXApAQCAtNTc2OSw2
ICs1NzcxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA3MjU3YzU2Li41YWMwZGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTM5NTUsNiArMzk1NSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaApAQCAtMzk2Myw2ICszOTY0LDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXht
YXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0ZTky
MTQ5Li42NWY1NThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTg2LDYgKzM1ODYsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwOGZhMGFkLi5jNmZmMDNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOwog
ICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCk7CisgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1
cmVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBl
ckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA2NmJjNzZlLi4yYmI0NmMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICBRR0xXaWRnZXQqIGdl
dFZpZXdwb3J0R0xXaWRnZXQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFp
bnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7
CkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1JnYihx
dWludDMyIHBpeGVsKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKICAg
ICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI1MjFkMWEuLmQyZDM3
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgs
NiArMjgsOCBAQCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZQogICAgIDogR3JhcGhpY3NMYXllcihj
bGllbnQpCiAgICAgLCBtX25vZGUoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpKQog
ICAgICwgbV9jaGFuZ2VNYXNrKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAs
IG1fY29udGVudHNMYXllcigwKQogICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywg
JkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkK
IHsKIH0KQEAgLTQ0LDggKzQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
ZGlkU3luY2hyb25pemUoKQogewogICAgIG1fc3luY1F1ZXVlZCA9IGZhbHNlOwogICAgIG1fY2hh
bmdlTWFzayA9IDA7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsK
LSAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAg
bV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBtX25lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQpAQCAtNjEsNyArNjMsNyBAQCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6fkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fcGVuZGluZ0NvbnRlbnQu
bmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAgICAgbm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtNjks
OCArNzEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3Bs
YXkoKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKIHsKLSAgICBpZiAoIW5vZGUoKS0+bWVkaWEoKSkKLSAgICAgICAgbV9wZW5k
aW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIGlmIChtX2ltYWdlKQorICAgICAg
ICBzZXRDb250ZW50c1RvSW1hZ2UobV9pbWFnZS5nZXQoKSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtNzgsOSArODAsOSBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgp
CiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAobV9wZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXkpCisgICAgaWYgKG1fbmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJlY3QpOworICAgIG1f
bmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwogfQogCkBAIC0xMjgsNyArMTMwLDYgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjph
ZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5n
KQogewotCiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7
CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CiB9
CkBAIC0yNTksMjggKzI2MCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dERyYXdzQ29udGVudChib29sIHZhbHVlKQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
ICovCi12b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSBtX3BlbmRpbmdDb250ZW50
LmJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0NvbnRlbnQu
YmFja2dyb3VuZENvbG9yID0gdmFsdWU7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3Vu
ZENvbG9yKHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tn
cm91bmRDb2xvckNoYW5nZSk7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8K
LXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKCkK
LXsKLSAgICBpZiAoIW1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0g
Q29sb3IoKTsKLSAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOwotICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsK
LX0KLQotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0qLwogdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAo
dmFsdWUgPT0gY29udGVudHNPcGFxdWUoKSkKQEAgLTMyMywxOCArMzAyLDMwIEBAIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2
YWx1ZSkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqIGltYWdlKQogeworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgaWYgKG1faW1hZ2UpIHsKKyAg
ICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgYmFj
a2luZ1N0b3JlLT5zZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgICAgICBtX2NvbXBvc2l0
ZWRJbWFnZSA9IGJhY2tpbmdTdG9yZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb21wb3NpdGVk
SW1hZ2UgPSAwOworCisgICAgc2V0Q29udGVudHNUb01lZGlhKG1fY29tcG9zaXRlZEltYWdlLmdl
dCgpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2Up
OwotICAgIG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBw
ZXJOb2RlOjpEaXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxD
b250ZW50VHlwZTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBtZWRpYSkKIHsKKyAgICBpZiAobWVkaWEgPT0gbV9jb250ZW50c0xheWVyKQor
ICAgICAgICByZXR1cm47CisKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEo
bWVkaWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5n
ZSk7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1h
cHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRl
bnRUeXBlOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRpYTsKKyAgICBtX2NvbnRl
bnRzTGF5ZXIgPSBtZWRpYTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0z
NTEsMTMgKzM0Miw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpCiAgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZSh0aGlzLCBUZXh0dXJlTWFwcGVyTm9kZTo6VHJhdmVyc2VEZXNjZW5kYW50cyk7CiB9
CiAKLS8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQotKi8KLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gY29uc3RfY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcio+KG5vZGUoKS0+bWVkaWEo
KSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiBib3hTaXpl
LCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFtZSwgZG91
YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFrZXlmcmFtZXNOYW1lLmlzRW1wdHkoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDE3MmZkZGEuLmUw
YTBmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC02NCw4
ICs2NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBi
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sIGIpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQmFja2dy
b3VuZENvbG9yKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wgYik7
CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwpAQCAtNzcsMTAgKzc1LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsK
LSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBj
aGFuZ2VNYXNrKTsKLSAgICBpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBw
ZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVuZGluZ0NvbnRlbnQ7IH0KICAgICBpbmxpbmUg
aW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAgICB2b2lk
IGRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTg5LDEyICs4NiwxOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKTsKIAogICAgIFRleHR1cmVN
YXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzTGF5ZXI7IH0KKyAgICBib29sIG5lZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmVlZHNEaXNwbGF5OyB9CisgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Qg
eyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX25lZWRzRGlzcGxheVJlY3QpOyB9CiAKIHByaXZh
dGU6CiAgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fY29tcG9zaXRlZEltYWdlOworICAgIFJlZlB0cjxJ
bWFnZT4gbV9pbWFnZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsKICAgICBpbnQgbV9jaGFuZ2VN
YXNrOwotICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50
OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CisgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIqIG1fY29udGVudHNMYXllcjsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0Owog
ICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1h
dGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiop
OwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0
ZWRUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAppbmRleCA1ZTUyOGQ0Li41OGU0ZjU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuY3BwCkBAIC03Myw3ICs3Myw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
VGV4dHVyZU1hcHBlcjo6YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAg
ICAgcmV0dXJuIHNlbGVjdGVkVGV4dHVyZTsKIH0KIAotCiBQYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShBY2NlbGVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
aWYgKG1vZGUgPT0gU29mdHdhcmVNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZjI1Y2UwYi4uZmY1
MTMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC0xMDYsNiArMTA2LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBiZWdpblBhaW50aW5nKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
aW5nKCkgeyB9CiAKKyAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7
IHJldHVybiBJbnRTaXplKElOVF9NQVgsIElOVF9NQVgpOyB9CisKICAgICAvLyBBIHN1cmZhY2Ug
aXMgcmVsZWFzZWQgaW1wbGljaXRseSB3aGVuIGRlcmVmZXJlbmNlZC4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRT
aXplJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhlNzhhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRhdGVDb250ZW50cyhUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1f
cmVjdCk7CisgICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKKyAgICBpZiAodGFy
Z2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSB0YXJnZXRSZWN0OworCisgICAgLy8gTm9ybWFsaXplIHNvdXJjZVJlY3QgdG8gdGhlIGJ1
ZmZlcidzIGNvb3JkaW5hdGVzLgorICAgIHNvdXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwg
LWRpcnR5UmVjdC55KCkpOworCisgICAgLy8gTm9ybWFsaXplIHRhcmdldFJlY3QgdG8gdGhlIHRl
eHR1cmUncyBjb29yZGluYXRlcy4KKyAgICB0YXJnZXRSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1t
X3JlY3QueSgpKTsKKyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICBtX3RleHR1cmUgPSB0
ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQo
dGFyZ2V0UmVjdC5zaXplKCksIC8qIG9wYXF1ZSA9ICovIGZhbHNlKTsKKyAgICB9CisKKyAgICBt
X3RleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLCB0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBC
aXRtYXBUZXh0dXJlOjpSR0JBRm9ybWF0KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6
cGFpbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sK
KyAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSgpLmdldCgpLCByZWN0KCks
IHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVk
QmFja2luZ1N0b3JlOjp1cGRhdGVDb250ZW50c0Zyb21JbWFnZUlmTmVlZGVkKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICB1cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBtX2ltYWdlLmdldCgpKTsKKyAg
ICBtX2ltYWdlLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCit7CisgICAgdXBk
YXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZCh0ZXh0dXJlTWFwcGVyKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBhZGp1c3Rl
ZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0
KCksIHRhcmdldFJlY3QpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fdGlsZXNbaV0ucGFpbnQodGV4dHVyZU1hcHBlciwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxl
ZEJhY2tpbmdTdG9yZTo6Y3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZChjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIGlmIChzaXplID09IG1f
c2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaXplID0gc2l6ZTsKKworICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRpbGVSZWN0c1RvQWRkOworICAgIFZlY3RvcjxpbnQ+IHRpbGVJbmRpY2Vz
VG9SZW1vdmU7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxlRXJhc2VUaHJlc2hvbGQgPSA2Owor
CisgICAgLy8gVGhpcyBtZXRob2QgcmVjeWNsZXMgdGlsZXMuIFdlIGNoZWNrIHdoaWNoIHRpbGVz
IHdlIG5lZWQgdG8gYWRkLCB3aGljaCB0byByZW1vdmUsIGFuZCB1c2UgYXMgbWFueQorICAgIC8v
IHJlbW92YWJsZSB0aWxlcyBhcyByZXBsYWNlbWVudCBmb3IgbmV3IHRpbGVzIHdoZW4gcG9zc2li
bGUuCisgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgeSArPSB0aWxl
U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBmb3IgKGZsb2F0IHggPSAwOyB4IDwgbV9zaXplLndp
ZHRoKCk7IHggKz0gdGlsZVNpemUud2lkdGgoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHRp
bGVSZWN0KHgsIHksIHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChyZWN0KCkpOworICAgICAgICAgICAgdGlsZVJlY3Rz
VG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNr
IHdoaWNoIHRpbGVzIG5lZWQgdG8gYmUgcmVtb3ZlZCwgYW5kIHdoaWNoIGFscmVhZHkgZXhpc3Qu
CisgICAgZm9yIChpbnQgaSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3QoKTsKKyAgICAgICAgYm9v
bCBleGlzdHNBbHJlYWR5ID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IHRpbGVSZWN0
c1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qg
bmV3VGlsZSA9IHRpbGVSZWN0c1RvQWRkW2pdOworICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0g
bmV3VGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQSB0
aWxlIHRoYXQgd2Ugd2FudCB0byBhZGQgYWxyZWFkeSBleGlzdHMsIG5vIG5lZWQgdG8gYWRkIG9y
IHJlbW92ZSBpdC4KKyAgICAgICAgICAgIGV4aXN0c0FscmVhZHkgPSB0cnVlOworICAgICAgICAg
ICAgdGlsZVJlY3RzVG9BZGQucmVtb3ZlKGopOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUaGlzIHRpbGUgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgaWYgKCFl
eGlzdHNBbHJlYWR5KQorICAgICAgICAgICAgdGlsZUluZGljZXNUb1JlbW92ZS5hcHBlbmQoaSk7
CisgICAgfQorCisgICAgLy8gUmVjeWNsZSByZW1vdmFibGUgdGlsZXMgdG8gYmUgdXNlZCBmb3Ig
bmV3bHkgcmVxdWVzdGVkIHRpbGVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZVJl
Y3RzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aWxlSW5kaWNlc1RvUmVtb3Zl
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gV2UgcmVjeWNsZSBhbiBleGlzdGluZyB0aWxl
IGZvciB1c2FnZSB3aXRoIGEgbmV3IHRpbGUgcmVjdC4KKyAgICAgICAgICAgIFRleHR1cmVNYXBw
ZXJUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlSW5kaWNlc1RvUmVtb3ZlLmxhc3QoKV07CisgICAg
ICAgICAgICB0aWxlSW5kaWNlc1RvUmVtb3ZlLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHRp
bGUuc2V0UmVjdCh0aWxlUmVjdHNUb0FkZFtpXSk7CisgICAgICAgICAgICBpZiAodGlsZS50ZXh0
dXJlKCkpCisgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlKCktPnJlc2V0KGVuY2xvc2luZ0lu
dFJlY3QodGlsZS5yZWN0KCkpLnNpemUoKSwgZmFsc2UpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBtX3RpbGVzLmFwcGVuZChUZXh0dXJlTWFwcGVyVGlsZSh0
aWxlUmVjdHNUb0FkZFtpXSkpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB1bm5lY2Vzc2FyeSB0
aWxlcywgaWYgdGhleSB3ZXJlbid0IHJlY3ljbGVkLgorICAgIC8vIFdlIHVzZSBhIHRocmVzaG9s
ZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlL2Rlc3Ryb3kgdGlsZXMgdG9vIGVhZ2VybHku
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlSW5kaWNlc1RvUmVtb3ZlLnNpemUoKSAm
JiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAgICBtX3Rp
bGVzLnJlbW92ZSh0aWxlSW5kaWNlc1RvUmVtb3ZlW2ldKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiB0b3RhbFNpemUsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVk
KHRvdGFsU2l6ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RpbGVzW2ld
LnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBkaXJ0eVJlY3QpOworfQorCitQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6
dGV4dHVyZSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90
aWxlc1tpXS50ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0
dXJuIHRleHR1cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4oKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ODkzYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZV9oCisjZGVmaW5l
IFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzTGF5ZXI7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgOiBwdWJsaWMg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIsIHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmU+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1Rl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKSA9IDA7CisgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSgpIHsgfQorfTsKKworY2xhc3MgVGV4dHVyZU1h
cHBlclRpbGUgeworcHVibGljOgorICAgIGlubGluZSBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KKyAgICBpbmxpbmUgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRU
ZXh0dXJlKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpIHsgbV90ZXh0dXJlID0gdGV4dHVyZTsgfQor
ICAgIGlubGluZSB2b2lkIHNldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9
IHJlY3Q7IH0KKworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEltYWdl
KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVy
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSopOwor
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJUaWxlKCkgeyB9CisKKyAgICBUZXh0dXJlTWFwcGVy
VGlsZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJl
OworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6
CisgICAgdm9pZCB1cGRhdGVDb250ZW50c0Zyb21MYXllcihUZXh0dXJlTWFwcGVyKiwgR3JhcGhp
Y3NMYXllciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyVGls
ZWRCYWNraW5nU3RvcmUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
VGV4dHVyZU1hcHBlciosIEltYWdlKiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
SW1hZ2UqIGltYWdlKSB7IHVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLCBpbWFn
ZS0+c2l6ZSgpLCBpbWFnZS0+cmVjdCgpKTsgfQorICAgIGlubGluZSBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3Rv
cmUpOyB9CisgICAgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKSB7IG1faW1h
Z2UgPSBpbWFnZTsgfQorICAgIHZvaWQgdXBkYXRlQ29udGVudHNGcm9tSW1hZ2VJZk5lZWRlZChU
ZXh0dXJlTWFwcGVyKik7CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlclRpbGVkQmFja2lu
Z1N0b3JlKCkgeyB9CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKGNvbnN0
IEZsb2F0U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOwor
CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlPiBtX3RpbGVzOworICAgIEZsb2F0U2l6ZSBt
X3NpemU7CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworfTsKKworfQorI2VuZGlmIC8vIFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXgg
NDViOTRiZC4uZGYyYTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0yMCwxNiAr
MjAsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9k
ZS5oIgogCisjaW5jbHVkZSAic3RkaW8uaCIKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAKLW5hbWVzcGFjZSB7
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGdUaWxlRGltZW5zaW9uID0gMTAyNC4wOwotfQotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJO
b2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtNTEsNiArNDksMTYgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpCiAgICAgbV90cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obWF0cml4KTsKIH0KIAordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCkKK3sKKyAg
ICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOworICAgIG1fY29udGVudHNMYXllciA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBt
X2NoaWxkcmVuW2ldLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKyAgICBpZiAobV9z
dGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5jbGVhckJhY2tpbmdT
dG9yZXNSZWN1cnNpdmUoKTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRy
YW5zZm9ybXNSZWN1cnNpdmUoKQogewogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3Rh
dGUubWFza3NUb0JvdW5kcykKQEAgLTgxLDEwMCArODksMjcgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQogICAgICAgICBzb3J0QnlaT3JkZXIo
bV9jaGlsZHJlbiwgMCwgbV9jaGlsZHJlbi5zaXplKCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpjb21wdXRlVGlsZXMoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFj
a2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQogewotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX3N0YXRlLnRp
bGVPd25lcnNoaXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykKKyAgICBpZiAoIWxheWVyIHx8
ICF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJh
d3NDb250ZW50KSB7Ci0gICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7Ci0gICAgVmVjdG9y
PGludD4gdGlsZXNUb1JlbW92ZTsKLSAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0g
NjsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgRmxvYXRSZWN0IGNv
bnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBmb3Ig
KGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0gZ1RpbGVEaW1lbnNp
b24pIHsKLSAgICAgICAgZm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7
IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4
LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwotICAgICAgICAgICAgdGlsZVJl
Y3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIHRpbGVzVG9BZGQuYXBwZW5k
KHRpbGVSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBtX293bmVk
VGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0
IG9sZFRpbGUgPSBtX293bmVkVGlsZXNbaV0ucmVjdDsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwogCi0gICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAtIDE7IGogPj0g
MDsgLS1qKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVzVG9B
ZGRbal07Ci0gICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB0
aWxlc1RvQWRkLnJlbW92ZShqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKGkpOwot
ICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0FkZC5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGlsZXNUb1JlbW92ZVswXV07Ci0gICAg
ICAgICAgICB0aWxlc1RvUmVtb3ZlLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIHRpbGUucmVjdCA9
IHRpbGVzVG9BZGRbaV07Ci0gICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0cnVlOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBPd25lZFRpbGUgdGlsZTsK
LSAgICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKLSAgICAgICAgdGlsZS5uZWVkc1Jl
c2V0ID0gdHJ1ZTsKLSAgICAgICAgbV9vd25lZFRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fb3du
ZWRUaWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgbV9vd25l
ZFRpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGlj
c0xheWVyKiBsYXllcikKLXsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAo
bV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpCisgICAgaWYg
KCFtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcikKICAgICAgICAgcmV0dXJuOwot
I2VuZGlmCiAKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbGF5ZXIgfHwgKCFtX3N0YXRl
LmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250
ZW50VHlwZSkpIHsKLSAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7CisgICAgaWYgKCFtX3N0
YXRlLmRyYXdzQ29udGVudCB8fCBtX3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRleHR1
cmVNYXBwZXIpCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fc3Rh
dGUubmVlZHNEaXNwbGF5ID8gbGF5ZXJSZWN0KCkgOiBtX3N0YXRlLm5lZWRzRGlzcGxheVJlY3Qp
OworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJl
Y3QpOworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0g
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKIAotICAgIGZvciAoc2l6
ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGls
ZUluZGV4KSB7Ci0gICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5k
ZXhdOwotICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSkKLSAgICAgICAgICAgIHRpbGUudGV4dHVy
ZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwotICAgICAgICBJbnRTaXplIHRpbGVT
aXplID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlLnJlY3QpLnNpemUoKTsKLQotICAgICAgICBpZiAo
dGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwg
IXRleHR1cmUtPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9zdGF0ZS5jb250ZW50
c09wYXF1ZSk7Ci0gICAgICAgICAgICBkaXJ0eVJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0
aWxlLnJlY3QpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGR5bmFtaWNfY2FzdDxUZXh0dWVyTWFw
cGVyVGlsZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOwogCiAgICAgLy8g
UGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVmZmVyLiBUaGlzIGVu
c3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkpOwpAQCAtMTgzLDgg
KzExOCw2IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgY29udGV4dC0+c2V0VGV4dERy
YXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKICAgICBjb250ZXh0
LT50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKICAgICBsYXllci0+
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIGRpcnR5UmVjdCk7Ci0gICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkK
LSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIG1fc3RhdGUuY29udGVudHNSZWN0KTsKIAogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2U7CiAKQEAgLTE5NSwxMDQgKzEyOCwzNSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBo
aWNzTGF5ZQogICAgIGltYWdlID0gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0
b3JlKTsKICNlbmRpZgogCi0gICAgLy8gRGl2aWRlIHRoZSBpbWFnZSB0byB0aWxlcy4KLSAgICBm
b3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgp
OyArK3RpbGVJbmRleCkgewotICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNb
dGlsZUluZGV4XTsKLSAgICAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dCh0aWxlLnJlY3QpOwotICAgICAgICB0YXJnZXRSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwot
ICAgICAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGFyZ2V0UmVjdDsKLQotICAgICAgICAvLyBO
b3JtYWxpemUgc291cmNlUmVjdCB0byB0aGUgYnVmZmVyJ3MgY29vcmRpbmF0ZXMuCi0gICAgICAg
IHNvdXJjZVJlY3QubW92ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwotCi0gICAg
ICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXRSZWN0IHRvIHRoZSB0ZXh0dXJlJ3MgY29vcmRpbnFhdGVz
LgotICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgp
KTsKLSAgICAgICAgdGlsZS50ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFy
Z2V0UmVjdCwgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UkdCQUZvcm1hdCk7Ci0gICAgfQot
Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICBtX2N1cnJl
bnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgc3RhdGljX2Nhc3Q8
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0KCkpLT51
cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZS5nZXQoKSwgbV9zaXplLCBkaXJ0eVJl
Y3QpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludCgpCiB7Ci0gICAgaWYgKG1f
c2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGNvbXB1dGVUcmFuc2Zvcm1z
UmVjdXJzaXZlKCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdDsKLSAgICBv
cHQudGV4dHVyZU1hcHBlciA9IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBvcHQudGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2UoMCk7Ci0gICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKLX0KLQotRmxvYXRS
ZWN0IFRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAotewotICAg
IHJldHVybiBGbG9hdFJlY3QoCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGls
ZVJlY3QueCgpIC0gdGFyZ2V0UmVjdC54KCkpLAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3Qu
eSgpICsgKHRpbGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICB0
aWxlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpKTsKKyAg
ICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyID0gbV90ZXh0dXJlTWFwcGVyOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+Ymlu
ZFN1cmZhY2UoMCk7CisgICAgcGFpbnRSZWN1cnNpdmUob3B0aW9ucyk7CiB9CiAKIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3
c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5
cGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5vcGFj
aXR5OwotICAgIEJpdG1hcFRleHR1cmUqIG1hc2sgPSBvcHRpb25zLm1hc2s7Ci0gICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7Ci0KICAgICAvLyBXZSBhcHBseSB0
aGUgZm9sbG93aW5nIHRyYW5zZm9ybSB0byBjb21wZW5zYXRlIGZvciBwYWludGluZyBpbnRvIGEg
c3VyZmFjZSwgYW5kIHRoZW4gYXBwbHkgdGhlIG9mZnNldCBzbyB0aGF0IHRoZSBwYWludGluZyBm
aXRzIGluIHRoZSB0YXJnZXQgcmVjdC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm0gPQogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0p
CiAgICAgICAgICAgICAubXVsdGlwbHkobV90cmFuc2Zvcm0uY29tYmluZWQoKSkKICAgICAgICAg
ICAgIC50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVp
Z2h0KCkpOwogCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgVmVjdG9yPEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZT4gdGlsZXNUb1BhaW50OwotCi0gICAgaWYgKG1fc3RhdGUudGlsZU93
bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKSB7Ci0gICAgICAgIC8vIFNvcnQgdGls
ZXMsIHdpdGggY3VycmVudCBzY2FsZSBmYWN0b3IgbGFzdC4KLSAgICAgICAgVmVjdG9yPEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZSo+IHRpbGVzOwotICAgICAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxs
eU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVu
ZCgpOwotICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+Ojpp
dGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC5mcm9udEJ1ZmZlci50ZXh0dXJl
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoaXQtPnNlY29u
ZC5zY2FsZSA9PSBtX3N0YXRlLmNvbnRlbnRTY2FsZSkgewotICAgICAgICAgICAgICAgIHRpbGVz
LmFwcGVuZCgmaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIHRyYW5zaXRpb25hbCBlZmZl
Y3QgbG9va3MgZ29vZCBvbmx5IHdoZW4gdGhlcmUncyBubyB0cmFuc3BhcmVuY3ksIHNvIHdlIG9u
bHkgdXNlIGl0IHdoZW4gdGhlIG9wYWNpdHkgZm9yIHRoZSBsYXllciBpcyBhYm92ZSBhIGNlcnRh
aW4gdGhyZXNob2xkLgotICAgICAgICAgICAgaWYgKG9wYWNpdHkgPiAwLjk1KQotICAgICAgICAg
ICAgICAgIHRpbGVzLnByZXBlbmQoJml0LT5zZWNvbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0aWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgRXh0
ZXJuYWxseU1hbmFnZWRUaWxlJiB0aWxlID0gKnRpbGVzW2ldOwotICAgICAgICAgICAgRmxvYXRS
ZWN0IHJlY3QgPSB0aWxlLmZyb250QnVmZmVyLnRhcmdldFJlY3Q7Ci0gICAgICAgICAgICBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlID0gKnRpbGUuZnJvbnRCdWZmZXIudGV4dHVyZTsKLSAgICAgICAg
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVjdCwgdHJh
bnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCisgICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKKyAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gbWFzayA9IG9wdGlvbnMubWFzazsKIAotICAgIC8vIE5vdyB3ZSBw
YWludCBvd25lZCB0aWxlcywgaWYgd2UncmUgaW4gT3duZWRUaWxlTW9kZS4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBCaXRt
YXBUZXh0dXJlKiB0ZXh0dXJlID0gbV9vd25lZFRpbGVzW2ldLnRleHR1cmUuZ2V0KCk7Ci0gICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCByZWN0ID0gdGFyZ2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJl
Y3QsIG1fb3duZWRUaWxlc1tpXS5yZWN0KTsKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsK
LSAgICB9CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBsYXllclJlY3QoKSwg
dHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLmdldCgpKTsKIAotICAgIGlmIChtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5t
ZWRpYSkKLSAgICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnRUb1RleHR1cmVNYXBw
ZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHks
IG1hc2spOworICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIG1fY29udGVudHNMYXll
ci0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBtX3N0YXRlLmNv
bnRlbnRzUmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLmdldCgpKTsKIH0KIAogaW50IFRl
eHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCog
YSwgY29uc3Qgdm9pZCogYikKQEAgLTMzMiw3ICsxOTYsNyBAQCBJbnRSZWN0IFRleHR1cmVNYXBw
ZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbQogewogICAgIEludFJlY3QgcmVjdDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1hdHJpeCkubXVsdGlwbHkobV90cmFu
c2Zvcm0uY29tYmluZWQoKSk7Ci0gICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxUcmFu
c2Zvcm0ubWFwUmVjdChlbnRpcmVSZWN0KCkpKTsKKyAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChsb2NhbFRyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCgpKSk7CiAgICAgaWYgKCFtX3N0YXRl
Lm1hc2tzVG9Cb3VuZHMgJiYgIW1fc3RhdGUubWFza0xheWVyKSB7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHJlY3QudW5p
dGUobV9jaGlsZHJlbltpXS0+aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QobWF0cml4KSk7CkBAIC00
MzMsNyArMjk3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoY29u
c3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKICAgICBpZiAobV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCiAgICAgICAgIG1hc2tUZXh0dXJlID0gMDsKIAotICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZS5nZXQoKSk7CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VHJhbnNmb3JtID0KICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KG9wdGlvbnMudHJhbnNmb3JtKQogICAgICAgICAgICAgICAgIC5tdWx0aXBs
eShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKQpAQCAtNDUwLDg5ICszMTQsNiBAQCBUZXh0dXJlTWFw
cGVyTm9kZTo6flRleHR1cmVNYXBwZXJOb2RlKCkKICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRy
ZW4ucmVtb3ZlKG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwogfQogCi0jaWYgVVNF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1pbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRl
bnRzVGlsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBzdGF0aWMgaW50IG5leHRJRCA9IDA7Ci0gICAg
aW50IGlkID0gKytuZXh0SUQ7Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmFkZChpZCwg
RXh0ZXJuYWxseU1hbmFnZWRUaWxlKHNjYWxlKSk7Ci0gICAgbV9zdGF0ZS5jb250ZW50U2NhbGUg
PSBzY2FsZTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJl
bW92ZUNvbnRlbnRzVGlsZShpbnQgaWQpCi17Ci0gICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVz
LnJlbW92ZShpZCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnB1cmdlTm9kZVRleHR1
cmVzUmVjdXJzaXZlKCkKLXsKLSAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuY2xlYXIoKTsK
LQotICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQot
ICAgICAgICBtX2NoaWxkcmVuW2ldLT5wdXJnZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAg
ICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4
dGVybmFsbHlNYW5hZ2VkVGlsZXMuZmluZChpZCk7Ci0KLSAgICBpZiAoaXQgPT0gbV9leHRlcm5h
bGx5TWFuYWdlZFRpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeHRlcm5hbGx5
TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotCi0gICAgdGlsZS5iYWNrQnVmZmVyLnNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0ID0g
dGFyZ2V0UmVjdDsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IHRleHR1cmU7Ci0gICAg
dGlsZS5pc0JhY2tCdWZmZXJVcGRhdGVkID0gdHJ1ZTsKLSAgICB0aWxlLmlzRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckFs
bERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKQotewotICAgIGZvciAoSGFzaE1hcDxpbnQs
IEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdl
ZFRpbGVzLmJlZ2luKCk7IGl0ICE9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC5pc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKQot
ICAgICAgICAgICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLnJlbW92ZShpdCk7Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLQot
ICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1f
ZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKLSAgICBpZiAoaXQgPT0gbV9leHRlcm5h
bGx5TWFuYWdlZFRpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeHRlcm5hbGx5
TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOwotCi0gICAgdGlsZS5iYWNrQnVmZmVyLnNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0ID0g
RmxvYXRSZWN0KHRhcmdldFJlY3QpOwotICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0LnNj
YWxlKDEuMCAvIHRpbGUuc2NhbGUpOwotCi0gICAgaWYgKCF0aWxlLmJhY2tCdWZmZXIudGV4dHVy
ZSkKLSAgICAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSBtX3RleHR1cmVNYXBwZXItPmNy
ZWF0ZVRleHR1cmUoKTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+cmVzZXQoc291cmNl
UmVjdC5zaXplKCksIGZhbHNlKTsKLSAgICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZS0+dXBkYXRl
Q29udGVudHMoZGF0YSwgc291cmNlUmVjdCk7Ci0gICAgdGlsZS5pc0JhY2tCdWZmZXJVcGRhdGVk
ID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3dhcENvbnRlbnRzQnVmZmVy
cygpCi17Ci0gICAgSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9y
IGVuZCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8
aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1h
bmFnZWRUaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRXh0ZXJuYWxs
eU1hbmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKCF0aWxlLmlzQmFj
a0J1ZmZlclVwZGF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGlsZS5pc0Jh
Y2tCdWZmZXJVcGRhdGVkID0gZmFsc2U7Ci0gICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1
ZmZlciBzd2FwQnVmZmVyID0gdGlsZS5mcm9udEJ1ZmZlcjsKLSAgICAgICAgdGlsZS5mcm9udEJ1
ZmZlciA9IHRpbGUuYmFja0J1ZmZlcjsKLSAgICAgICAgdGlsZS5iYWNrQnVmZmVyID0gc3dhcEJ1
ZmZlcjsKLSAgICB9Ci19Ci0jZW5kaWYKLQogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0Nv
bXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIs
IGludCBvcHRpb25zKQogewogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIs
IHJvb3RMYXllcigpLT5tX3RleHR1cmVNYXBwZXIsIG9wdGlvbnMpOwpAQCAtNTQxLDE0ICszMjIs
MTEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5
bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhp
Y3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKICAgICBpbnQgY2hhbmdl
TWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKLSAgICBjb25zdCBUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVu
ZGluZ0NvbnRlbnQoKTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBzd2FwQ29u
dGVudHNCdWZmZXJzKCk7Ci0jZW5kaWYKLSAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMg
JiYgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVu
dC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5KQorCisgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBoaWNzTGF5ZXIt
Pm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAoY2hhbmdlTWFz
ayAmIFBhcmVudENoYW5nZSkpIHsKKyAgICBpZiAoY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkg
ewogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbmV3UGFyZW50ID0gdG9UZXh0dXJlTWFwcGVy
Tm9kZShncmFwaGljc0xheWVyLT5wYXJlbnQoKSk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQgIT0g
bV9wYXJlbnQpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBub2RlIGZyb20gY3VycmVudCBmcm9t
IGNoaWxkIGxpc3QgZmlyc3QuCkBAIC01ODAsMTYgKzM1OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIChTaXplQ2hh
bmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlKSkgewotICAgICAgICBGbG9hdFNpemUgd2FudGVkU2l6
ZShncmFwaGljc0xheWVyLT5zaXplKCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+c2l6ZSgpLmhl
aWdodCgpKTsKLSAgICAgICAgaWYgKHdhbnRlZFNpemUuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250
ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkKLSAgICAgICAgICAgIHdhbnRlZFNp
emUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgZ3Jh
cGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIGlmICh3YW50
ZWRTaXplICE9IG1fc2l6ZSkKLSAgICAgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwotCi0g
ICAgICAgIG1fc2l6ZSA9IHdhbnRlZFNpemU7Ci0gICAgfQorICAgIG1fc2l6ZSA9IGdyYXBoaWNz
TGF5ZXItPnNpemUoKTsKIAogICAgIGlmIChjaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7
CiAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUoZ3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpKQpAQCAtNjE5LDEzICszODgsMTAgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IGdy
YXBoaWNzTGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIG1fc3RhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fc3Rh
dGUub3BhY2l0eSA9IGdyYXBoaWNzTGF5ZXItPm9wYWNpdHkoKTsKLQotICAgIG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPSBwZW5kaW5nQ29udGVudC5jb250ZW50VHlwZTsKLSAgICBtX2N1
cnJlbnRDb250ZW50LmltYWdlID0gcGVuZGluZ0NvbnRlbnQuaW1hZ2U7Ci0gICAgbV9jdXJyZW50
Q29udGVudC5tZWRpYSA9IHBlbmRpbmdDb250ZW50Lm1lZGlhOwotICAgIG1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5ID0gbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgfHwgcGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5OwotICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rp
c3BsYXkpCi0gICAgICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShw
ZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBtX3N0YXRlLm5lZWRzRGlzcGxh
eSA9IG1fc3RhdGUubmVlZHNEaXNwbGF5IHx8IGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheSgp
OworICAgIGlmICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkpCisgICAgICAgIG1fc3RhdGUubmVlZHNE
aXNwbGF5UmVjdC51bml0ZShncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCkpOworICAg
IG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKTsKIAogICAg
IG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5z
ZXRBbmNob3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsKQEAgLTY2Niw2ICs0MzIsOSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIAogdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGludCBvcHRpb25zKQogeworICAgIGlmICghdGV4dHVyZU1hcHBlcikKKyAgICAgICAgcmV0dXJu
OworCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgIShvcHRpb25zICYgQ29tcHV0YXRpb25zT25s
eSkpIHsKICAgICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRl
eHR1cmVNYXBwZXIpOwogICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwpA
QCAtNjgzLDEwICs0NTIsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgICAgICBtX3N0
YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSksIHRleHR1cmVNYXBwZXIp
OwogCiAgICAgc3luY0FuaW1hdGlvbnMoKTsKLSAgICBjb21wdXRlVGlsZXMoKTsKLQotICAgIGlm
IChncmFwaGljc0xheWVyKQotICAgICAgICByZW5kZXJDb250ZW50KHRleHR1cmVNYXBwZXIsIGdy
YXBoaWNzTGF5ZXIpOworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSh0ZXh0dXJlTWFwcGVyLCBncmFw
aGljc0xheWVyKTsKIAogICAgIGlmICghKG9wdGlvbnMgJiBUcmF2ZXJzZURlc2NlbmRhbnRzKSkK
ICAgICAgICAgb3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
CmluZGV4IDIzMGM5ZTAuLjEzN2JmMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CkBAIC00MiwxNiArNDMsMTQgQEAgY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI7CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgewogcHVibGljOgotICAgIEJpdG1hcFRl
eHR1cmUqIHN1cmZhY2U7Ci0gICAgQml0bWFwVGV4dHVyZSogbWFzazsKKyAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gc3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFzazsKICAg
ICBmbG9hdCBvcGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAg
ICBJbnRTaXplIG9mZnNldDsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyOwogICAg
IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMoKQotICAgICAgICA6IHN1cmZhY2UoMCkKLSAgICAg
ICAgLCBtYXNrKDApCi0gICAgICAgICwgb3BhY2l0eSgxKQorICAgICAgICA6IG9wYWNpdHkoMSkK
ICAgICAgICAgLCB0ZXh0dXJlTWFwcGVyKDApCiAgICAgeyB9CiB9OwpAQCAtOTcsMzcgKzk2LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgQ29tcHV0YXRpb25zT25seSA9IDIKICAgICB9OwogCi0gICAg
ZW51bSBUaWxlT3duZXJzaGlwIHsKLSAgICAgICAgT3duZWRUaWxlcywKLSAgICAgICAgRXh0ZXJu
YWxseU1hbmFnZWRUaWxlcwotICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8VGV4dHVyZU1h
cHBlck5vZGUqLCBGbG9hdFJlY3Q+IE5vZGVSZWN0TWFwOwotCi0gICAgLy8gVGhlIGNvbXBvc2l0
b3IgbGV0cyB1cyBzcGVjaWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNvIHdlIHRyeSB0byBk
byBzby4KLSAgICBlbnVtIENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBlLCBEaXJlY3RJbWFn
ZUNvbnRlbnRUeXBlLCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMz
RENvbnRlbnRUeXBlfTsKLSAgICBzdHJ1Y3QgQ29udGVudERhdGEgewotICAgICAgICBGbG9hdFJl
Y3QgbmVlZHNEaXNwbGF5UmVjdDsKLSAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7Ci0gICAgICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcjsKLQotICAgICAgICBDb250ZW50VHlwZSBjb250ZW50VHlw
ZTsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKLSAgICAgICAgY29uc3QgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhOwotICAgICAgICBDb250ZW50RGF0YSgpCi0gICAgICAg
ICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKLSAgICAgICAgICAgICwgY29udGVudFR5cGUoSFRN
TENvbnRlbnRUeXBlKQotICAgICAgICAgICAgLCBpbWFnZSgwKQotICAgICAgICAgICAgLCBtZWRp
YSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlck5v
ZGUoKQogICAgICAgICA6IG1fcGFyZW50KDApCiAgICAgICAgICwgbV9lZmZlY3RUYXJnZXQoMCkK
KyAgICAgICAgLCBtX2NvbnRlbnRzTGF5ZXIoMCkKICAgICAgICAgLCBtX29wYWNpdHkoMSkKICAg
ICAgICAgLCBtX2NlbnRlclooMCkKKyAgICAgICAgLCBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9y
ZUZyb21MYXllcih0cnVlKQogICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigwKQogICAgIHsgfQog
CkBAIC0xNDQsMTkgKzExOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGls
ZU93bmVyc2hpcCBvd25lcnNoaXApIHsgbV9zdGF0ZS50aWxlT3duZXJzaGlwID0gb3duZXJzaGlw
OyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRlbnRzVGlsZShmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCBy
ZW1vdmVDb250ZW50c1RpbGUoaW50IGlkKTsKLSAgICB2b2lkIHNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCB2b2lkKik7Ci0gICAgdm9pZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1
cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSopOwotICAg
IHZvaWQgY2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7Ci0gICAgdm9pZCBw
dXJnZU5vZGVUZXh0dXJlc1JlY3Vyc2l2ZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRJRChpbnQg
aWQpIHsgbV9pZCA9IGlkOyB9Ci0gICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQot
Ci0gICAgY29uc3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50Q29udGVudC5tZWRpYTsgfQorICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRl
QmFja2luZ1N0b3JlRnJvbUxheWVyKGJvb2wgYikgeyBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9y
ZUZyb21MYXllciA9IGI7IH0KKyAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpIHsgbV9iYWNraW5nU3RvcmUgPSBiYWNraW5nU3Rv
cmU7IH0KKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlOyB9CisgICAgdm9pZCBjbGVhckJhY2tpbmdT
dG9yZXNSZWN1cnNpdmUoKTsKIAogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9v
dExheWVyKCk7CkBAIC0xNzQsMTMgKzE0MCwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQg
Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
OwogICAgIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUq
ID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KTsKIAotICAgIEJpdG1hcFRleHR1cmUqIHRl
eHR1cmUoKSB7IHJldHVybiBtX293bmVkVGlsZXMuaXNFbXB0eSgpID8gMCA6IG1fb3duZWRUaWxl
c1swXS50ZXh0dXJlLmdldCgpOyB9CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0
dXJlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+dGV4dHVyZSgp
IDogMDsgfQogCiAgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShjb25zdCBUZXh0dXJlTWFwcGVyUGFp
bnRPcHRpb25zJik7CiAgICAgdm9pZCBwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVyZU1h
cHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVw
bGljYShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7Ci0gICAgdm9pZCByZW5kZXJD
b250ZW50KFRleHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCB1cGRhdGVC
YWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIHZvaWQg
c3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwpAQCAtMTg4LDYz
ICsxNTQsMjEgQEAgcHJpdmF0ZToKIAogICAgIExheWVyVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwog
Ci0gICAgaW5saW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/
IGVudGlyZVJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OwotICAgIH0KLQotICAgIGlubGlu
ZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIH0KLQot
ICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0CisgICAgaW5saW5lIEZsb2F0UmVjdCBs
YXllclJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQu
Y29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50
LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+c2l6ZSgpIDogbV9zaXplOworICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXplKTsKICAgICB9Ci0g
ICAgc3RydWN0IE93bmVkVGlsZSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICAgICAgYm9vbCBuZWVkc1Jlc2V0Owot
ICAgIH07Ci0KLSAgICBWZWN0b3I8T3duZWRUaWxlPiBtX293bmVkVGlsZXM7Ci0KLSNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBzdHJ1Y3QgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVm
ZmVyIHsKLSAgICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIEZsb2F0UmVjdCB0
YXJnZXRSZWN0OwotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICB9
OwotCi0gICAgc3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZSB7Ci0gICAgICAgIGJvb2wgaXNC
YWNrQnVmZmVyVXBkYXRlZDsKLSAgICAgICAgYm9vbCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
OwotICAgICAgICBmbG9hdCBzY2FsZTsKLSAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVm
ZmVyIGZyb250QnVmZmVyOwotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIgYmFj
a0J1ZmZlcjsKLQotICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoZmxvYXQgc2NhbGUgPSAx
LjApCi0gICAgICAgICAgICA6IGlzQmFja0J1ZmZlclVwZGF0ZWQoZmFsc2UpCi0gICAgICAgICAg
ICAsIGlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoZmFsc2UpCi0gICAgICAgICAgICAsIHNjYWxl
KHNjYWxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgSGFzaE1hcDxpbnQs
IEV4dGVybmFsbHlNYW5hZ2VkVGlsZT4gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzOwotI2VuZGlm
Ci0KLSAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50OwogCiAgICAgVmVjdG9yPFRleHR1
cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJl
bnQ7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0OworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbV9jb250ZW50c0xheWVyOwogICAgIEZsb2F0U2l6ZSBtX3NpemU7
CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1fY2VudGVyWjsKICAgICBTdHJpbmcg
bV9uYW1lOwotICAgIGludCBtX2lkOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXI7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBGbG9hdFBvaW50IHBv
czsKQEAgLTI1NCw2ICsxNzgsNyBAQCBwcml2YXRlOgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQgb3BhY2l0eTsKICAgICAgICAg
RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJl
Y3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50OwogICAgICAgICBUZXh0dXJl
TWFwcGVyTm9kZSogbWFza0xheWVyOwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGlj
YUxheWVyOwpAQCAtMjYzLDEzICsxODgsOSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNvbnRl
bnRzT3BhcXVlIDogMTsKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkgOiAxOwogICAg
ICAgICBib29sIHZpc2libGUgOiAxOwotICAgICAgICBib29sIG5lZWRzUmVzZXQ6IDE7CisgICAg
ICAgIGJvb2wgbmVlZHNEaXNwbGF5OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBz
IDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAgICAgIGZsb2F0IGNvbnRlbnRT
Y2FsZTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgVGlsZU93bmVyc2hp
cCB0aWxlT3duZXJzaGlwOwotI2VuZGlmCiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDog
b3BhY2l0eSgxLmYpCiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQpAQCAtMjgwLDEzICsyMDEs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKICAgICAg
ICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICAgICAgICAgLCB2aXNpYmxl
KHRydWUpCi0gICAgICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2UpCisgICAgICAgICAgICAsIG5l
ZWRzRGlzcGxheSh0cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkK
ICAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50
U2NhbGUoMS4wZikKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICwg
dGlsZU93bmVyc2hpcChPd25lZFRpbGVzKQotI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4IDFiMjky
OTAuLmM2OWMxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBA
IC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNk
ZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzAsNyArMjksOCBAQCBjbGFzcyBCaXRtYXBUZXh0dXJlOwogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVyZSogbWFzayA9IDApIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wLCBC
aXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVy
cygpIHsgfQogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMzFjMDMwLi42ZjM1MjVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMTMgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0u
cm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFj
a2luZy1zdG9yZSBjb2RlIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA1CisKKyAgICAgICAgTW92ZSB0aGUgYmFja2lu
Zy1zdG9yZSBjb2RlIHRvIExheWVyVHJlZUJhY2tpbmdTdG9yZSwgaW1wbGVtZW50aW5nIHRoZSB2
aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBpbiBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLgor
ICAgICAgICBXZSBzYXZlIHRoZSBkb3VibGUtYnVmZmVyZWQgdGlsZSBpbiB0aGUgYmFja2luZy1z
dG9yZSwgYW5kIHRoZW4gY29udmVydCB0aGVtIHRvIHJlZ3VsYXIKKyAgICAgICAgdGlsZXMgaW4g
dXBkYXRlQ29udGVudHMsIGJhc2VkIG9uIHRoZSBvcmRlciBvZiBwYWludGluZy4KKyAgICAgICAg
VXNlIFRleHR1cmVNYXBwZXJDb21wb3NpdGVkSW1hZ2UgZm9yIGltYWdlcyBpbnN0ZWFkIG9mIHNh
dmluZyBvdXIgb3duIGNvbXBvc2l0ZWQgaW1hZ2UKKyAgICAgICAgcmVnaXN0cnkuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUlt
YWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRv
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNv
dXJjZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MucHJvOgorCisKIDIwMTItMDItMTEgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxMDc0MzUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBjZWRlNGVhLi5mYWU2NWQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKQEAgLTI1Myw2ICsyNTMsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVBy
b2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oIFwKKyAg
ICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTgxLDYgKzU4
Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQu
Y3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNw
cCBcCiAgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9R
dEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGM5NzE4Ny4uM2RiMGNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtMzAsMTUgKzMwLDE3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXpl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1l
ci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2Rl
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsKIGNsYXNzIFdlYkxh
eWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIApAQCAtOTgsMTIgKzEwMCw2IEBA
IHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkNvcmU6OkludFBvaW50LCBSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gPiBU
aWxlZEltYWdlOwotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBt
X25vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7Ci0gICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxl
VG9Ob2RlVGlsZTsKLSAgICBpbnQgcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQp
IGNvbnN0OwotICAgIEhhc2hNYXA8aW50NjRfdCwgVGlsZWRJbWFnZT4gbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXM7Ci0KICAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwogICAgIHZv
aWQgc3luY2hyb25pemVWaWV3cG9ydCgpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJ
RCk7CkBAIC0xMTgsMTEgKzExNCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmbHVzaExheWVy
Q2hhbmdlcygpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVM
YXllcihXZWJMYXllcklEKTsKLQorICAgIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdl
dEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CiAjZW5k
aWYKIAogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAg
ICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKKyAgICBIYXNoTWFwPGludDY0
X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3Jl
PiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKIAogI2lmIFBMQVRGT1JNKFFU
KQogICAgIHZvaWQgZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIoV2ViQ29yZTo6VGltZXI8TGF5
ZXJUcmVlSG9zdFByb3h5PiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllckJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWE2NGFkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllckJhY2tpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5
ZXJCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRlICJzdGRpby5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KQoreworICAgIGlmICghbV9iYWNrQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0UmVjdCA9IG1fdGFyZ2V0UmVjdDsKKyAgICB0YXJnZXRSZWN0LnNjYWxlKDEu
IC8gbV9zY2FsZSk7CisgICAgc2V0UmVjdCh0YXJnZXRSZWN0KTsKKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IHRoaXMtPnRleHR1cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsK
KyAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAg
ICAgc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5yZXNl
dChlbmNsb3NpbmdJbnRSZWN0KG1fc291cmNlUmVjdCkuc2l6ZSgpLCBmYWxzZSk7CisgICAgdGV4
dHVyZS0+dXBkYXRlQ29udGVudHMobV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKS5jb25zdEJp
dHMoKSwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2JhY2tCdWZmZXItPnNpemUoKSkpOwor
ICAgIG1fYmFja0J1ZmZlci5jbGVhcigpOworfQorCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjpj
cmVhdGVUaWxlKGludCBpZCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV90aWxlcy5hZGQoaWQsIExh
eWVyQmFja2luZ1N0b3JlVGlsZShzY2FsZSkpOworICAgIG1fc2NhbGUgPSBzY2FsZTsKK30KKwor
dm9pZCBMYXllckJhY2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShpbnQgaWQpCit7CisgICAgbV90aWxl
cy5yZW1vdmUoaWQpOworfQorCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGlu
dCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgU2hhcmVhYmxlQml0bWFwKiBiYWNrQnVmZmVyKQoreworICAgIEhhc2hNYXA8aW50LCBMYXll
ckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CisgICAg
QVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOworICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZl
cih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Cit7CisgICAg
SGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVU
aWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQu
dGV4dHVyZSgpOworICAgICAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
dXJlOworICAgIH0KKworICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Cit9
CisKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2sp
Cit7CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGlsZXNUb1BhaW50OworCisgICAg
Ly8gV2UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQsIGluIGNhc2UgdGhlIG9w
YWNpdHkgaGFzIGNoYW5nZWQuCisgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwg
TGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBp
dC0+c2Vjb25kOworICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7CisgICAgICAg
ICAgICB0aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRo
ZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KKyAg
ICAgICAgaWYgKG9wYWNpdHkgPiAwLjk1KQorICAgICAgICAgICAgdGlsZXNUb1BhaW50LnByZXBl
bmQoJnRpbGUpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1Bh
aW50LnNpemUoKTsgKytpKQorICAgICAgICB0aWxlc1RvUGFpbnRbaV0tPnBhaW50KHRleHR1cmVN
YXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3ZvaWQgTGF5ZXJCYWNraW5n
U3RvcmU6OnN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAg
SGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGls
ZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
aXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDNhOGQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTGF5ZXJC
YWNraW5nU3RvcmVfaAorI2RlZmluZSBMYXllckJhY2tpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJI
YXNoTWFwLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyQmFja2luZ1N0b3JlVGlsZSA6IHB1YmxpYyBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKKyAgICAgICAgOiBUZXh0dXJlTWFwcGVyVGlsZShXZWJD
b3JlOjpGbG9hdFJlY3QoKSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQorICAgIHsKKyAgICB9
CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9Cisg
ICAgdm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBz
ZXRCYWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNvdXJjZSwgU2hhcmVhYmxlQml0bWFwKiBidWZmZXIpCisgICAgewor
ICAgICAgICBtX3RhcmdldFJlY3QgPSB0YXJnZXQ7CisgICAgICAgIG1fc291cmNlUmVjdCA9IHNv
dXJjZTsKKyAgICAgICAgbV9iYWNrQnVmZmVyID0gYnVmZmVyOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG1fc291cmNlUmVjdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV90YXJnZXRS
ZWN0OworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZSA6
IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7CisgICAgdm9pZCByZW1vdmVUaWxlKGludCk7
CisgICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBTaGFyZWFibGVCaXRtYXAqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExh
eWVyQmFja2luZ1N0b3JlKTsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlciopOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSop
OworCitwcml2YXRlOgorICAgIExheWVyQmFja2luZ1N0b3JlKCkKKyAgICAgICAgOiBtX3NjYWxl
KDEuKQorICAgIHsgfQorICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+IG1f
dGlsZXM7CisgICAgZmxvYXQgbV9zY2FsZTsKK307CisKK30KKyNlbmRpZiAvLyBMYXllckJhY2tp
bmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJl
ZUhvc3RQcm94eVF0LmNwcAppbmRleCBjN2NhN2YxLi40YzRmNjE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTIy
LDE5ICsyMiwyMCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRl
ICJMYXllclRyZWVIb3N0UHJveHkuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXll
clRyZWVIb3N0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAi
TWVzc2FnZUlELmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJ
bmZvLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCi0jaW5jbHVkZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCi0j
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuaCIKICNpbmNsdWRlIDxRRGF0ZVRpbWU+CiAjaW5jbHVkZSA8Y2Fpcm8vT3Bl
bkdMU2hpbXMuaD4KIApAQCAtMTQ5LDggKzE1MCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXll
cj4gTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVySUQpCiB7
CiAgICAgR3JhcGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIodGhpcyk7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKG5ld0xheWVyKTsKLSAgICBub2RlLT5zZXRJRChsYXllcklEKTsKLSAgICBub2RlLT5z
ZXRUaWxlT3duZXJzaGlwKFRleHR1cmVNYXBwZXJOb2RlOjpFeHRlcm5hbGx5TWFuYWdlZFRpbGVz
KTsKKyAgICBub2RlLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFsc2Up
OwogICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7CiB9CiAKQEAgLTIzNSwyMSArMjM1LDEz
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAgICAgbV9kcmF3
aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCi1pbnQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKLXsKLSAgICBI
YXNoTWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZp
bmQodGlsZUlEKTsKLSAgICBpZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJ
bmZvKQogewogICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAgZW5zdXJlTGF5
ZXIoaWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwog
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLSAgICBib29sIG5lZWRzVG9V
cGRhdGVJbWFnZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkIHx8IGxheWVySW5mby5j
b250ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIGJvb2wgbmVlZHNUb1Vw
ZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5j
b250ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJh
Y2tpbmdTdG9yZUlEKTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKIApA
QCAtMzQ4LDY5ICszNDAsNDEgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXll
cklEKFdlYkxheWVySUQgbGF5ZXJJRCkKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIp
OwogfQogCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQorUGFzc1JlZlB0cjxMYXllckJhY2tpbmdT
dG9yZT4gTGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkK
IHsKLSAgICBlbnN1cmVMYXllcihsYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9k
ZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBlbnN1cmVM
YXllcihpZCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJO
b2RlKGxheWVyQnlJRChpZCkpOworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihub2RlLT5iYWNraW5nU3Rv
cmUoKS5nZXQoKSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgYmFja2luZ1N0
b3JlID0gTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAgICBub2RlLT5zZXRCYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICB9CisgICAgQVNTRVJUKGJhY2tpbmdT
dG9yZSk7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKK30KIAotICAgIGludCBub2RlVGlsZUlE
ID0gbm9kZS0+Y3JlYXRlQ29udGVudHNUaWxlKHNjYWxlKTsKLSAgICBtX3RpbGVUb05vZGVUaWxl
LmFkZCh0aWxlSUQsIG5vZGVUaWxlSUQpOwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAg
ICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CiB9
CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlE
KHRpbGVJRCk7Ci0gICAgaWYgKCFub2RlVGlsZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBu
b2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7Ci0gICAgbV90aWxlVG9Ob2RlVGls
ZS5yZW1vdmUodGlsZUlEKTsKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRp
bGUodGlsZUlEKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2Vi
TGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCkKIHsKLSAg
ICBlbnN1cmVMYXllcihsYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRv
VGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2Rl
VGlsZUlEKHRpbGVJRCk7Ci0gICAgaWYgKCFub2RlVGlsZUlEKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAg
UUltYWdlIGltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKLSAgICBub2RlLT5zZXRDb250
ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGlt
YWdlLmNvbnN0Qml0cygpKTsKKyAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0
ZVRpbGUodGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApOworICAgIG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIAogdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgU2hhcmVh
YmxlQml0bWFwKiBiaXRtYXApCiB7Ci0gICAgVGlsZWRJbWFnZSB0aWxlZEltYWdlOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgVGlsZURpbWVuc2lvbiA9IDEwMjQ7Ci0gICAgUUltYWdlIGltYWdlID0g
Yml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKLSAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5o
YXNBbHBoYUNoYW5uZWwoKTsKLSAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0
aCgpLCBpbWFnZS5oZWlnaHQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWln
aHQoKTsgeSArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW1hZ2Uud2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBRSW1hZ2Ug
c3ViSW1hZ2U7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwg
VGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOwot
ICAgICAgICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7Ci0gICAgICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgp
OwotICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhh
KTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHN1YkltYWdlLmNvbnN0Qml0
cygpLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgICAg
ICB0aWxlZEltYWdlLmFkZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIHRpbGVk
SW1hZ2UpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAg
YmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1h
cC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
c2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQpAQCAtNDIwLDM4ICszODQsMjUgQEAgdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCiAKIHZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9
IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFpbWFnZUlEKSB7Ci0gICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBB
U1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOworICAgIGxheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Cit9CiAKLSAgICBGbG9hdFNp
emUgc2l6ZShsYXllci0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVy
LT5jb250ZW50c1JlY3QoKSk7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRz
UmVjdC53aWR0aCgpIC8gc2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0g
Y29udGVudHNSZWN0LmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKTsKLSAgICBIYXNoTWFwPGludDY0
X3QsIFRpbGVkSW1hZ2U+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LmZpbmQoaW1hZ2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LmVuZCgpKQotICAgICAgICByZXR1cm47Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3dhcEJ1
ZmZlcnMoKQoreworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVy
YXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAoKml0KS0+c3dhcEJ1ZmZlcnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIAot
ICAgIFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIGVuZFRpbGVJdGVyYXRvciA9IGl0LT5zZWNvbmQuZW5k
KCk7Ci0gICAgZm9yIChUaWxlZEltYWdlOjppdGVyYXRvciB0aWxlSXQgPSBpdC0+c2Vjb25kLmJl
Z2luKCk7IHRpbGVJdCAhPSBlbmRUaWxlSXRlcmF0b3I7ICsrdGlsZUl0KSB7Ci0gICAgICAgIEZs
b2F0UmVjdCBzb3VyY2VSZWN0KEZsb2F0UG9pbnQodGlsZUl0LT5maXJzdCksIEZsb2F0U2l6ZSh0
aWxlSXQtPnNlY29uZC0+c2l6ZSgpKSk7Ci0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KHNv
dXJjZVJlY3QueCgpICogaG9yaXpvbnRhbEZhY3RvciArIGNvbnRlbnRzUmVjdC54KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3QueSgpICogdmVydGljYWxGYWN0b3Ig
KyBjb250ZW50c1JlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VS
ZWN0LndpZHRoKCkgKiBob3Jpem9udGFsRmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2VSZWN0LmhlaWdodCgpICogdmVydGljYWxGYWN0b3IpOwotICAgICAgICBpbnQg
bmV3VGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVudHNUaWxlKDEuMCk7Ci0gICAgICAgIG5vZGUt
PnNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKG5ld1Rp
bGVJRCwgSW50UmVjdChzb3VyY2VSZWN0KSwgdGFyZ2V0UmVjdCwgdGlsZUl0LT5zZWNvbmQuZ2V0
KCkpOwotICAgIH0KKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIo
KTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsK
ICAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworICAg
IHN3YXBCdWZmZXJzKCk7CisKICAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBp
dHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhl
IG5leHQgb25lLgogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQpAQCAtNjI5LDEyICs1ODAsMTEgQEAgdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CiAKICAgICBp
ZiAobm9kZSkKLSAgICAgICAgbm9kZS0+cHVyZ2VOb2RlVGV4dHVyZXNSZWN1cnNpdmUoKTsKKyAg
ICAgICAgbm9kZS0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKICAgICBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwotCiAgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFy
KCk7Ci0KKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKICAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPnBhZ2VJRCgpKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>