<?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>137169</bug_id>
          
          <creation_ts>2014-09-26 21:03:21 -0700</creation_ts>
          <short_desc>Make is&lt;&gt;() / downcast&lt;&gt;() work for HTMLDocument and its subclasses</short_desc>
          <delta_ts>2014-09-29 09:58:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037615</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-26 21:03:21 -0700</bug_when>
    <thetext>Make is&lt;&gt;() / downcast&lt;&gt;() work for HTMLDocument By using the SPECIALIZE_TYPE_TRAITS_*() macro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037621</commentid>
    <comment_count>1</comment_count>
      <attachid>238757</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-26 21:53:55 -0700</bug_when>
    <thetext>Created attachment 238757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037622</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-26 21:55:34 -0700</bug_when>
    <thetext>Attachment 238757 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLDocument.h:102:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/ImageDocument.h:87:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/MediaDocument.h:61:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/PluginDocument.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037819</commentid>
    <comment_count>3</comment_count>
      <attachid>238757</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-28 17:09:17 -0700</bug_when>
    <thetext>Comment on attachment 238757
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:83
&gt; +    ASSERT(is&lt;HTMLDocument&gt;(document));

Should be *document if we want to match the old code rather than adding a null check, but probably OK to leave it alone since it’s in an assertion.

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:247
&gt; -    if (document-&gt;isHTMLDocument()) {
&gt; +    if (is&lt;HTMLDocument&gt;(document)) {

Should be *document if we want to match the old code rather than adding a null check.

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:324
&gt; -    if (document-&gt;isHTMLDocument()) {
&gt; +    if (is&lt;HTMLDocument&gt;(document)) {

Should be *document if we want to match the old code rather than adding a null check.

&gt; Source/WebCore/dom/Document.cpp:5908
&gt; +    if (!element &amp;&amp; is&lt;PluginDocument&gt;(doc)) {

Should be *doc if we want to match the old code rather than adding a null check.

&gt; Source/WebCore/dom/Document.cpp:5910
&gt; +        PluginDocument&amp; pluginDocument = downcast&lt;PluginDocument&gt;(*doc);
&gt; +        element = pluginDocument.pluginElement();

This would read better without a local variable.

&gt; Source/WebCore/dom/Document.cpp:5912
&gt; +    if (!element &amp;&amp; is&lt;HTMLDocument&gt;(doc))

Should be *doc if we want to match the old code rather than adding a null check.

&gt; Source/WebCore/dom/Element.cpp:1341
&gt; +    HTMLDocument* newDocument = !wasInDocument &amp;&amp; inDocument() &amp;&amp; is&lt;HTMLDocument&gt;(newScope-&gt;documentScope()) ? downcast&lt;HTMLDocument&gt;(&amp;newScope-&gt;documentScope()) : nullptr;

The &amp; should be just before downcast, not before newScope.

&gt; Source/WebCore/dom/Element.cpp:1384
&gt; +        HTMLDocument* oldDocument = inDocument() &amp;&amp; is&lt;HTMLDocument&gt;(oldScope-&gt;documentScope()) ? downcast&lt;HTMLDocument&gt;(&amp;oldScope-&gt;documentScope()) : nullptr;

The &amp; should be just before downcast, not before newScope.

&gt; Source/WebCore/html/HTMLElement.cpp:384
&gt; +        const HTMLDocument&amp; htmlDocument = downcast&lt;HTMLDocument&gt;(document);
&gt;          return htmlDocument.inDesignMode();

This would read better without a local variable.

&gt; Source/WebCore/loader/SubframeLoader.cpp:396
&gt; +    bool loadManually = is&lt;PluginDocument&gt;(document()) &amp;&amp; !m_containsPlugins &amp;&amp; downcast&lt;PluginDocument&gt;(*document()).shouldLoadPluginManually();

Should be *document() if we want to match the old code rather than adding a null check.

&gt; Source/WebCore/page/DragController.cpp:400
&gt; +    if (doc &amp;&amp; is&lt;PluginDocument&gt;(doc)) {

Should either be passing *doc or get rid of the &quot;doc &amp;&amp;&quot; part; no need to do the null check twice.

&gt; Source/WebKit/win/DOMHTMLClasses.cpp:261
&gt; +    if (!m_document || !is&lt;HTMLDocument&gt;(m_document))

Should either be passing *m_document or get rid of the &quot;!m_document ||&quot; part; no need to do the null check twice.

&gt; Source/WebKit/win/DOMHTMLClasses.cpp:304
&gt; +    if (!m_document || !is&lt;HTMLDocument&gt;(m_document))

Should either be passing *m_document or get rid of the &quot;!m_document ||&quot; part; no need to do the null check twice.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:3694
&gt; +    if (!is&lt;PluginDocument&gt;(document))
&gt; +        return nullptr;

Should either be passing *document or get rid of the previous if statement; no need to do the null check twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037832</commentid>
    <comment_count>4</comment_count>
      <attachid>238757</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-28 17:46:04 -0700</bug_when>
    <thetext>Comment on attachment 238757
Patch

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

&gt;&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:247
&gt;&gt; +    if (is&lt;HTMLDocument&gt;(document)) {
&gt; 
&gt; Should be *document if we want to match the old code rather than adding a null check.

There is no null check, at least not in release builds. There is merely an assertion making sure the pointer is not null before dereferencing it. Note that this behavior is not new with is&lt;&gt;(), it matches the previous with isHTMLDivElement() for e.g.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037833</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-28 17:47:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 238757 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238757&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:247
&gt; &gt;&gt; +    if (is&lt;HTMLDocument&gt;(document)) {
&gt; &gt; 
&gt; &gt; Should be *document if we want to match the old code rather than adding a null check.
&gt; 
&gt; There is no null check, at least not in release builds. There is merely an assertion making sure the pointer is not null before dereferencing it. Note that this behavior is not new with is&lt;&gt;(), it matches the previous with isHTMLDivElement() for e.g.

See implementation of is&lt;&gt;()&quot;

template &lt;typename ExpectedType, typename ArgType&gt;
inline bool is(ArgType&amp; node)
{
    static_assert(!std::is_base_of&lt;ExpectedType, ArgType&gt;::value, &quot;Unnecessary type check&quot;);
    return NodeTypeCastTraits&lt;const ExpectedType, const ArgType&gt;::isType(node);
}

template &lt;typename ExpectedType, typename ArgType&gt;
inline bool is(ArgType* node)
{
    ASSERT(node);
    static_assert(!std::is_base_of&lt;ExpectedType, ArgType&gt;::value, &quot;Unnecessary type check&quot;);
    return NodeTypeCastTraits&lt;const ExpectedType, const ArgType&gt;::isType(*node);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037860</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-28 19:16:15 -0700</bug_when>
    <thetext>Darin, given this adds no null check (merely assertions), do you still want me to dereference all the pointers in the is&lt;&gt;() checks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037863</commentid>
    <comment_count>7</comment_count>
      <attachid>238836</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-28 19:33:17 -0700</bug_when>
    <thetext>Created attachment 238836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037864</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-28 19:34:37 -0700</bug_when>
    <thetext>+darin in cc (I wish reviewing would auto-cc the reviewer).

Darin, please see my comments above about the null checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037865</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-28 19:35:54 -0700</bug_when>
    <thetext>Attachment 238836 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLDocument.h:102:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/ImageDocument.h:87:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/MediaDocument.h:61:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/PluginDocument.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037938</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-29 08:33:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Darin, given this adds no null check (merely assertions), do you still want me to dereference all the pointers in the is&lt;&gt;() checks?

No.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037941</commentid>
    <comment_count>11</comment_count>
      <attachid>238836</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 08:34:53 -0700</bug_when>
    <thetext>Comment on attachment 238836
Patch

Rejecting attachment 238836 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 238836, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebKit/win/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/4646891035820032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037956</commentid>
    <comment_count>12</comment_count>
      <attachid>238860</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-29 09:30:44 -0700</bug_when>
    <thetext>Created attachment 238860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037958</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 09:32:58 -0700</bug_when>
    <thetext>Attachment 238860 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLDocument.h:102:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/ImageDocument.h:87:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/MediaDocument.h:61:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/PluginDocument.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037969</commentid>
    <comment_count>14</comment_count>
      <attachid>238860</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 09:58:46 -0700</bug_when>
    <thetext>Comment on attachment 238860
Patch

Clearing flags on attachment: 238860

Committed r174065: &lt;http://trac.webkit.org/changeset/174065&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037970</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 09:58:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238757</attachid>
            <date>2014-09-26 21:53:55 -0700</date>
            <delta_ts>2014-09-28 19:33:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137169-20140926215355.patch</filename>
            <type>text/plain</type>
            <size>27979</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM0ODFjMDk1MWNlMzk2
OGEzZjkwM2U1NDMwMDAwYTY0NDRiNmUwYS4uNWFhNjFlYjg0NWE0NGUwODcwNTM4ZGZhNmU5NzY1
ZjQ0MzBjNzBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYxIEBACiAyMDE0LTA5LTI2ICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBNYWtlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIGlzPD4o
KSAvIGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2Vz
IGJ5CisgICAgICAgIHVzaW5nIHRoZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTXyooKSBtYWNyby4g
RHJvcCB0aGUgRE9DVU1FTlRfVFlQRV9DQVNUUygpCisgICAgICAgIG1hY3JvIGFzIGl0IGlzIG5v
IGxvbmdlciBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYpOgorICAgICAgICAo
V2ViQ29yZTo6ZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1v
dmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Om1hdGNo
ZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcyk6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCk6
CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6Cisg
ICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RG9jdW1lbnRQYXJzZXI6OmRvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSW1hZ2VEb2N1bWVudCk6CisgICAgICAgICogaHRtbC9N
ZWRpYURvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlhRG9jdW1lbnQpOgorICAg
ICAgICAqIGh0bWwvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBodG1s
L1BsdWdpbkRvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc1BsdWdpbkRvY3VtZW50KToK
KyAgICAgICAgKiBsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxv
YWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRl
dGVybWluZUxheWVyRmx1c2hUaHJvdHRsZVN0YXRlKToKKworMjAxNC0wOS0yNiAgQ2hyaXN0b3Bo
ZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgU3RvcCB1c2luZyBsZWdhY3kg
Tk9ERV9UWVBFX0NBU1RTKCkgbWFjcm8gZm9yIEhUTUwgRWxlbWVudHMKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzEzNwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
aW5kZXggYzcxM2RhMmJkOGYxMGM5NDU1YjVlYzFjMTkyMjViYzg1ZjMyZTg4YS4uMjlhYWEyZmM1
ZGMyMmFkNzczN2ZlNmY4Y2UxNjY4YTRiMDg4NmM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDE5IEBACiAyMDE0LTA5LTI2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAorICAgICAgICBNYWtlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9j
dW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBIVE1MRG9jdW1l
bnQgYW5kIGl0cyBzdWJjbGFzc2VzLgorCisgICAgICAgICogRE9NSFRNTENsYXNzZXMuY3BwOgor
ICAgICAgICAoRE9NSFRNTERvY3VtZW50OjpVUkwpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50
Ojpib2R5KToKKyAgICAgICAgKERPTUhUTUxEb2N1bWVudDo6Zm9ybXMpOgorCisyMDE0LTA5LTI2
ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBTdG9wIHVz
aW5nIGxlZ2FjeSBOT0RFX1RZUEVfQ0FTVFMoKSBtYWNybyBmb3IgSFRNTCBFbGVtZW50cwogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTM3CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA4ZmZlYTBhNGMyMWRjMTVjNGM5MzNkNmQ4ZDcxZmMwYTI0NzQxMmJiLi44NGE1
NGQyYzE2ZWJkNTE1MDJkMGUzZTNmOTIxYzM2ZDc5YmU2ZDMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTcgQEAKIDIwMTQtMDktMjYgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCisgICAgICAgIE1ha2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1
bWVudCBhbmQgaXRzIHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNzE2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEhUTUxEb2N1bWVu
dCBhbmQgaXRzIHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZkRvY3VtZW50Rm9yUHJpbnRp
bmdGcmFtZSk6CisKKzIwMTQtMDktMjYgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCiAgICAgICAgIFN0b3AgdXNpbmcgbGVnYWN5IE5PREVfVFlQRV9DQVNUUygpIG1hY3Jv
IGZvciBIVE1MIEVsZW1lbnRzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzcxMzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDhkMmU1NWZmNjM3YzkwYzRlMjdhOGY3MmM4M2MzOTcx
NjM5Y2EyY2EuLjYzOTU4Y2M1ZjM4YzYwNjViNjA1YjJjOWZiMDI5ZjYwNDI0M2EyMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAg
LTgwLDE5ICs4MCwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVtR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogCiAgICAgQVNTRVJUKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2Jq
LT5pbXBsKCkpKTsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIEFTU0VSVChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQp
KTsKIAogICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5
TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgaWYgKCFhdG9taWNQcm9wZXJ0eU5hbWUgfHwgIXRvSFRN
TERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5h
bWUpKQorICAgIGlmICghYXRvbWljUHJvcGVydHlOYW1lIHx8ICFkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgaWYg
KFVOTElLRUxZKHRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtQ29udGFp
bnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgeworICAgIGlmIChVTkxJ
S0VMWShkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFtZWRJdGVtQ29u
dGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgewogICAgICAgICBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2N1bWVudC0+d2luZG93TmFtZWRJ
dGVtcyhhdG9taWNQcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoY29sbGVjdGlvbi0+bGVu
Z3RoKCkgPiAxKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIHRo
aXNPYmotPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSkpOwogICAgIH0K
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxP
YmplY3QoKSwgdG9IVE1MRG9jdW1lbnQoKmRvY3VtZW50KS53aW5kb3dOYW1lZEl0ZW0oKmF0b21p
Y1Byb3BlcnR5TmFtZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywg
dGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50
KS53aW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpKTsKIH0KIAogI2lmIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpCkBAIC0yNDQsOSArMjQ0LDkgQEAgYm9vbCBKU0RPTVdp
bmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHkKIAogICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3Rl
YWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRo
aXNPYmplY3QtPmltcGwoKS5mcmFtZSgpLT5kb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgeworICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KSkg
ewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpOwotICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIHRv
SFRNTERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0
eU5hbWUpKSB7CisgICAgICAgIGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgZG93bmNhc3Q8SFRN
TERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlO
YW1lKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRlbUdldHRlcik7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzIxLDkgKzMyMSw5IEBAIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCB1CiAKICAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFk
IG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlz
T2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQtPmlz
SFRNTERvY3VtZW50KCkpIHsKKyAgICBpZiAoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpIHsK
ICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiB0b0hU
TUxEb2N1bWVudCgqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlO
YW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxE
b2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFt
ZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGY1MDkzMjll
MmQ5M2RjZTU0MDRhMzk1MWViNzI1OThkZThkYWUwODcuLjRiZWE0NjYxZTdjNGRlNTY1NjkwYjUw
YjBiZmRlNGZiYzg2MGZhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjEwNyw4ICsy
MTA3LDggQEAgdm9pZCBEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBpZiAo
aGFzTGl2aW5nUmVuZGVyVHJlZSgpKQogICAgICAgICBkZXN0cm95UmVuZGVyVHJlZSgpOwogCi0g
ICAgaWYgKGlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAgICAgdG9QbHVnaW5Eb2N1bWVudCh0aGlz
KS0+ZGV0YWNoRnJvbVBsdWdpbkVsZW1lbnQoKTsKKyAgICBpZiAoaXM8UGx1Z2luRG9jdW1lbnQ+
KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCp0aGlzKS5kZXRhY2hG
cm9tUGx1Z2luRWxlbWVudCgpOwogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICBpZiAo
cGFnZSgpKQpAQCAtMjg3OSw5ICsyODc5LDkgQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBF
cXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiAKICAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpTZXRDb29raWU6CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNl
dENvb2tpZSB3b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6
bWV0YSAuLi4uLj4KLSAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKKyAgICAgICAgaWYg
KGlzPEhUTUxEb2N1bWVudD4oKnRoaXMpKSB7CiAgICAgICAgICAgICAvLyBFeGNlcHRpb24gKGZv
ciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVkLgotICAgICAgICAgICAgdG9IVE1MRG9jdW1l
bnQoKnRoaXMpLnNldENvb2tpZShjb250ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKnRoaXMpLnNldENvb2tpZShjb250ZW50LCBJR05P
UkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtNTkwNSwxMSAr
NTkwNSwxMSBAQCBFbGVtZW50KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jKQogICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG9jLT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCAm
JiBkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSkgewotICAgICAgICBQbHVnaW5Eb2N1bWVudCogcGx1
Z2luRG9jdW1lbnQgPSB0b1BsdWdpbkRvY3VtZW50KGRvYyk7Ci0gICAgICAgIGVsZW1lbnQgPSBw
bHVnaW5Eb2N1bWVudC0+cGx1Z2luRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCAmJiBpczxQ
bHVnaW5Eb2N1bWVudD4oZG9jKSkgeworICAgICAgICBQbHVnaW5Eb2N1bWVudCYgcGx1Z2luRG9j
dW1lbnQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvYyk7CisgICAgICAgIGVsZW1lbnQg
PSBwbHVnaW5Eb2N1bWVudC5wbHVnaW5FbGVtZW50KCk7CiAgICAgfQotICAgIGlmICghZWxlbWVu
dCAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgaWYgKCFlbGVtZW50ICYmIGlzPEhUTUxE
b2N1bWVudD4oZG9jKSkKICAgICAgICAgZWxlbWVudCA9IGRvYy0+Ym9keSgpOwogICAgIGlmICgh
ZWxlbWVudCkKICAgICAgICAgZWxlbWVudCA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IDM3ZDRmZDM5ZGFjMWI1NzAxZTM0Y2Y4NmJiZWNmMTFkNTUyNTM5
YmMuLjlmN2EyNWRiOTBmYjUwNWNiMmY5YWIxMmZjYTA3NWNiMjIyOGNmYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCkBAIC0xNzQ3LDkgKzE3NDcsNiBAQCB2b2lkIGlzRG9jdW1lbnQoY29uc3QgRG9j
dW1lbnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtubwog
CiBOT0RFX1RZUEVfQ0FTVFMoRG9jdW1lbnQpCiAKLSNkZWZpbmUgRE9DVU1FTlRfVFlQRV9DQVNU
UyhUb0NsYXNzTmFtZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb0NsYXNzTmFtZSwgRG9jdW1l
bnQsIGRvY3VtZW50LCBXZWJDb3JlOjppcyMjVG9DbGFzc05hbWUoKmRvY3VtZW50KSwgV2ViQ29y
ZTo6aXMjI1RvQ2xhc3NOYW1lKGRvY3VtZW50KSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2YTlmODcwOThlNmQ0
NzA1ZTY1YmQxNDg0NGMyZDRhYjM1ZTNiMDFiLi5kZjM5ZDg2N2I4NzQ4YzgxZmFmZTkyYjExNDAw
YWM4MmE5MTQzODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzM4LDcgKzEzMzgsNyBA
QCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50UmFyZURhdGEoKS0+Y2xl
YXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRyZWVTY29wZSogbmV3U2Nv
cGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRNTERvY3VtZW50KiBuZXdE
b2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdTY29wZS0+ZG9j
dW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudCgmbmV3U2NvcGUt
PmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1bWVudCogbmV3RG9jdW1l
bnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgaXM8SFRNTERvY3VtZW50Pihu
ZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA/IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oJm5ld1Nj
b3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICBpZiAobmV3U2NvcGUgIT0gJnRy
ZWVTY29wZSgpKQogICAgICAgICBuZXdTY29wZSA9IG51bGxwdHI7CiAKQEAgLTEzODEsNyArMTM4
MSw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9u
UG9pbnQpCiAKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblRyZWVTY29wZSgpKSB7CiAgICAg
ICAgIFRyZWVTY29wZSogb2xkU2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0g
ICAgICAgIEhUTUxEb2N1bWVudCogb2xkRG9jdW1lbnQgPSBpbkRvY3VtZW50KCkgJiYgb2xkU2Nv
cGUtPmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gdG9IVE1MRG9jdW1lbnQoJm9s
ZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgSFRNTERvY3VtZW50
KiBvbGREb2N1bWVudCA9IGluRG9jdW1lbnQoKSAmJiBpczxIVE1MRG9jdW1lbnQ+KG9sZFNjb3Bl
LT5kb2N1bWVudFNjb3BlKCkpID8gZG93bmNhc3Q8SFRNTERvY3VtZW50Pigmb2xkU2NvcGUtPmRv
Y3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgICAgICBpZiAob2xkU2NvcGUgIT0gJnRyZWVT
Y29wZSgpIHx8ICFpc0luVHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxw
dHI7CiAKQEAgLTI1ODgsOSArMjU4OCw5IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmCiAKICAg
ICBpZiAoIWluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuOwotICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCh0b0hUTUxEb2N1
bWVudChkb2N1bWVudCgpKSwgb2xkTmFtZSwgbmV3TmFtZSk7CisgICAgdXBkYXRlTmFtZUZvckRv
Y3VtZW50KGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05h
bWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUoVHJlZVNjb3Bl
JiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld05hbWUpCkBAIC0yNjM2LDkgKzI2MzYsOSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRh
dGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ldwog
CiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRvY3Vt
ZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxEb2N1bWVudD4oZG9jdW1l
bnQoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVJZEZvckRvY3VtZW50KHRvSFRNTERv
Y3VtZW50KGRvY3VtZW50KCkpLCBvbGRJZCwgbmV3SWQsIFVwZGF0ZUhUTUxEb2N1bWVudE5hbWVk
SXRlbU1hcHNPbmx5SWZEaWZmZXJzRnJvbU5hbWVBdHRyaWJ1dGUpOworICAgIHVwZGF0ZUlkRm9y
RG9jdW1lbnQoZG93bmNhc3Q8SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lk
LCBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0
cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlU2Nv
cGUmIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0lkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKaW5kZXggYTI2ZjVkYmI2NzQ5YTJi
ODFiNDNiYjNjMDY5M2RmMWMyMzIzYjY4Zi4uZTVhMDllOTM0ZGNjMjRiNTY3MjI2NDE4MzAyNzQy
YzQ2ZjE1YTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCkBAIC05NywxMCArOTcs
MTAgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV93aW5kb3dOYW1lZEl0ZW07
CiB9OwogCi1pbmxpbmUgYm9vbCBpc0hUTUxEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCk7IH0KLXZvaWQgaXNIVE1MRG9j
dW1lbnQoY29uc3QgSFRNTERvY3VtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUg
Y2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUuCi0KLURPQ1VNRU5UX1RZUEVfQ0FT
VFMoSFRNTERvY3VtZW50KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihIVE1MRG9jdW1l
bnQpCisgICAgc3RhdGljIGJvb2wgaXNIVE1MRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KSB7IHJldHVybiBkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpOyB9CisgICAgc3RhdGljIGJv
b2wgaXNIVE1MRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3Vt
ZW50Tm9kZSgpICYmIGlzSFRNTERvY3VtZW50KHRvRG9jdW1lbnQobm9kZSkpOyB9CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCAzNzg4ZjdhZTYwNjMwZGE4MjIyYWZhMGZkZDgy
Nzg5OWFhNGQxODg1Li4yM2U3Mzk2M2FkMmEzZTUzNDIxYmVhYWY1ODkwNjk5M2RjNjA0OTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5LDggKzM3OSw4IEBAIGJvb2wg
SFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiAgICAgfSB3
aGlsZSAoY3VycmVudEVsZW1lbnQpOwogCiAgICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50ID0g
dGhpcy0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKSkgewot
ICAgICAgICBjb25zdCBIVE1MRG9jdW1lbnQmIGh0bWxEb2N1bWVudCA9IHRvSFRNTERvY3VtZW50
KGRvY3VtZW50KTsKKyAgICBpZiAoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpIHsKKyAgICAg
ICAgY29uc3QgSFRNTERvY3VtZW50JiBodG1sRG9jdW1lbnQgPSBkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KGRvY3VtZW50KTsKICAgICAgICAgcmV0dXJuIGh0bWxEb2N1bWVudC5pbkRlc2lnbk1vZGUo
KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAKaW5kZXggNGFkYTcyNTg1ZTU4MDU3N2QyMzZkYTgwMzk5MmEwMmY4NzYwMzk5
NC4uY2Q3ZTAzN2VmMDI0Y2Q1NmRiMGE0YmQxNDE3OTM1MTAxYzFkYWNjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0xNjYsMTEgKzE2NiwxMSBAQCB2b2lk
IEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVn
aW5DcmVhdGlvbk9wdGlvbikKICAgICBSZWY8SFRNTEVtYmVkRWxlbWVudD4gcHJvdGVjdCgqdGhp
cyk7IC8vIExvYWRpbmcgdGhlIHBsdWdpbiBtaWdodCByZW1vdmUgdXMgZnJvbSB0aGUgZG9jdW1l
bnQuCiAgICAgYm9vbCBiZWZvcmVMb2FkQWxsb3dlZExvYWQgPSBndWFyZGVkRGlzcGF0Y2hCZWZv
cmVMb2FkRXZlbnQobV91cmwpOwogICAgIGlmICghYmVmb3JlTG9hZEFsbG93ZWRMb2FkKSB7Ci0g
ICAgICAgIGlmIChkb2N1bWVudCgpLmlzUGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAo
aXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAvLyBQbHVnaW5z
IGluc2lkZSBwbHVnaW4gZG9jdW1lbnRzIGxvYWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBwbHVn
aW5zLiBCeSB0aGUgdGltZQogICAgICAgICAgICAgLy8gd2UgYXJlIGhlcmUgaW4gYSBwbHVnaW4g
ZG9jdW1lbnQsIHRoZSBsb2FkIG9mIHRoZSBwbHVnaW4gKHdoaWNoIGlzIHRoZSBwbHVnaW4gZG9j
dW1lbnQncwogICAgICAgICAgICAgLy8gbWFpbiByZXNvdXJjZSkgaGFzIGFscmVhZHkgc3RhcnRl
ZC4gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNhbmNlbCB0aGUgbWFpbiByZXNvdXJjZSBsb2FkIGhl
cmUuCi0gICAgICAgICAgICB0b1BsdWdpbkRvY3VtZW50KCZkb2N1bWVudCgpKS0+Y2FuY2VsTWFu
dWFsUGx1Z2luTG9hZCgpOworICAgICAgICAgICAgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KGRv
Y3VtZW50KCkpLmNhbmNlbE1hbnVhbFBsdWdpbkxvYWQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5k
ZXggMzA5OTc5MDgwYmIxZDg1ZjdmNjY1ZmU1NzBlM2IyMjc5ZmQ5Y2U5OS4uMzJmYjdkYzFkOWEz
ZTZiYjE5YjY0Yzg3NTI0MzAwM2RlNDQ3NDVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xODIsOCArMTgyLDggQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNT
dHIKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAg
ICAgICAgYm9vbCB3aWxsSGF2ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7Ci0gICAgICAgICAgICBp
ZiAoaGFzTmFtZSgpICE9IHdpbGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50JiBkb2N1
bWVudCA9IHRvSFRNTERvY3VtZW50KHRoaXMtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgaWYg
KGhhc05hbWUoKSAhPSB3aWxsSGF2ZU5hbWUgJiYgaW5Eb2N1bWVudCgpICYmIGlzPEhUTUxEb2N1
bWVudD4oZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0cmlidXRlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDc0Zjk0M2UwNjA2MTJlYTVhMjE5Yzg3NGZi
YmFmNDE4YTJkMjViMzIuLjk1MjEzZjc2ZWZlM2YxZDMzNTExY2VlMzI3MDA0OTM3ZjEzNzY5YjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTc5NSwxMSAr
MTc5NSwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhTG9hZGluZ0ZhaWxlZEZhdGFs
bHkoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcgogICAgIHNldFNob3VsZERlbGF5TG9h
ZEV2ZW50KGZhbHNlKTsKIAogICAgIC8vIDYgLSBBYm9ydCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBz
ZWxlY3Rpb24gYWxnb3JpdGhtLgotICAgIG1fY3VycmVudFNvdXJjZU5vZGUgPSAwOworICAgIG1f
Y3VycmVudFNvdXJjZU5vZGUgPSBudWxscHRyOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
aWYgKGRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgIHRvTWVkaWFEb2N1bWVu
dChkb2N1bWVudCgpKS5tZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOworICAgIGlm
IChpczxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8TWVkaWFE
b2N1bWVudD4oZG9jdW1lbnQoKSkubWVkaWFFbGVtZW50U2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsK
ICNlbmRpZgogfQogCkBAIC00MjA4LDggKzQyMDgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyU2F3VW5zdXBwb3J0ZWRUcmFja3MoTWVkaWFQbGF5ZXIqKQogICAgIC8vIFRo
ZSBNZWRpYVBsYXllciBjYW1lIGFjcm9zcyBjb250ZW50IGl0IGNhbm5vdCBjb21wbGV0ZWx5IGhh
bmRsZS4KICAgICAvLyBUaGlzIGlzIG5vcm1hbGx5IGFjY2VwdGFibGUgZXhjZXB0IHdoZW4gd2Ug
YXJlIGluIGEgc3RhbmRhbG9uZQogICAgIC8vIE1lZGlhRG9jdW1lbnQuIElmIHNvLCB0ZWxsIHRo
ZSBkb2N1bWVudCB3aGF0IGhhcyBoYXBwZW5lZC4KLSAgICBpZiAoZG9jdW1lbnQoKS5pc01lZGlh
RG9jdW1lbnQoKSkKLSAgICAgICAgdG9NZWRpYURvY3VtZW50KGRvY3VtZW50KCkpLm1lZGlhRWxl
bWVudFNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7CisgICAgaWYgKGlzPE1lZGlhRG9jdW1lbnQ+KGRv
Y3VtZW50KCkpKQorICAgICAgICBkb3duY2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5t
ZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhUGxheWVyUmVzb3VyY2VOb3RTdXBwb3J0ZWQoTWVkaWFQbGF5ZXIqKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA0MmIzY2Q2NmM5NTQ1
YmQyNWEwMTg5NTA0NTdkZTQ4OTE3ZGI1NDMyLi5hZjNlODAzM2Y0MjMxZDVlMGYwOGY1MDBkOTNh
NDEzMTQzYzU2NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cApAQCAtNDM1LDggKzQzNSw4IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05h
bWVkSXRlbSgpCiAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0KLSAgICBpZiAoaXNOYW1lZEl0ZW0gIT0g
d2FzTmFtZWRJdGVtICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50JiBkb2N1bWVudCA9IHRvSFRNTERvY3VtZW50KHRo
aXMtPmRvY3VtZW50KCkpOworICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0ZW0gJiYg
aW5Eb2N1bWVudCgpICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSkpIHsKKyAgICAgICAg
SFRNTERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4odGhpcy0+ZG9j
dW1lbnQoKSk7CiAKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGdldElkQXR0cmli
dXRlKCk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAppbmRleCBmYjY2NzY4M2QyMDA4ZmFiOTcwNGM1MmQ5YzZhNjE4NDBkNjU1
MWRjLi4xZWJlYzc3YzExYzEwMDNhNTU5MzNkMDFkYTc3NDM1ZmQ2ZjIwMWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgSW1h
Z2VEb2N1bWVudCYgSW1hZ2VEb2N1bWVudFBhcnNlcjo6ZG9jdW1lbnQoKSBjb25zdAogewogICAg
IC8vIE9ubHkgdXNlZCBkdXJpbmcgcGFyc2luZywgc28gZG9jdW1lbnQgaXMgZ3VhcmFudGVlZCB0
byBiZSBub24tbnVsbC4KICAgICBBU1NFUlQoUmF3RGF0YURvY3VtZW50UGFyc2VyOjpkb2N1bWVu
dCgpKTsKLSAgICByZXR1cm4gdG9JbWFnZURvY3VtZW50KCpSYXdEYXRhRG9jdW1lbnRQYXJzZXI6
OmRvY3VtZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxJbWFnZURvY3VtZW50PigqUmF3RGF0
YURvY3VtZW50UGFyc2VyOjpkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50UGFy
c2VyOjphcHBlbmRCeXRlcyhEb2N1bWVudFdyaXRlciYsIGNvbnN0IGNoYXIqLCBzaXplX3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCmluZGV4IDM5NjI1Yjk2Y2QzNzkyODJiMWI2ZDY2
MDdkM2QwNTI4YTk3NWNlNWQuLmM5YTI5NzYyMmIwZTM4MWI0MDNmODUwYzBlMzkyNjRjYjI1MTNh
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCkBAIC04MiwxMCArODIsMTAgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU2hyaW5rSW1hZ2U7CiB9OwogCi1pbmxpbmUgYm9v
bCBpc0ltYWdlRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1
bWVudC5pc0ltYWdlRG9jdW1lbnQoKTsgfQotdm9pZCBpc0ltYWdlRG9jdW1lbnQoY29uc3QgSW1h
Z2VEb2N1bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUg
a25vd24gYXQgY29tcGlsZSB0aW1lLgotCi1ET0NVTUVOVF9UWVBFX0NBU1RTKEltYWdlRG9jdW1l
bnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKEltYWdlRG9jdW1lbnQpCisgICAgc3Rh
dGljIGJvb2wgaXNJbWFnZURvY3VtZW50KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1
cm4gZG9jdW1lbnQuaXNJbWFnZURvY3VtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0ltYWdl
RG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgp
ICYmIGlzSW1hZ2VEb2N1bWVudCh0b0RvY3VtZW50KG5vZGUpKTsgfQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVk
aWFEb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKaW5kZXgg
NTdjY2Q1MTk0ZWY3MTE1OWY4ZDMxZjM4ZDIwNDI1OGRiZTAxYzE2ZS4uN2JlOWU2MTliMzk5NGQ1
NTBlMzE1ODM5Yzg3ZjZiZjAxNzk3YWE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9NZWRpYURvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50
LmgKQEAgLTU2LDEwICs1NiwxMCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX291dGdvaW5nUmVm
ZXJyZXI7CiB9OwogCi1pbmxpbmUgYm9vbCBpc01lZGlhRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVudC5pc01lZGlhRG9jdW1lbnQoKTsgfQotdm9pZCBp
c01lZGlhRG9jdW1lbnQoY29uc3QgTWVkaWFEb2N1bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2Fy
eSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgotCi1ET0NVTUVO
VF9UWVBFX0NBU1RTKE1lZGlhRG9jdW1lbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KE1lZGlhRG9jdW1lbnQpCisgICAgc3RhdGljIGJvb2wgaXNNZWRpYURvY3VtZW50KGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCkgeyByZXR1cm4gZG9jdW1lbnQuaXNNZWRpYURvY3VtZW50KCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBpc01lZGlhRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1
cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgpICYmIGlzTWVkaWFEb2N1bWVudCh0b0RvY3VtZW50KG5v
ZGUpKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKaW5kZXggOGIwZjUyZWY0NDM5M2YxNDQ5Mzc5Y2Y3MmYz
Y2VkMDQzNzkwNTBiNS4uYjIyMDg3YjRjMDgwOTMxN2ZjMGFmZTQ5YTQ3OWQ2Nzc5OTE1MmUyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBA
QCB2b2lkIFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAg
ICAgaWYgKGxvYWRlcikKICAgICAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBl
QXR0ciwgbG9hZGVyLT53cml0ZXIoKS5taW1lVHlwZSgpKTsKIAotICAgIHRvUGx1Z2luRG9jdW1l
bnQoZG9jdW1lbnQoKSktPnNldFBsdWdpbkVsZW1lbnQobV9lbWJlZEVsZW1lbnQpOworICAgIGRv
d25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQoKSkuc2V0UGx1Z2luRWxlbWVudChtX2Vt
YmVkRWxlbWVudCk7CiAKICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIElHTk9S
RV9FWENFUFRJT04pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5E
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5oCmluZGV4IDc4
NDkxZDA3ZDEyMzFlMGY0YWU3ODkyODI5YmQzYjE2NTA2NDFkM2QuLjAxMmZiOTcwZDU2OTIyZDA5
NjlhZDVjYjY4Njg1NjIyMWU2ZjE5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
UGx1Z2luRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50
LmgKQEAgLTYxLDEwICs2MSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxIVE1MUGx1Z0luRWxl
bWVudD4gbV9wbHVnaW5FbGVtZW50OwogfTsKIAotaW5saW5lIGJvb2wgaXNQbHVnaW5Eb2N1bWVu
dChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzUGx1Z2luRG9j
dW1lbnQoKTsgfQotdm9pZCBpc1BsdWdpbkRvY3VtZW50KGNvbnN0IFBsdWdpbkRvY3VtZW50Jik7
IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21w
aWxlIHRpbWUuCi0KLURPQ1VNRU5UX1RZUEVfQ0FTVFMoUGx1Z2luRG9jdW1lbnQpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFBsdWdpbkRvY3VtZW50KQorICAgIHN0YXRpYyBib29sIGlz
UGx1Z2luRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVu
dC5pc1BsdWdpbkRvY3VtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1BsdWdpbkRvY3VtZW50
KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNEb2N1bWVudE5vZGUoKSAmJiBpc1Bs
dWdpbkRvY3VtZW50KHRvRG9jdW1lbnQobm9kZSkpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5k
ZXggNGFkYzU3MjZmZWZlNDFiZTk2NDcxYWJiZjQwOTk0ZGZhNzAxZDdlOC4uNzNiYzUyYjgwMjll
YzkxOWEyYTYyYWI5ZWQwNThlNTliNzlmZDc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3Vi
ZnJhbWVMb2FkZXIuY3BwCkBAIC0zOTMsNyArMzkzLDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6
bG9hZFBsdWdpbihIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5FbGVtZW50LCBjb25zdCBV
UkwKICAgICBwbHVnaW5FbGVtZW50LnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbih1cmwp
OwogCiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSA9IHJvdW5kZWRJbnRTaXplKExheW91dFNpemUo
cmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVudEhlaWdodCgpKSk7Ci0g
ICAgYm9vbCBsb2FkTWFudWFsbHkgPSBkb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYg
IW1fY29udGFpbnNQbHVnaW5zICYmIHRvUGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQoKSktPnNob3Vs
ZExvYWRQbHVnaW5NYW51YWxseSgpOworICAgIGJvb2wgbG9hZE1hbnVhbGx5ID0gaXM8UGx1Z2lu
RG9jdW1lbnQ+KGRvY3VtZW50KCkpICYmICFtX2NvbnRhaW5zUGx1Z2lucyAmJiBkb3duY2FzdDxQ
bHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KCkpLnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOwog
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIE9uIGlPUywgd2Ugb25seSB0ZWxsIHRoZSBwbHVn
aW4gdG8gYmUgaW4gZnVsbCBwYWdlIG1vZGUgaWYgdGhlIGNvbnRhaW5pbmcgcGx1Z2luIGRvY3Vt
ZW50IGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCmluZGV4IGFjNDA1ODk3OTg3ZDYwZjZhMDhkMjhiMTI1NTExOTg4YTQxNjBmYzcu
LjMwM2IzYTE4YzhlYWJlNjQ5ZTA3MDM4OWM1Mjg4NDVlNjg2OWIwYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgRHJhZ09wZXJhdGlv
biBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiAK
ICAgICBib29sIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gZmFsc2U7CiAKLSAgICBpZiAo
ZG9jICYmIGRvYy0+aXNQbHVnaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFdpZGdldCog
d2lkZ2V0ID0gdG9QbHVnaW5Eb2N1bWVudChkb2MpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICBpZiAo
ZG9jICYmIGlzPFBsdWdpbkRvY3VtZW50Pihkb2MpKSB7CisgICAgICAgIGNvbnN0IFdpZGdldCog
d2lkZ2V0ID0gZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCpkb2MpLnBsdWdpbldpZGdldCgpOwog
ICAgICAgICBjb25zdCBQbHVnaW5WaWV3QmFzZSogcGx1Z2luVmlldyA9ICh3aWRnZXQgJiYgd2lk
Z2V0LT5pc1BsdWdpblZpZXdCYXNlKCkpID8gdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpIDogbnVs
bHB0cjsKIAogICAgICAgICBpZiAocGx1Z2luVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmZGZiNmNjODUxNzg5YTE4ZDJiYWUwYWNkOGU4Nzg3Yzg2NjkwNjVhLi5iY2I1MDQ0
YjE1Njg0ZTI0Mjc5OWQ3ODllMmFlYzQzY2FjNjUyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0yMzExLDcgKzIzMTEsNyBAQCBzdGF0aWMgTGF5ZXJGbHVzaFRocm90dGxlU3Rh
dGU6OkZsYWdzIGRldGVybWluZUxheWVyRmx1c2hUaHJvdHRsZVN0YXRlKFBhZ2UmIHBhZwogICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBEaXNhYmxlIGZvciBpbWFnZSBkb2N1bWVudHMgc28gbGFy
Z2UgR0lGIGFuaW1hdGlvbnMgZG9uJ3QgZ2V0IHRocm90dGxlZCBkdXJpbmcgbG9hZGluZy4KICAg
ICBhdXRvKiBkb2N1bWVudCA9IHBhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvY3VtZW50IHx8IGlzSW1hZ2VEb2N1bWVudCgqZG9jdW1lbnQpKQorICAgIGlmICghZG9jdW1l
bnQgfHwgaXM8SW1hZ2VEb2N1bWVudD4oKmRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpFbmFibGVkOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwIGIvU291cmNlL1dlYktpdC93
aW4vRE9NSFRNTENsYXNzZXMuY3BwCmluZGV4IDVhOWY3YTEzMjliNzE0NTRkNWFmOWQ0NzJkM2Jm
NjMyMWRlYzZjYjEuLjAwNWU2Y2UyZjFiZWFlMmYzZTgyYmJjMDU0NjE1NTUxODAzYjFmMDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKQEAgLTI1MCwxOCArMjUwLDE4IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTERvY3VtZW50OjpVUkwoCiAgICAgaWYgKCFy
ZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqcmVzdWx0ID0gQlN0cmlu
Zyh0b0hUTUxEb2N1bWVudChtX2RvY3VtZW50KS0+dXJsKCkpLnJlbGVhc2UoKTsKKyAgICAqcmVz
dWx0ID0gQlN0cmluZyhkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KS51cmwoKSku
cmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIAogSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmJvZHkoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRd
ICovIElET01IVE1MRWxlbWVudCoqIGJvZHlFbGVtZW50KQogewotICAgICpib2R5RWxlbWVudCA9
IDA7Ci0gICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KQorICAgICpib2R5RWxlbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFp
czxIVE1MRG9jdW1lbnQ+KG1fZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0g
ICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gdG9IVE1MRG9jdW1lbnQoKm1fZG9jdW1lbnQpOwor
ICAgIEhUTUxEb2N1bWVudCYgaHRtbERvYyA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm1fZG9j
dW1lbnQpOwogICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKICAgICBkb21FbGVt
ZW50LmFkb3B0UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShodG1sRG9jLmJvZHko
KSkpOwogICAgIGlmIChkb21FbGVtZW50KQpAQCAtMzAwLDExICszMDAsMTEgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmxpbmtzKAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmZvcm1zKCAKICAgICAgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBJRE9NSFRNTENvbGxlY3Rpb24qKiBjb2xsZWN0aW9uKQogewotICAgICpjb2xsZWN0
aW9uID0gMDsKLSAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkpCisgICAgKmNvbGxlY3Rpb24gPSBudWxscHRyOworICAgIGlmICghbV9kb2N1bWVudCB8
fCAhaXM8SFRNTERvY3VtZW50PihtX2RvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
IAotICAgIEhUTUxEb2N1bWVudCYgaHRtbERvYyA9IHRvSFRNTERvY3VtZW50KCptX2RvY3VtZW50
KTsKKyAgICBIVE1MRG9jdW1lbnQmIGh0bWxEb2MgPSBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpt
X2RvY3VtZW50KTsKICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGZvcm1zID0gaHRtbERvYy5m
b3JtcygpOwogICAgICpjb2xsZWN0aW9uID0gRE9NSFRNTENvbGxlY3Rpb246OmNyZWF0ZUluc3Rh
bmNlKGZvcm1zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA1N2FiZjBhNWE1ODE3NGEzMDExYjlm
MzhmNWNlNDQ0MWM4MDk5NWYwLi5mNDk4MGQyNWU3ZDI1YTliOTcxMzIyYzAzZTM3YThkNTlhMjRj
OGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0zNjg4LDE0ICszNjg4LDE0IEBAIFJldGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6
cGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
ICghZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKCFpczxQbHVnaW5Eb2N1bWVudD4oZG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
Kj4odG9QbHVnaW5Eb2N1bWVudChkb2N1bWVudCktPnBsdWdpbldpZGdldCgpKTsKKyAgICBQbHVn
aW5WaWV3KiBwbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGRvd25jYXN0PFBs
dWdpbkRvY3VtZW50PigqZG9jdW1lbnQpLnBsdWdpbldpZGdldCgpKTsKICAgICBpZiAoIXBsdWdp
blZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IHJldHVybiBwbHVnaW5WaWV3LT5wZGZEb2N1bWVudEZvclByaW50aW5nKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238836</attachid>
            <date>2014-09-28 19:33:17 -0700</date>
            <delta_ts>2014-09-29 09:30:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137169-20140928193317.patch</filename>
            <type>text/plain</type>
            <size>28024</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJhY2JjODY3ZDQzMWU1
Nzg1ZGQwNzc4YTk5YWZmNTdiNDE5NzRmYi4uNTc5Y2ExMTYyNGVkODllZTIyNWJmYzkyMjE3ZDlk
NjNjYTJiODFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE0LTA5LTI2ICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBNYWtlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzIGJ5
CisgICAgICAgIHVzaW5nIHRoZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTXyooKSBtYWNyby4gRHJv
cCB0aGUgRE9DVU1FTlRfVFlQRV9DQVNUUygpCisgICAgICAgIG1hY3JvIGFzIGl0IGlzIG5vIGxv
bmdlciBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVk
RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Om1hdGNoZXNS
ZWFkV3JpdGVQc2V1ZG9DbGFzcyk6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAg
ICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9j
dW1lbnRQYXJzZXI6OmRvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzSW1hZ2VEb2N1bWVudCk6CisgICAgICAgICogaHRtbC9NZWRp
YURvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlhRG9jdW1lbnQpOgorICAgICAg
ICAqIGh0bWwvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBodG1sL1Bs
dWdpbkRvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc1BsdWdpbkRvY3VtZW50KToKKyAg
ICAgICAgKiBsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Vi
ZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQp
OgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldGVy
bWluZUxheWVyRmx1c2hUaHJvdHRsZVN0YXRlKToKKwogMjAxNC0wOS0yOCAgR3l1eW91bmcgS2lt
ICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVzZSBzdGQ6OnVuaXF1ZV9w
dHIgZm9yIENvbnRleHRNZW51Q29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDhiNGIyZWNj
Y2E1YWFmNGQ2ZDA1YmQyYTYxNDVkMjQ5ZjU4ODIyODUuLjgzMTdkZjYyODhlMTgxZDg0ZGVjYTEw
OGU4MzBhMTMwNGZhYjQxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
NC0wOS0yNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgd29yayBmb3IgSFRNTERvY3VtZW50IGFuZCBpdHMg
c3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM3MTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgSFRNTERvY3VtZW50IGFuZCBpdHMgc3Vi
Y2xhc3Nlcy4KKworICAgICAgICAqIERPTUhUTUxDbGFzc2VzLmNwcDoKKyAgICAgICAgKERPTUhU
TUxEb2N1bWVudDo6VVJMKToKKyAgICAgICAgKERPTUhUTUxEb2N1bWVudDo6Ym9keSk6CisgICAg
ICAgIChET01IVE1MRG9jdW1lbnQ6OmZvcm1zKToKKwogMjAxNC0wOS0yOCAgR3l1eW91bmcgS2lt
ICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVzZSBzdGQ6OnVuaXF1ZV9w
dHIgZm9yIENvbnRleHRNZW51Q29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGNlNzFhODU0MTg0MDdh
ZDhmYjgwNTEyNzZhNTQ3OGM4NDVjODUzMmUuLmNiYjNiNTA0ZWI1MzM5NjU4ZDIyZDFjNWM1ZTYw
OTU0YmYzMGU1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wOS0yNiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBpczw+KCkg
LyBkb3duY2FzdDw+KCkgd29yayBmb3IgSFRNTERvY3VtZW50IGFuZCBpdHMgc3ViY2xhc3Nlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4o
KSAvIGRvd25jYXN0PD4oKSBmb3IgSFRNTERvY3VtZW50IGFuZCBpdHMgc3ViY2xhc3Nlcy4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKToKKwogMjAxNC0wOS0yOCAg
R3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVzZSBz
dGQ6OnVuaXF1ZV9wdHIgZm9yIENvbnRleHRNZW51Q29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDhkMmU1NWZmNjM3
YzkwYzRlMjdhOGY3MmM4M2MzOTcxNjM5Y2EyY2EuLjYzOTU4Y2M1ZjM4YzYwNjViNjA1YjJjOWZi
MDI5ZjYwNDI0M2EyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKQEAgLTgwLDE5ICs4MCwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgbmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZAogCiAgICAgQVNTRVJUKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhleGVjLCB0aGlzT2JqLT5pbXBsKCkpKTsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwot
ICAgIEFTU0VSVChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPEhU
TUxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIAogICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1By
b3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgaWYgKCFhdG9taWNQ
cm9wZXJ0eU5hbWUgfHwgIXRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJ
dGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKQorICAgIGlmICghYXRvbWljUHJvcGVydHlOYW1lIHx8
ICFkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCph
dG9taWNQcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCi0gICAgaWYgKFVOTElLRUxZKHRvSFRNTERvY3VtZW50KCpkb2N1bWVudCku
d2luZG93TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5h
bWUpKSkgeworICAgIGlmIChVTkxJS0VMWShkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVu
dCkud2luZG93TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0
eU5hbWUpKSkgewogICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBk
b2N1bWVudC0+d2luZG93TmFtZWRJdGVtcyhhdG9taWNQcm9wZXJ0eU5hbWUpOwogICAgICAgICBB
U1NFUlQoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPiAxKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihj
b2xsZWN0aW9uKSkpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhl
eGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgdG9IVE1MRG9jdW1lbnQoKmRvY3VtZW50KS53
aW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIGRvd25jYXN0PEhU
TUxEb2N1bWVudD4oKmRvY3VtZW50KS53aW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFt
ZSkpKTsKIH0KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCkBAIC0yNDQsOSAr
MjQ0LDkgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHkKIAogICAgIC8vIEFsbG93IHNob3J0Y3V0
cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS5mcmFtZSgpLT5kb2N1bWVudCgp
OwotICAgIGlmIChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgeworICAgIGlmIChpczxIVE1M
RG9jdW1lbnQ+KGRvY3VtZW50KSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQ
cm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgICAgICBpZiAoYXRv
bWljUHJvcGVydHlOYW1lICYmIHRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFt
ZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChhdG9taWNQcm9wZXJ0
eU5hbWUgJiYgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVk
SXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRlbUdl
dHRlcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzIxLDkgKzMy
MSw5IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1CiAKICAgICAvLyBBbGxvdyBzaG9ydGN1dHMg
bGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsK
LSAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICBpZiAoaXM8SFRNTERv
Y3VtZW50Pihkb2N1bWVudCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYgKGF0b21p
Y1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxEb2N1bWVudCgqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVk
SXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlO
YW1lICYmIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0
ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDVhOTAwZjA0Y2IyZDA3NWUzYzNkYmM0ZDU0M2YxYjkxYmMyZDVlYWYuLjhl
ODNlOTEyMDE0Y2NiODZiNmQ4MTA4YTJkZjMyOTQ4MTA3ZWI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMjEwNyw4ICsyMTA3LDggQEAgdm9pZCBEb2N1bWVudDo6cHJlcGFyZUZvckRl
c3RydWN0aW9uKCkKICAgICBpZiAoaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQogICAgICAgICBkZXN0
cm95UmVuZGVyVHJlZSgpOwogCi0gICAgaWYgKGlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAgICAg
dG9QbHVnaW5Eb2N1bWVudCh0aGlzKS0+ZGV0YWNoRnJvbVBsdWdpbkVsZW1lbnQoKTsKKyAgICBp
ZiAoaXM8UGx1Z2luRG9jdW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8UGx1Z2luRG9j
dW1lbnQ+KCp0aGlzKS5kZXRhY2hGcm9tUGx1Z2luRWxlbWVudCgpOwogCiAjaWYgRU5BQkxFKFBP
SU5URVJfTE9DSykKICAgICBpZiAocGFnZSgpKQpAQCAtMjg3OSw5ICsyODc5LDkgQEAgdm9pZCBE
b2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpTZXRDb29raWU6CiAgICAg
ICAgIC8vIEZJWE1FOiBtYWtlIHNldENvb2tpZSB3b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBl
LmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4uLj4KLSAgICAgICAgaWYgKGlzSFRNTERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKnRoaXMpKSB7CiAgICAgICAg
ICAgICAvLyBFeGNlcHRpb24gKGZvciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVkLgotICAg
ICAgICAgICAgdG9IVE1MRG9jdW1lbnQoKnRoaXMpLnNldENvb2tpZShjb250ZW50LCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKnRoaXMpLnNl
dENvb2tpZShjb250ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKIApAQCAtNTkwMCwxOSArNTkwMCwxNyBAQCBJbnRTaXplIERvY3VtZW50Ojppbml0aWFs
Vmlld3BvcnRTaXplKCkgY29uc3QKIH0KICNlbmRpZgogCi1FbGVtZW50KiBldmVudFRhcmdldEVs
ZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCogZG9jKQorRWxlbWVudCogZXZlbnRUYXJnZXRFbGVt
ZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIGlmICghZG9jKQorICAg
IGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBkb2MtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50ICYmIGRvYy0+
aXNQbHVnaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1
bWVudCA9IHRvUGx1Z2luRG9jdW1lbnQoZG9jKTsKLSAgICAgICAgZWxlbWVudCA9IHBsdWdpbkRv
Y3VtZW50LT5wbHVnaW5FbGVtZW50KCk7Ci0gICAgfQotICAgIGlmICghZWxlbWVudCAmJiBkb2Mt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGVsZW1lbnQgPSBkb2MtPmJvZHkoKTsKKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CisgICAgaWYgKCFl
bGVtZW50ICYmIGlzPFBsdWdpbkRvY3VtZW50Pihkb2N1bWVudCkpCisgICAgICAgIGVsZW1lbnQg
PSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5FbGVtZW50KCk7Cisg
ICAgaWYgKCFlbGVtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpKQorICAgICAgICBl
bGVtZW50ID0gZG9jdW1lbnQtPmJvZHkoKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIGVs
ZW1lbnQgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICBlbGVtZW50ID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBlbGVtZW50OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCmluZGV4IDM3ZDRmZDM5ZGFjMWI1NzAxZTM0Y2Y4NmJiZWNmMTFkNTUyNTM5YmMu
LjlmN2EyNWRiOTBmYjUwNWNiMmY5YWIxMmZjYTA3NWNiMjIyOGNmYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0xNzQ3LDkgKzE3NDcsNiBAQCB2b2lkIGlzRG9jdW1lbnQoY29uc3QgRG9jdW1l
bnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtubwogCiBO
T0RFX1RZUEVfQ0FTVFMoRG9jdW1lbnQpCiAKLSNkZWZpbmUgRE9DVU1FTlRfVFlQRV9DQVNUUyhU
b0NsYXNzTmFtZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb0NsYXNzTmFtZSwgRG9jdW1lbnQs
IGRvY3VtZW50LCBXZWJDb3JlOjppcyMjVG9DbGFzc05hbWUoKmRvY3VtZW50KSwgV2ViQ29yZTo6
aXMjI1RvQ2xhc3NOYW1lKGRvY3VtZW50KSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBu
YW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2YTlmODcwOThlNmQ0NzA1
ZTY1YmQxNDg0NGMyZDRhYjM1ZTNiMDFiLi5jZTk4MzY5ZWRkODdjMTFiZGZhMDBkNmU1MDhlYTMw
YTE5ZTYzNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBO
b2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50byhD
b250YWluZXJOb2RlJiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50UmFyZURhdGEoKS0+Y2xlYXJD
bGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRyZWVTY29wZSogbmV3U2NvcGUg
PSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRNTERvY3VtZW50KiBuZXdEb2N1
bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdTY29wZS0+ZG9jdW1l
bnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudCgmbmV3U2NvcGUtPmRv
Y3VtZW50U2NvcGUoKSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1bWVudCogbmV3RG9jdW1lbnQg
PSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgaXM8SFRNTERvY3VtZW50PihuZXdT
Y29wZS0+ZG9jdW1lbnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5ld1Njb3Bl
LT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICBpZiAobmV3U2NvcGUgIT0gJnRyZWVT
Y29wZSgpKQogICAgICAgICBuZXdTY29wZSA9IG51bGxwdHI7CiAKQEAgLTEzODEsNyArMTM4MSw3
IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQpCiAKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblRyZWVTY29wZSgpKSB7CiAgICAgICAg
IFRyZWVTY29wZSogb2xkU2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAg
ICAgIEhUTUxEb2N1bWVudCogb2xkRG9jdW1lbnQgPSBpbkRvY3VtZW50KCkgJiYgb2xkU2NvcGUt
PmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVudCgpID8gdG9IVE1MRG9jdW1lbnQoJm9sZFNj
b3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgSFRNTERvY3VtZW50KiBv
bGREb2N1bWVudCA9IGluRG9jdW1lbnQoKSAmJiBpczxIVE1MRG9jdW1lbnQ+KG9sZFNjb3BlLT5k
b2N1bWVudFNjb3BlKCkpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4ob2xkU2NvcGUtPmRvY3Vt
ZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgICAgICBpZiAob2xkU2NvcGUgIT0gJnRyZWVTY29w
ZSgpIHx8ICFpc0luVHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxwdHI7
CiAKQEAgLTI1ODgsOSArMjU4OCw5IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmCiAKICAgICBp
ZiAoIWluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZG9jdW1lbnQoKS5p
c0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVu
dChkb2N1bWVudCgpKSwgb2xkTmFtZSwgbmV3TmFtZSk7CisgICAgdXBkYXRlTmFtZUZvckRvY3Vt
ZW50KGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUp
OwogfQogCiB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBz
Y29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d05hbWUpCkBAIC0yNjM2LDkgKzI2MzYsOSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJ
ZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ldwogCiAg
ICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRvY3VtZW50
KCkuaXNIVE1MRG9jdW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQo
KSkpCiAgICAgICAgIHJldHVybjsKLSAgICB1cGRhdGVJZEZvckRvY3VtZW50KHRvSFRNTERvY3Vt
ZW50KGRvY3VtZW50KCkpLCBvbGRJZCwgbmV3SWQsIFVwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRl
bU1hcHNPbmx5SWZEaWZmZXJzRnJvbU5hbWVBdHRyaWJ1dGUpOworICAgIHVwZGF0ZUlkRm9yRG9j
dW1lbnQoZG93bmNhc3Q8SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBV
cGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmli
dXRlKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlU2NvcGUm
IHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d0lkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKaW5kZXggYTI2ZjVkYmI2NzQ5YTJiODFi
NDNiYjNjMDY5M2RmMWMyMzIzYjY4Zi4uZTVhMDllOTM0ZGNjMjRiNTY3MjI2NDE4MzAyNzQyYzQ2
ZjE1YTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCkBAIC05NywxMCArOTcsMTAg
QEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV93aW5kb3dOYW1lZEl0ZW07CiB9
OwogCi1pbmxpbmUgYm9vbCBpc0hUTUxEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQp
IHsgcmV0dXJuIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCk7IH0KLXZvaWQgaXNIVE1MRG9jdW1l
bnQoY29uc3QgSFRNTERvY3VtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hl
Y2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUuCi0KLURPQ1VNRU5UX1RZUEVfQ0FTVFMo
SFRNTERvY3VtZW50KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihIVE1MRG9jdW1lbnQp
CisgICAgc3RhdGljIGJvb2wgaXNIVE1MRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50
KSB7IHJldHVybiBkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpOyB9CisgICAgc3RhdGljIGJvb2wg
aXNIVE1MRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50
Tm9kZSgpICYmIGlzSFRNTERvY3VtZW50KHRvRG9jdW1lbnQobm9kZSkpOyB9CitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCAzNzg4ZjdhZTYwNjMwZGE4MjIyYWZhMGZkZDgyNzg5
OWFhNGQxODg1Li40M2Y1N2E2MDczY2FjMTNhOTQ2YWIxZDJkNDUzMTY0MDMwYTU4NGNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzc5LDEwICszNzksOCBAQCBib29sIEhU
TUxFbGVtZW50OjptYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MoKSBjb25zdAogICAgIH0gd2hp
bGUgKGN1cnJlbnRFbGVtZW50KTsKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCA9IHRo
aXMtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpIHsKLSAg
ICAgICAgY29uc3QgSFRNTERvY3VtZW50JiBodG1sRG9jdW1lbnQgPSB0b0hUTUxEb2N1bWVudChk
b2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBodG1sRG9jdW1lbnQuaW5EZXNpZ25Nb2RlKCk7Ci0g
ICAgfQorICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpLmluRGVzaWduTW9kZSgpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAK
aW5kZXggYzAyZWNkYjMyZGMyNmJjMjQ5MWNmMzU4OTBiY2MzYTcxZDczMmI5Ni4uYzE5MDFlZTlh
NmRiODFjYTU3YTg5MzQwYTIxMmM3MTIxYWZkNTQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0xNjYsMTEgKzE2NiwxMSBAQCB2b2lkIEhUTUxFbWJlZEVs
ZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVnaW5DcmVhdGlvbk9w
dGlvbikKICAgICBSZWY8SFRNTEVtYmVkRWxlbWVudD4gcHJvdGVjdCgqdGhpcyk7IC8vIExvYWRp
bmcgdGhlIHBsdWdpbiBtaWdodCByZW1vdmUgdXMgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgYm9v
bCBiZWZvcmVMb2FkQWxsb3dlZExvYWQgPSBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQo
bV91cmwpOwogICAgIGlmICghYmVmb3JlTG9hZEFsbG93ZWRMb2FkKSB7Ci0gICAgICAgIGlmIChk
b2N1bWVudCgpLmlzUGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoaXM8UGx1Z2luRG9j
dW1lbnQ+KGRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAvLyBQbHVnaW5zIGluc2lkZSBwbHVn
aW4gZG9jdW1lbnRzIGxvYWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBwbHVnaW5zLiBCeSB0aGUg
dGltZQogICAgICAgICAgICAgLy8gd2UgYXJlIGhlcmUgaW4gYSBwbHVnaW4gZG9jdW1lbnQsIHRo
ZSBsb2FkIG9mIHRoZSBwbHVnaW4gKHdoaWNoIGlzIHRoZSBwbHVnaW4gZG9jdW1lbnQncwogICAg
ICAgICAgICAgLy8gbWFpbiByZXNvdXJjZSkgaGFzIGFscmVhZHkgc3RhcnRlZC4gV2UgbmVlZCB0
byBleHBsaWNpdGx5IGNhbmNlbCB0aGUgbWFpbiByZXNvdXJjZSBsb2FkIGhlcmUuCi0gICAgICAg
ICAgICB0b1BsdWdpbkRvY3VtZW50KCZkb2N1bWVudCgpKS0+Y2FuY2VsTWFudWFsUGx1Z2luTG9h
ZCgpOworICAgICAgICAgICAgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KCkpLmNh
bmNlbE1hbnVhbFBsdWdpbkxvYWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggMzA5OTc5MDgw
YmIxZDg1ZjdmNjY1ZmU1NzBlM2IyMjc5ZmQ5Y2U5OS4uMzJmYjdkYzFkOWEzZTZiYjE5YjY0Yzg3
NTI0MzAwM2RlNDQ3NDVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
Y3BwCkBAIC0xODIsOCArMTgyLDggQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHIKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3
aWxsSGF2ZU5hbWUgPSAhdmFsdWUuaXNOdWxsKCk7Ci0gICAgICAgICAgICBpZiAoaGFzTmFtZSgp
ICE9IHdpbGxIYXZlTmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50JiBkb2N1bWVudCA9IHRvSFRN
TERvY3VtZW50KHRoaXMtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgaWYgKGhhc05hbWUoKSAh
PSB3aWxsSGF2ZU5hbWUgJiYgaW5Eb2N1bWVudCgpICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1l
bnQoKSkpIHsKKyAgICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNh
c3Q8SFRNTERvY3VtZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0cmlidXRlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCmluZGV4IDc0Zjk0M2UwNjA2MTJlYTVhMjE5Yzg3NGZiYmFmNDE4YTJkMjVi
MzIuLjk1MjEzZjc2ZWZlM2YxZDMzNTExY2VlMzI3MDA0OTM3ZjEzNzY5YjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTc5NSwxMSArMTc5NSwxMSBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhTG9hZGluZ0ZhaWxlZEZhdGFsbHkoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcgogICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNl
KTsKIAogICAgIC8vIDYgLSBBYm9ydCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxn
b3JpdGhtLgotICAgIG1fY3VycmVudFNvdXJjZU5vZGUgPSAwOworICAgIG1fY3VycmVudFNvdXJj
ZU5vZGUgPSBudWxscHRyOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGRvY3VtZW50
KCkuaXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgIHRvTWVkaWFEb2N1bWVudChkb2N1bWVudCgp
KS5tZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOworICAgIGlmIChpczxNZWRpYURv
Y3VtZW50Pihkb2N1bWVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8TWVkaWFEb2N1bWVudD4oZG9j
dW1lbnQoKSkubWVkaWFFbGVtZW50U2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsKICNlbmRpZgogfQog
CkBAIC00MjA4LDggKzQyMDgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVy
U2F3VW5zdXBwb3J0ZWRUcmFja3MoTWVkaWFQbGF5ZXIqKQogICAgIC8vIFRoZSBNZWRpYVBsYXll
ciBjYW1lIGFjcm9zcyBjb250ZW50IGl0IGNhbm5vdCBjb21wbGV0ZWx5IGhhbmRsZS4KICAgICAv
LyBUaGlzIGlzIG5vcm1hbGx5IGFjY2VwdGFibGUgZXhjZXB0IHdoZW4gd2UgYXJlIGluIGEgc3Rh
bmRhbG9uZQogICAgIC8vIE1lZGlhRG9jdW1lbnQuIElmIHNvLCB0ZWxsIHRoZSBkb2N1bWVudCB3
aGF0IGhhcyBoYXBwZW5lZC4KLSAgICBpZiAoZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkK
LSAgICAgICAgdG9NZWRpYURvY3VtZW50KGRvY3VtZW50KCkpLm1lZGlhRWxlbWVudFNhd1Vuc3Vw
cG9ydGVkVHJhY2tzKCk7CisgICAgaWYgKGlzPE1lZGlhRG9jdW1lbnQ+KGRvY3VtZW50KCkpKQor
ICAgICAgICBkb3duY2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5tZWRpYUVsZW1lbnRT
YXdVbnN1cHBvcnRlZFRyYWNrcygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyUmVzb3VyY2VOb3RTdXBwb3J0ZWQoTWVkaWFQbGF5ZXIqKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA3ZjNhNTI1M2FkOWM1YjRlNjlmMzgzOWJk
YmMzNTAzOTVkMWU3Njg3Li42MDQwYWQ4NzQwNWI1ZDgxM2VlMmY4MTdmMjdkNjA0OTA2OTAzZTVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNDM1LDgg
KzQzNSw4IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAg
ICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpOwogICAgIH0KLSAgICBpZiAoaXNOYW1lZEl0ZW0gIT0gd2FzTmFtZWRJdGVt
ICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAg
ICAgSFRNTERvY3VtZW50JiBkb2N1bWVudCA9IHRvSFRNTERvY3VtZW50KHRoaXMtPmRvY3VtZW50
KCkpOworICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0ZW0gJiYgaW5Eb2N1bWVudCgp
ICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgSFRNTERvY3VtZW50
JiBkb2N1bWVudCA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4odGhpcy0+ZG9jdW1lbnQoKSk7CiAK
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGdldElkQXR0cmlidXRlKCk7CiAgICAg
ICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNw
cAppbmRleCBmYjY2NzY4M2QyMDA4ZmFiOTcwNGM1MmQ5YzZhNjE4NDBkNjU1MWRjLi4xZWJlYzc3
YzExYzEwMDNhNTU5MzNkMDFkYTc3NDM1ZmQ2ZjIwMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VEb2N1bWVudC5jcHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgSW1hZ2VEb2N1bWVudCYg
SW1hZ2VEb2N1bWVudFBhcnNlcjo6ZG9jdW1lbnQoKSBjb25zdAogewogICAgIC8vIE9ubHkgdXNl
ZCBkdXJpbmcgcGFyc2luZywgc28gZG9jdW1lbnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVs
bC4KICAgICBBU1NFUlQoUmF3RGF0YURvY3VtZW50UGFyc2VyOjpkb2N1bWVudCgpKTsKLSAgICBy
ZXR1cm4gdG9JbWFnZURvY3VtZW50KCpSYXdEYXRhRG9jdW1lbnRQYXJzZXI6OmRvY3VtZW50KCkp
OworICAgIHJldHVybiBkb3duY2FzdDxJbWFnZURvY3VtZW50PigqUmF3RGF0YURvY3VtZW50UGFy
c2VyOjpkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50UGFyc2VyOjphcHBlbmRC
eXRlcyhEb2N1bWVudFdyaXRlciYsIGNvbnN0IGNoYXIqLCBzaXplX3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5oCmluZGV4IDM5NjI1Yjk2Y2QzNzkyODJiMWI2ZDY2MDdkM2QwNTI4YTk3
NWNlNWQuLmM5YTI5NzYyMmIwZTM4MWI0MDNmODUwYzBlMzkyNjRjYjI1MTNhZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCkBAIC04MiwxMCArODIsMTAgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc2hvdWxkU2hyaW5rSW1hZ2U7CiB9OwogCi1pbmxpbmUgYm9vbCBpc0ltYWdlRG9j
dW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVudC5pc0ltYWdl
RG9jdW1lbnQoKTsgfQotdm9pZCBpc0ltYWdlRG9jdW1lbnQoY29uc3QgSW1hZ2VEb2N1bWVudCYp
OyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29t
cGlsZSB0aW1lLgotCi1ET0NVTUVOVF9UWVBFX0NBU1RTKEltYWdlRG9jdW1lbnQpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKEltYWdlRG9jdW1lbnQpCisgICAgc3RhdGljIGJvb2wgaXNJ
bWFnZURvY3VtZW50KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1cm4gZG9jdW1lbnQu
aXNJbWFnZURvY3VtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0ltYWdlRG9jdW1lbnQoY29u
c3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgpICYmIGlzSW1hZ2VE
b2N1bWVudCh0b0RvY3VtZW50KG5vZGUpKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKaW5kZXggNTdjY2Q1MTk0ZWY3
MTE1OWY4ZDMxZjM4ZDIwNDI1OGRiZTAxYzE2ZS4uN2JlOWU2MTliMzk5NGQ1NTBlMzE1ODM5Yzg3
ZjZiZjAxNzk3YWE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3Vt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKQEAgLTU2LDEw
ICs1NiwxMCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX291dGdvaW5nUmVmZXJyZXI7CiB9Owog
Ci1pbmxpbmUgYm9vbCBpc01lZGlhRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7
IHJldHVybiBkb2N1bWVudC5pc01lZGlhRG9jdW1lbnQoKTsgfQotdm9pZCBpc01lZGlhRG9jdW1l
bnQoY29uc3QgTWVkaWFEb2N1bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNo
ZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgotCi1ET0NVTUVOVF9UWVBFX0NBU1RT
KE1lZGlhRG9jdW1lbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKE1lZGlhRG9jdW1l
bnQpCisgICAgc3RhdGljIGJvb2wgaXNNZWRpYURvY3VtZW50KGNvbnN0IERvY3VtZW50JiBkb2N1
bWVudCkgeyByZXR1cm4gZG9jdW1lbnQuaXNNZWRpYURvY3VtZW50KCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc01lZGlhRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0Rv
Y3VtZW50Tm9kZSgpICYmIGlzTWVkaWFEb2N1bWVudCh0b0RvY3VtZW50KG5vZGUpKTsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5E
b2N1bWVudC5jcHAKaW5kZXggOGIwZjUyZWY0NDM5M2YxNDQ5Mzc5Y2Y3MmYzY2VkMDQzNzkwNTBi
NS4uYjIyMDg3YjRjMDgwOTMxN2ZjMGFmZTQ5YTQ3OWQ2Nzc5OTE1MmUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFBsdWdp
bkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgaWYgKGxvYWRl
cikKICAgICAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgbG9hZGVy
LT53cml0ZXIoKS5taW1lVHlwZSgpKTsKIAotICAgIHRvUGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQo
KSktPnNldFBsdWdpbkVsZW1lbnQobV9lbWJlZEVsZW1lbnQpOworICAgIGRvd25jYXN0PFBsdWdp
bkRvY3VtZW50PigqZG9jdW1lbnQoKSkuc2V0UGx1Z2luRWxlbWVudChtX2VtYmVkRWxlbWVudCk7
CiAKICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5oCmluZGV4IDc4NDkxZDA3ZDEyMzFl
MGY0YWU3ODkyODI5YmQzYjE2NTA2NDFkM2QuLjAxMmZiOTcwZDU2OTIyZDA5NjlhZDVjYjY4Njg1
NjIyMWU2ZjE5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmgKQEAgLTYxLDEw
ICs2MSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gbV9wbHVn
aW5FbGVtZW50OwogfTsKIAotaW5saW5lIGJvb2wgaXNQbHVnaW5Eb2N1bWVudChjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzUGx1Z2luRG9jdW1lbnQoKTsgfQot
dm9pZCBpc1BsdWdpbkRvY3VtZW50KGNvbnN0IFBsdWdpbkRvY3VtZW50Jik7IC8vIENhdGNoIHVu
bmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUuCi0K
LURPQ1VNRU5UX1RZUEVfQ0FTVFMoUGx1Z2luRG9jdW1lbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFBsdWdpbkRvY3VtZW50KQorICAgIHN0YXRpYyBib29sIGlzUGx1Z2luRG9jdW1l
bnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVudC5pc1BsdWdpbkRv
Y3VtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1BsdWdpbkRvY3VtZW50KGNvbnN0IE5vZGUm
IG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNEb2N1bWVudE5vZGUoKSAmJiBpc1BsdWdpbkRvY3VtZW50
KHRvRG9jdW1lbnQobm9kZSkpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5kZXggNGFkYzU3MjZm
ZWZlNDFiZTk2NDcxYWJiZjQwOTk0ZGZhNzAxZDdlOC4uNzNiYzUyYjgwMjllYzkxOWEyYTYyYWI5
ZWQwNThlNTliNzlmZDc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIu
Y3BwCkBAIC0zOTMsNyArMzkzLDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnaW5FbGVtZW50LCBjb25zdCBVUkwKICAgICBwbHVn
aW5FbGVtZW50LnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbih1cmwpOwogCiAgICAgSW50
U2l6ZSBjb250ZW50U2l6ZSA9IHJvdW5kZWRJbnRTaXplKExheW91dFNpemUocmVuZGVyZXItPmNv
bnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVudEhlaWdodCgpKSk7Ci0gICAgYm9vbCBsb2Fk
TWFudWFsbHkgPSBkb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQ
bHVnaW5zICYmIHRvUGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQoKSktPnNob3VsZExvYWRQbHVnaW5N
YW51YWxseSgpOworICAgIGJvb2wgbG9hZE1hbnVhbGx5ID0gaXM8UGx1Z2luRG9jdW1lbnQ+KGRv
Y3VtZW50KCkpICYmICFtX2NvbnRhaW5zUGx1Z2lucyAmJiBkb3duY2FzdDxQbHVnaW5Eb2N1bWVu
dD4oKmRvY3VtZW50KCkpLnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOwogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIC8vIE9uIGlPUywgd2Ugb25seSB0ZWxsIHRoZSBwbHVnaW4gdG8gYmUgaW4g
ZnVsbCBwYWdlIG1vZGUgaWYgdGhlIGNvbnRhaW5pbmcgcGx1Z2luIGRvY3VtZW50IGlzIHRoZSB0
b3AgbGV2ZWwgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFjNDA1ODk3OTg3ZDYwZjZhMDhkMjhiMTI1NTExOTg4YTQxNjBmYzcuLjMwM2IzYTE4Yzhl
YWJlNjQ5ZTA3MDM4OWM1Mjg4NDVlNjg2OWIwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJv
bGxlcjo6b3BlcmF0aW9uRm9yTG9hZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiAKICAgICBib29sIHBs
dWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gZmFsc2U7CiAKLSAgICBpZiAoZG9jICYmIGRvYy0+
aXNQbHVnaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFdpZGdldCogd2lkZ2V0ID0gdG9Q
bHVnaW5Eb2N1bWVudChkb2MpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICBpZiAoZG9jICYmIGlzPFBs
dWdpbkRvY3VtZW50Pihkb2MpKSB7CisgICAgICAgIGNvbnN0IFdpZGdldCogd2lkZ2V0ID0gZG93
bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCpkb2MpLnBsdWdpbldpZGdldCgpOwogICAgICAgICBjb25z
dCBQbHVnaW5WaWV3QmFzZSogcGx1Z2luVmlldyA9ICh3aWRnZXQgJiYgd2lkZ2V0LT5pc1BsdWdp
blZpZXdCYXNlKCkpID8gdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpIDogbnVsbHB0cjsKIAogICAg
ICAgICBpZiAocGx1Z2luVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBmZGZi
NmNjODUxNzg5YTE4ZDJiYWUwYWNkOGU4Nzg3Yzg2NjkwNjVhLi5iY2I1MDQ0YjE1Njg0ZTI0Mjc5
OWQ3ODllMmFlYzQzY2FjNjUyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0y
MzExLDcgKzIzMTEsNyBAQCBzdGF0aWMgTGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzIGRl
dGVybWluZUxheWVyRmx1c2hUaHJvdHRsZVN0YXRlKFBhZ2UmIHBhZwogICAgICAgICByZXR1cm4g
MDsKICAgICAvLyBEaXNhYmxlIGZvciBpbWFnZSBkb2N1bWVudHMgc28gbGFyZ2UgR0lGIGFuaW1h
dGlvbnMgZG9uJ3QgZ2V0IHRocm90dGxlZCBkdXJpbmcgbG9hZGluZy4KICAgICBhdXRvKiBkb2N1
bWVudCA9IHBhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8
IGlzSW1hZ2VEb2N1bWVudCgqZG9jdW1lbnQpKQorICAgIGlmICghZG9jdW1lbnQgfHwgaXM8SW1h
Z2VEb2N1bWVudD4oKmRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIExh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpFbmFibGVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENs
YXNzZXMuY3BwCmluZGV4IDVhOWY3YTEzMjliNzE0NTRkNWFmOWQ0NzJkM2JmNjMyMWRlYzZjYjEu
LjAwNWU2Y2UyZjFiZWFlMmYzZTgyYmJjMDU0NjE1NTUxODAzYjFmMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9ET01IVE1MQ2xhc3Nlcy5jcHAKQEAgLTI1MCwxOCArMjUwLDE4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NSFRNTERvY3VtZW50OjpVUkwoCiAgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqcmVzdWx0ID0gQlN0cmluZyh0b0hUTUxEb2N1
bWVudChtX2RvY3VtZW50KS0+dXJsKCkpLnJlbGVhc2UoKTsKKyAgICAqcmVzdWx0ID0gQlN0cmlu
Zyhkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KS51cmwoKSkucmVsZWFzZSgpOwog
ICAgIHJldHVybiBTX09LOwogfQogICAgIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MRG9jdW1lbnQ6OmJvZHkoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01IVE1M
RWxlbWVudCoqIGJvZHlFbGVtZW50KQogewotICAgICpib2R5RWxlbWVudCA9IDA7Ci0gICAgaWYg
KCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQorICAgICpib2R5
RWxlbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFpczxIVE1MRG9jdW1l
bnQ+KG1fZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3Vt
ZW50JiBodG1sRG9jID0gdG9IVE1MRG9jdW1lbnQoKm1fZG9jdW1lbnQpOworICAgIEhUTUxEb2N1
bWVudCYgaHRtbERvYyA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm1fZG9jdW1lbnQpOwogICAg
IENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKICAgICBkb21FbGVtZW50LmFkb3B0UmVm
KERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShodG1sRG9jLmJvZHkoKSkpOwogICAgIGlm
IChkb21FbGVtZW50KQpAQCAtMzAwLDExICszMDAsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MRG9jdW1lbnQ6OmxpbmtzKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MRG9jdW1lbnQ6OmZvcm1zKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9N
SFRNTENvbGxlY3Rpb24qKiBjb2xsZWN0aW9uKQogewotICAgICpjb2xsZWN0aW9uID0gMDsKLSAg
ICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAg
KmNvbGxlY3Rpb24gPSBudWxscHRyOworICAgIGlmICghbV9kb2N1bWVudCB8fCAhaXM8SFRNTERv
Y3VtZW50PihtX2RvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEhUTUxE
b2N1bWVudCYgaHRtbERvYyA9IHRvSFRNTERvY3VtZW50KCptX2RvY3VtZW50KTsKKyAgICBIVE1M
RG9jdW1lbnQmIGh0bWxEb2MgPSBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KTsK
ICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGZvcm1zID0gaHRtbERvYy5mb3JtcygpOwogICAg
ICpjb2xsZWN0aW9uID0gRE9NSFRNTENvbGxlY3Rpb246OmNyZWF0ZUluc3RhbmNlKGZvcm1zLmdl
dCgpKTsKICAgICByZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCA1N2FiZjBhNWE1ODE3NGEzMDExYjlmMzhmNWNlNDQ0MWM4
MDk5NWYwLi5mNDk4MGQyNWU3ZDI1YTliOTcxMzIyYzAzZTM3YThkNTlhMjRjOGFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNjg4LDE0
ICszNjg4LDE0IEBAIFJldGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6cGRmRG9jdW1lbnRG
b3JQcmludGluZ0ZyYW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZG9jdW1lbnQt
PmlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFpczxQbHVn
aW5Eb2N1bWVudD4oZG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBs
dWdpblZpZXcqIHBsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4odG9QbHVnaW5E
b2N1bWVudChkb2N1bWVudCktPnBsdWdpbldpZGdldCgpKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGRvd25jYXN0PFBsdWdpbkRvY3VtZW50
PigqZG9jdW1lbnQpLnBsdWdpbldpZGdldCgpKTsKICAgICBpZiAoIXBsdWdpblZpZXcpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBwbHVn
aW5WaWV3LT5wZGZEb2N1bWVudEZvclByaW50aW5nKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238860</attachid>
            <date>2014-09-29 09:30:44 -0700</date>
            <delta_ts>2014-09-29 09:58:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137169-20140929093044.patch</filename>
            <type>text/plain</type>
            <size>28012</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJlOWViNzc4MmQ4OTUz
YTQ2NDk0OGUyM2U1YTJmYjdmNDI2M2ViYy4uNDU3MzkwZGY5MDE4ZTE5NTllZjU0ZDIyNmQ1MmI2
NzdlYTViNmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE0LTA5LTI2ICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBNYWtlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzIGJ5
CisgICAgICAgIHVzaW5nIHRoZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTXyooKSBtYWNyby4gRHJv
cCB0aGUgRE9DVU1FTlRfVFlQRV9DQVNUUygpCisgICAgICAgIG1hY3JvIGFzIGl0IGlzIG5vIGxv
bmdlciBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVk
RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Om1hdGNoZXNS
ZWFkV3JpdGVQc2V1ZG9DbGFzcyk6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAg
ICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9j
dW1lbnRQYXJzZXI6OmRvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzSW1hZ2VEb2N1bWVudCk6CisgICAgICAgICogaHRtbC9NZWRp
YURvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc01lZGlhRG9jdW1lbnQpOgorICAgICAg
ICAqIGh0bWwvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBodG1sL1Bs
dWdpbkRvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc1BsdWdpbkRvY3VtZW50KToKKyAg
ICAgICAgKiBsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Vi
ZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQp
OgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldGVy
bWluZUxheWVyRmx1c2hUaHJvdHRsZVN0YXRlKToKKwogMjAxNC0wOS0yOSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHdlYWsgYW5kIHRpZ2h0ZW4gU1ZHIGZvbnQg
Y29udmVydGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggOGI0YjJlY2NjYTVhYWY0ZDZkMDViZDJhNjE0
NWQyNDlmNTg4MjI4NS4uMTA4NTA1MDllYjJiYTNmMjVlMjNlMzFhMmVkOGNmN2VkNGY5MmExMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTI2ICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSB3b3JrIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNh
c3Q8PigpIGZvciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzLgorCisgICAgICAgICog
RE9NSFRNTENsYXNzZXMuY3BwOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50OjpVUkwpOgorICAg
ICAgICAoRE9NSFRNTERvY3VtZW50Ojpib2R5KToKKyAgICAgICAgKERPTUhUTUxEb2N1bWVudDo6
Zm9ybXMpOgorCiAyMDE0LTA5LTI4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgVXNlIHN0ZDo6dW5pcXVlX3B0ciBmb3IgQ29udGV4dE1lbnVDb250
cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzg2YmVjZmFiYzQ4ODgyN2EzZDU5MjExOTVlY2U1ZGMxY2Vk
NDgyMC4uYzViZWYxZjYyOGViOTI4YzlhNjI2NTMwN2EzNGNjOTdiMWIxYTViNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTI2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSB3b3JrIGZv
ciBIVE1MRG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjkKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBIVE1M
RG9jdW1lbnQgYW5kIGl0cyBzdWJjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZGZEb2N1bWVudEZv
clByaW50aW5nRnJhbWUpOgorCiAyMDE0LTA5LTI5ICBUaWJvciBNZXN6YXJvcyAgPHRtZXN6YXJv
cy51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgogCiAgICAgICAgIEZpeCAhRU5BQkxFKElO
U1BFQ1RPUikgYnVpbGQgYWZ0ZXIgcjE3MzkyOQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDhkMmU1NWZmNjM3YzkwYzRlMjdhOGY3
MmM4M2MzOTcxNjM5Y2EyY2EuLjYzOTU4Y2M1ZjM4YzYwNjViNjA1YjJjOWZiMDI5ZjYwNDI0M2Ey
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKQEAgLTgwLDE5ICs4MCwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZWRJdGVt
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZAogCiAgICAg
QVNTRVJUKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVj
LCB0aGlzT2JqLT5pbXBsKCkpKTsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIEFTU0VSVChk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPEhUTUxEb2N1bWVudD4o
ZG9jdW1lbnQpKTsKIAogICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci0gICAgaWYgKCFhdG9taWNQcm9wZXJ0eU5hbWUg
fHwgIXRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQ
cm9wZXJ0eU5hbWUpKQorICAgIGlmICghYXRvbWljUHJvcGVydHlOYW1lIHx8ICFkb3duY2FzdDxI
VE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0
eU5hbWUpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
Ci0gICAgaWYgKFVOTElLRUxZKHRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkud2luZG93TmFtZWRJ
dGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgeworICAg
IGlmIChVTkxJS0VMWShkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkud2luZG93TmFt
ZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgewog
ICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2N1bWVudC0+d2lu
ZG93TmFtZWRJdGVtcyhhdG9taWNQcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoY29sbGVj
dGlvbi0+bGVuZ3RoKCkgPiAxKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pT
KGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSkp
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCB0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSwgdG9IVE1MRG9jdW1lbnQoKmRvY3VtZW50KS53aW5kb3dOYW1lZEl0
ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIGRvd25jYXN0PEhUTUxEb2N1bWVudD4o
KmRvY3VtZW50KS53aW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpKTsKIH0KIAog
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCkBAIC0yNDQsOSArMjQ0LDkgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHkKIAogICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFn
ZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS5mcmFtZSgpLT5kb2N1bWVudCgpOwotICAgIGlmIChk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgeworICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KGRv
Y3VtZW50KSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlO
YW1lICYmIHRvSFRNTERvY3VtZW50KCpkb2N1bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9t
aWNQcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgZG93
bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWlj
UHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRlbUdldHRlcik7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzIxLDkgKzMyMSw5IEBAIGJvb2wg
SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCB1CiAKICAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2Ux
JyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICBpZiAoaXM8SFRNTERvY3VtZW50Pihkb2N1
bWVudCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0g
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLSAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFt
ZSAmJiB0b0hUTUxEb2N1bWVudCgqZG9jdW1lbnQpLmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWlj
UHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIGRvd25j
YXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0b21pY1By
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDVhOTAwZjA0Y2IyZDA3NWUzYzNkYmM0ZDU0M2YxYjkxYmMyZDVlYWYuLjhlODNlOTEyMDE0Y2Ni
ODZiNmQ4MTA4YTJkZjMyOTQ4MTA3ZWI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
MjEwNyw4ICsyMTA3LDggQEAgdm9pZCBEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkK
ICAgICBpZiAoaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQogICAgICAgICBkZXN0cm95UmVuZGVyVHJl
ZSgpOwogCi0gICAgaWYgKGlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAgICAgdG9QbHVnaW5Eb2N1
bWVudCh0aGlzKS0+ZGV0YWNoRnJvbVBsdWdpbkVsZW1lbnQoKTsKKyAgICBpZiAoaXM8UGx1Z2lu
RG9jdW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCp0aGlz
KS5kZXRhY2hGcm9tUGx1Z2luRWxlbWVudCgpOwogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykK
ICAgICBpZiAocGFnZSgpKQpAQCAtMjg3OSw5ICsyODc5LDkgQEAgdm9pZCBEb2N1bWVudDo6cHJv
Y2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQp
CiAKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpTZXRDb29raWU6CiAgICAgICAgIC8vIEZJWE1F
OiBtYWtlIHNldENvb2tpZSB3b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ug
b2YgPGh0bWw6bWV0YSAuLi4uLj4KLSAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkpIHsKKyAg
ICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKnRoaXMpKSB7CiAgICAgICAgICAgICAvLyBFeGNl
cHRpb24gKGZvciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVkLgotICAgICAgICAgICAgdG9I
VE1MRG9jdW1lbnQoKnRoaXMpLnNldENvb2tpZShjb250ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKnRoaXMpLnNldENvb2tpZShjb250
ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAt
NTkwMCwxOSArNTkwMCwxNyBAQCBJbnRTaXplIERvY3VtZW50Ojppbml0aWFsVmlld3BvcnRTaXpl
KCkgY29uc3QKIH0KICNlbmRpZgogCi1FbGVtZW50KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1
bWVudChEb2N1bWVudCogZG9jKQorRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIGlmICghZG9jKQorICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2Mt
PmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50ICYmIGRvYy0+aXNQbHVnaW5Eb2N1
bWVudCgpKSB7Ci0gICAgICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHRvUGx1
Z2luRG9jdW1lbnQoZG9jKTsKLSAgICAgICAgZWxlbWVudCA9IHBsdWdpbkRvY3VtZW50LT5wbHVn
aW5FbGVtZW50KCk7Ci0gICAgfQotICAgIGlmICghZWxlbWVudCAmJiBkb2MtPmlzSFRNTERvY3Vt
ZW50KCkpCi0gICAgICAgIGVsZW1lbnQgPSBkb2MtPmJvZHkoKTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50ICYmIGlz
PFBsdWdpbkRvY3VtZW50Pihkb2N1bWVudCkpCisgICAgICAgIGVsZW1lbnQgPSBkb3duY2FzdDxQ
bHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5FbGVtZW50KCk7CisgICAgaWYgKCFlbGVt
ZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpKQorICAgICAgICBlbGVtZW50ID0gZG9j
dW1lbnQtPmJvZHkoKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQgPSBkb2Mt
PmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOwogICAgIHJldHVybiBlbGVtZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmlu
ZGV4IDM3ZDRmZDM5ZGFjMWI1NzAxZTM0Y2Y4NmJiZWNmMTFkNTUyNTM5YmMuLjlmN2EyNWRiOTBm
YjUwNWNiMmY5YWIxMmZjYTA3NWNiMjIyOGNmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0x
NzQ3LDkgKzE3NDcsNiBAQCB2b2lkIGlzRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmKTsgLy8gQ2F0
Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtubwogCiBOT0RFX1RZUEVfQ0FT
VFMoRG9jdW1lbnQpCiAKLSNkZWZpbmUgRE9DVU1FTlRfVFlQRV9DQVNUUyhUb0NsYXNzTmFtZSkg
XAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb0NsYXNzTmFtZSwgRG9jdW1lbnQsIGRvY3VtZW50LCBX
ZWJDb3JlOjppcyMjVG9DbGFzc05hbWUoKmRvY3VtZW50KSwgV2ViQ29yZTo6aXMjI1RvQ2xhc3NO
YW1lKGRvY3VtZW50KSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RG
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2YTlmODcwOThlNmQ0NzA1ZTY1YmQxNDg0NGMy
ZDRhYjM1ZTNiMDFiLi5jZTk4MzY5ZWRkODdjMTFiZGZhMDBkNmU1MDhlYTMwYTE5ZTYzNWRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2Rl
JiBpbnNlcnRpbwogICAgICAgICBlbGVtZW50UmFyZURhdGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1
ZUZvclF1aXJrc01vZGUoKTsKIAogICAgIFRyZWVTY29wZSogbmV3U2NvcGUgPSAmaW5zZXJ0aW9u
UG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgSFRNTERvY3VtZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJ
bkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpLmlz
SFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudCgmbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUo
KSkgOiBudWxscHRyOworICAgIEhUTUxEb2N1bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1
bWVudCAmJiBpbkRvY3VtZW50KCkgJiYgaXM8SFRNTERvY3VtZW50PihuZXdTY29wZS0+ZG9jdW1l
bnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5ld1Njb3BlLT5kb2N1bWVudFNj
b3BlKCkpIDogbnVsbHB0cjsKICAgICBpZiAobmV3U2NvcGUgIT0gJnRyZWVTY29wZSgpKQogICAg
ICAgICBuZXdTY29wZSA9IG51bGxwdHI7CiAKQEAgLTEzODEsNyArMTM4MSw3IEBAIHZvaWQgRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCiAKICAgICBp
ZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblRyZWVTY29wZSgpKSB7CiAgICAgICAgIFRyZWVTY29wZSog
b2xkU2NvcGUgPSAmaW5zZXJ0aW9uUG9pbnQudHJlZVNjb3BlKCk7Ci0gICAgICAgIEhUTUxEb2N1
bWVudCogb2xkRG9jdW1lbnQgPSBpbkRvY3VtZW50KCkgJiYgb2xkU2NvcGUtPmRvY3VtZW50U2Nv
cGUoKS5pc0hUTUxEb2N1bWVudCgpID8gdG9IVE1MRG9jdW1lbnQoJm9sZFNjb3BlLT5kb2N1bWVu
dFNjb3BlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgSFRNTERvY3VtZW50KiBvbGREb2N1bWVudCA9
IGluRG9jdW1lbnQoKSAmJiBpczxIVE1MRG9jdW1lbnQ+KG9sZFNjb3BlLT5kb2N1bWVudFNjb3Bl
KCkpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4ob2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSkg
OiBudWxscHRyOwogICAgICAgICBpZiAob2xkU2NvcGUgIT0gJnRyZWVTY29wZSgpIHx8ICFpc0lu
VHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxwdHI7CiAKQEAgLTI1ODgs
OSArMjU4OCw5IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmCiAKICAgICBpZiAoIWluRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVu
dCgpKQorICAgIGlmICghaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSkKICAgICAgICAgcmV0
dXJuOwotICAgIHVwZGF0ZU5hbWVGb3JEb2N1bWVudCh0b0hUTUxEb2N1bWVudChkb2N1bWVudCgp
KSwgb2xkTmFtZSwgbmV3TmFtZSk7CisgICAgdXBkYXRlTmFtZUZvckRvY3VtZW50KGRvd25jYXN0
PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSksIG9sZE5hbWUsIG5ld05hbWUpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUoVHJlZVNjb3BlJiBzY29wZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCkBAIC0y
NjM2LDkgKzI2MzYsOSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ldwogCiAgICAgaWYgKCFpbkRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRvY3VtZW50KCkuaXNIVE1MRG9j
dW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSkpCiAgICAgICAg
IHJldHVybjsKLSAgICB1cGRhdGVJZEZvckRvY3VtZW50KHRvSFRNTERvY3VtZW50KGRvY3VtZW50
KCkpLCBvbGRJZCwgbmV3SWQsIFVwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNPbmx5SWZE
aWZmZXJzRnJvbU5hbWVBdHRyaWJ1dGUpOworICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQoZG93bmNh
c3Q8SFRNTERvY3VtZW50Pihkb2N1bWVudCgpKSwgb2xkSWQsIG5ld0lkLCBVcGRhdGVIVE1MRG9j
dW1lbnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlKTsKIH0KIAog
dm9pZCBFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZShUcmVlU2NvcGUmIHNjb3BlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmgKaW5kZXggYTI2ZjVkYmI2NzQ5YTJiODFiNDNiYjNjMDY5M2Rm
MWMyMzIzYjY4Zi4uZTVhMDllOTM0ZGNjMjRiNTY3MjI2NDE4MzAyNzQyYzQ2ZjE1YTRhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCkBAIC05NywxMCArOTcsMTAgQEAgcHJpdmF0ZToK
ICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV93aW5kb3dOYW1lZEl0ZW07CiB9OwogCi1pbmxpbmUg
Ym9vbCBpc0hUTUxEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRv
Y3VtZW50LmlzSFRNTERvY3VtZW50KCk7IH0KLXZvaWQgaXNIVE1MRG9jdW1lbnQoY29uc3QgSFRN
TERvY3VtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBr
bm93biBhdCBjb21waWxlIHRpbWUuCi0KLURPQ1VNRU5UX1RZUEVfQ0FTVFMoSFRNTERvY3VtZW50
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihIVE1MRG9jdW1lbnQpCisgICAgc3RhdGlj
IGJvb2wgaXNIVE1MRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBk
b2N1bWVudC5pc0hUTUxEb2N1bWVudCgpOyB9CisgICAgc3RhdGljIGJvb2wgaXNIVE1MRG9jdW1l
bnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgpICYmIGlz
SFRNTERvY3VtZW50KHRvRG9jdW1lbnQobm9kZSkpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAppbmRleCAzNzg4ZjdhZTYwNjMwZGE4MjIyYWZhMGZkZDgyNzg5OWFhNGQxODg1Li40
M2Y1N2E2MDczY2FjMTNhOTQ2YWIxZDJkNDUzMTY0MDMwYTU4NGNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcApAQCAtMzc5LDEwICszNzksOCBAQCBib29sIEhUTUxFbGVtZW50Ojpt
YXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MoKSBjb25zdAogICAgIH0gd2hpbGUgKGN1cnJlbnRF
bGVtZW50KTsKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgY29uc3Qg
SFRNTERvY3VtZW50JiBodG1sRG9jdW1lbnQgPSB0b0hUTUxEb2N1bWVudChkb2N1bWVudCk7Ci0g
ICAgICAgIHJldHVybiBodG1sRG9jdW1lbnQuaW5EZXNpZ25Nb2RlKCk7Ci0gICAgfQorICAgIGlm
IChpczxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxEb2N1bWVudD4oZG9jdW1lbnQpLmluRGVzaWduTW9kZSgpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKaW5kZXggYzAyZWNk
YjMyZGMyNmJjMjQ5MWNmMzU4OTBiY2MzYTcxZDczMmI5Ni4uYzE5MDFlZTlhNmRiODFjYTU3YTg5
MzQwYTIxMmM3MTIxYWZkNTQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwCkBAIC0xNjYsMTEgKzE2NiwxMSBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0
ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVnaW5DcmVhdGlvbk9wdGlvbikKICAgICBS
ZWY8SFRNTEVtYmVkRWxlbWVudD4gcHJvdGVjdCgqdGhpcyk7IC8vIExvYWRpbmcgdGhlIHBsdWdp
biBtaWdodCByZW1vdmUgdXMgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBiZWZvcmVMb2Fk
QWxsb3dlZExvYWQgPSBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQobV91cmwpOwogICAg
IGlmICghYmVmb3JlTG9hZEFsbG93ZWRMb2FkKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudCgpLmlz
UGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3Vt
ZW50KCkpKSB7CiAgICAgICAgICAgICAvLyBQbHVnaW5zIGluc2lkZSBwbHVnaW4gZG9jdW1lbnRz
IGxvYWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBwbHVnaW5zLiBCeSB0aGUgdGltZQogICAgICAg
ICAgICAgLy8gd2UgYXJlIGhlcmUgaW4gYSBwbHVnaW4gZG9jdW1lbnQsIHRoZSBsb2FkIG9mIHRo
ZSBwbHVnaW4gKHdoaWNoIGlzIHRoZSBwbHVnaW4gZG9jdW1lbnQncwogICAgICAgICAgICAgLy8g
bWFpbiByZXNvdXJjZSkgaGFzIGFscmVhZHkgc3RhcnRlZC4gV2UgbmVlZCB0byBleHBsaWNpdGx5
IGNhbmNlbCB0aGUgbWFpbiByZXNvdXJjZSBsb2FkIGhlcmUuCi0gICAgICAgICAgICB0b1BsdWdp
bkRvY3VtZW50KCZkb2N1bWVudCgpKS0+Y2FuY2VsTWFudWFsUGx1Z2luTG9hZCgpOworICAgICAg
ICAgICAgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KCkpLmNhbmNlbE1hbnVhbFBs
dWdpbkxvYWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggMzA5OTc5MDgwYmIxZDg1ZjdmNjY1
ZmU1NzBlM2IyMjc5ZmQ5Y2U5OS4uMzJmYjdkYzFkOWEzZTZiYjE5YjY0Yzg3NTI0MzAwM2RlNDQ3
NDVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0xODIs
OCArMTgyLDggQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHIKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAobmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICAgICAgYm9vbCB3aWxsSGF2ZU5hbWUg
PSAhdmFsdWUuaXNOdWxsKCk7Ci0gICAgICAgICAgICBpZiAoaGFzTmFtZSgpICE9IHdpbGxIYXZl
TmFtZSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgSFRNTERvY3VtZW50JiBkb2N1bWVudCA9IHRvSFRNTERvY3VtZW50KHRo
aXMtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgaWYgKGhhc05hbWUoKSAhPSB3aWxsSGF2ZU5h
bWUgJiYgaW5Eb2N1bWVudCgpICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQoKSkpIHsKKyAg
ICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTERvY3Vt
ZW50Pih0aGlzLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoIWlkLmlzRW1w
dHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0cmlidXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHdpbGxIYXZlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CmluZGV4IDc0Zjk0M2UwNjA2MTJlYTVhMjE5Yzg3NGZiYmFmNDE4YTJkMjViMzIuLjk1MjEzZjc2
ZWZlM2YxZDMzNTExY2VlMzI3MDA0OTM3ZjEzNzY5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTc5NSwxMSArMTc5NSwxMSBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhTG9hZGluZ0ZhaWxlZEZhdGFsbHkoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZSBlcnJvcgogICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKIAogICAgIC8v
IDYgLSBBYm9ydCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgotICAg
IG1fY3VycmVudFNvdXJjZU5vZGUgPSAwOworICAgIG1fY3VycmVudFNvdXJjZU5vZGUgPSBudWxs
cHRyOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGRvY3VtZW50KCkuaXNNZWRpYURv
Y3VtZW50KCkpCi0gICAgICAgIHRvTWVkaWFEb2N1bWVudChkb2N1bWVudCgpKS5tZWRpYUVsZW1l
bnRTYXdVbnN1cHBvcnRlZFRyYWNrcygpOworICAgIGlmIChpczxNZWRpYURvY3VtZW50Pihkb2N1
bWVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkubWVk
aWFFbGVtZW50U2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsKICNlbmRpZgogfQogCkBAIC00MjA4LDgg
KzQyMDgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2F3VW5zdXBwb3J0
ZWRUcmFja3MoTWVkaWFQbGF5ZXIqKQogICAgIC8vIFRoZSBNZWRpYVBsYXllciBjYW1lIGFjcm9z
cyBjb250ZW50IGl0IGNhbm5vdCBjb21wbGV0ZWx5IGhhbmRsZS4KICAgICAvLyBUaGlzIGlzIG5v
cm1hbGx5IGFjY2VwdGFibGUgZXhjZXB0IHdoZW4gd2UgYXJlIGluIGEgc3RhbmRhbG9uZQogICAg
IC8vIE1lZGlhRG9jdW1lbnQuIElmIHNvLCB0ZWxsIHRoZSBkb2N1bWVudCB3aGF0IGhhcyBoYXBw
ZW5lZC4KLSAgICBpZiAoZG9jdW1lbnQoKS5pc01lZGlhRG9jdW1lbnQoKSkKLSAgICAgICAgdG9N
ZWRpYURvY3VtZW50KGRvY3VtZW50KCkpLm1lZGlhRWxlbWVudFNhd1Vuc3VwcG9ydGVkVHJhY2tz
KCk7CisgICAgaWYgKGlzPE1lZGlhRG9jdW1lbnQ+KGRvY3VtZW50KCkpKQorICAgICAgICBkb3du
Y2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5tZWRpYUVsZW1lbnRTYXdVbnN1cHBvcnRl
ZFRyYWNrcygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVzb3Vy
Y2VOb3RTdXBwb3J0ZWQoTWVkaWFQbGF5ZXIqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcAppbmRleCA3ZjNhNTI1M2FkOWM1YjRlNjlmMzgzOWJkYmMzNTAzOTVkMWU3
Njg3Li42MDQwYWQ4NzQwNWI1ZDgxM2VlMmY4MTdmMjdkNjA0OTA2OTAzZTVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNDM1LDggKzQzNSw4IEBAIHZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCiAgICAgICAgICAgICBp
c05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OwogICAgIH0KLSAgICBpZiAoaXNOYW1lZEl0ZW0gIT0gd2FzTmFtZWRJdGVtICYmIGluRG9jdW1l
bnQoKSAmJiBkb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3Vt
ZW50JiBkb2N1bWVudCA9IHRvSFRNTERvY3VtZW50KHRoaXMtPmRvY3VtZW50KCkpOworICAgIGlm
IChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0ZW0gJiYgaW5Eb2N1bWVudCgpICYmIGlzPEhUTUxE
b2N1bWVudD4oZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgSFRNTERvY3VtZW50JiBkb2N1bWVudCA9
IGRvd25jYXN0PEhUTUxEb2N1bWVudD4odGhpcy0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZCA9IGdldElkQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghaWQu
aXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAppbmRleCBmYjY2
NzY4M2QyMDA4ZmFiOTcwNGM1MmQ5YzZhNjE4NDBkNjU1MWRjLi4xZWJlYzc3YzExYzEwMDNhNTU5
MzNkMDFkYTc3NDM1ZmQ2ZjIwMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5j
cHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgSW1hZ2VEb2N1bWVudCYgSW1hZ2VEb2N1bWVu
dFBhcnNlcjo6ZG9jdW1lbnQoKSBjb25zdAogewogICAgIC8vIE9ubHkgdXNlZCBkdXJpbmcgcGFy
c2luZywgc28gZG9jdW1lbnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KICAgICBBU1NF
UlQoUmF3RGF0YURvY3VtZW50UGFyc2VyOjpkb2N1bWVudCgpKTsKLSAgICByZXR1cm4gdG9JbWFn
ZURvY3VtZW50KCpSYXdEYXRhRG9jdW1lbnRQYXJzZXI6OmRvY3VtZW50KCkpOworICAgIHJldHVy
biBkb3duY2FzdDxJbWFnZURvY3VtZW50PigqUmF3RGF0YURvY3VtZW50UGFyc2VyOjpkb2N1bWVu
dCgpKTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyhEb2N1bWVu
dFdyaXRlciYsIGNvbnN0IGNoYXIqLCBzaXplX3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVu
dC5oCmluZGV4IDM5NjI1Yjk2Y2QzNzkyODJiMWI2ZDY2MDdkM2QwNTI4YTk3NWNlNWQuLmM5YTI5
NzYyMmIwZTM4MWI0MDNmODUwYzBlMzkyNjRjYjI1MTNhZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VEb2N1bWVudC5oCkBAIC04MiwxMCArODIsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hv
dWxkU2hyaW5rSW1hZ2U7CiB9OwogCi1pbmxpbmUgYm9vbCBpc0ltYWdlRG9jdW1lbnQoY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVudC5pc0ltYWdlRG9jdW1lbnQoKTsg
fQotdm9pZCBpc0ltYWdlRG9jdW1lbnQoY29uc3QgSW1hZ2VEb2N1bWVudCYpOyAvLyBDYXRjaCB1
bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgot
Ci1ET0NVTUVOVF9UWVBFX0NBU1RTKEltYWdlRG9jdW1lbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKEltYWdlRG9jdW1lbnQpCisgICAgc3RhdGljIGJvb2wgaXNJbWFnZURvY3VtZW50
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1cm4gZG9jdW1lbnQuaXNJbWFnZURvY3Vt
ZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0ltYWdlRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9k
ZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgpICYmIGlzSW1hZ2VEb2N1bWVudCh0b0Rv
Y3VtZW50KG5vZGUpKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKaW5kZXggNTdjY2Q1MTk0ZWY3MTE1OWY4ZDMxZjM4
ZDIwNDI1OGRiZTAxYzE2ZS4uN2JlOWU2MTliMzk5NGQ1NTBlMzE1ODM5Yzg3ZjZiZjAxNzk3YWE3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgKQEAgLTU2LDEwICs1NiwxMCBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBtX291dGdvaW5nUmVmZXJyZXI7CiB9OwogCi1pbmxpbmUgYm9v
bCBpc01lZGlhRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1
bWVudC5pc01lZGlhRG9jdW1lbnQoKTsgfQotdm9pZCBpc01lZGlhRG9jdW1lbnQoY29uc3QgTWVk
aWFEb2N1bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUg
a25vd24gYXQgY29tcGlsZSB0aW1lLgotCi1ET0NVTUVOVF9UWVBFX0NBU1RTKE1lZGlhRG9jdW1l
bnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKE1lZGlhRG9jdW1lbnQpCisgICAgc3Rh
dGljIGJvb2wgaXNNZWRpYURvY3VtZW50KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1
cm4gZG9jdW1lbnQuaXNNZWRpYURvY3VtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc01lZGlh
RG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50Tm9kZSgp
ICYmIGlzTWVkaWFEb2N1bWVudCh0b0RvY3VtZW50KG5vZGUpKTsgfQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1
Z2luRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAK
aW5kZXggOGIwZjUyZWY0NDM5M2YxNDQ5Mzc5Y2Y3MmYzY2VkMDQzNzkwNTBiNS4uYjIyMDg3YjRj
MDgwOTMxN2ZjMGFmZTQ5YTQ3OWQ2Nzc5OTE1MmUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVn
aW5Eb2N1bWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFBsdWdpbkRvY3VtZW50UGFy
c2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiAgICAgaWYgKGxvYWRlcikKICAgICAgICAg
bV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgbG9hZGVyLT53cml0ZXIoKS5t
aW1lVHlwZSgpKTsKIAotICAgIHRvUGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQoKSktPnNldFBsdWdp
bkVsZW1lbnQobV9lbWJlZEVsZW1lbnQpOworICAgIGRvd25jYXN0PFBsdWdpbkRvY3VtZW50Pigq
ZG9jdW1lbnQoKSkuc2V0UGx1Z2luRWxlbWVudChtX2VtYmVkRWxlbWVudCk7CiAKICAgICBib2R5
LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5oCmluZGV4IDc4NDkxZDA3ZDEyMzFlMGY0YWU3ODkyODI5
YmQzYjE2NTA2NDFkM2QuLjAxMmZiOTcwZDU2OTIyZDA5NjlhZDVjYjY4Njg1NjIyMWU2ZjE5MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmgKQEAgLTYxLDEwICs2MSwxMCBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gbV9wbHVnaW5FbGVtZW50Owog
fTsKIAotaW5saW5lIGJvb2wgaXNQbHVnaW5Eb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzUGx1Z2luRG9jdW1lbnQoKTsgfQotdm9pZCBpc1BsdWdp
bkRvY3VtZW50KGNvbnN0IFBsdWdpbkRvY3VtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUuCi0KLURPQ1VNRU5UX1RZ
UEVfQ0FTVFMoUGx1Z2luRG9jdW1lbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFBs
dWdpbkRvY3VtZW50KQorICAgIHN0YXRpYyBib29sIGlzUGx1Z2luRG9jdW1lbnQoY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBkb2N1bWVudC5pc1BsdWdpbkRvY3VtZW50KCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBpc1BsdWdpbkRvY3VtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0
dXJuIG5vZGUuaXNEb2N1bWVudE5vZGUoKSAmJiBpc1BsdWdpbkRvY3VtZW50KHRvRG9jdW1lbnQo
bm9kZSkpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5kZXggNGFkYzU3MjZmZWZlNDFiZTk2NDcx
YWJiZjQwOTk0ZGZhNzAxZDdlOC4uNzNiYzUyYjgwMjllYzkxOWEyYTYyYWI5ZWQwNThlNTliNzlm
ZDc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0zOTMs
NyArMzkzLDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50JiBwbHVnaW5FbGVtZW50LCBjb25zdCBVUkwKICAgICBwbHVnaW5FbGVtZW50LnN1
YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbih1cmwpOwogCiAgICAgSW50U2l6ZSBjb250ZW50
U2l6ZSA9IHJvdW5kZWRJbnRTaXplKExheW91dFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgp
LCByZW5kZXJlci0+Y29udGVudEhlaWdodCgpKSk7Ci0gICAgYm9vbCBsb2FkTWFudWFsbHkgPSBk
b2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQbHVnaW5zICYmIHRv
UGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQoKSktPnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOwor
ICAgIGJvb2wgbG9hZE1hbnVhbGx5ID0gaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KCkpICYm
ICFtX2NvbnRhaW5zUGx1Z2lucyAmJiBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50
KCkpLnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IC8vIE9uIGlPUywgd2Ugb25seSB0ZWxsIHRoZSBwbHVnaW4gdG8gYmUgaW4gZnVsbCBwYWdlIG1v
ZGUgaWYgdGhlIGNvbnRhaW5pbmcgcGx1Z2luIGRvY3VtZW50IGlzIHRoZSB0b3AgbGV2ZWwgZG9j
dW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGFjNDA1ODk3
OTg3ZDYwZjZhMDhkMjhiMTI1NTExOTg4YTQxNjBmYzcuLjMwM2IzYTE4YzhlYWJlNjQ5ZTA3MDM4
OWM1Mjg4NDVlNjg2OWIwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CkBAIC0zOTcsOCArMzk3LDggQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0
aW9uRm9yTG9hZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiAKICAgICBib29sIHBsdWdpbkRvY3VtZW50
QWNjZXB0c0RyYWdzID0gZmFsc2U7CiAKLSAgICBpZiAoZG9jICYmIGRvYy0+aXNQbHVnaW5Eb2N1
bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFdpZGdldCogd2lkZ2V0ID0gdG9QbHVnaW5Eb2N1bWVu
dChkb2MpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICBpZiAoZG9jICYmIGlzPFBsdWdpbkRvY3VtZW50
Pihkb2MpKSB7CisgICAgICAgIGNvbnN0IFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UGx1Z2lu
RG9jdW1lbnQ+KCpkb2MpLnBsdWdpbldpZGdldCgpOwogICAgICAgICBjb25zdCBQbHVnaW5WaWV3
QmFzZSogcGx1Z2luVmlldyA9ICh3aWRnZXQgJiYgd2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkp
ID8gdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpIDogbnVsbHB0cjsKIAogICAgICAgICBpZiAocGx1
Z2luVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBmZGZiNmNjODUxNzg5YTE4
ZDJiYWUwYWNkOGU4Nzg3Yzg2NjkwNjVhLi5iY2I1MDQ0YjE1Njg0ZTI0Mjc5OWQ3ODllMmFlYzQz
Y2FjNjUyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yMzExLDcgKzIzMTEs
NyBAQCBzdGF0aWMgTGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzIGRldGVybWluZUxheWVy
Rmx1c2hUaHJvdHRsZVN0YXRlKFBhZ2UmIHBhZwogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBE
aXNhYmxlIGZvciBpbWFnZSBkb2N1bWVudHMgc28gbGFyZ2UgR0lGIGFuaW1hdGlvbnMgZG9uJ3Qg
Z2V0IHRocm90dGxlZCBkdXJpbmcgbG9hZGluZy4KICAgICBhdXRvKiBkb2N1bWVudCA9IHBhZ2Uu
bWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8IGlzSW1hZ2VEb2N1
bWVudCgqZG9jdW1lbnQpKQorICAgIGlmICghZG9jdW1lbnQgfHwgaXM8SW1hZ2VEb2N1bWVudD4o
KmRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIExheWVyRmx1c2hUaHJv
dHRsZVN0YXRlOjpFbmFibGVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9N
SFRNTENsYXNzZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCmlu
ZGV4IDVhOWY3YTEzMjliNzE0NTRkNWFmOWQ0NzJkM2JmNjMyMWRlYzZjYjEuLjAwNWU2Y2UyZjFi
ZWFlMmYzZTgyYmJjMDU0NjE1NTUxODAzYjFmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL0RPTUhUTUxDbGFzc2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xh
c3Nlcy5jcHAKQEAgLTI1MCwxOCArMjUwLDE4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NSFRNTERvY3VtZW50OjpVUkwoCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CiAKLSAgICAqcmVzdWx0ID0gQlN0cmluZyh0b0hUTUxEb2N1bWVudChtX2RvY3Vt
ZW50KS0+dXJsKCkpLnJlbGVhc2UoKTsKKyAgICAqcmVzdWx0ID0gQlN0cmluZyhkb3duY2FzdDxI
VE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KS51cmwoKSkucmVsZWFzZSgpOwogICAgIHJldHVybiBT
X09LOwogfQogICAgIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6
OmJvZHkoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01IVE1MRWxlbWVudCoqIGJv
ZHlFbGVtZW50KQogewotICAgICpib2R5RWxlbWVudCA9IDA7Ci0gICAgaWYgKCFtX2RvY3VtZW50
IHx8ICFtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQorICAgICpib2R5RWxlbWVudCA9IG51
bGxwdHI7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFpczxIVE1MRG9jdW1lbnQ+KG1fZG9jdW1l
bnQpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSFRNTERvY3VtZW50JiBodG1sRG9j
ID0gdG9IVE1MRG9jdW1lbnQoKm1fZG9jdW1lbnQpOworICAgIEhUTUxEb2N1bWVudCYgaHRtbERv
YyA9IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm1fZG9jdW1lbnQpOwogICAgIENPTVB0cjxJRE9N
RWxlbWVudD4gZG9tRWxlbWVudDsKICAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxFbGVt
ZW50OjpjcmVhdGVJbnN0YW5jZShodG1sRG9jLmJvZHkoKSkpOwogICAgIGlmIChkb21FbGVtZW50
KQpAQCAtMzAwLDExICszMDAsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
RG9jdW1lbnQ6OmxpbmtzKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9jdW1l
bnQ6OmZvcm1zKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9NSFRNTENvbGxlY3Rp
b24qKiBjb2xsZWN0aW9uKQogewotICAgICpjb2xsZWN0aW9uID0gMDsKLSAgICBpZiAoIW1fZG9j
dW1lbnQgfHwgIW1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgKmNvbGxlY3Rpb24g
PSBudWxscHRyOworICAgIGlmICghbV9kb2N1bWVudCB8fCAhaXM8SFRNTERvY3VtZW50PihtX2Rv
Y3VtZW50KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEhUTUxEb2N1bWVudCYgaHRt
bERvYyA9IHRvSFRNTERvY3VtZW50KCptX2RvY3VtZW50KTsKKyAgICBIVE1MRG9jdW1lbnQmIGh0
bWxEb2MgPSBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KTsKICAgICBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IGZvcm1zID0gaHRtbERvYy5mb3JtcygpOwogICAgICpjb2xsZWN0aW9u
ID0gRE9NSFRNTENvbGxlY3Rpb246OmNyZWF0ZUluc3RhbmNlKGZvcm1zLmdldCgpKTsKICAgICBy
ZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAppbmRleCA1N2FiZjBhNWE1ODE3NGEzMDExYjlmMzhmNWNlNDQ0MWM4MDk5NWYwLi5mNDk4
MGQyNWU3ZDI1YTliOTcxMzIyYzAzZTM3YThkNTlhMjRjOGFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNjg4LDE0ICszNjg4LDE0IEBA
IFJldGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQcmludGluZ0Zy
YW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZy
YW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZG9jdW1lbnQtPmlzUGx1Z2luRG9j
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFpczxQbHVnaW5Eb2N1bWVudD4o
ZG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4odG9QbHVnaW5Eb2N1bWVudChkb2N1
bWVudCktPnBsdWdpbldpZGdldCgpKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlldyo+KGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQp
LnBsdWdpbldpZGdldCgpKTsKICAgICBpZiAoIXBsdWdpblZpZXcpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBwbHVnaW5WaWV3LT5wZGZE
b2N1bWVudEZvclByaW50aW5nKCk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>