<?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>78589</bug_id>
          
          <creation_ts>2012-02-14 01:28:17 -0800</creation_ts>
          <short_desc>Move the context invalidation code out from StylePropertySet</short_desc>
          <delta_ts>2024-04-03 03:00:24 -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>CSS</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>
          
          <blocked>77745</blocked>
    
    <blocked>78744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adamk</cc>
    
    <cc>bakesuey</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556095</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-14 01:28:17 -0800</bug_when>
    <thetext>StylePropertySet should be independent of its context so that they can in the future be shared between documents. The context invalidation code should move to the CSSOM wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556595</commentid>
    <comment_count>1</comment_count>
      <attachid>127044</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-14 14:23:04 -0800</bug_when>
    <thetext>Created attachment 127044
give bots some excercise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556599</commentid>
    <comment_count>2</comment_count>
      <attachid>127045</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-14 14:26:23 -0800</bug_when>
    <thetext>Created attachment 127045
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556608</commentid>
    <comment_count>3</comment_count>
      <attachid>127045</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-14 14:33:26 -0800</bug_when>
    <thetext>Comment on attachment 127045
another

Attachment 127045 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11514444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556668</commentid>
    <comment_count>4</comment_count>
      <attachid>127045</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-14 15:17:53 -0800</bug_when>
    <thetext>Comment on attachment 127045
another

Attachment 127045 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11518444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556670</commentid>
    <comment_count>5</comment_count>
      <attachid>127045</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 15:20:32 -0800</bug_when>
    <thetext>Comment on attachment 127045
another

Attachment 127045 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11522421</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556677</commentid>
    <comment_count>6</comment_count>
      <attachid>127057</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-14 15:25:40 -0800</bug_when>
    <thetext>Created attachment 127057
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556728</commentid>
    <comment_count>7</comment_count>
      <attachid>127057</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-14 15:55:44 -0800</bug_when>
    <thetext>Comment on attachment 127057
another

Attachment 127057 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11515437</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556743</commentid>
    <comment_count>8</comment_count>
      <attachid>127057</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-14 16:19:24 -0800</bug_when>
    <thetext>Comment on attachment 127057
another

Attachment 127057 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11522447</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556818</commentid>
    <comment_count>9</comment_count>
      <attachid>127057</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 17:38:15 -0800</bug_when>
    <thetext>Comment on attachment 127057
another

Attachment 127057 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11523438

New failing tests:
editing/undo/remove-css-property-and-remove-style.html
inspector/styles/styles-update-from-js.html
editing/style/push-down-inline-styles.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556859</commentid>
    <comment_count>10</comment_count>
      <attachid>127057</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 18:35:42 -0800</bug_when>
    <thetext>Comment on attachment 127057
another

Attachment 127057 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11518529

New failing tests:
editing/undo/remove-css-property-and-remove-style.html
inspector/styles/styles-update-from-js.html
editing/style/push-down-inline-styles.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557522</commentid>
    <comment_count>11</comment_count>
      <attachid>127228</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-15 13:54:33 -0800</bug_when>
    <thetext>Created attachment 127228
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557805</commentid>
    <comment_count>12</comment_count>
      <attachid>127228</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 18:39:41 -0800</bug_when>
    <thetext>Comment on attachment 127228
patch

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

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:390
&gt; -            inlineStyleDecl-&gt;removeProperty(CSSPropertyFontSize);
&gt; +            element-&gt;removeInlineStyleProperty(CSSPropertyFontSize);

Wait, this can&apos;t be right. This won&apos;t be undoable. But I guess it was always like that.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:537
&gt; -                element-&gt;ensureInlineStyleDecl()-&gt;setProperty(CSSPropertyDisplay, CSSValueInline);
&gt; +                element-&gt;setInlineStyleProperty(CSSPropertyDisplay, CSSValueInline);
&gt;              if (element-&gt;renderer() &amp;&amp; element-&gt;renderer()-&gt;style()-&gt;isFloating())
&gt; -                element-&gt;ensureInlineStyleDecl()-&gt;setProperty(CSSPropertyFloat, CSSValueNone);
&gt; +                element-&gt;setInlineStyleProperty(CSSPropertyFloat, CSSValueNone);

These are also undoable :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557806</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 18:40:37 -0800</bug_when>
    <thetext>Apparently this patch reveals editing bugs but it doesn&apos;t regress anything so LGTM for editing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557847</commentid>
    <comment_count>14</comment_count>
      <attachid>127228</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 19:42:00 -0800</bug_when>
    <thetext>Comment on attachment 127228
patch

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

&gt; Source/WebCore/css/StylePropertySet.cpp:778
&gt; +    if (Document* document = m_contextStyleSheet ? m_contextStyleSheet-&gt;findDocument() : 0)

I&apos;m somewhat worried about the performance implication on replacing document() by findDocument() here since it&apos;s linear in the number of stylesheet hierarchy whereas it used to be constant. Doing that on every property assignment may be quite expensive.

&gt; Source/WebCore/css/StylePropertySet.cpp:1051
&gt; +CSSStyleDeclaration* StylePropertySet::ensureRuleCSSStyleDeclaration(const CSSRule* parentRule) const

So this function is still called in WebKitCSSKeyframeRule, EditingStyle, InspectorCSSAgent, &amp; DragController but I guess their use cases require don&apos;t fit into either inline or rule style declarations.

&gt; Source/WebCore/css/StylePropertySet.cpp:1081
&gt; +    ASSERT_UNUSED(rule, static_cast&lt;CSSStyleDeclaration*&gt;(propertySetCSSOMWrapperMap().get(this))-&gt;parentRule() == rule);
&gt; +    propertySetCSSOMWrapperMap().get(this)-&gt;clearParentRule();

I&apos;m a bit worried about the fact we&apos;re introducing all these hash lookups. We might want to consider having a pointer in StylePropertySet instead.

&gt; Source/WebCore/dom/StyledElement.cpp:71
&gt; +    Element::insertedIntoDocument();
&gt; +
&gt; +    if (StylePropertySet* inlineStyle = inlineStyleDecl())
&gt; +        inlineStyle-&gt;setContextStyleSheet(document()-&gt;elementSheet());
&gt; +    if (StylePropertySet* attributeStyle = attributeData() ? attributeData()-&gt;attributeStyle() : 0)
&gt; +        attributeStyle-&gt;setContextStyleSheet(document()-&gt;elementSheet());

So now we&apos;re pushing context stylesheet instead of pulling it. That&apos;s probably for setProperty and it makes sense but I&apos;m worried that there are some edge cases where this doesn&apos;t work; particularly for some SVG elements...

&gt; Source/WebCore/dom/StyledElement.cpp:129
&gt; +        InspectorInstrumentation::didInvalidateStyleAttr(document(), this);

Why are we calling it here now?

&gt; Source/WebCore/dom/StyledElement.cpp:144
&gt; +    if (changes)
&gt; +        inlineStyleChanged();

Could you add the scary comment about how we should be throwing exception here as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557860</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-15 19:57:49 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 127228 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127228&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/StylePropertySet.cpp:778
&gt; &gt; +    if (Document* document = m_contextStyleSheet ? m_contextStyleSheet-&gt;findDocument() : 0)
&gt; 
&gt; I&apos;m somewhat worried about the performance implication on replacing document() by findDocument() here since it&apos;s linear in the number of stylesheet hierarchy whereas it used to be constant. Doing that on every property assignment may be quite expensive.

In practice there is no real difference. For inline style the context stylesheet is the document-&gt;elementSheet() which has the document pointer directly.

&gt; &gt; Source/WebCore/css/StylePropertySet.cpp:1051
&gt; &gt; +CSSStyleDeclaration* StylePropertySet::ensureRuleCSSStyleDeclaration(const CSSRule* parentRule) const
&gt; 
&gt; So this function is still called in WebKitCSSKeyframeRule, EditingStyle, InspectorCSSAgent, &amp; DragController but I guess their use cases require don&apos;t fit into either inline or rule style declarations.

I guess you mean ensureCSSStyleDeclaration()? Yeah, that is for non-rule, non-element use of CSSOM wrapper. Those cases are basically all architectural mistakes and should be cleaned up in favor of accessing the StylePropertySet directly.

&gt; &gt; Source/WebCore/css/StylePropertySet.cpp:1081
&gt; &gt; +    ASSERT_UNUSED(rule, static_cast&lt;CSSStyleDeclaration*&gt;(propertySetCSSOMWrapperMap().get(this))-&gt;parentRule() == rule);
&gt; &gt; +    propertySetCSSOMWrapperMap().get(this)-&gt;clearParentRule();
&gt; 
&gt; I&apos;m a bit worried about the fact we&apos;re introducing all these hash lookups. We might want to consider having a pointer in StylePropertySet instead.

There are no new look-ups from this patch (function is just triplicated for rule/element/empty cases). The strong belief is that eliminating the almost-always null pointers is a significant overall win. Note that this pattern is very common in WebCore.

&gt; So now we&apos;re pushing context stylesheet instead of pulling it. That&apos;s probably for setProperty and it makes sense but I&apos;m worried that there are some edge cases where this doesn&apos;t work; particularly for some SVG elements...

As mentioned in the ChangeLog this is an intermediate step. The context stylesheet pointer is going to be removed in favor of passing the context in with the mutating function calls.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:129
&gt; &gt; +        InspectorInstrumentation::didInvalidateStyleAttr(document(), this);
&gt; 
&gt; Why are we calling it here now?

The inspector used to be notified by the StylePropertySet. Since the notification code is now in the CSSOM wrapper we need to do it manually here when mutating directly.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:144
&gt; &gt; +    if (changes)
&gt; &gt; +        inlineStyleChanged();
&gt; 
&gt; Could you add the scary comment about how we should be throwing exception here as well?

I don&apos;t think we should be (these are internal APIs, not visible to the outside world).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557866</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-15 20:06:28 -0800</bug_when>
    <thetext>&gt; &gt; I&apos;m a bit worried about the fact we&apos;re introducing all these hash lookups. We might want to consider having a pointer in StylePropertySet instead.
&gt; 
&gt; There are no new look-ups from this patch (function is just triplicated for rule/element/empty cases). The strong belief is that eliminating the almost-always null pointers is a significant overall win. Note that this pattern is very common in WebCore.

Also, if we at some point figure out we need to cache the inline style wrapper pointer for direct access, we can easily do it in the StyledElement level without bloating stylesheet data structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557899</commentid>
    <comment_count>17</comment_count>
      <attachid>127228</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 22:11:29 -0800</bug_when>
    <thetext>Comment on attachment 127228
patch

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

&gt; Source/WebCore/css/StylePropertySet.cpp:1200
&gt; +    bool changes = m_propertySet-&gt;removeProperty(propertyID, &amp;result);
&gt; +    if (changes) {

It seems like we don&apos;t need this local variable. Are you adding it as a documentation?

&gt;&gt;&gt; Source/WebCore/dom/StyledElement.cpp:129
&gt;&gt;&gt; +        InspectorInstrumentation::didInvalidateStyleAttr(document(), this);
&gt;&gt; 
&gt;&gt; Why are we calling it here now?
&gt; 
&gt; The inspector used to be notified by the StylePropertySet. Since the notification code is now in the CSSOM wrapper we need to do it manually here when mutating directly.

I think you meant to have StyleAttributeMutationScope here since that&apos;s what has been removed from StylePropertySet::parseDeclaration.

&gt; Source/WebCore/dom/StyledElement.cpp:137
&gt; +    InspectorInstrumentation::didInvalidateStyleAttr(document(), this);

Ditto about inspector -&gt; mutation scope. In fact, you can&apos;t define a mutation scope here. You need to define it in each one of setInlineStyleProperty and call enqueueMutationRecord when changes is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557903</commentid>
    <comment_count>18</comment_count>
      <attachid>127228</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 22:28:23 -0800</bug_when>
    <thetext>Comment on attachment 127228
patch

On my second thought, not instantiating mutation scope is fine because all calls to setInlineStyleProperty are invisible to scripts except ones in Editor.cpp, RemoveCSSPropertyCommand.cpp, &amp; ReplaceSelectionCommand.cpp. Please revert those before landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557913</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-15 22:44:08 -0800</bug_when>
    <thetext>&gt; It seems like we don&apos;t need this local variable. Are you adding it as a documentation?

Right. The purpose of the bool return value is rather unclear otherwise.

&gt; On my second thought, not instantiating mutation scope is fine because all calls to setInlineStyleProperty are invisible to scripts except ones in Editor.cpp, RemoveCSSPropertyCommand.cpp, &amp; ReplaceSelectionCommand.cpp. Please revert those before landing the patch.

Replaced these with calls to the CSSOM wrapper as discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557942</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 23:30:58 -0800</bug_when>
    <thetext>Attachment 127228 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: dataTransfer.types (HTML5 drag &amp; drop) should return DOMStringList
Using index info to reconstruct a base tree...
&lt;stdin&gt;:84: trailing whitespace.
        
&lt;stdin&gt;:333: trailing whitespace.
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;
&lt;stdin&gt;:334: trailing whitespace.
 width=&quot;300&quot; height=&quot;300&quot; onload=&quot;runRepaintTest()&quot;&gt;
&lt;stdin&gt;:335: trailing whitespace.
&lt;script xlink:href=&quot;../../fast/repaint/resources/repaint.js&quot; /&gt;
&lt;stdin&gt;:336: trailing whitespace.
&lt;script&gt;&lt;![CDATA[
warning: squelched 16 whitespace errors
warning: 21 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 dataTransfer.types (HTML5 drag &amp; drop) should return DOMStringList

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557949</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-15 23:39:40 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/107899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025643</commentid>
    <comment_count>22</comment_count>
    <who name="James Coleman">bakesuey</who>
    <bug_when>2024-04-03 03:00:24 -0700</bug_when>
    <thetext>All of our thoughts, words, and deeds flow from a chain
https://snake-game.io</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127044</attachid>
            <date>2012-02-14 14:23:04 -0800</date>
            <delta_ts>2012-02-14 14:26:23 -0800</delta_ts>
            <desc>give bots some excercise</desc>
            <filename>style-rule-8.patch</filename>
            <type>text/plain</type>
            <size>75344</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAg
X19aTks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDE1aXNQYXNzdwogX19aTks3V2ViQ29yZTE2
SFRNTElucHV0RWxlbWVudDE4c2hvdWxkQXV0b2NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUxNklj
b25EYXRhYmFzZUJhc2UxMmRhdGFiYXNlUGF0aEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNvdXJjZVJl
c3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKLV9fWk5LN1dlYkNvcmUxNlN0eWxlUHJvcGVydHlTZXQy
NWVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb25FdgorX19aTks3V2ViQ29yZTE2U3R5bGVQcm9wZXJ0
eVNldDI1ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbkVQS05TXzdDU1NSdWxlRQogX19aTks3V2Vi
Q29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgogX19aTks3V2ViQ29y
ZTE2VmlzaWJsZVNlbGVjdGlvbjE3dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbjE5cm9vdEVkaXRhYmxlRWxlbWVudEV2CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgQ1NTRm9udEZhY2VSdWxlOjpDU1NGb250RmFjZVJ1bGUoQ1NTU3R5bAogQ1NTRm9udEZh
Y2VSdWxlOjp+Q1NTRm9udEZhY2VSdWxlKCkKIHsKICAgICBpZiAobV9zdHlsZSkKLSAgICAgICAg
bV9zdHlsZS0+Y2xlYXJQYXJlbnRSdWxlKCk7CisgICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50
UnVsZSh0aGlzKTsKIH0KIAogU3RyaW5nIENTU0ZvbnRGYWNlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCShyZXZpc2lvbiAxMDc3MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgfkNTU0ZvbnRGYWNlUnVsZSgpOwogCi0g
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLT5l
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7IH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
dGhpcyk7IH0KIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBDU1NQ
YWdlUnVsZTo6Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVTaGVldCogCiAKIENTU1BhZ2VSdWxlOjp+Q1NT
UGFnZVJ1bGUoKQogeworICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSh0aGlzKTsKIH0KIAog
U3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgfkNTU1BhZ2VSdWxlKCk7CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsg
fQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgfQogCiAgICAgU3RyaW5nIHNlbGVj
dG9yVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYp
OwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcygpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFk
b3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2Vs
ZWN0b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JzKTsg
fQotICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZSkgeyBBU1NFUlQoc3R5bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOyBtX3N0
eWxlID0gc3R5bGU7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxlOyB9CiAKIHByaXZhdGU6CiAgICAg
Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBpbnQgc291cmNlTGluZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3NjAsNyArODc2MCw3
IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3QKICAgICAgICAgcnVs
ZS0+YWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9u
dEZhY2VPbmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7
Ci0gICAgICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShy
dWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwor
ICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobV9z
dHlsZVNoZWV0LCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwog
ICAgICAgICByZXN1bHQgPSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVu
ZChydWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewpAQCAtODc5
OSw3ICs4Nzk5LDcgQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQog
ICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGUgPSBDU1NG
b250RmFjZVJ1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOwotICAgIHJ1bGUtPnNldERlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShydWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRp
ZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKFN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1fcGFyc2VkUHJvcGVydGllcywg
bV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgQ1NT
Rm9udEZhY2VSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBw
ZW5kKHJ1bGUucmVsZWFzZSgpKTsKQEAgLTg4NzAsNyArODg3MCw3IEBAIENTU1J1bGUqIENTU1Bh
cnNlcjo6Y3JlYXRlUGFnZVJ1bGUoUGFzc08KICAgICAgICAgVmVjdG9yPE93blB0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gPiBzZWxlY3RvclZlY3RvcjsKICAgICAgICAgc2VsZWN0b3JWZWN0b3IuYXBw
ZW5kKHBhZ2VTZWxlY3Rvcik7CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2Vs
ZWN0b3JWZWN0b3IpOwotICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5
U2V0OjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKICAgICAgICAgcGFnZVJ1bGUgPSBydWxlLmdldCgpOwogICAgICAgICBtX3Bh
cnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtODk1NCw3ICs4OTU0
LDcgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZQogCiAgICAgUmVm
UHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOwogICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0
cmluZyk7Ci0gICAga2V5ZnJhbWUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZShrZXlmcmFtZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3Bl
cnRpZXMpKTsKKyAgICBrZXlmcmFtZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldDo6
Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3Bl
cnRpZXMpKTsKIAogICAgIGNsZWFyUHJvcGVydGllcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgQ1NTU3R5
bGVSdWxlOjpDU1NTdHlsZVJ1bGUoQ1NTU3R5bGVTaGVldAogQ1NTU3R5bGVSdWxlOjp+Q1NTU3R5
bGVSdWxlKCkKIHsKICAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+Y2xlYXJQYXJl
bnRSdWxlKCk7CisgICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSh0aGlzKTsKICAgICBj
bGVhbnVwKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHJldmlzaW9u
IDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0b3JUZXh0
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJik7CiAKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVu
c3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbih0
aGlzKTsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIHZvaWQgYWRvcHRT
ZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3Rv
cnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9Ci0g
ICAgdm9pZCBzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxl
KSB7IEFTU0VSVChzdHlsZS0+cGFyZW50UnVsZUludGVybmFsKCkgPT0gdGhpcyk7IG1fc3R5bGUg
PSBzdHlsZTsgfQorICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBzdHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KIAogICAgIGNvbnN0IENTU1NlbGVj
dG9yTGlzdCYgc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvckxpc3Q7IH0K
ICAgICBTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3NiwxOSArMjQ3NiwxOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNJbnNpZGVSZWdpb25SdWxlKFN0CiB7CiAgICAgQVNTRVJUKHN0eWxlRGVjbGFyYXRp
b24pOwogCi0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlRGVjbGFyYXRpb24tPnBhcmVu
dFJ1bGVJbnRlcm5hbCgpOworLyogICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlRGVjbGFy
YXRpb24tPnBhcmVudFJ1bGVJbnRlcm5hbCgpOwogICAgIHdoaWxlIChwYXJlbnRSdWxlKSB7CiAg
ICAgICAgIGlmIChwYXJlbnRSdWxlLT5pc1JlZ2lvblJ1bGUoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBwYXJlbnRSdWxlID0gcGFyZW50UnVsZS0+cGFyZW50UnVsZSgpOwot
ICAgIH0KKyAgICB9Ki8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxib29sIGFw
cGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhl
cml0ZWRPbmx5KQogewotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBz
dHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSk7CisvLyAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZUlu
dGVybmFsKCkpOwogICAgIGJvb2wgc3R5bGVEZWNsYXJhdGlvbkluc2lkZVJlZ2lvblJ1bGUgPSBt
X3JlZ2lvbkZvclN0eWxpbmcgPyBpc0luc2lkZVJlZ2lvblJ1bGUoc3R5bGVEZWNsYXJhdGlvbikg
OiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9u
LT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0yNTI3LDcgKzI1MjcsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oCiAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3Bl
cnR5TGluZUhlaWdodCkKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOwogICAgIH0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7CisvLyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCShyZXZpc2lvbiAxMDc3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDEyICs1NiwxNiBAQCBzdGF0aWMgUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAmIHByb3BlCiBjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
Q1NTU3R5bGVEZWNsYXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0KSA6IG1fcHJvcGVydHlTZXQo
cHJvcGVydHlTZXQpIHsgfQorICAgIAorICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFyZW50
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJl
bnRSdWxlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVh
clBhcmVudEVsZW1lbnQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVm
KCk7IH0KIAotICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDA7IH07CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwpAQCAtODEsMTYgKzg1LDUxIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNv
cHkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gbWFrZU11dGFibGUoKSBPVkVSUklERTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNTdHlsZVJlY2FsYygpID0gMDsKKworcHJvdGVjdGVkOgogICAgIFN0eWxlUHJvcGVydHlT
ZXQqIG1fcHJvcGVydHlTZXQ7CiB9OwogCitjbGFzcyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbiA6
IHB1YmxpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24KK3sKK3B1YmxpYzoKKyAgICBS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwgQ1NT
UnVsZSogcGFyZW50UnVsZSkKKyAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRSdWxlKHBhcmVudFJ1bGUpIAorICAg
IHsgfQorCitwcml2YXRlOiAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQ
YXJlbnRSdWxlKCkgeyBtX3BhcmVudFJ1bGUgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAKKyAgICBDU1NSdWxlKiBtX3BhcmVudFJ1bGU7Cit9Owor
CitjbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIElubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5
U2V0KQorICAgICAgICAsIG1fcGFyZW50RWxlbWVudChwYXJlbnRFbGVtZW50KSAKKyAgICB7IH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudEVsZW1lbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQ
YXJlbnRFbGVtZW50KCkgeyBtX3BhcmVudEVsZW1lbnQgPSAwOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKworICAgIFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxl
bWVudDsKK307CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFN0eWxlQXR0cmlidXRlTXV0YXRpb25T
Y29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNj
b3BlKTsKIHB1YmxpYzoKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoU3R5bGVQcm9w
ZXJ0eVNldCogZGVjbCkKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIHsKICAgICAgICAgKytzX3Njb3BlQ291
bnQ7CiAKQEAgLTEwMyw4ICsxNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNfY3VycmVudERlY2wg
PSBkZWNsOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAgaWYgKCFz
X2N1cnJlbnREZWNsLT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKCFzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1fbXV0YXRpb25SZWNpcGllbnRzID0gTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbihzX2N1cnJl
bnREZWNsLT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyKTsKQEAgLTEzMiwx
MCArMTY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBXZSBoYXZlIHRvIGNsZWFyIGludGVybmFsIHN0YXRlIGJlZm9yZSBjYWxsaW5nIElu
c3BlY3RvcidzIGNvZGUuCi0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGxvY2FsQ29weVN0eWxl
RGVjbCA9IHNfY3VycmVudERlY2w7CisgICAgICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiogbG9jYWxDb3B5U3R5bGVEZWNsID0gc19jdXJyZW50RGVjbDsKICAgICAgICAgc19jdXJy
ZW50RGVjbCA9IDA7CiAgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURlY2wtPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigp
ICYmIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpICYmIGxvY2FsQ29weVN0eWxl
RGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpKQorICAgICAgICBpZiAobG9jYWxDb3B5
U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRF
bGVtZW50KCktPmRvY3VtZW50KCkpCiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEludmFsaWRhdGVTdHlsZUF0dHIobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVt
ZW50KCktPmRvY3VtZW50KCksIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpKTsK
ICAgICB9CiAKQEAgLTE0OCwxMyArMTg1LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkSW52
YWxpZGF0ZVN0eWxlQXR0cigpCiAgICAgewotICAgICAgICBBU1NFUlQoc19jdXJyZW50RGVjbC0+
aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkpOwogICAgICAgICBzX3Nob3VsZE5vdGlmeUluc3Bl
Y3RvciA9IHRydWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBzX3Nj
b3BlQ291bnQ7Ci0gICAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHNfY3VycmVudERlY2w7Cisg
ICAgc3RhdGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogc19jdXJyZW50RGVjbDsK
ICAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZE5vdGlmeUluc3BlY3RvcjsKICNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQogICAgIHN0YXRpYyBib29sIHNfc2hvdWxkRGVsaXZlcjsKQEAgLTE2
NSw3ICsyMDEsNyBAQCBwcml2YXRlOgogfTsKIAogdW5zaWduZWQgU3R5bGVBdHRyaWJ1dGVNdXRh
dGlvblNjb3BlOjpzX3Njb3BlQ291bnQgPSAwOwotU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVBdHRy
aWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJlbnREZWNsID0gMDsKK1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbiogU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJlbnREZWNs
ID0gMDsKIGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZE5vdGlmeUlu
c3BlY3RvciA9IGZhbHNlOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiBib29sIFN0
eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGREZWxpdmVyID0gZmFsc2U7CkBAIC0x
NzUsMzkgKzIxMSwzMSBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91
CiAKIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoKQogICAgIDogbV9zdHJpY3RQ
YXJzaW5nKGZhbHNlKQotICAgICwgbV9wYXJlbnRJc0VsZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lz
SW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZh
bHNlKQotICAgICwgbV9wYXJlbnQoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KDApKQorICAgICwgbV9j
b250ZXh0U3R5bGVTaGVldCgwKQogewogfQogCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3Bl
cnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcoIXBhcmVu
dFJ1bGUgfHwgcGFyZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQotICAgICwgbV9wYXJlbnRJ
c0VsZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkK
K1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3Bl
cnR5PiYgcHJvcGVydGllcykKKyAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQorICAgICwg
bV9zdHJpY3RQYXJzaW5nKHRydWUpCiAgICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLSAg
ICAsIG1fcGFyZW50KHBhcmVudFJ1bGUpCisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KDApCiB7
CisgICAgbV9wcm9wZXJ0aWVzLnNocmlua1RvRml0KCk7CiB9CiAKLVN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgVmVjdG9yPENTU1By
b3BlcnR5PiYgcHJvcGVydGllcykKLSAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQotICAg
ICwgbV9zdHJpY3RQYXJzaW5nKCFwYXJlbnRSdWxlIHx8IHBhcmVudFJ1bGUtPnVzZVN0cmljdFBh
cnNpbmcoKSkKLSAgICAsIG1fcGFyZW50SXNFbGVtZW50KGZhbHNlKQotICAgICwgbV9pc0lubGlu
ZVN0eWxlRGVjbGFyYXRpb24oZmFsc2UpCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5
U2V0KENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorICAgIDogbV9zdHJpY3RQYXJz
aW5nKCFjb250ZXh0U3R5bGVTaGVldCB8fCBjb250ZXh0U3R5bGVTaGVldC0+dXNlU3RyaWN0UGFy
c2luZygpKQogICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCi0gICAgLCBtX3BhcmVudChw
YXJlbnRSdWxlKQorICAgICwgbV9jb250ZXh0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCkK
IHsKLSAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAotU3R5bGVQcm9wZXJ0eVNl
dDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0
eSogY29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLSAgICA6IG1fc3RyaWN0
UGFyc2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCi0g
ICAgLCBtX3BhcmVudElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNJbmxpbmVTdHlsZURlY2xh
cmF0aW9uKGZhbHNlKQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NTdHls
ZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJv
cGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCisgICAgOiBtX3N0cmljdFBhcnNpbmcoIWNvbnRl
eHRTdHlsZVNoZWV0IHx8IGNvbnRleHRTdHlsZVNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpCiAg
ICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLSAgICAsIG1fcGFyZW50KHBhcmVudFJ1bGUp
CisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1f
cHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVByb3BlcnRpZXMpOwogICAgIEhh
c2hNYXA8aW50LCBib29sPiBjYW5kaWRhdGVzOwpAQCAtMjIwLDcgKzI0OCw3IEBAIFN0eWxlUHJv
cGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnUKICAgICAgICAgaWYgKGl0ICE9IGNhbmRp
ZGF0ZXMuZW5kKCkpIHsKICAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT5zZWNvbmQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eS0+aWQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LT5pZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcHJvcGVydGllcy5hcHBl
bmQoKnByb3BlcnR5KTsKQEAgLTIyOCwxNSArMjU2LDYgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5
bGVQcm9wZXJ0eVNldChDU1NSdQogICAgIH0KIH0KIAotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQ
cm9wZXJ0eVNldChTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBib29sIGlzSW5saW5lU3R5
bGUpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX3BhcmVudElzRWxlbWVu
dCh0cnVlKQotICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oaXNJbmxpbmVTdHlsZSkK
LSAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotICAgICwgbV9wYXJlbnQocGFyZW50RWxl
bWVudCkKLXsKLX0KLQogU3R5bGVQcm9wZXJ0eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQogewog
ICAgIEFTU0VSVCghbV9oYXNDU1NPTVdyYXBwZXIgfHwgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5jb250YWlucyh0aGlzKSk7CkBAIC0yNDQsMTUgKzI2Myw2IEBAIFN0eWxlUHJvcGVydHlT
ZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkKICAgICAgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLUNTU1N0eWxlU2hlZXQqIFN0eWxlUHJvcGVydHlTZXQ6
OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICBpZiAobV9wYXJlbnRJc0VsZW1lbnQp
IHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wYXJlbnQuZWxlbWVudCA/IG1fcGFy
ZW50LmVsZW1lbnQtPmRvY3VtZW50KCkgOiAwOwotICAgICAgICByZXR1cm4gZG9jdW1lbnQgPyBk
b2N1bWVudC0+ZWxlbWVudFNoZWV0KCkgOiAwOwotICAgIH0KLSAgICByZXR1cm4gbV9wYXJlbnQu
cnVsZSA/IG1fcGFyZW50LnJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Ci19Ci0KIHZvaWQg
U3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNGcm9tKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQmIG90aGVyKQogewogICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1fcHJvcGVydGllczsKQEAg
LTY3MSw2OCArNjgxLDM4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6
OmcKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+dmFsdWUoKSA6IDA7CiB9CiAKLWJv
b2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5
SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hv
cnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQpCiB7CiAgICAgQ1NTUHJvcGVydHlMb25naGFu
ZCBsb25naGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYgKCFs
b25naGFuZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByZW1v
dmVQcm9wZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25naGFuZC5sZW5ndGgo
KSwgbm90aWZ5Q2hhbmdlZCk7CisgICAgcmV0dXJuIHJlbW92ZVByb3BlcnRpZXNJblNldChsb25n
aGFuZC5wcm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxlbmd0aCgpKTsKIH0KIAotU3RyaW5nIFN0eWxl
UHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNo
YW5nZWQsIGJvb2wgcmV0dXJuVGV4dCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIFN0cmluZyogcmV0dXJuVGV4dCkKIHsKLSNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRh
dGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KLSAgICBpZiAocmVtb3ZlU2hvcnRoYW5kUHJvcGVy
dHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCkpIHsKKyAgICBpZiAocmVtb3ZlU2hvcnRoYW5k
UHJvcGVydHkocHJvcGVydHlJRCkpIHsKICAgICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVp
dmFsZW50IHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAgICAgKnJldHVyblRleHQgPSAiIjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQ1NTUHJvcGVydHkqIGZvdW5kUHJv
cGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFmb3VuZFBy
b3BlcnR5KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFmb3VuZFByb3BlcnR5
KSB7CisgICAgICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAgICAgKnJldHVyblRleHQgPSAi
IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZSA9IHJl
dHVyblRleHQgPyBmb3VuZFByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkgOiBTdHJpbmcoKTsK
KyAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAgKnJldHVyblRleHQgPSBmb3VuZFByb3BlcnR5
LT52YWx1ZSgpLT5jc3NUZXh0KCk7CiAKICAgICAvLyBBIG1vcmUgZWZmaWNpZW50IHJlbW92YWwg
c3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5nIGVudHJpZXMgYXMgZW1wdHkKICAgICAvLyBh
bmQgc3dlZXBpbmcgdGhlbSB3aGVuIHRoZSB2ZWN0b3IgZ3Jvd3MgdG9vIGJpZy4KICAgICBtX3By
b3BlcnRpZXMucmVtb3ZlKGZvdW5kUHJvcGVydHkgLSBtX3Byb3BlcnRpZXMuZGF0YSgpKTsKLQot
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgbXV0YXRpb25TY29wZS5lbnF1ZXVl
TXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgotCi0gICAgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKLXsKLSAgICBpZiAobV9w
YXJlbnRJc0VsZW1lbnQpIHsKLSAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHBhcmVu
dEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICghbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAg
IC8vIElmIHRoaXMgaXMgbm90IGFuIGlubGluZSBzdHlsZSwgaXQncyBhbiBhdHRyaWJ1dGUgc3R5
bGUsIGFuZCB3ZSBzaG91bGRuJ3QgbWFyayB0aGUgZWxlbWVudCBmb3Igc3R5bGUgcmVjYWxjCi0g
ICAgICAgICAgICAvLyBhcyB0aGF0IGlzIGhhbmRsZWQgYnkgU3R5bGVkRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZCgpLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUodGhpcykuZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBj
b250ZXh0U3R5bGVTaGVldCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBz
dHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNl
bGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLSAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlJc0ltcG9ydGFudChp
bnQgcHJvcGVydHlJRCkgY29uc3QKQEAgLTc2NCw0NSArNzQ0LDIzIEBAIGJvb2wgU3R5bGVQcm9w
ZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2kKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0
eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkK
IHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KICAgICAvLyBTZXR0aW5n
IHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBp
biBib3RoIElFIGFuZCBHZWNrby4KICAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8g
cHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhl
IHNhbWUuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSk7CisgICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5SUQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBX
aGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBwcm9wZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUg
cHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAvLyBGaXJlZm94IHByZXNlcnZl
cyB0aGUgcG9zaXRpb24sIGFuZCBNU0lFIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5u
aW5nLgotICAgIGJvb2wgc3VjY2VzcyA9IENTU1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VS
UiBoZXJlLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAotICAg
ICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY+
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2Vu
ZGlmCi0KLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5nKCkp
OwogfQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKLSNlbmRpZgotCi0gICAgaWYgKCFyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9w
ZXJ0eS5pZCgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHBy
b3BlcnR5LmlkKCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90ID8g
c2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAgaWYgKHRv
UmVwbGFjZSkgewogICAgICAgICAgICAgKnRvUmVwbGFjZSA9IHByb3BlcnR5OwpAQCAtODEwLDg1
ICs3NjgsNDggQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdAogICAg
ICAgICB9CiAgICAgfQogICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwotCi0jaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRh
dGlvblJlY29yZCgpOwotI2VuZGlmCiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCwgYm9v
bCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZhbHVlOwotICAgIGlmIChtX3BhcmVudElzRWxlbWVudCAmJiBwYXJl
bnRFbGVtZW50KCkgJiYgcGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpKQotICAgICAgICB2YWx1
ZSA9IHBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbHVlOyAgICAKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9jb250ZXh0U3R5bGVT
aGVldCA/IG1fY29udGV4dFN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpIDogMDspCisgICAgICAg
IHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
aWRlbnRpZmllcik7CiAgICAgZWxzZQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGVJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCiAgICAgc2V0UHJvcGVydHkoQ1NTUHJv
cGVydHkocHJvcGVydHlJRCwgdmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKLSAgICBpZiAo
bm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKIHsKICAgICBDU1NQcm9wZXJ0
eSBwcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB1
bml0KSwgaW1wb3J0YW50KTsKICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKG5v
dGlmeUNoYW5nZWQpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0
IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbikKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMp
OwotI2VuZGlmCi0KICAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKICAgICBDU1NQYXJzZXIgcGFy
c2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhp
cywgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQ
YXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50
IG51bVByb3BlcnRpZXMpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBT
dHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgot
CiAgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKICAgICAgICAgYWRkUGFyc2Vk
UHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0K
LSAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0TmVl
ZHNTdHlsZVJlY2FsYygpIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRv
IGFkZAotICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRv
IGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCiB9CiAK
IHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5KQogewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQog
ICAgIC8vIE9ubHkgYWRkIHByb3BlcnRpZXMgdGhhdCBoYXZlIG5vICFpbXBvcnRhbnQgY291bnRl
cnBhcnQgcHJlc2VudAogICAgIGlmICghcHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eS5pZCgp
KSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnR5LmlkKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3Bl
cnR5LmlkKCkpOwogICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKICAgICB9
Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFN0eWxlUHJvcGVydHlT
ZXQ6OmFzVGV4dCgpIGNvbnN0CkBAIC05NTUsMTAgKzg3Niw2IEBAIFN0cmluZyBTdHlsZVByb3Bl
cnR5U2V0Ojphc1RleHQoKSBjb25zdAogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIG90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3Qp
CiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgdW5zaWduZWQg
c2l6ZSA9IG90aGVyLT5tX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCBzaXplOyArK24pIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2Ug
PSBvdGhlci0+bV9wcm9wZXJ0aWVzW25dOwpAQCAtOTcwLDEzICs4ODcsNiBAQCB2b2lkIFN0eWxl
UHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCh0b01lcmdlKTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KCk7Ci0jZW5kaWYKLQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEg
Y2FsbCB0byBzZXROZWVkc1N0eWxlUmVjYWxjKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1h
eSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRo
aXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhp
cyBjbGFzcy4KIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKQEAgLTEwMjUsMTUgKzkzNSwxMSBAQCB2b2lk
IFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUJsb2NrUHJvcGVyCiAgICAgcmVtb3ZlUHJvcGVydGll
c0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKIH0KIAotYm9vbCBT
dHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3BlcnR5U2V0
OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0aCBzdGF0aWMgc2V0cyBhbmQgaW4gdGhhdCBjYXNlIGNv
bnN0cnVjdGluZyB0aGUgaGFzaCByZXBlYXRlZGx5IGlzIHByZXR0eSBwb2ludGxlc3MuCiAgICAg
SGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKQEAgLTEwNTUsMTQgKzk2MSw2IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVt
b3ZlUHJvcGVydGllc0kKIAogICAgIGJvb2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRpZXMuc2l6ZSgp
ICE9IG1fcHJvcGVydGllcy5zaXplKCk7CiAgICAgbV9wcm9wZXJ0aWVzID0gbmV3UHJvcGVydGll
czsKLQotICAgIGlmIChub3RpZnlDaGFuZ2VkKSB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKLSAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNl
bmRpZgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotCiAgICAgcmV0dXJu
IGNoYW5nZWQ7CiB9CiAKQEAgLTExMjAsNyArMTAxOCw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlRXF1aXZhbGVudFAKIAogUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHls
ZVByb3BlcnR5U2V0Ojpjb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
eWxlUHJvcGVydHlTZXQoMCwgbV9wcm9wZXJ0aWVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHlsZVByb3BlcnR5U2V0KG1fcHJvcGVydGllcykpOwogfQogCiBQYXNzUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKQEAgLTExMzUsMTYgKzEwMzMsNDggQEAg
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcgogICAgIHJldHVybiBTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUobGlzdCk7CiB9CiAKLUNTU1N0eWxlRGVjbGFyYXRpb24qIFN0
eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdAorQ1NTU3R5
bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bihjb25zdCBDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdAogewotICAgIGlmIChtX2hhc0NTU09N
V3JhcHBlcikKKyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0eVNldENTU09NV3JhcHBlck1h
cCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSA9PSBwYXJlbnRSdWxlKTsKKyAgICAgICAgcmV0
dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpOworICAgIH0KKyAgICBt
X2hhc0NTU09NV3JhcHBlciA9IHRydWU7CisgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3RfY2Fz
dDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNvbnN0X2Nhc3Q8Q1NTUnVsZSo+KHBhcmVudFJ1
bGUpKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlzLCBhZG9wdFB0
cihjc3NvbVdyYXBwZXIpKTsKKyAgICByZXR1cm4gY3Nzb21XcmFwcGVyOworfQorCitDU1NTdHls
ZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xh
cmF0aW9uKGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0Cit7CisgICAg
aWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eVNldENTU09N
V3JhcHBlck1hcCgpLmdldCh0aGlzKS0+cGFyZW50RWxlbWVudCgpID09IHBhcmVudEVsZW1lbnQp
OwogICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7
CisgICAgfQogICAgIG1faGFzQ1NTT01XcmFwcGVyID0gdHJ1ZTsKLSAgICBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcykpOworICAgIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IElubGluZUNT
U1N0eWxlRGVjbGFyYXRpb24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNv
bnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpKTsKICAgICBwcm9wZXJ0eVNl
dENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKICAg
ICByZXR1cm4gY3Nzb21XcmFwcGVyOwogfQogCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFy
UGFyZW50UnVsZShDU1NSdWxlKiBydWxlKQoreworICAgIG1fY29udGV4dFN0eWxlU2hlZXQgPSAw
OworICAgIGlmICghbV9oYXNDU1NPTVdyYXBwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlRfVU5VU0VEKHJ1bGUsIHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0
eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSA9PSBydWxlKTsK
KyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRS
dWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRFbGVtZW50KFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9jb250ZXh0U3R5bGVTaGVldCA9IDA7Cisg
ICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9V
TlVTRUQoZWxlbWVudCwgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBh
cmVudEVsZW1lbnQoKSA9PSBlbGVtZW50KTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1h
cCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRFbGVtZW50KCk7Cit9CisKIHVuc2lnbmVkIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpOwpAQCAtMTE1NywxMSArMTA4Nyw2IEBAIFN0
cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmkKICAgICByZXR1cm4gZ2V0UHJv
cGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydHlTZXQtPnByb3Bl
cnR5QXQoaSkuaWQoKSkpOwogfQogCi1DU1NSdWxlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5w
YXJlbnRSdWxlSW50ZXJuYWwoKTsKLX0KLQogU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFz
VGV4dCgpOwpAQCAtMTE2OSw5ICsxMDk0LDE1IEBAIFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmMKICAgICAKIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRpZgogICAgIGVjID0gMDsKICAgICAvLyBG
SVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KICAgICBtX3Byb3BlcnR5U2V0
LT5wYXJzZURlY2xhcmF0aW9uKHRleHQpOworCisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAogfQogCiBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMjE5LDIxICsxMTUw
LDQzIEBAIGJvb2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjppc1AKIAogdm9pZCBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQor
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2Vu
ZGlmCiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAg
ICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CiAgICAg
ZWMgPSAwOwotICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOworICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOworICAgIGlmIChjaGFuZ2Vk
KSB7CisgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBh
cnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5
LAorICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyOTY+LgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKyNlbmRpZgorICAgIH0KIH0KIAogU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKICAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAo
IXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBlYyA9IDA7Ci0gICAg
cmV0dXJuIG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIHRy
dWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9wcm9wZXJ0eVNl
dC0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgJnJlc3VsdCk7CisgICAgaWYgKGNoYW5nZXMp
IHsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7
CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVl
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQpAQCAtMTI0OCw4ICsxMjAxLDE3IEBA
IFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmcKIAogdm9pZCBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7IAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKICAg
ICBlYyA9IDA7Ci0gICAgbV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFs
dWUsIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgaWYgKGNoYW5n
ZWQpIHsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KCk7CisjZW5kaWYKKyAgICB9CiB9CiAKIENTU1N0eWxlU2hlZXQqIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CkBAIC0xMjcyLDYgKzEyMzQs
MjQgQEAgYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzcwogICAgIHJldHVy
biBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eU1hdGNoZXMocHJvcGVydHkpOwogfQogCit2b2lkIFJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3sKKyAgICBpZiAo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IG1fcHJvcGVydHlTZXQtPmNvbnRleHRTdHlsZVNo
ZWV0KCkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZp
bmREb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3JDaGFuZ2Vk
KERlZmVyUmVjYWxjU3R5bGUpOworICAgIH0KK30KKwordm9pZCBJbmxpbmVDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3sKKyAgICBpZiAoIW1fcGFyZW50RWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGFyZW50RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgbV9wYXJlbnRFbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGUoKTsKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUodGhpcyku
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOworICAgIHJldHVybjsKK30KKwogY2xhc3MgU2FtZVNp
emVBc1N0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzU3R5bGVQ
cm9wZXJ0eVNldD4gewogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4gcHJvcGVydGllczsKICAg
ICB1bnNpZ25lZCBiaXRmaWVsZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlT
ZXQuaAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjUgKzQyLDE3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldCk7CiAgICAgfQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShDU1NSdWxlKiBw
YXJlbnRSdWxlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0
ZShDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxlKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChjb250ZXh0U3R5bGVTaGVldCkpOwog
ICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoQ1NT
UnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBp
bnQgbnVtUHJvcGVydGllcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBjcmVhdGUoQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQsIGNvbnN0IENTU1Byb3Bl
cnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQocGFyZW50UnVsZSwgcHJvcGVy
dGllcywgbnVtUHJvcGVydGllcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxl
UHJvcGVydHlTZXQoY29udGV4dFN0eWxlU2hlZXQsIHByb3BlcnRpZXMsIG51bVByb3BlcnRpZXMp
KTsKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRl
KGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mIHByb3BlcnRpZXMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgcHJvcGVydGllcykpOwotICAg
IH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGVJbmxpbmUo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3R5bGVQcm9wZXJ0eVNldChlbGVtZW50LCAvKmlzSW5saW5lU3R5bGUqLyB0cnVlKSk7Ci0g
ICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZUF0dHJp
YnV0ZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoZWxlbWVudCwgLyppc0lubGluZVN0eWxlKi8g
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBy
b3BlcnRpZXMpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsgfQpAQCAtNzMsMTMgKzY1LDEyIEBAIHB1Ymxp
YzoKICAgICBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owog
ICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKIAotICAg
IGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgdHJ1ZSk7IH0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBkb3Vi
bGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIHVuaXQs
IGltcG9ydGFudCwgdHJ1ZSk7IH0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBz
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQorICAgIGJv
b2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQg
PSBmYWxzZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91YmxlIHZh
bHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50ID0g
ZmFsc2UpOworICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwogICAgIHZvaWQgc2V0UHJvcGVydHko
Y29uc3QgQ1NTUHJvcGVydHkmLCBDU1NQcm9wZXJ0eSogc2xvdCA9IDApOwogICAgIAotICAgIHZv
aWQgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQpIHsgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJRCwgdHJ1ZSwgZmFsc2UpOyB9Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIGJvb2wgcmV0dXJuVGV4dCk7CisgICAgYm9vbCBy
ZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7CiAK
ICAgICAvLyBUaGUgZm9sbG93aW5nIHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xhcmF0
aW9uLgogICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFy
YXRpb24pOwpAQCAtOTIsMTMgKzgzLDEyIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gY29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwogICAgIHZvaWQgcmVt
b3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29u
c3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoc2V0
LCBsZW5ndGgsIHRydWUpOyB9CisgICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKIAogICAg
IHZvaWQgc2V0U3RyaWN0UGFyc2luZyhib29sIGIpIHsgbV9zdHJpY3RQYXJzaW5nID0gYjsgfQog
ICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2lu
ZzsgfQotICAgIGJvb2wgaXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb247IH0KIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKIApAQCAtMTExLDI0ICsxMDEsMjIgQEAgcHVi
bGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5UHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCi0gICAgQ1NTUnVs
ZSogcGFyZW50UnVsZUludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRJc0VsZW1lbnQg
PyAwIDogbV9wYXJlbnQucnVsZTsgfQotICAgIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NF
UlQoIW1fcGFyZW50SXNFbGVtZW50KTsgbV9wYXJlbnQucnVsZSA9IDA7IH0KLQotICAgIFN0eWxl
ZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IEFTU0VSVChtX3BhcmVudElzRWxlbWVu
dCk7IHJldHVybiBtX3BhcmVudC5lbGVtZW50OyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudEVsZW1l
bnQoKSB7IEFTU0VSVChtX3BhcmVudElzRWxlbWVudCk7IG1fcGFyZW50LmVsZW1lbnQgPSAwOyB9
Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OworICAgIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
U3R5bGVTaGVldDsgfQorICAgIHZvaWQgc2V0Q29udGV4dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCkgeyBtX2NvbnRleHRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsgfQogICAg
IAogICAgIFN0cmluZyBhc1RleHQoKSBjb25zdDsKICAgICAKLSAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhclBh
cmVudFJ1bGUoQ1NTUnVsZSogcnVsZSk7CisgICAgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCk7CisKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVD
U1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKSBjb25zdDsK
KyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
KGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIFN0eWxlUHJvcGVydHlTZXQoKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBh
cmVudFJ1bGUpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29u
c3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSog
cGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVz
KTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqLCBib29sIGlzSW5saW5lU3R5
bGUpOworICAgIFN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwor
ICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCk7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0LCBjb25z
dCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwogCiAgICAgdm9pZCBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKQEAgLTE0NCwxMSArMTMyLDcgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gU3RyaW5nIGdldENvbW1vblZhbHVlKGNvbnN0IGludCAo
JnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJldHVybiBnZXRDb21tb25WYWx1ZShwcm9wZXJ0
aWVzLCBzaXplKTsgfQogICAgIHRlbXBsYXRlPHNpemVfdCBzaXplPiBTdHJpbmcgZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCAoJnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJl
dHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgc2l6ZSk7IH0KIAotICAg
IGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBib29sIGlt
cG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3Rp
ZnlDaGFuZ2VkKTsKLSAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0
eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydGllc0luU2V0
KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Cisg
ICAgYm9vbCByZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCk7CiAgICAgYm9v
bCBwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKIAogICAgIGNvbnN0
IENTU1Byb3BlcnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OwpA
QCAtMTU3LDE2ICsxNDEsOSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4g
bV9wcm9wZXJ0aWVzOwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmcgOiAxOwotICAgIGJvb2wg
bV9wYXJlbnRJc0VsZW1lbnQgOiAxOwotICAgIGJvb2wgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRp
b24gOiAxOwogICAgIG11dGFibGUgYm9vbCBtX2hhc0NTU09NV3JhcHBlciA6IDE7CiAKLSAgICB1
bmlvbiBQYXJlbnQgewotICAgICAgICBQYXJlbnQoQ1NTUnVsZSogcnVsZSkgOiBydWxlKHJ1bGUp
IHsgfQotICAgICAgICBQYXJlbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVs
ZW1lbnQpIHsgfQotICAgICAgICBDU1NSdWxlKiBydWxlOwotICAgICAgICBTdHlsZWRFbGVtZW50
KiBlbGVtZW50OwotICAgIH0gbV9wYXJlbnQ7CisgICAgQ1NTU3R5bGVTaGVldCogbV9jb250ZXh0
U3R5bGVTaGVldDsKICAgICAKICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OldlYktpdENTU0tleWZyYW1lCiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU6On5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKQogewogICAgIGlmIChtX3N0eWxlKQotICAg
ICAgICBtX3N0eWxlLT5jbGVhclBhcmVudFJ1bGUoKTsKKyAgICAgICAgbV9zdHlsZS0+Y2xlYXJQ
YXJlbnRSdWxlKHRoaXMpOwogfQogCiBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NU
ZXh0KCkgY29uc3QKQEAgLTU0LDcgKzU0LDYgQEAgU3RyaW5nIFdlYktpdENTU0tleWZyYW1lUnVs
ZTo6Y3NzVGV4dCgpIAogCiB2b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6c2V0RGVjbGFyYXRp
b24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkKIHsKLSAgICBBU1NFUlQoc3R5
bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOwogICAgIG1fc3R5bGUgPSBzdHlsZTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAko
cmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2V0S2V5cyhWZWN0b3I8ZmxvYXQ+JiBrZXlzKSBjb25zdCAgIHsgcGFyc2VLZXlTdHJpbmco
bV9rZXksIGtleXMpOyB9CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUgPyBtX3N0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkg
OiAwOyB9CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlID8gbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKSA6IDA7IH0K
IAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMTcgKzQ1LDE3IEBAIFN0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjoK
IHsKICAgICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSk7Ci0gICAgICAgIG1faW5saW5lU3R5bGVEZWNsID0gU3R5bGVQ
cm9wZXJ0eVNldDo6Y3JlYXRlSW5saW5lKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KSk7CisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICAgICAgbV9pbmxp
bmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNpbmcoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYm
ICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgfQogICAgIHJldHVy
biBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpk
ZXN0cm95SW5saW5lU3R5bGVEZWNsKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYg
KCFtX2lubGluZVN0eWxlRGVjbCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faW5saW5lU3R5bGVE
ZWNsLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKKyAgICBtX2lubGluZVN0eWxlRGVjbC0+Y2xlYXJQ
YXJlbnRFbGVtZW50KGVsZW1lbnQpOwogICAgIG1faW5saW5lU3R5bGVEZWNsID0gMDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHJldmlzaW9u
IDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZVN0eWxlRGVjbCgpIHsgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgp
OyB9CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlSW5saW5lU3R5bGVEZWNsKFN0eWxlZEVs
ZW1lbnQqKTsKLSAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKyAgICB2b2lkIGRl
c3Ryb3lJbmxpbmVTdHlsZURlY2woU3R5bGVkRWxlbWVudCogZWxlbWVudCk7CiAKICAgICBTdHls
ZVByb3BlcnR5U2V0KiBhdHRyaWJ1dGVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
U3R5bGUuZ2V0KCk7IH0KICAgICB2b2lkIHNldEF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gc3R5bGUpIHsgbV9hdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDI2IEBAIFN0eWxlZEVsZW1lbnQ6On5TdHlsZWRFbGVtZW50KCkKICAgICBkZXN0cm95
SW5saW5lU3R5bGVEZWNsKCk7CiB9CiAKK3ZvaWQgU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKQoreworICAgIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CisKKyAg
ICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkK
KyAgICAgICAgaW5saW5lU3R5bGUtPnNldENvbnRleHRTdHlsZVNoZWV0KGRvY3VtZW50KCktPmVs
ZW1lbnRTaGVldCgpKTsKKyAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUg
PSBhdHRyaWJ1dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZVN0eWxlKCkgOiAw
KQorICAgICAgICBhdHRyaWJ1dGVTdHlsZS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoZG9jdW1lbnQo
KS0+ZWxlbWVudFNoZWV0KCkpOworfQorCit2b2lkIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoKQoreworICAgIEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKworICAg
IGlmIChTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVjbCgpKQor
ICAgICAgICBpbmxpbmVTdHlsZS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoMCk7CisgICAgaWYgKFN0
eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmli
dXRlRGF0YSgpLT5hdHRyaWJ1dGVTdHlsZSgpIDogMCkKKyAgICAgICAgYXR0cmlidXRlU3R5bGUt
PnNldENvbnRleHRTdHlsZVNoZWV0KDApOworfQorCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmICghKGF0dHItPm5hbWUoKSA9
PSBzdHlsZUF0dHIgJiYgaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkpCkBAIC0xMDgs
NiArMTI4LDQ2IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmkKICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KKyAgICAKK2Jvb2wgU3R5bGVk
RWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVl
LCBib29sIGltcG9ydGFudCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAg
aWYgKCFjaGFuZ2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgc2V0SXNTdHlsZUF0dHJpYnV0ZVZhbGlkKGZh
bHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgYm9vbCBjaGFu
Z2VzID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCB1bml0LCBpbXBvcnRhbnQpOworICAgIGlmICghY2hhbmdlcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAg
IHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgYm9vbCBjaGFu
Z2VzID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQpOworICAgIGlmICghY2hhbmdlcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIHNldElz
U3R5bGVBdHRyaWJ1dGVWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkK
K3sKKyAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJv
cGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKCFjaGFuZ2VzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgc2V0
SXNTdHlsZUF0dHJpYnV0ZVZhbGlkKGZhbHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAogdm9p
ZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8
S1VSTD4mIHVybHMpIGNvbnN0CiB7CkBAIC0xMTcsNyArMTc3LDcgQEAgdm9pZCBTdHlsZWRFbGVt
ZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYgogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0
dHJpYnV0ZVN0eWxlKCkKIHsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGVBdHRyaWJ1dGVTdHlsZSh0aGlzKTsKKyAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoZG9jdW1l
bnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRy
aWJ1dGVDb3VudCgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRy
aWJ1dGVJdGVtKGkpOwogICAgICAgICBjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUoYXR0cmlidXRl
LCBzdHlsZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlz
aW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDE0IEBAIHB1YmxpYzoKIAogICAgIFN0eWxlUHJvcGVydHlT
ZXQqIGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0
dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5bGVEZWNsKCkgOiAwOyB9CiAgICAgU3R5bGVQcm9wZXJ0
eVNldCogZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gZW5zdXJlQXR0cmlidXRlRGF0
YSgpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2wodGhpcyk7IH0KLSAgICB2aXJ0dWFsIENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZFUlJJREUgeyByZXR1cm4gZW5zdXJlSW5saW5lU3R5bGVE
ZWNsKCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIAorICAgIC8vIFVubGlr
ZSBTdHlsZVByb3BlcnR5U2V0IHNldHRlcnMsIHRoZXNlIGltcGxlbWVudCBpbnZhbGlkYXRpb24u
CisgICAgYm9vbCBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFs
dWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOworICAgIGJvb2wgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOworICAgIGJvb2wgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQgPSBmYWxzZSk7CisgICAgYm9vbCByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlEKTsKKyAgICAKKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgT1ZFUlJJREUgeyByZXR1cm4gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmVuc3VyZUlu
bGluZUNTU1N0eWxlRGVjbGFyYXRpb24odGhpcyk7IH0KIAogICAgIFN0eWxlUHJvcGVydHlTZXQq
IGF0dHJpYnV0ZVN0eWxlKCk7CiAKQEAgLTY2LDYgKzczLDkgQEAgcHJvdGVjdGVkOgogICAgIC8v
IHBhcnNlQXR0cmlidXRlIChjYWxsZWQgdmlhIHNldEF0dHJpYnV0ZSgpKSBhbmQKICAgICAvLyBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIChjYWxsZWQgd2hlbiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFs
dWUgaXMgc2V0KQogICAgIHZvaWQgY2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3Q2xhc3NTdHJpbmcpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCkgY29uc3Q7
CkBAIC03NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVE
ZWNsKCkKICAgICB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpCi0gICAgICAgICAgICBh
dHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZURhdGEoKS0+ZGVzdHJveUlubGluZVN0eWxlRGVjbCh0aGlzKTsKICAgICB9CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAko
cmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIGZsb2F0IGRlc2lyZWRGb250U2l6
ZSA9IG1heChNaW5pbXVtRm9udFNpemUsIHN0YXJ0aW5nRm9udFNpemVzLmdldChub2RlKSArIHN0
eWxlLT5mb250U2l6ZURlbHRhKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
aW5saW5lU3R5bGVEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUp
OwogICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlubGluZVN0eWxlRGVjbC0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgICAgICAgICBlbGVtZW50LT5y
ZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOwogICAgICAgICAg
ICAgY3VycmVudEZvbnRTaXplID0gY29tcHV0ZWRGb250U2l6ZShub2RlKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9IGRlc2lyZWRGb250U2l6ZSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTcgKzIwNSwxNiBAQCB2b2lk
IERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0CiAgICAgUmVmUHRyPEhUTUxEaXZF
bGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKG1fdGFyZ2V0LT5kb2N1
bWVudCgpKTsKICAgICBjb250YWluZXItPnNldElkQXR0cmlidXRlKGNvbnRhaW5lckVsZW1lbnRJ
ZGVudGlmaWVyKTsKIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gY29udGFpbmVyLT5l
bnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRVc2VyRHJhZywgQ1NTVmFsdWVOb25lKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LCBDU1NWYWx1ZU5vbmUpOwotICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnksIENTU1ZhbHVlUmVhZE9ubHkp
OwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVl
SGlkZGVuKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NT
VmFsdWVBYnNvbHV0ZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29y
LCBDU1NWYWx1ZURlZmF1bHQpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCwgIjAiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlSaWdodCwgIjAiKTsK
LSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3R0b20sICIwIik7Ci0gICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgIjAiKTsKKyAgICBjb250YWluZXItPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZywgQ1NTVmFsdWVO
b25lKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRVc2VyU2VsZWN0LCBDU1NWYWx1ZU5vbmUpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnksIENTU1ZhbHVlUmVhZE9u
bHkpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZp
c2liaWxpdHksIENTU1ZhbHVlSGlkZGVuKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgY29u
dGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBDU1NWYWx1
ZURlZmF1bHQpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgIjAiKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlSaWdodCwgIjAiKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3R0b20sICIwIik7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgIjAiKTsKIAogICAgIFJlZlB0cjxIVE1MRGl2RWxl
bWVudD4gb3V0bGluZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV90YXJnZXQtPmRvY3VtZW50
KCkpOwogICAgIG91dGxpbmUtPnNldElkQXR0cmlidXRlKG91dGxpbmVFbGVtZW50SWRlbnRpZmll
cik7CkBAIC0yMjMsMTYgKzIyMiwxNSBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNy
ZWF0ZURlbGV0CiAgICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0gNDsKICAgICBjb25zdCBpbnQg
Ym9yZGVyUmFkaXVzID0gNjsKIAotICAgIHN0eWxlID0gb3V0bGluZS0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENT
U1ZhbHVlQWJzb2x1dGUpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRl
eCwgU3RyaW5nOjpudW1iZXIoLTEwMDAwMDApKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlUb3AsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5k
ZXJCb3goKS0+Ym9yZGVyVG9wKCkpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5UmlnaHQsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5y
ZW5kZXJCb3goKS0+Ym9yZGVyUmlnaHQoKSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3R0b20sIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFy
Z2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm90dG9tKCkpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0g
bV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJMZWZ0KCkpICsgInB4Iik7Ci0gICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyLCBTdHJpbmc6Om51bWJlcihib3JkZXJXaWR0
aCkgKyAicHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjYpIik7Ci0gICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLCBTdHJpbmc6Om51bWJlcihib3JkZXJS
YWRpdXMpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJp
bGl0eSwgQ1NTVmFsdWVWaXNpYmxlKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOworICAgIG91dGxpbmUt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlaSW5kZXgsIFN0cmluZzo6bnVtYmVy
KC0xMDAwMDAwKSk7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJlbmRlckJv
eCgpLT5ib3JkZXJUb3AoKSkgKyAicHgiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5UmlnaHQsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1f
dGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyUmlnaHQoKSkgKyAicHgiKTsKKyAgICBvdXRsaW5l
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJl
cigtYm9yZGVyV2lkdGggLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlckJvdHRvbSgpKSAr
ICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlM
ZWZ0LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3RhcmdldC0+cmVuZGVyQm94KCkt
PmJvcmRlckxlZnQoKSkgKyAicHgiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5Qm9yZGVyLCBTdHJpbmc6Om51bWJlcihib3JkZXJXaWR0aCkgKyAicHgg
c29saWQgcmdiYSgwLCAwLCAwLCAwLjYpIik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywgU3RyaW5nOjpudW1iZXIoYm9y
ZGVyUmFkaXVzKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlWaXNpYmlsaXR5LCBDU1NWYWx1ZVZpc2libGUpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChvdXRsaW5lLmdldCgpLCBl
Yyk7CkBAIC0yNDcsMTQgKzI0NSwxMyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNy
ZWF0ZURlbGV0CiAgICAgY29uc3QgaW50IGJ1dHRvbkhlaWdodCA9IDMwOwogICAgIGNvbnN0IGlu
dCBidXR0b25Cb3R0b21TaGFkb3dPZmZzZXQgPSAyOwogCi0gICAgc3R5bGUgPSBidXR0b24tPmVu
c3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlaSW5kZXgsIFN0cmluZzo6bnVtYmVyKDEwMDAwMDApKTsKLSAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIFN0cmluZzo6bnVtYmVyKCgtYnV0dG9uSGVpZ2h0IC8g
MikgLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlclRvcCgpIC0gKGJvcmRlcldpZHRoIC8g
MikgKyBidXR0b25Cb3R0b21TaGFkb3dPZmZzZXQpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgU3RyaW5nOjpudW1iZXIoKC1idXR0b25XaWR0aCAvIDIp
IC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJMZWZ0KCkgLSAoYm9yZGVyV2lkdGggLyAy
KSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3Ry
aW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25IZWlnaHQpICsgInB4Iik7
Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVW
aXNpYmxlKTsKKyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQ
b3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5WkluZGV4LCBTdHJpbmc6Om51bWJlcigxMDAwMDAwKSk7CisgICAg
YnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBTdHJpbmc6Om51
bWJlcigoLWJ1dHRvbkhlaWdodCAvIDIpIC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJU
b3AoKSAtIChib3JkZXJXaWR0aCAvIDIpICsgYnV0dG9uQm90dG9tU2hhZG93T2Zmc2V0KSArICJw
eCIpOworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQs
IFN0cmluZzo6bnVtYmVyKCgtYnV0dG9uV2lkdGggLyAyKSAtIG1fdGFyZ2V0LT5yZW5kZXJCb3go
KS0+Ym9yZGVyTGVmdCgpIC0gKGJvcmRlcldpZHRoIC8gMikpICsgInB4Iik7CisgICAgYnV0dG9u
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVy
KGJ1dHRvbldpZHRoKSArICJweCIpOworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uSGVpZ2h0KSArICJweCIp
OworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxp
dHksIENTU1ZhbHVlVmlzaWJsZSk7CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IFdl
YkNvcmU6OmRldmljZVNjYWxlRmFjdG9yKG1fZnJhbWUpOwogICAgIFJlZlB0cjxJbWFnZT4gYnV0
dG9uSW1hZ2U7CkBAIC0zMTAsMTIgKzMwNywxMiBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXI6OnNob3coSFRNTEVsCiAgICAgfQogCiAgICAgaWYgKG1fdGFyZ2V0LT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uKSB7Ci0gICAgICAgIG1fdGFyZ2V0
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlv
biwgQ1NTVmFsdWVSZWxhdGl2ZSk7CisgICAgICAgIG1fdGFyZ2V0LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOwogICAgICAgICBt
X3dhc1N0YXRpY1Bvc2l0aW9uZWQgPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChtX3RhcmdldC0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXV0b1pJbmRleCgpKSB7Ci0gICAgICAgIG1fdGFyZ2V0
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlaSW5kZXgs
ICIwIik7CisgICAgICAgIG1fdGFyZ2V0LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5WkluZGV4LCAiMCIpOwogICAgICAgICBtX3dhc0F1dG9aSW5kZXggPSB0cnVlOwogICAgIH0K
IH0KQEAgLTMzMSw5ICszMjgsOSBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmhpZGUo
KQogCiAgICAgaWYgKG1fdGFyZ2V0KSB7CiAgICAgICAgIGlmIChtX3dhc1N0YXRpY1Bvc2l0aW9u
ZWQpCi0gICAgICAgICAgICBtX3RhcmdldC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlU3RhdGljKTsKKyAgICAgICAgICAg
IG1fdGFyZ2V0LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENT
U1ZhbHVlU3RhdGljKTsKICAgICAgICAgaWYgKG1fd2FzQXV0b1pJbmRleCkKLSAgICAgICAgICAg
IG1fdGFyZ2V0LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlaSW5kZXgsIENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICBtX3RhcmdldC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRleCwgQ1NTVmFsdWVBdXRvKTsKICAgICB9CiAK
ICAgICBtX3dhc1N0YXRpY1Bvc2l0aW9uZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0NSwxMCArMjc0NSwxMCBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoCiAgICAgQVNTRVJUKGVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKTsKICAgICBpZiAoIWVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdvcmRXcmFwLCAiYnJlYWstd29yZCIsIGZh
bHNlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwg
InNwYWNlIiwgZmFsc2UpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UpOworICAgIFN0eWxlZEVsZW1l
bnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCk7
CisgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdv
cmRXcmFwLCAiYnJlYWstd29yZCIsIGZhbHNlKTsKKyAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNl
KTsKKyAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0TGluZUJyZWFrLCAiYWZ0ZXItd2hpdGUtc3BhY2UiLCBmYWxzZSk7CiB9CiAKIC8vIFNl
YXJjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQgaWYgbm90aGluZyBpcyBz
ZWxlY3RlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMy
LDkgKzUzMiw5IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAg
ICAgICAgICAgIC8vIHJlc3VsdHMuIFdlIGFscmVhZHkga25vdyBvbmUgaXNzdWUgYmVjYXVzZSB0
ZCBlbGVtZW50cyBpZ25vcmUgdGhlaXIgZGlzcGxheSBwcm9wZXJ0eQogICAgICAgICAgICAgLy8g
aW4gcXVpcmtzIG1vZGUgKHdoaWNoIE1haWwuYXBwIGlzIGFsd2F5cyBpbikuIFdlIHNob3VsZCBs
b29rIGZvciBhbiBhbHRlcm5hdGl2ZS4KICAgICAgICAgICAgIGlmIChpc0Jsb2NrKGVsZW1lbnQp
KQotICAgICAgICAgICAgICAgIGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlSW5saW5lKTsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwg
Q1NTVmFsdWVJbmxpbmUpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYg
ZWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZsb2F0LCBDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKICAgICAg
ICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgQ29sb3JJbnB1dFR5
cGU6OnVwZGF0ZUNvbG9yU3dhdGNoKCkKICAgICBpZiAoIWNvbG9yU3dhdGNoKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjb2xvclN3YXRjaC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlbGVtZW50KCktPnZhbHVlKCksIGZh
bHNlKTsKKyAgICBjb2xvclN3YXRjaC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvciwgZWxlbWVudCgpLT52YWx1ZSgpLCBmYWxzZSk7CiB9CiAKIEhUTUxF
bGVtZW50KiBDb2xvcklucHV0VHlwZTo6c2hhZG93Q29sb3JTd2F0Y2goKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9p
ZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlUAogICAgIGlmICghcGxhY2Vob2xk
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwbGFj
ZWhvbGRlci0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
VmlzaWJpbGl0eSwgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSA/ICJ2aXNpYmxlIiA6ICJo
aWRkZW4iLCBlYyk7CisgICAgcGxhY2Vob2xkZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlWaXNpYmlsaXR5LCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpID8gInZpc2li
bGUiIDogImhpZGRlbiIsIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KCkKICAgICBtX2lt
YWdlRWxlbWVudC0+c2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihpbWFnZVNpemUud2lkdGgoKSAq
IHNjYWxlKSk7CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+
KGltYWdlU2l6ZS5oZWlnaHQoKSAqIHNjYWxlKSk7CiAgICAgCi0gICAgbV9pbWFnZUVsZW1lbnQt
PmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwg
Ii13ZWJraXQtem9vbS1pbiIsIGZhbHNlKTsKKyAgICBtX2ltYWdlRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1pbiIsIGZhbHNl
KTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50OjppbWFnZUNsaWNrZWQoaW50IHgsIGludCB5KQpA
QCAtMzA3LDkgKzMwNyw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSgp
CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChpbWFnZVNpemUuaGVpZ2h0KCkpOwogICAg
IAogICAgIGlmIChpbWFnZUZpdHNJbldpbmRvdygpKQotICAgICAgICBtX2ltYWdlRWxlbWVudC0+
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29y
KTsKKyAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlDdXJzb3IpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJr
aXQtem9vbS1vdXQiLCBmYWxzZSk7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNl
KTsKICAgICAgICAgCiAgICAgbV9kaWRTaHJpbmtJbWFnZSA9IGZhbHNlOwogfQpAQCAtMzQwLDkg
KzM0MCw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6d2luZG93U2l6ZUNoYW5nZWQoKQogICAgIC8v
IGFuZCBzZXQgaXQgdG8gYSB6b29tIG91dCBjdXJzb3IgaWYgdGhlIGltYWdlIGRvZXNuJ3QgZml0
CiAgICAgaWYgKCFtX3Nob3VsZFNocmlua0ltYWdlKSB7CiAgICAgICAgIGlmIChmaXRzSW5XaW5k
b3cpCi0gICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yKTsKKyAgICAgICAgICAgIG1faW1hZ2VF
bGVtZW50LT5yZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxl
RGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQi
LCBmYWxzZSk7CisgICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlk
YXRpb25NZXNzYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlk
YXRpb25NZXNzYWdlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCArMTIwLDEz
IEBAIHN0YXRpYyB2b2lkIGFkanVzdEJ1YmJsZVBvc2l0aW9uKGNvbnN0IEwKICAgICAgICAgaG9z
dFkgLT0gY29udGFpbmVyTG9jYXRpb24ueSgpICsgY29udGFpbmVyLT5ib3JkZXJUb3AoKTsKICAg
ICB9CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGJ1YmJsZS0+ZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBob3N0
WSArIGhvc3RSZWN0LmhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBi
dWJibGUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIGhvc3RZICsgaG9z
dFJlY3QuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgIC8vIFRoZSAn
bGVmdCcgdmFsdWUgb2YgOjotd2Via2l0LXZhbGlkYXRpb24tYnViYmxlLWFycm93LgogICAgIGNv
bnN0IGludCBidWJibGVBcnJvd1RvcE9mZnNldCA9IDMyOwogICAgIGRvdWJsZSBidWJibGVYID0g
aG9zdFg7CiAgICAgaWYgKGhvc3RSZWN0LndpZHRoKCkgLyAyIDwgYnViYmxlQXJyb3dUb3BPZmZz
ZXQpCiAgICAgICAgIGJ1YmJsZVggPSBtYXgoaG9zdFggKyBob3N0UmVjdC53aWR0aCgpIC8gMiAt
IGJ1YmJsZUFycm93VG9wT2Zmc2V0LCAwLjApOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUxlZnQsIGJ1YmJsZVgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIGJ1
YmJsZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGJ1YmJsZVgsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogfQogCiB2b2lkIFZhbGlkYXRpb25NZXNzYWdlOjpi
dWlsZEJ1YmJsZVRyZWUoVGltZXI8VmFsaWRhdGlvbk1lc3NhZ2U+KikKQEAgLTEzOCw3ICsxMzcs
NyBAQCB2b2lkIFZhbGlkYXRpb25NZXNzYWdlOjpidWlsZEJ1YmJsZVRyZWUoCiAgICAgbV9idWJi
bGUtPnNldFNoYWRvd1BzZXVkb0lkKCItd2Via2l0LXZhbGlkYXRpb24tYnViYmxlIik7CiAgICAg
Ly8gTmVlZCB0byBmb3JjZSBwb3NpdGlvbjphYnNvbHV0ZSBiZWNhdXNlIFJlbmRlck1lbnVMaXN0
IGRvZXNuJ3QgYXNzdW1lIGl0CiAgICAgLy8gY29udGFpbnMgbm9uLWFic29sdXRlIG9yIG5vbi1m
aXhlZCByZW5kZXJlcnMgYXMgY2hpbGRyZW4uCi0gICAgbV9idWJibGUtPmVuc3VyZUlubGluZVN0
eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29s
dXRlKTsKKyAgICBtX2J1YmJsZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBv
c2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBob3N0LT5lbnN1cmVTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG1fYnViYmxlLmdldCgpLCBl
Yyk7CiAgICAgQVNTRVJUKCFlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDEyICs5MiwxMiBAQCBNZWRpYUNvbnRyb2xFbGVtZW50OjpNZWRpYUNv
bnRyb2xFbGVtZW50CiAKIHZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6c2hvdygpCiB7Ci0gICAg
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxh
eSk7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOwog
fQogCiB2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmhpZGUoKQogewotICAgIGVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlTm9u
ZSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1Zh
bHVlTm9uZSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3NSwx
NyArMTc1LDE1IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjplbmREcmFnKCkKIAog
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aW9uKGNvbnN0IExheW91dFBv
aW50JiBwb3NpdGlvbikKIHsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpOwotCiAgICAgZG91YmxlIGxlZnQgPSBwb3NpdGlvbi54KCk7CiAgICAg
ZG91YmxlIHRvcCA9IHBvc2l0aW9uLnkoKTsKIAogICAgIC8vIFNldCB0aGUgbGVmdCBhbmQgdG9w
IHRvIGNvbnRyb2wgdGhlIHBhbmVsJ3MgcG9zaXRpb247IHRoaXMgZGVwZW5kcyBvbiBpdCBiZWlu
ZyBhYnNvbHV0ZSBwb3NpdGlvbmVkLgogICAgIC8vIFNldCB0aGUgbWFyZ2luIHRvIHplcm8gc2lu
Y2UgdGhlIHBvc2l0aW9uIHBhc3NlZCBpbiB3aWxsIGFscmVhZHkgaW5jbHVkZSB0aGUgZWZmZWN0
IG9mIHRoZSBtYXJnaW4uCi0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwg
bGVmdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5VG9wLCB0b3AsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIDAuMCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCB0b3AsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5MZWZ0LCAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIDAuMCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWQ7CiAgICAgY2xh
c3NMaXN0KCktPmFkZCgiZHJhZ2dlZCIsIGlnbm9yZWQpOwpAQCAtMTkzLDEyICsxOTEsMTAgQEAg
dm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNldFBvc2l0aQogCiB2b2lkIE1lZGlhQ29u
dHJvbFBhbmVsRWxlbWVudDo6cmVzZXRQb3NpdGlvbigpCiB7Ci0gICAgU3R5bGVQcm9wZXJ0eVNl
dCogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLQotICAgIHN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOwotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRvcCk7Ci0gICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
TGVmdCk7Ci0gICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wKTsK
KyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7CisgICAgcmVt
b3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCk7CisgICAgcmVtb3ZlSW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQpOworICAgIHJlbW92ZUlubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3ApOwogCiAgICAgRXhjZXB0aW9uQ29kZSBp
Z25vcmVkOwogICAgIGNsYXNzTGlzdCgpLT5yZW1vdmUoImRyYWdnZWQiLCBpZ25vcmVkKTsKQEAg
LTIxMSwxMCArMjA3LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFx
dQogCiAgICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQoKS0+cGFnZSgpID8gZG9jdW1lbnQo
KS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24oKSA6IDA7CiAK
LSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwot
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0
eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1MpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDEuMCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3BhY2l0
eSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EdXJhdGlvbiwgZHVyYXRpb24sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUyk7CisgICAgc2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDEuMCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogCiAgICAgbV9vcGFxdWUgPSB0cnVlOwogfQpAQCAtMjI0LDEw
ICsyMTksOSBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZVRyYW5zCiAgICAg
aWYgKCFtX29wYXF1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCog
c3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3BhY2l0eSk7
Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0
aW9uLCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVy
YXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOworICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sIGRvY3VtZW50KCktPnBhZ2Uo
KS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1MpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFj
aXR5LCAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIAogICAgIG1fb3BhcXVl
ID0gZmFsc2U7CiB9CkBAIC00MzQsMTIgKzQyOCwxMiBAQCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQ6Ok1lZGlhQ29udHJvbEluCiAKIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzaG93
KCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXNwbGF5KTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
RGlzcGxheSk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpoaWRlKCkKIHsK
LSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNw
bGF5LCBDU1NWYWx1ZU5vbmUpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlEaXNwbGF5LCBDU1NWYWx1ZU5vbmUpOwogfQogCiAKQEAgLTEyMTEsMTMgKzEyMDUsMTMgQEAg
dm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZQogICAgIGZsb2F0IGZvbnRT
aXplID0gbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWlnaHQoKSAqIHZpZGVvSGVpZ2h0Rm9u
dFNpemVQZXJjZW50YWdlOwogICAgIGlmIChmb250U2l6ZSAhPSBtX2ZvbnRTaXplKSB7CiAgICAg
ICAgIG1fZm9udFNpemUgPSBmb250U2l6ZTsKLSAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNs
KCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVyKGZvbnRT
aXplKSArICJweCIpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFNpemUsIFN0cmluZzo6bnVtYmVyKGZvbnRTaXplKSArICJweCIpOwogICAgIH0KIAogICAg
IExheW91dFVuaXQgYm90dG9tID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4obV92aWRlb0Rpc3Bs
YXlTaXplLnkoKSArIG1fdmlkZW9EaXNwbGF5U2l6ZS5oZWlnaHQoKSAtIChtX3ZpZGVvRGlzcGxh
eVNpemUuaGVpZ2h0KCkgKiB0cmFja0JvdHRvbU11bHRpcGxpZXIpKTsKICAgICBpZiAoYm90dG9t
ICE9IG1fYm90dG9tKSB7CiAgICAgICAgIG1fYm90dG9tID0gYm90dG9tOwotICAgICAgICBlbnN1
cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3R0b20sIFN0cmlu
Zzo6bnVtYmVyKGJvdHRvbSkgKyAicHgiKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJvdHRvbSwgU3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNo
YWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWV0ZXJWYWx1ZUVsZW1lbnQ6OnMKIAogdm9pZCBN
ZXRlclZhbHVlRWxlbWVudDo6c2V0V2lkdGhQZXJjZW50YWdlKGRvdWJsZSB3aWR0aCkKIHsKLSAg
ICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwg
d2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCB3aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBQcm9n
cmVzc1ZhbHVlRWxlbWVudAogCiB2b2lkIFByb2dyZXNzVmFsdWVFbGVtZW50OjpzZXRXaWR0aFBl
cmNlbnRhZ2UoZG91YmxlIHdpZHRoKQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCB3aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIHdpZHRoLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw5ICszMzUsOCBAQCBQ
YXNzUmVmUHRyPFRyYWNrTGltaXRlckVsZW1lbnQ+IFRyYWNrTGltCiB7CiAgICAgUmVmUHRyPFRy
YWNrTGltaXRlckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgVHJhY2tMaW1pdGVyRWxl
bWVudChkb2N1bWVudCkpOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBlbGVtZW50
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlWaXNpYmlsaXR5LCBDU1NWYWx1ZUhpZGRlbik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlU3RhdGljKTsKKyAgICBlbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVIaWRkZW4p
OworICAgIGVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlv
biwgQ1NTVmFsdWVTdGF0aWMpOwogCiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAx
MDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzM4LDI5ICsxNzM4LDI5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6
ZShjb25zdCBQbGF0Zm9ybU0KICAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNp
emUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6
ZSkgLSBjdXJyZW50U2l6ZTsKIAogICAgIEFTU0VSVChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQo
KSk7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CisgICAg
U3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlbGVtZW50KTsKICAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxl
KCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1g7CiAKICAgICBpZiAocmVzaXplICE9IFJFU0la
RV9WRVJUSUNBTCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQg
bWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9u
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIFN0cmluZzo6bnVtYmVyKHJlbmRl
cmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKLSAgICAgICAg
ICAgIHN0eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQs
IFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvcikgKyAi
cHgiLCBmYWxzZSk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1h
cmdpbkxlZnQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOworICAgICAgICAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0
LCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IpICsg
InB4IiwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0g
cmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwIDogcmVuZGVyZXItPmJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKICAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8g
em9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgp
KSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51bWJlcihiYXNlV2lkdGggKyBkaWZm
ZXJlbmNlLndpZHRoKCkpICsgInB4IiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChyZXNpemUg
IT0gUkVTSVpFX0hPUklaT05UQUwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgewogICAgICAgICBp
ZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gTWFr
ZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxl
RGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6Om51
bWJlcihyZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsK
LSAgICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luQm90dG9tLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29t
RmFjdG9yKSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIFN0cmluZzo6bnVtYmVyKHJl
bmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOworICAgICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkJvdHRvbSwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9v
bUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0VW5pdCBi
YXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMCA6
IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOwogICAgICAgICBiYXNlSGVpZ2h0
ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlRGVjbGFyYXRpb24tPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihiYXNlSGVpZ2h0ICsg
ZGlmZmVyZW5jZS5oZWlnaHQoKSkgKyAicHgiLCBmYWxzZSk7CisgICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVt
YmVyKGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSArICJweCIsIGZhbHNlKTsKICAg
ICB9CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw3ICszMzIsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlm
IChIVE1MRWxlbWVudCogcGxhY2Vob2xkZXIgPSBpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xkZXJF
bGVtZW50KCkpCi0gICAgICAgIHBsYWNlaG9sZGVyLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3csIHRleHRTaG91bGRCZVRydW5jYXRl
ZCgpID8gQ1NTVmFsdWVFbGxpcHNpcyA6IENTU1ZhbHVlQ2xpcCk7CisgICAgICAgIHBsYWNlaG9s
ZGVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dE92ZXJmbG93LCB0ZXh0
U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IENTU1ZhbHVlRWxsaXBzaXMgOiBDU1NWYWx1ZUNsaXApOwog
ICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBpbmxpbmUgU1ZHRm9udEZhY2VFbGVtZW50OjpTVkdGb250RmFjZUVsCiAgICAg
LCBtX2ZvbnRGYWNlUnVsZShDU1NGb250RmFjZVJ1bGU6OmNyZWF0ZSgpKQogewogICAgIEFTU0VS
VChoYXNUYWdOYW1lKGZvbnRfZmFjZVRhZykpOwotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBzdHlsZURlY2xhcmF0aW9uID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKG1fZm9udEZhY2VS
dWxlLmdldCgpKTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVEZWNsYXJhdGlv
biA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIHN0eWxlRGVjbGFyYXRpb24tPnNl
dFN0cmljdFBhcnNpbmcodHJ1ZSk7CiAgICAgbV9mb250RmFjZVJ1bGUtPnNldERlY2xhcmF0aW9u
KHN0eWxlRGVjbGFyYXRpb24ucmVsZWFzZSgpKTsKIH0KQEAgLTMyMSw2ICszMjEsNyBAQCB2b2lk
IFNWR0ZvbnRGYWNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jCiAgICAgU1ZHRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBkb2N1bWVudCgpLT5tYXBwZWRFbGVtZW50U2hlZXQo
KS0+YXBwZW5kKG1fZm9udEZhY2VSdWxlKTsKICAgICBtX2ZvbnRGYWNlUnVsZS0+c2V0UGFyZW50
U3R5bGVTaGVldChkb2N1bWVudCgpLT5tYXBwZWRFbGVtZW50U2hlZXQoKSk7CisgICAgbV9mb250
RmFjZVJ1bGUtPmRlY2xhcmF0aW9uKCktPnNldENvbnRleHRTdHlsZVNoZWV0KGRvY3VtZW50KCkt
Pm1hcHBlZEVsZW1lbnRTaGVldCgpKTsKICAgICByZWJ1aWxkRm9udEZhY2UoKTsKIH0KIApAQCAt
MzQ4LDYgKzM0OSw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVGcm9tTWFwcGUK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorICAgIG1fZm9udEZhY2VSdWxl
LT5kZWNsYXJhdGlvbigpLT5zZXRDb250ZXh0U3R5bGVTaGVldCgwKTsKICAgICBkb2N1bWVudCgp
LT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127045</attachid>
            <date>2012-02-14 14:26:23 -0800</date>
            <delta_ts>2012-02-14 15:25:40 -0800</delta_ts>
            <desc>another</desc>
            <filename>style-rule-9.patch</filename>
            <type>text/plain</type>
            <size>75349</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAg
X19aTks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDE1aXNQYXNzdwogX19aTks3V2ViQ29yZTE2
SFRNTElucHV0RWxlbWVudDE4c2hvdWxkQXV0b2NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUxNklj
b25EYXRhYmFzZUJhc2UxMmRhdGFiYXNlUGF0aEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNvdXJjZVJl
c3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKLV9fWk5LN1dlYkNvcmUxNlN0eWxlUHJvcGVydHlTZXQy
NWVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb25FdgorX19aTks3V2ViQ29yZTE2U3R5bGVQcm9wZXJ0
eVNldDI1ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbkVQS05TXzdDU1NSdWxlRQogX19aTks3V2Vi
Q29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgogX19aTks3V2ViQ29y
ZTE2VmlzaWJsZVNlbGVjdGlvbjE3dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbjE5cm9vdEVkaXRhYmxlRWxlbWVudEV2CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgQ1NTRm9udEZhY2VSdWxlOjpDU1NGb250RmFjZVJ1bGUoQ1NTU3R5bAogQ1NTRm9udEZh
Y2VSdWxlOjp+Q1NTRm9udEZhY2VSdWxlKCkKIHsKICAgICBpZiAobV9zdHlsZSkKLSAgICAgICAg
bV9zdHlsZS0+Y2xlYXJQYXJlbnRSdWxlKCk7CisgICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50
UnVsZSh0aGlzKTsKIH0KIAogU3RyaW5nIENTU0ZvbnRGYWNlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCShyZXZpc2lvbiAxMDc3MzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgfkNTU0ZvbnRGYWNlUnVsZSgpOwogCi0g
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLT5l
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7IH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
dGhpcyk7IH0KIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBDU1NQ
YWdlUnVsZTo6Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVTaGVldCogCiAKIENTU1BhZ2VSdWxlOjp+Q1NT
UGFnZVJ1bGUoKQogeworICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSh0aGlzKTsKIH0KIAog
U3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgfkNTU1BhZ2VSdWxlKCk7CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsg
fQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgfQogCiAgICAgU3RyaW5nIHNlbGVj
dG9yVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYp
OwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcygpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICAKICAgICB2b2lkIGFk
b3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2Vs
ZWN0b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JzKTsg
fQotICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZSkgeyBBU1NFUlQoc3R5bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOyBtX3N0
eWxlID0gc3R5bGU7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxlOyB9CiAKIHByaXZhdGU6CiAgICAg
Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBpbnQgc291cmNlTGluZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3NjAsNyArODc2MCw3
IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3QKICAgICAgICAgcnVs
ZS0+YWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9u
dEZhY2VPbmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7
Ci0gICAgICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShy
dWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwor
ICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobV9z
dHlsZVNoZWV0LCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwog
ICAgICAgICByZXN1bHQgPSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVu
ZChydWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewpAQCAtODc5
OSw3ICs4Nzk5LDcgQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQog
ICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGUgPSBDU1NG
b250RmFjZVJ1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOwotICAgIHJ1bGUtPnNldERlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShydWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRp
ZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKFN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1fcGFyc2VkUHJvcGVydGllcywg
bV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgQ1NT
Rm9udEZhY2VSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBw
ZW5kKHJ1bGUucmVsZWFzZSgpKTsKQEAgLTg4NzAsNyArODg3MCw3IEBAIENTU1J1bGUqIENTU1Bh
cnNlcjo6Y3JlYXRlUGFnZVJ1bGUoUGFzc08KICAgICAgICAgVmVjdG9yPE93blB0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gPiBzZWxlY3RvclZlY3RvcjsKICAgICAgICAgc2VsZWN0b3JWZWN0b3IuYXBw
ZW5kKHBhZ2VTZWxlY3Rvcik7CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2Vs
ZWN0b3JWZWN0b3IpOwotICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5
U2V0OjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKICAgICAgICAgcGFnZVJ1bGUgPSBydWxlLmdldCgpOwogICAgICAgICBtX3Bh
cnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtODk1NCw3ICs4OTU0
LDcgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZQogCiAgICAgUmVm
UHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOwogICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0
cmluZyk7Ci0gICAga2V5ZnJhbWUtPnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZShrZXlmcmFtZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3Bl
cnRpZXMpKTsKKyAgICBrZXlmcmFtZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldDo6
Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3Bl
cnRpZXMpKTsKIAogICAgIGNsZWFyUHJvcGVydGllcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgQ1NTU3R5
bGVSdWxlOjpDU1NTdHlsZVJ1bGUoQ1NTU3R5bGVTaGVldAogQ1NTU3R5bGVSdWxlOjp+Q1NTU3R5
bGVSdWxlKCkKIHsKICAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+Y2xlYXJQYXJl
bnRSdWxlKCk7CisgICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSh0aGlzKTsKICAgICBj
bGVhbnVwKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHJldmlzaW9u
IDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0b3JUZXh0
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJik7CiAKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVu
c3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbih0
aGlzKTsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIHZvaWQgYWRvcHRT
ZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3Rv
cnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9Ci0g
ICAgdm9pZCBzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxl
KSB7IEFTU0VSVChzdHlsZS0+cGFyZW50UnVsZUludGVybmFsKCkgPT0gdGhpcyk7IG1fc3R5bGUg
PSBzdHlsZTsgfQorICAgIHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBzdHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KIAogICAgIGNvbnN0IENTU1NlbGVj
dG9yTGlzdCYgc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvckxpc3Q7IH0K
ICAgICBTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3NiwxOSArMjQ3NiwxOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNJbnNpZGVSZWdpb25SdWxlKFN0CiB7CiAgICAgQVNTRVJUKHN0eWxlRGVjbGFyYXRp
b24pOwogCi0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlRGVjbGFyYXRpb24tPnBhcmVu
dFJ1bGVJbnRlcm5hbCgpOworLyogICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlRGVjbGFy
YXRpb24tPnBhcmVudFJ1bGVJbnRlcm5hbCgpOwogICAgIHdoaWxlIChwYXJlbnRSdWxlKSB7CiAg
ICAgICAgIGlmIChwYXJlbnRSdWxlLT5pc1JlZ2lvblJ1bGUoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBwYXJlbnRSdWxlID0gcGFyZW50UnVsZS0+cGFyZW50UnVsZSgpOwot
ICAgIH0KKyAgICB9Ki8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxib29sIGFw
cGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhl
cml0ZWRPbmx5KQogewotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBz
dHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSk7CisvLyAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZUlu
dGVybmFsKCkpOwogICAgIGJvb2wgc3R5bGVEZWNsYXJhdGlvbkluc2lkZVJlZ2lvblJ1bGUgPSBt
X3JlZ2lvbkZvclN0eWxpbmcgPyBpc0luc2lkZVJlZ2lvblJ1bGUoc3R5bGVEZWNsYXJhdGlvbikg
OiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9u
LT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0yNTI3LDcgKzI1MjcsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oCiAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3Bl
cnR5TGluZUhlaWdodCkKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOwogICAgIH0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7CisvLyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCShyZXZpc2lvbiAxMDc3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDEyICs1NiwxNiBAQCBzdGF0aWMgUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAmIHByb3BlCiBjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
Q1NTU3R5bGVEZWNsYXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0KSA6IG1fcHJvcGVydHlTZXQo
cHJvcGVydHlTZXQpIHsgfQorICAgIAorICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFyZW50
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJl
bnRSdWxlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVh
clBhcmVudEVsZW1lbnQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVm
KCk7IH0KIAotICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDA7IH07CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwpAQCAtODEsMTYgKzg1LDUxIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNv
cHkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gbWFrZU11dGFibGUoKSBPVkVSUklERTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNTdHlsZVJlY2FsYygpID0gMDsKKworcHJvdGVjdGVkOgogICAgIFN0eWxlUHJvcGVydHlT
ZXQqIG1fcHJvcGVydHlTZXQ7CiB9OwogCitjbGFzcyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbiA6
IHB1YmxpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24KK3sKK3B1YmxpYzoKKyAgICBS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwgQ1NT
UnVsZSogcGFyZW50UnVsZSkKKyAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRSdWxlKHBhcmVudFJ1bGUpIAorICAg
IHsgfQorCitwcml2YXRlOiAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQ
YXJlbnRSdWxlKCkgeyBtX3BhcmVudFJ1bGUgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAKKyAgICBDU1NSdWxlKiBtX3BhcmVudFJ1bGU7Cit9Owor
CitjbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIElubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5
U2V0KQorICAgICAgICAsIG1fcGFyZW50RWxlbWVudChwYXJlbnRFbGVtZW50KSAKKyAgICB7IH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudEVsZW1lbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQ
YXJlbnRFbGVtZW50KCkgeyBtX3BhcmVudEVsZW1lbnQgPSAwOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKworICAgIFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxl
bWVudDsKK307CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFN0eWxlQXR0cmlidXRlTXV0YXRpb25T
Y29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNj
b3BlKTsKIHB1YmxpYzoKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoU3R5bGVQcm9w
ZXJ0eVNldCogZGVjbCkKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIHsKICAgICAgICAgKytzX3Njb3BlQ291
bnQ7CiAKQEAgLTEwMyw4ICsxNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNfY3VycmVudERlY2wg
PSBkZWNsOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAgaWYgKCFz
X2N1cnJlbnREZWNsLT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKCFzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1fbXV0YXRpb25SZWNpcGllbnRzID0gTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbihzX2N1cnJl
bnREZWNsLT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyKTsKQEAgLTEzMiwx
MCArMTY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBXZSBoYXZlIHRvIGNsZWFyIGludGVybmFsIHN0YXRlIGJlZm9yZSBjYWxsaW5nIElu
c3BlY3RvcidzIGNvZGUuCi0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGxvY2FsQ29weVN0eWxl
RGVjbCA9IHNfY3VycmVudERlY2w7CisgICAgICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiogbG9jYWxDb3B5U3R5bGVEZWNsID0gc19jdXJyZW50RGVjbDsKICAgICAgICAgc19jdXJy
ZW50RGVjbCA9IDA7CiAgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURlY2wtPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigp
ICYmIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpICYmIGxvY2FsQ29weVN0eWxl
RGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpKQorICAgICAgICBpZiAobG9jYWxDb3B5
U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRF
bGVtZW50KCktPmRvY3VtZW50KCkpCiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEludmFsaWRhdGVTdHlsZUF0dHIobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVt
ZW50KCktPmRvY3VtZW50KCksIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpKTsK
ICAgICB9CiAKQEAgLTE0OCwxMyArMTg1LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkSW52
YWxpZGF0ZVN0eWxlQXR0cigpCiAgICAgewotICAgICAgICBBU1NFUlQoc19jdXJyZW50RGVjbC0+
aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkpOwogICAgICAgICBzX3Nob3VsZE5vdGlmeUluc3Bl
Y3RvciA9IHRydWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBzX3Nj
b3BlQ291bnQ7Ci0gICAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHNfY3VycmVudERlY2w7Cisg
ICAgc3RhdGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogc19jdXJyZW50RGVjbDsK
ICAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZE5vdGlmeUluc3BlY3RvcjsKICNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQogICAgIHN0YXRpYyBib29sIHNfc2hvdWxkRGVsaXZlcjsKQEAgLTE2
NSw3ICsyMDEsNyBAQCBwcml2YXRlOgogfTsKIAogdW5zaWduZWQgU3R5bGVBdHRyaWJ1dGVNdXRh
dGlvblNjb3BlOjpzX3Njb3BlQ291bnQgPSAwOwotU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVBdHRy
aWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJlbnREZWNsID0gMDsKK1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbiogU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX2N1cnJlbnREZWNs
ID0gMDsKIGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZE5vdGlmeUlu
c3BlY3RvciA9IGZhbHNlOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiBib29sIFN0
eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGREZWxpdmVyID0gZmFsc2U7CkBAIC0x
NzUsMzkgKzIxMSwzMSBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91
CiAKIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoKQogICAgIDogbV9zdHJpY3RQ
YXJzaW5nKGZhbHNlKQotICAgICwgbV9wYXJlbnRJc0VsZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lz
SW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZh
bHNlKQotICAgICwgbV9wYXJlbnQoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KDApKQorICAgICwgbV9j
b250ZXh0U3R5bGVTaGVldCgwKQogewogfQogCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3Bl
cnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcoIXBhcmVu
dFJ1bGUgfHwgcGFyZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQotICAgICwgbV9wYXJlbnRJ
c0VsZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkK
K1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3Bl
cnR5PiYgcHJvcGVydGllcykKKyAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQorICAgICwg
bV9zdHJpY3RQYXJzaW5nKHRydWUpCiAgICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLSAg
ICAsIG1fcGFyZW50KHBhcmVudFJ1bGUpCisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KDApCiB7
CisgICAgbV9wcm9wZXJ0aWVzLnNocmlua1RvRml0KCk7CiB9CiAKLVN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgVmVjdG9yPENTU1By
b3BlcnR5PiYgcHJvcGVydGllcykKLSAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQotICAg
ICwgbV9zdHJpY3RQYXJzaW5nKCFwYXJlbnRSdWxlIHx8IHBhcmVudFJ1bGUtPnVzZVN0cmljdFBh
cnNpbmcoKSkKLSAgICAsIG1fcGFyZW50SXNFbGVtZW50KGZhbHNlKQotICAgICwgbV9pc0lubGlu
ZVN0eWxlRGVjbGFyYXRpb24oZmFsc2UpCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5
U2V0KENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQorICAgIDogbV9zdHJpY3RQYXJz
aW5nKCFjb250ZXh0U3R5bGVTaGVldCB8fCBjb250ZXh0U3R5bGVTaGVldC0+dXNlU3RyaWN0UGFy
c2luZygpKQogICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCi0gICAgLCBtX3BhcmVudChw
YXJlbnRSdWxlKQorICAgICwgbV9jb250ZXh0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCkK
IHsKLSAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAotU3R5bGVQcm9wZXJ0eVNl
dDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0
eSogY29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLSAgICA6IG1fc3RyaWN0
UGFyc2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCi0g
ICAgLCBtX3BhcmVudElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNJbmxpbmVTdHlsZURlY2xh
cmF0aW9uKGZhbHNlKQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NTdHls
ZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJv
cGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCisgICAgOiBtX3N0cmljdFBhcnNpbmcoIWNvbnRl
eHRTdHlsZVNoZWV0IHx8IGNvbnRleHRTdHlsZVNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpCiAg
ICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLSAgICAsIG1fcGFyZW50KHBhcmVudFJ1bGUp
CisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1f
cHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVByb3BlcnRpZXMpOwogICAgIEhh
c2hNYXA8aW50LCBib29sPiBjYW5kaWRhdGVzOwpAQCAtMjIwLDcgKzI0OCw3IEBAIFN0eWxlUHJv
cGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnUKICAgICAgICAgaWYgKGl0ICE9IGNhbmRp
ZGF0ZXMuZW5kKCkpIHsKICAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT5zZWNvbmQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eS0+aWQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LT5pZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcHJvcGVydGllcy5hcHBl
bmQoKnByb3BlcnR5KTsKQEAgLTIyOCwxNSArMjU2LDYgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5
bGVQcm9wZXJ0eVNldChDU1NSdQogICAgIH0KIH0KIAotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQ
cm9wZXJ0eVNldChTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBib29sIGlzSW5saW5lU3R5
bGUpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX3BhcmVudElzRWxlbWVu
dCh0cnVlKQotICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oaXNJbmxpbmVTdHlsZSkK
LSAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotICAgICwgbV9wYXJlbnQocGFyZW50RWxl
bWVudCkKLXsKLX0KLQogU3R5bGVQcm9wZXJ0eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQogewog
ICAgIEFTU0VSVCghbV9oYXNDU1NPTVdyYXBwZXIgfHwgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5jb250YWlucyh0aGlzKSk7CkBAIC0yNDQsMTUgKzI2Myw2IEBAIFN0eWxlUHJvcGVydHlT
ZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkKICAgICAgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLUNTU1N0eWxlU2hlZXQqIFN0eWxlUHJvcGVydHlTZXQ6
OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICBpZiAobV9wYXJlbnRJc0VsZW1lbnQp
IHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wYXJlbnQuZWxlbWVudCA/IG1fcGFy
ZW50LmVsZW1lbnQtPmRvY3VtZW50KCkgOiAwOwotICAgICAgICByZXR1cm4gZG9jdW1lbnQgPyBk
b2N1bWVudC0+ZWxlbWVudFNoZWV0KCkgOiAwOwotICAgIH0KLSAgICByZXR1cm4gbV9wYXJlbnQu
cnVsZSA/IG1fcGFyZW50LnJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Ci19Ci0KIHZvaWQg
U3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNGcm9tKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQmIG90aGVyKQogewogICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1fcHJvcGVydGllczsKQEAg
LTY3MSw2OCArNjgxLDM4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6
OmcKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+dmFsdWUoKSA6IDA7CiB9CiAKLWJv
b2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5
SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hv
cnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQpCiB7CiAgICAgQ1NTUHJvcGVydHlMb25naGFu
ZCBsb25naGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYgKCFs
b25naGFuZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByZW1v
dmVQcm9wZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25naGFuZC5sZW5ndGgo
KSwgbm90aWZ5Q2hhbmdlZCk7CisgICAgcmV0dXJuIHJlbW92ZVByb3BlcnRpZXNJblNldChsb25n
aGFuZC5wcm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxlbmd0aCgpKTsKIH0KIAotU3RyaW5nIFN0eWxl
UHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNo
YW5nZWQsIGJvb2wgcmV0dXJuVGV4dCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIFN0cmluZyogcmV0dXJuVGV4dCkKIHsKLSNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRh
dGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KLSAgICBpZiAocmVtb3ZlU2hvcnRoYW5kUHJvcGVy
dHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCkpIHsKKyAgICBpZiAocmVtb3ZlU2hvcnRoYW5k
UHJvcGVydHkocHJvcGVydHlJRCkpIHsKICAgICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVp
dmFsZW50IHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAgICAgKnJldHVyblRleHQgPSAiIjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQ1NTUHJvcGVydHkqIGZvdW5kUHJv
cGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFmb3VuZFBy
b3BlcnR5KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFmb3VuZFByb3BlcnR5
KSB7CisgICAgICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAgICAgKnJldHVyblRleHQgPSAi
IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZSA9IHJl
dHVyblRleHQgPyBmb3VuZFByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkgOiBTdHJpbmcoKTsK
KyAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAgKnJldHVyblRleHQgPSBmb3VuZFByb3BlcnR5
LT52YWx1ZSgpLT5jc3NUZXh0KCk7CiAKICAgICAvLyBBIG1vcmUgZWZmaWNpZW50IHJlbW92YWwg
c3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5nIGVudHJpZXMgYXMgZW1wdHkKICAgICAvLyBh
bmQgc3dlZXBpbmcgdGhlbSB3aGVuIHRoZSB2ZWN0b3IgZ3Jvd3MgdG9vIGJpZy4KICAgICBtX3By
b3BlcnRpZXMucmVtb3ZlKGZvdW5kUHJvcGVydHkgLSBtX3Byb3BlcnRpZXMuZGF0YSgpKTsKLQot
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgbXV0YXRpb25TY29wZS5lbnF1ZXVl
TXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgotCi0gICAgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKLXsKLSAgICBpZiAobV9w
YXJlbnRJc0VsZW1lbnQpIHsKLSAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHBhcmVu
dEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICghbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAg
IC8vIElmIHRoaXMgaXMgbm90IGFuIGlubGluZSBzdHlsZSwgaXQncyBhbiBhdHRyaWJ1dGUgc3R5
bGUsIGFuZCB3ZSBzaG91bGRuJ3QgbWFyayB0aGUgZWxlbWVudCBmb3Igc3R5bGUgcmVjYWxjCi0g
ICAgICAgICAgICAvLyBhcyB0aGF0IGlzIGhhbmRsZWQgYnkgU3R5bGVkRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZCgpLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUodGhpcykuZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBj
b250ZXh0U3R5bGVTaGVldCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBz
dHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNl
bGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLSAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlJc0ltcG9ydGFudChp
bnQgcHJvcGVydHlJRCkgY29uc3QKQEAgLTc2NCw0NSArNzQ0LDIzIEBAIGJvb2wgU3R5bGVQcm9w
ZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2kKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0
eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkK
IHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KICAgICAvLyBTZXR0aW5n
IHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBp
biBib3RoIElFIGFuZCBHZWNrby4KICAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8g
cHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhl
IHNhbWUuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSk7CisgICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5SUQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBX
aGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBwcm9wZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUg
cHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAvLyBGaXJlZm94IHByZXNlcnZl
cyB0aGUgcG9zaXRpb24sIGFuZCBNU0lFIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5u
aW5nLgotICAgIGJvb2wgc3VjY2VzcyA9IENTU1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VS
UiBoZXJlLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAotICAg
ICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY+
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2Vu
ZGlmCi0KLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5nKCkp
OwogfQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKLSNlbmRpZgotCi0gICAgaWYgKCFyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9w
ZXJ0eS5pZCgpLCBmYWxzZSkpIHsKKyAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHBy
b3BlcnR5LmlkKCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90ID8g
c2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAgaWYgKHRv
UmVwbGFjZSkgewogICAgICAgICAgICAgKnRvUmVwbGFjZSA9IHByb3BlcnR5OwpAQCAtODEwLDg1
ICs3NjgsNDggQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdAogICAg
ICAgICB9CiAgICAgfQogICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwotCi0jaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRh
dGlvblJlY29yZCgpOwotI2VuZGlmCiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCwgYm9v
bCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJRCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKG1fcGFyZW50SXNFbGVtZW50ICYm
IHBhcmVudEVsZW1lbnQoKSAmJiBwYXJlbnRFbGVtZW50KCktPmRvY3VtZW50KCkpCi0gICAgICAg
IHZhbHVlID0gcGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gdmFsdWU7ICAgIAorICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX2NvbnRleHRT
dHlsZVNoZWV0ID8gbV9jb250ZXh0U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkgOiAwOykKKyAg
ICAgICAgdmFsdWUgPSBkb2N1bWVudC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShpZGVudGlmaWVyKTsKICAgICBlbHNlCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWRlbnRpZmllcik7CiAKICAgICBzZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwotICAg
IGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1
bml0LCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgZG91YmxlIHZhbHVlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIENTU1By
b3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUsIHVuaXQpLCBpbXBvcnRhbnQpOwogICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBp
ZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24o
Y29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKQogewotI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUo
dGhpcyk7Ci0jZW5kaWYKLQogICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwogICAgIENTU1BhcnNl
ciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKICAgICBwYXJzZXIucGFyc2VEZWNsYXJhdGlv
bih0aGlzLCBzdHlsZURlY2xhcmF0aW9uKTsKLQotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCi0gICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgot
Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6
OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVz
LCBpbnQgbnVtUHJvcGVydGllcykKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2Vu
ZGlmCi0KICAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG51bVByb3BlcnRpZXMpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQogICAgICAgICBhZGRQ
YXJzZWRQcm9wZXJ0eSgqcHJvcGVydGllc1tpXSk7Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5k
aWYKLQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBz
ZXROZWVkc1N0eWxlUmVjYWxjKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdp
c2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rp
b24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4K
IH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQ
cm9wZXJ0eSYgcHJvcGVydHkpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAg
ICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRp
ZgotCiAgICAgLy8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBj
b3VudGVycGFydCBwcmVzZW50CiAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5
LmlkKCkpIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgcmVtb3ZlUHJvcGVy
dHkocHJvcGVydHkuaWQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHko
cHJvcGVydHkuaWQoKSk7CiAgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwog
ICAgIH0KLQotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgbXV0YXRpb25TY29w
ZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgU3R5bGVQcm9w
ZXJ0eVNldDo6YXNUZXh0KCkgY29uc3QKQEAgLTk1NSwxMCArODc2LDYgQEAgU3RyaW5nIFN0eWxl
UHJvcGVydHlTZXQ6OmFzVGV4dCgpIGNvbnN0CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVy
Z2UoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25m
bGljdCkKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KICAgICB1bnNp
Z25lZCBzaXplID0gb3RoZXItPm1fcHJvcGVydGllcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgdG9N
ZXJnZSA9IG90aGVyLT5tX3Byb3BlcnRpZXNbbl07CkBAIC05NzAsMTMgKzg4Nyw2IEBAIHZvaWQg
U3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2UoY29uc3QgU3R5bGUKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHRvTWVyZ2UpOwogICAgIH0KLQotI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25S
ZWNvcmQoKTsKLSNlbmRpZgotCi0gICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGhh
dmUgYSBjYWxsIHRvIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBpZiBzb21ldGhpbmcgY2hhbmdlZC4g
V2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1lbnQg
dG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9ucyBp
biB0aGlzIGNsYXNzLgogfQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKQpAQCAtMTAyNSwxNSArOTM1LDExIEBA
IHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlQmxvY2tQcm9wZXIKICAgICByZW1vdmVQcm9w
ZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOwogfQogCi1i
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVy
dHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIGlmIChtX3Byb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbHdheXMgdXNlZCB3aXRoIHN0YXRpYyBzZXRzIGFuZCBpbiB0aGF0IGNh
c2UgY29uc3RydWN0aW5nIHRoZSBoYXNoIHJlcGVhdGVkbHkgaXMgcHJldHR5IHBvaW50bGVzcy4K
ICAgICBIYXNoU2V0PGludD4gdG9SZW1vdmU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQpAQCAtMTA1NSwxNCArOTYxLDYgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0
OjpyZW1vdmVQcm9wZXJ0aWVzSQogCiAgICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5z
aXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9w
ZXJ0aWVzOwotCi0gICAgaWYgKG5vdGlmeUNoYW5nZWQpIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQotICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgp
OwotI2VuZGlmCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci0KICAgICBy
ZXR1cm4gY2hhbmdlZDsKIH0KIApAQCAtMTEyMCw3ICsxMDE4LDcgQEAgdm9pZCBTdHlsZVByb3Bl
cnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UAogCiBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHkoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3R5bGVQcm9wZXJ0eVNldCgwLCBtX3Byb3BlcnRpZXMpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0eWxlUHJvcGVydHlTZXQobV9wcm9wZXJ0aWVzKSk7CiB9CiAKIFBhc3NSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJblNldChj
b25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdApAQCAtMTEzNSwxNiArMTAzMyw0
OCBAQCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVyCiAgICAgcmV0dXJu
IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShsaXN0KTsKIH0KIAotQ1NTU3R5bGVEZWNsYXJhdGlv
biogU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0CitD
U1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKGNvbnN0IENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0CiB7Ci0gICAgaWYgKG1faGFz
Q1NTT01XcmFwcGVyKQorICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpID09IHBhcmVudFJ1bGUpOworICAgICAg
ICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7CisgICAgfQor
ICAgIG1faGFzQ1NTT01XcmFwcGVyID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG5ldyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25z
dF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSwgY29uc3RfY2FzdDxDU1NSdWxlKj4ocGFy
ZW50UnVsZSkpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFk
b3B0UHRyKGNzc29tV3JhcHBlcikpOworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9CisKK0NT
U1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUlubGluZUNTU1N0eWxl
RGVjbGFyYXRpb24oY29uc3QgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgY29uc3QKK3sK
KyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5U2V0
Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gcGFyZW50RWxl
bWVudCk7CiAgICAgICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0
aGlzKTsKKyAgICB9CiAgICAgbV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOwotICAgIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSk7Cisg
ICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgSW5s
aW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlz
KSwgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50RWxlbWVudCkpOwogICAgIHByb3Bl
cnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikp
OwogICAgIHJldHVybiBjc3NvbVdyYXBwZXI7CiB9CiAKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
Y2xlYXJQYXJlbnRSdWxlKENTU1J1bGUqIHJ1bGUpCit7CisgICAgbV9jb250ZXh0U3R5bGVTaGVl
dCA9IDA7CisgICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAg
IEFTU0VSVF9VTlVTRUQocnVsZSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHBy
b3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpID09IHJ1
bGUpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5jbGVhclBh
cmVudFJ1bGUoKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpjbGVhclBhcmVudEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2NvbnRleHRTdHlsZVNoZWV0ID0g
MDsKKyAgICBpZiAoIW1faGFzQ1NTT01XcmFwcGVyKQorICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUX1VOVVNFRChlbGVtZW50LCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlz
KS0+cGFyZW50RWxlbWVudCgpID09IGVsZW1lbnQpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuZ2V0KHRoaXMpLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKK30KKwogdW5zaWduZWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0xMTU3LDExICsxMDg3LDYg
QEAgU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aQogICAgIHJldHVybiBn
ZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4obV9wcm9wZXJ0eVNldC0+
cHJvcGVydHlBdChpKS5pZCgpKSk7CiB9CiAKLUNTU1J1bGUqIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cGFyZW50UnVsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlT
ZXQtPnBhcmVudFJ1bGVJbnRlcm5hbCgpOwotfQotCiBTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVNl
dC0+YXNUZXh0KCk7CkBAIC0xMTY5LDkgKzEwOTQsMTUgQEAgU3RyaW5nIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6YwogICAgIAogdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2VuZGlmCiAgICAgZWMgPSAwOwogICAg
IC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgogICAgIG1fcHJvcGVy
dHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCk7CisKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsgICAgCiB9CiAK
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKQEAgLTEyMTksMjEg
KzExNTAsNDMgQEAgYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmlzUAogCiB2
b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJp
b3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7
CisjZW5kaWYKICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1l
KTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGltcG9y
dGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsK
ICAgICBlYyA9IDA7Ci0gICAgbV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwg
dmFsdWUsIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNl
dC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgaWYgKGNo
YW5nZWQpIHsKKyAgICAgICAgLy8gQ1NTIERPTSByZXF1aXJlcyByYWlzaW5nIFNZTlRBWF9FUlIg
b2YgcGFyc2luZyBmYWlsZWQsIGJ1dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGli
aWxpdHksCisgICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI5Nj4uCisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlv
blJlY29yZCgpOworI2VuZGlmCisgICAgfQogfQogCiBTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRp
ZgogICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAg
IGlmICghcHJvcGVydHlJRCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGVjID0gMDsK
LSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgdHJ1
ZSwgdHJ1ZSk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBib29sIGNoYW5nZXMgPSBtX3Byb3Bl
cnR5U2V0LT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCAmcmVzdWx0KTsKKyAgICBpZiAoY2hh
bmdlcykgeworICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NT
VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCkBAIC0xMjQ4LDggKzEyMDEs
MTcgQEAgU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZwogCiB2b2lkIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsgCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRp
ZgogICAgIGVjID0gMDsKLSAgICBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlE
LCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICBib29sIGNoYW5nZWQgPSBtX3Byb3BlcnR5
U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICBpZiAo
Y2hhbmdlZCkgeworICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25S
ZWNvcmQoKTsKKyNlbmRpZgorICAgIH0KIH0KIAogQ1NTU3R5bGVTaGVldCogUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKQEAgLTEyNzIsNiAr
MTIzNCwyNCBAQCBib29sIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3NzCiAgICAg
cmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eSk7CiB9CiAKK3Zv
aWQgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQoreworICAg
IGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbV9wcm9wZXJ0eVNldC0+Y29udGV4dFN0
eWxlU2hlZXQoKSkgeworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVl
dC0+ZmluZERvY3VtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3RvckNo
YW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgfQorfQorCit2b2lkIElubGluZUNTU1N0eWxl
RGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQoreworICAgIGlmICghbV9wYXJlbnRF
bGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9wYXJlbnRFbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBtX3BhcmVudEVsZW1lbnQtPmludmFs
aWRhdGVTdHlsZUF0dHJpYnV0ZSgpOworICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSh0
aGlzKS5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKCk7CisgICAgcmV0dXJuOworfQorCiBjbGFzcyBT
YW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNT
dHlsZVByb3BlcnR5U2V0PiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBwcm9wZXJ0aWVz
OwogICAgIHVuc2lnbmVkIGJpdGZpZWxkOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0eVNldC5oCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQ
cm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyNSArNDIsMTcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KTsKICAg
ICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1J1
bGUqIHBhcmVudFJ1bGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
Y3JlYXRlKENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBhcmVudFJ1bGUpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGNvbnRleHRTdHlsZVNoZWV0
KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0
ZShDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRp
ZXMsIGludCBudW1Qcm9wZXJ0aWVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCwgY29uc3QgQ1NT
UHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxlLCBw
cm9wZXJ0aWVzLCBudW1Qcm9wZXJ0aWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3R5bGVQcm9wZXJ0eVNldChjb250ZXh0U3R5bGVTaGVldCwgcHJvcGVydGllcywgbnVtUHJvcGVy
dGllcykpOwogICAgIH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBj
cmVhdGUoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldCgwLCBwcm9wZXJ0aWVzKSk7
Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZUlu
bGluZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGVsZW1lbnQsIC8qaXNJbmxpbmVTdHlsZSovIHRydWUp
KTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRl
QXR0cmlidXRlU3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChlbGVtZW50LCAvKmlzSW5saW5lU3R5
bGUqLyBmYWxzZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlT
ZXQocHJvcGVydGllcykpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuc2l6ZSgpOyB9CkBAIC03MywxMyArNjUsMTIgQEAg
cHVibGljOgogICAgIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29u
c3Q7CiAgICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owog
Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGlt
cG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwg
aW1wb3J0YW50LCB0cnVlKTsgfQotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQs
IGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGlt
cG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwg
dW5pdCwgaW1wb3J0YW50LCB0cnVlKTsgfQotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0
dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOyB9Cisg
ICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9y
dGFudCA9IGZhbHNlKTsKKyAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBkb3Vi
bGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBzZXRQcm9w
ZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYsIENTU1Byb3BlcnR5KiBzbG90ID0gMCk7CiAgICAgCi0g
ICAgdm9pZCByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkgeyByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eUlELCB0cnVlLCBmYWxzZSk7IH0KLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0KTsKKyAgICBi
b29sIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBTdHJpbmcqIHJldHVyblRleHQgPSAw
KTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVj
bGFyYXRpb24uCiAgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVE
ZWNsYXJhdGlvbik7CkBAIC05MiwxMyArODMsMTIgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgdm9p
ZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblNl
dChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJlbW92ZVByb3BlcnRpZXNJblNl
dChzZXQsIGxlbmd0aCwgdHJ1ZSk7IH0KKyAgICBib29sIHJlbW92ZVByb3BlcnRpZXNJblNldChj
b25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHZvaWQgbWVyZ2UoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwog
CiAgICAgdm9pZCBzZXRTdHJpY3RQYXJzaW5nKGJvb2wgYikgeyBtX3N0cmljdFBhcnNpbmcgPSBi
OyB9CiAgICAgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQ
YXJzaW5nOyB9Ci0gICAgYm9vbCBpc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbjsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNv
dXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpOwogCkBAIC0xMTEsMjQgKzEwMSwyMiBA
QCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKLSAgICBD
U1NSdWxlKiBwYXJlbnRSdWxlSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElzRWxl
bWVudCA/IDAgOiBtX3BhcmVudC5ydWxlOyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7
IEFTU0VSVCghbV9wYXJlbnRJc0VsZW1lbnQpOyBtX3BhcmVudC5ydWxlID0gMDsgfQotCi0gICAg
U3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgQVNTRVJUKG1fcGFyZW50SXNF
bGVtZW50KTsgcmV0dXJuIG1fcGFyZW50LmVsZW1lbnQ7IH0KLSAgICB2b2lkIGNsZWFyUGFyZW50
RWxlbWVudCgpIHsgQVNTRVJUKG1fcGFyZW50SXNFbGVtZW50KTsgbV9wYXJlbnQuZWxlbWVudCA9
IDA7IH0KLQotICAgIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3Q7Cisg
ICAgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRTdHlsZVNoZWV0OyB9CisgICAgdm9pZCBzZXRDb250ZXh0U3R5bGVTaGVldChDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0KSB7IG1fY29udGV4dFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0OyB9
CiAgICAgCiAgICAgU3RyaW5nIGFzVGV4dCgpIGNvbnN0OwogICAgIAotICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIGVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIGNs
ZWFyUGFyZW50UnVsZShDU1NSdWxlKiBydWxlKTsKKyAgICB2b2lkIGNsZWFyUGFyZW50RWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KTsKKworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVu
c3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFyZW50UnVsZSA9IDApIGNv
bnN0OworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFy
YXRpb24oY29uc3QgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgU3R5bGVQcm9wZXJ0eVNldCgpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVs
ZSogcGFyZW50UnVsZSk7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxl
LCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+Jik7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldChDU1NS
dWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3Bl
cnRpZXMpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoU3R5bGVkRWxlbWVudCosIGJvb2wgaXNJbmxp
bmVTdHlsZSk7CisgICAgU3R5bGVQcm9wZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+
Jik7CisgICAgU3R5bGVQcm9wZXJ0eVNldChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQs
IGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7CiAKICAgICB2
b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIApAQCAtMTQ0LDExICsxMzIsNyBAQCBwcml2YXRl
OgogICAgIHRlbXBsYXRlPHNpemVfdCBzaXplPiBTdHJpbmcgZ2V0Q29tbW9uVmFsdWUoY29uc3Qg
aW50ICgmcHJvcGVydGllcylbc2l6ZV0pIGNvbnN0IHsgcmV0dXJuIGdldENvbW1vblZhbHVlKHBy
b3BlcnRpZXMsIHNpemUpOyB9CiAgICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IFN0cmluZyBnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50ICgmcHJvcGVydGllcylbc2l6ZV0pIGNvbnN0
IHsgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzLCBzaXplKTsgfQog
Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGlt
cG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMsIGJv
b2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgc2V0UHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29s
IG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHBy
b3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVz
SW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2Vk
KTsKKyAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0eUlEKTsKICAg
ICBib29sIHByb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0OwogCiAgICAg
Y29uc3QgQ1NTUHJvcGVydHkqIGZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCkgY29u
c3Q7CkBAIC0xNTcsMTYgKzE0MSw5IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5
LCA0PiBtX3Byb3BlcnRpZXM7CiAKICAgICBib29sIG1fc3RyaWN0UGFyc2luZyA6IDE7Ci0gICAg
Ym9vbCBtX3BhcmVudElzRWxlbWVudCA6IDE7Ci0gICAgYm9vbCBtX2lzSW5saW5lU3R5bGVEZWNs
YXJhdGlvbiA6IDE7CiAgICAgbXV0YWJsZSBib29sIG1faGFzQ1NTT01XcmFwcGVyIDogMTsKIAot
ICAgIHVuaW9uIFBhcmVudCB7Ci0gICAgICAgIFBhcmVudChDU1NSdWxlKiBydWxlKSA6IHJ1bGUo
cnVsZSkgeyB9Ci0gICAgICAgIFBhcmVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1l
bnQoZWxlbWVudCkgeyB9Ci0gICAgICAgIENTU1J1bGUqIHJ1bGU7Ci0gICAgICAgIFN0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQ7Ci0gICAgfSBtX3BhcmVudDsKKyAgICBDU1NTdHlsZVNoZWV0KiBtX2Nv
bnRleHRTdHlsZVNoZWV0OwogICAgIAogICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb247CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lUnVsZS5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIFdlYktpdENTU0tleWZyYW1lUnVsZTo6V2ViS2l0Q1NTS2V5ZnJhbWUKIFdlYktpdENTU0tl
eWZyYW1lUnVsZTo6fldlYktpdENTU0tleWZyYW1lUnVsZSgpCiB7CiAgICAgaWYgKG1fc3R5bGUp
Ci0gICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSgpOworICAgICAgICBtX3N0eWxlLT5j
bGVhclBhcmVudFJ1bGUodGhpcyk7CiB9CiAKIFN0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OmNzc1RleHQoKSBjb25zdApAQCAtNTQsNyArNTQsNiBAQCBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlOjpjc3NUZXh0KCkgCiAKIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzZXREZWNs
YXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKQogewotICAgIEFTU0VS
VChzdHlsZS0+cGFyZW50UnVsZUludGVybmFsKCkgPT0gdGhpcyk7CiAgICAgbV9zdHlsZSA9IHN0
eWxlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5oCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZXRLZXlzKFZlY3RvcjxmbG9hdD4mIGtleXMpIGNvbnN0ICAgeyBwYXJzZUtleVN0
cmluZyhtX2tleSwga2V5cyk7IH0KIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZSA/IG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRp
b24oKSA6IDA7IH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUgPyBtX3N0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKHRoaXMpIDog
MDsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxNyArNDUsMTcgQEAgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURh
dGE6OgogewogICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKICAgICAgICAgQVNTRVJUKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKLSAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGVJbmxpbmUoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpKTsKKyAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0
OjpjcmVhdGUoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAgICAgICBt
X2lubGluZVN0eWxlRGVjbC0+c2V0U3RyaWN0UGFyc2luZyhlbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICB9CiAgICAg
cmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgpOwogfQogCi12b2lkIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGVEZWNsKCkKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbmxpbmVT
dHlsZURlY2wtPmNsZWFyUGFyZW50RWxlbWVudCgpOworICAgIG1faW5saW5lU3R5bGVEZWNsLT5j
bGVhclBhcmVudEVsZW1lbnQoZWxlbWVudCk7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSAwOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAkocmV2
aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgU3R5bGVQ
cm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wu
Z2V0KCk7IH0KICAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woU3R5
bGVkRWxlbWVudCopOwotICAgIHZvaWQgZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOworICAgIHZv
aWQgZGVzdHJveUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KTsKIAogICAg
IFN0eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVTdHlsZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0QXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBtX2F0dHJpYnV0ZVN0eWxlID0gc3R5bGU7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsMjYgQEAgU3R5bGVkRWxlbWVudDo6flN0eWxlZEVsZW1lbnQoKQogICAgIGRl
c3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKIH0KIAordm9pZCBTdHlsZWRFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCit7CisgICAgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
KworICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVj
bCgpKQorICAgICAgICBpbmxpbmVTdHlsZS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoZG9jdW1lbnQo
KS0+ZWxlbWVudFNoZWV0KCkpOworICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBhdHRyaWJ1dGVT
dHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUo
KSA6IDApCisgICAgICAgIGF0dHJpYnV0ZVN0eWxlLT5zZXRDb250ZXh0U3R5bGVTaGVldChkb2N1
bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7Cit9CisKK3ZvaWQgU3R5bGVkRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpCit7CisgICAgRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwor
CisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gaW5saW5lU3R5bGVEZWNs
KCkpCisgICAgICAgIGlubGluZVN0eWxlLT5zZXRDb250ZXh0U3R5bGVTaGVldCgwKTsKKyAgICBp
ZiAoU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUgPSBhdHRyaWJ1dGVEYXRhKCkgPyBh
dHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZVN0eWxlKCkgOiAwKQorICAgICAgICBhdHRyaWJ1dGVT
dHlsZS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoMCk7Cit9CisKIHZvaWQgU3R5bGVkRWxlbWVudDo6
YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKCEoYXR0ci0+bmFt
ZSgpID09IHN0eWxlQXR0ciAmJiBpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKSkKQEAg
LTEwOCw2ICsxMjgsNDYgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHRy
aQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogfQorICAgIAorYm9vbCBT
dHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQg
dmFsdWUsIGJvb2wgaW1wb3J0YW50KQoreworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsK
KyAgICBpZiAoIWNoYW5nZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBzZXRJc1N0eWxlQXR0cmlidXRlVmFs
aWQoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0eWxlZEVsZW1lbnQ6OnNl
dElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKK3sKKyAgICBib29s
IGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJ
RCwgdmFsdWUsIHVuaXQsIGltcG9ydGFudCk7CisgICAgaWYgKCFjaGFuZ2VzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7
CisgICAgc2V0SXNTdHlsZUF0dHJpYnV0ZVZhbGlkKGZhbHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBib29s
IGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJ
RCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgaWYgKCFjaGFuZ2VzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAg
c2V0SXNTdHlsZUF0dHJpYnV0ZVZhbGlkKGZhbHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0
eUlEKQoreworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1v
dmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIWNoYW5nZXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAg
ICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQog
CiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYgdXJscykgY29uc3QKIHsKQEAgLTExNyw3ICsxNzcsNyBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmliCiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBk
YXRlQXR0cmlidXRlU3R5bGUoKQogewotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHls
ZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZUF0dHJpYnV0ZVN0eWxlKHRoaXMpOworICAgIFJl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShk
b2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGNvbGxlY3RTdHlsZUZvckF0dHJpYnV0ZShhdHRy
aWJ1dGUsIHN0eWxlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAko
cmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTQgQEAgcHVibGljOgogCiAgICAgU3R5bGVQcm9w
ZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZURlY2woKSA6IDA7IH0KICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1
dGVEYXRhKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCh0aGlzKTsgfQotICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBPVkVSUklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOyB9CisgICAgCisgICAgLy8g
VW5saWtlIFN0eWxlUHJvcGVydHlTZXQgc2V0dGVycywgdGhlc2UgaW1wbGVtZW50IGludmFsaWRh
dGlvbi4KKyAgICBib29sIHNldElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGlu
dCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRJbmxpbmVTdHls
ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCA9IGZhbHNlKTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQpOworICAgIAorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUoKSBPVkVSUklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+ZW5z
dXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgfQogCiAgICAgU3R5bGVQcm9wZXJ0
eVNldCogYXR0cmlidXRlU3R5bGUoKTsKIApAQCAtNjYsNiArNzMsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgLy8gcGFyc2VBdHRyaWJ1dGUgKGNhbGxlZCB2aWEgc2V0QXR0cmlidXRlKCkpIGFuZAogICAg
IC8vIHN2Z0F0dHJpYnV0ZUNoYW5nZWQgKGNhbGxlZCB3aGVuIGVsZW1lbnQuY2xhc3NOYW1lLmJh
c2VWYWx1ZSBpcyBzZXQpCiAgICAgdm9pZCBjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRv
bWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZyk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGluc2Vy
dGVkSW50b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKSBj
b25zdDsKQEAgLTc1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlc3Ryb3lJbmxpbmVT
dHlsZURlY2woKQogICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZURhdGEoKS0+ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOworICAgICAgICAg
ICAgYXR0cmlidXRlRGF0YSgpLT5kZXN0cm95SW5saW5lU3R5bGVEZWNsKHRoaXMpOwogICAgIH0K
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAgICAgZmxvYXQgZGVzaXJlZEZv
bnRTaXplID0gbWF4KE1pbmltdW1Gb250U2l6ZSwgc3RhcnRpbmdGb250U2l6ZXMuZ2V0KG5vZGUp
ICsgc3R5bGUtPmZvbnRTaXplRGVsdGEoKSk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBpbmxpbmVTdHlsZURlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250
U2l6ZSk7CiAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNs
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgICAgIGVsZW1l
bnQtPnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CiAgICAg
ICAgICAgICBjdXJyZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5vZGUpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVzaXJlZEZvbnRTaXplKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNyArMjA1LDE2IEBA
IHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICBSZWZQdHI8SFRN
TERpdkVsZW1lbnQ+IGNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV90YXJnZXQt
PmRvY3VtZW50KCkpOwogICAgIGNvbnRhaW5lci0+c2V0SWRBdHRyaWJ1dGUoY29udGFpbmVyRWxl
bWVudElkZW50aWZpZXIpOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBjb250YWlu
ZXItPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7Ci0gICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVSZWFk
T25seSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NT
VmFsdWVIaWRkZW4pOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9u
LCBDU1NWYWx1ZUFic29sdXRlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlD
dXJzb3IsIENTU1ZhbHVlRGVmYXVsdCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5VG9wLCAiMCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVJpZ2h0LCAi
MCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKLSAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOworICAgIGNvbnRhaW5l
ci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBDU1NW
YWx1ZU5vbmUpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7CisgICAgY29udGFpbmVyLT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVS
ZWFkT25seSk7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVIaWRkZW4pOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKKyAg
ICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIENT
U1ZhbHVlRGVmYXVsdCk7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5VG9wLCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVJpZ2h0LCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKKyAgICBjb250YWluZXItPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOwogCiAgICAgUmVmUHRyPEhUTUxE
aXZFbGVtZW50PiBvdXRsaW5lID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+ZG9j
dW1lbnQoKSk7CiAgICAgb3V0bGluZS0+c2V0SWRBdHRyaWJ1dGUob3V0bGluZUVsZW1lbnRJZGVu
dGlmaWVyKTsKQEAgLTIyMywxNiArMjIyLDE1IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjo6Y3JlYXRlRGVsZXQKICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSA0OwogICAgIGNvbnN0
IGludCBib3JkZXJSYWRpdXMgPSA2OwogCi0gICAgc3R5bGUgPSBvdXRsaW5lLT5lbnN1cmVJbmxp
bmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlv
biwgQ1NTVmFsdWVBYnNvbHV0ZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
WkluZGV4LCBTdHJpbmc6Om51bWJlcigtMTAwMDAwMCkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRvcCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQt
PnJlbmRlckJveCgpLT5ib3JkZXJUb3AoKSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlSaWdodCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJn
ZXQtPnJlbmRlckJveCgpLT5ib3JkZXJSaWdodCgpKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0g
bV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3R0b20oKSkgKyAicHgiKTsKLSAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lk
dGggLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlckxlZnQoKSkgKyAicHgiKTsKLSAgICBz
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXIsIFN0cmluZzo6bnVtYmVyKGJvcmRl
cldpZHRoKSArICJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNikiKTsKLSAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsIFN0cmluZzo6bnVtYmVyKGJv
cmRlclJhZGl1cykgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlW
aXNpYmlsaXR5LCBDU1NWYWx1ZVZpc2libGUpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgb3V0
bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRleCwgU3RyaW5nOjpu
dW1iZXIoLTEwMDAwMDApKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5VG9wLCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3RhcmdldC0+cmVu
ZGVyQm94KCktPmJvcmRlclRvcCgpKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlSaWdodCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRo
IC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJSaWdodCgpKSArICJweCIpOworICAgIG91
dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3R0b20sIFN0cmluZzo6
bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm90dG9t
KCkpICsgInB4Iik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUxlZnQsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5kZXJC
b3goKS0+Ym9yZGVyTGVmdCgpKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXIsIFN0cmluZzo6bnVtYmVyKGJvcmRlcldpZHRoKSAr
ICJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNikiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLCBTdHJpbmc6Om51bWJl
cihib3JkZXJSYWRpdXMpICsgInB4Iik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVlVmlzaWJsZSk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKG91dGxpbmUuZ2V0
KCksIGVjKTsKQEAgLTI0NywxNCArMjQ1LDEzIEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjo6Y3JlYXRlRGVsZXQKICAgICBjb25zdCBpbnQgYnV0dG9uSGVpZ2h0ID0gMzA7CiAgICAgY29u
c3QgaW50IGJ1dHRvbkJvdHRvbVNoYWRvd09mZnNldCA9IDI7CiAKLSAgICBzdHlsZSA9IGJ1dHRv
bi0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVpJbmRleCwgU3RyaW5nOjpudW1iZXIoMTAwMDAwMCkpOwotICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgU3RyaW5nOjpudW1iZXIoKC1idXR0b25IZWln
aHQgLyAyKSAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyVG9wKCkgLSAoYm9yZGVyV2lk
dGggLyAyKSArIGJ1dHRvbkJvdHRvbVNoYWRvd09mZnNldCkgKyAicHgiKTsKLSAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBTdHJpbmc6Om51bWJlcigoLWJ1dHRvbldpZHRo
IC8gMikgLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlckxlZnQoKSAtIChib3JkZXJXaWR0
aCAvIDIpKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRo
LCBTdHJpbmc6Om51bWJlcihidXR0b25XaWR0aCkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKGJ1dHRvbkhlaWdodCkgKyAi
cHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBDU1NW
YWx1ZVZpc2libGUpOworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKKyAgICBidXR0b24tPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlaSW5kZXgsIFN0cmluZzo6bnVtYmVyKDEwMDAwMDApKTsK
KyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIFN0cmlu
Zzo6bnVtYmVyKCgtYnV0dG9uSGVpZ2h0IC8gMikgLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJv
cmRlclRvcCgpIC0gKGJvcmRlcldpZHRoIC8gMikgKyBidXR0b25Cb3R0b21TaGFkb3dPZmZzZXQp
ICsgInB4Iik7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
TGVmdCwgU3RyaW5nOjpudW1iZXIoKC1idXR0b25XaWR0aCAvIDIpIC0gbV90YXJnZXQtPnJlbmRl
ckJveCgpLT5ib3JkZXJMZWZ0KCkgLSAoYm9yZGVyV2lkdGggLyAyKSkgKyAicHgiKTsKKyAgICBi
dXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpu
dW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25IZWlnaHQpICsg
InB4Iik7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Vmlz
aWJpbGl0eSwgQ1NTVmFsdWVWaXNpYmxlKTsKIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IobV9mcmFtZSk7CiAgICAgUmVmUHRyPEltYWdl
PiBidXR0b25JbWFnZTsKQEAgLTMxMCwxMiArMzA3LDEyIEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29u
dHJvbGxlcjo6c2hvdyhIVE1MRWwKICAgICB9CiAKICAgICBpZiAobV90YXJnZXQtPnJlbmRlcmVy
KCktPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pIHsKLSAgICAgICAgbV90
YXJnZXQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBv
c2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKKyAgICAgICAgbV90YXJnZXQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVSZWxhdGl2ZSk7CiAgICAg
ICAgIG1fd2FzU3RhdGljUG9zaXRpb25lZCA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fdGFy
Z2V0LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBdXRvWkluZGV4KCkpIHsKLSAgICAgICAgbV90
YXJnZXQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJ
bmRleCwgIjAiKTsKKyAgICAgICAgbV90YXJnZXQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlaSW5kZXgsICIwIik7CiAgICAgICAgIG1fd2FzQXV0b1pJbmRleCA9IHRydWU7CiAg
ICAgfQogfQpAQCAtMzMxLDkgKzMyOCw5IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6
aGlkZSgpCiAKICAgICBpZiAobV90YXJnZXQpIHsKICAgICAgICAgaWYgKG1fd2FzU3RhdGljUG9z
aXRpb25lZCkKLSAgICAgICAgICAgIG1fdGFyZ2V0LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVTdGF0aWMpOworICAgICAg
ICAgICAgbV90YXJnZXQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlv
biwgQ1NTVmFsdWVTdGF0aWMpOwogICAgICAgICBpZiAobV93YXNBdXRvWkluZGV4KQotICAgICAg
ICAgICAgbV90YXJnZXQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVpJbmRleCwgQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgIG1fdGFyZ2V0LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5WkluZGV4LCBDU1NWYWx1ZUF1dG8pOwogICAg
IH0KIAogICAgIG1fd2FzU3RhdGljUG9zaXRpb25lZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ1LDEwICsyNzQ1LDEwIEBAIHZv
aWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCgKICAgICBBU1NFUlQoZWxlbWVu
dC0+aXNTdHlsZWRFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7
Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAsICJicmVhay13b3Jk
IiwgZmFsc2UpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE5ic3BN
b2RlLCAic3BhY2UiLCBmYWxzZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0TGluZUJyZWFrLCAiYWZ0ZXItd2hpdGUtc3BhY2UiLCBmYWxzZSk7CisgICAgU3R5bGVk
RWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5V29yZFdyYXAsICJicmVhay13b3JkIiwgZmFsc2UpOworICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwg
ZmFsc2UpOworICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsKIH0KIAog
Ly8gU2VhcmNoZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5n
IGlzIHNlbGVjdGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzIsOSArNTMyLDkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVk
dQogICAgICAgICAgICAgLy8gcmVzdWx0cy4gV2UgYWxyZWFkeSBrbm93IG9uZSBpc3N1ZSBiZWNh
dXNlIHRkIGVsZW1lbnRzIGlnbm9yZSB0aGVpciBkaXNwbGF5IHByb3BlcnR5CiAgICAgICAgICAg
ICAvLyBpbiBxdWlya3MgbW9kZSAod2hpY2ggTWFpbC5hcHAgaXMgYWx3YXlzIGluKS4gV2Ugc2hv
dWxkIGxvb2sgZm9yIGFuIGFsdGVybmF0aXZlLgogICAgICAgICAgICAgaWYgKGlzQmxvY2soZWxl
bWVudCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVJbmxpbmUpOworICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNw
bGF5LCBDU1NWYWx1ZUlubGluZSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIo
KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAg
ICAgICAgICAgZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0LCBDU1NWYWx1ZU5vbmUpOwog
ICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlw
ZS5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1
dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBDb2xvcklu
cHV0VHlwZTo6dXBkYXRlQ29sb3JTd2F0Y2goKQogICAgIGlmICghY29sb3JTd2F0Y2gpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbG9yU3dhdGNoLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGVsZW1lbnQoKS0+dmFsdWUo
KSwgZmFsc2UpOworICAgIGNvbG9yU3dhdGNoLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yLCBlbGVtZW50KCktPnZhbHVlKCksIGZhbHNlKTsKIH0KIAog
SFRNTEVsZW1lbnQqIENvbG9ySW5wdXRUeXBlOjpzaGFkb3dDb2xvclN3YXRjaCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBA
QCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQCiAgICAgaWYgKCFwbGFj
ZWhvbGRlcikKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IHBsYWNlaG9sZGVyLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlWaXNpYmlsaXR5LCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpID8gInZpc2libGUi
IDogImhpZGRlbiIsIGVjKTsKKyAgICBwbGFjZWhvbGRlci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkgPyAi
dmlzaWJsZSIgOiAiaGlkZGVuIiwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Myw3ICsyNTMsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9GaXQoKQogICAg
IG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6ZS53aWR0
aCgpICogc2NhbGUpKTsKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KHN0YXRpY19jYXN0
PGludD4oaW1hZ2VTaXplLmhlaWdodCgpICogc2NhbGUpKTsKICAgICAKLSAgICBtX2ltYWdlRWxl
bWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vy
c29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFsc2UpOworICAgIG1faW1hZ2VFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwg
ZmFsc2UpOwogfQogCiB2b2lkIEltYWdlRG9jdW1lbnQ6OmltYWdlQ2xpY2tlZChpbnQgeCwgaW50
IHkpCkBAIC0zMDcsOSArMzA3LDkgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VT
aXplKCkKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGltYWdlU2l6ZS5oZWlnaHQoKSk7
CiAgICAgCiAgICAgaWYgKGltYWdlRml0c0luV2luZG93KCkpCi0gICAgICAgIG1faW1hZ2VFbGVt
ZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlD
dXJzb3IpOworICAgICAgICBtX2ltYWdlRWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUN1cnNvcik7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlRWxlbWVudC0+
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAi
LXdlYmtpdC16b29tLW91dCIsIGZhbHNlKTsKKyAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0Iiwg
ZmFsc2UpOwogICAgICAgICAKICAgICBtX2RpZFNocmlua0ltYWdlID0gZmFsc2U7CiB9CkBAIC0z
NDAsOSArMzQwLDkgQEAgdm9pZCBJbWFnZURvY3VtZW50Ojp3aW5kb3dTaXplQ2hhbmdlZCgpCiAg
ICAgLy8gYW5kIHNldCBpdCB0byBhIHpvb20gb3V0IGN1cnNvciBpZiB0aGUgaW1hZ2UgZG9lc24n
dCBmaXQKICAgICBpZiAoIW1fc2hvdWxkU2hyaW5rSW1hZ2UpIHsKICAgICAgICAgaWYgKGZpdHNJ
bldpbmRvdykKLSAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURl
Y2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IpOworICAgICAgICAgICAgbV9p
bWFnZUVsZW1lbnQtPnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3Ip
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29t
LW91dCIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
VmFsaWRhdGlvbk1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
VmFsaWRhdGlvbk1lc3NhZ2UuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE0ICsx
MjAsMTMgQEAgc3RhdGljIHZvaWQgYWRqdXN0QnViYmxlUG9zaXRpb24oY29uc3QgTAogICAgICAg
ICBob3N0WSAtPSBjb250YWluZXJMb2NhdGlvbi55KCkgKyBjb250YWluZXItPmJvcmRlclRvcCgp
OwogICAgIH0KIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gYnViYmxlLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUb3As
IGhvc3RZICsgaG9zdFJlY3QuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwor
ICAgIGJ1YmJsZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgaG9zdFkg
KyBob3N0UmVjdC5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgLy8g
VGhlICdsZWZ0JyB2YWx1ZSBvZiA6Oi13ZWJraXQtdmFsaWRhdGlvbi1idWJibGUtYXJyb3cuCiAg
ICAgY29uc3QgaW50IGJ1YmJsZUFycm93VG9wT2Zmc2V0ID0gMzI7CiAgICAgZG91YmxlIGJ1YmJs
ZVggPSBob3N0WDsKICAgICBpZiAoaG9zdFJlY3Qud2lkdGgoKSAvIDIgPCBidWJibGVBcnJvd1Rv
cE9mZnNldCkKICAgICAgICAgYnViYmxlWCA9IG1heChob3N0WCArIGhvc3RSZWN0LndpZHRoKCkg
LyAyIC0gYnViYmxlQXJyb3dUb3BPZmZzZXQsIDAuMCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5TGVmdCwgYnViYmxlWCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Cisg
ICAgYnViYmxlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgYnViYmxl
WCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiB9CiAKIHZvaWQgVmFsaWRhdGlvbk1lc3Nh
Z2U6OmJ1aWxkQnViYmxlVHJlZShUaW1lcjxWYWxpZGF0aW9uTWVzc2FnZT4qKQpAQCAtMTM4LDcg
KzEzNyw3IEBAIHZvaWQgVmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJlZSgKICAgICBt
X2J1YmJsZS0+c2V0U2hhZG93UHNldWRvSWQoIi13ZWJraXQtdmFsaWRhdGlvbi1idWJibGUiKTsK
ICAgICAvLyBOZWVkIHRvIGZvcmNlIHBvc2l0aW9uOmFic29sdXRlIGJlY2F1c2UgUmVuZGVyTWVu
dUxpc3QgZG9lc24ndCBhc3N1bWUgaXQKICAgICAvLyBjb250YWlucyBub24tYWJzb2x1dGUgb3Ig
bm9uLWZpeGVkIHJlbmRlcmVycyBhcyBjaGlsZHJlbi4KLSAgICBtX2J1YmJsZS0+ZW5zdXJlSW5s
aW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVl
QWJzb2x1dGUpOworICAgIG1fYnViYmxlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGhvc3QtPmVuc3VyZVNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9idWJibGUuZ2V0
KCksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDEwNzczNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsMTIgKzkyLDEyIEBAIE1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1l
ZGlhQ29udHJvbEVsZW1lbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpzaG93KCkKIHsK
LSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlE
aXNwbGF5KTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxh
eSk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6aGlkZSgpCiB7Ci0gICAgZW5zdXJl
SW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFs
dWVOb25lKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwg
Q1NTVmFsdWVOb25lKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
MTc1LDE3ICsxNzUsMTUgQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmVuZERyYWco
KQogCiB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0UG9zaXRpb24oY29uc3QgTGF5
b3V0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZW5z
dXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0KICAgICBkb3VibGUgbGVmdCA9IHBvc2l0aW9uLngoKTsK
ICAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwogCiAgICAgLy8gU2V0IHRoZSBsZWZ0IGFu
ZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBlbmRzIG9uIGl0
IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCiAgICAgLy8gU2V0IHRoZSBtYXJnaW4gdG8gemVy
byBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNsdWRlIHRoZSBl
ZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlM
ZWZ0LCBsZWZ0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlUb3AsIHRvcCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0g
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4wLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5Ub3AsIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIHRvcCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmdpbkxlZnQsIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Cisg
ICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgMC4wLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZDsKICAg
ICBjbGFzc0xpc3QoKS0+YWRkKCJkcmFnZ2VkIiwgaWdub3JlZCk7CkBAIC0xOTMsMTIgKzE5MSwx
MCBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0UG9zaXRpCiAKIHZvaWQgTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpyZXNldFBvc2l0aW9uKCkKIHsKLSAgICBTdHlsZVByb3Bl
cnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotCi0gICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7Ci0gICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VG9wKTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5MZWZ0KTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5U
b3ApOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKKyAg
ICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKKyAgICByZW1vdmVJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCk7CisgICAgcmVtb3ZlSW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCk7CiAKICAgICBFeGNlcHRpb25D
b2RlIGlnbm9yZWQ7CiAgICAgY2xhc3NMaXN0KCktPnJlbW92ZSgiZHJhZ2dlZCIsIGlnbm9yZWQp
OwpAQCAtMjExLDEwICsyMDcsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFr
ZU9wYXF1CiAKICAgICBkb3VibGUgZHVyYXRpb24gPSBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1
bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpIDog
MDsKIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNs
KCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgZHVyYXRpb24sIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUyk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwg
MS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgc2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlP
cGFjaXR5KTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKTsKKyAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwgMS4wLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKICAgICBtX29wYXF1ZSA9IHRydWU7CiB9CkBAIC0y
MjQsMTAgKzIxOSw5IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnMK
ICAgICBpZiAoIW1fb3BhcXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHlsZVByb3BlcnR5
U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFj
aXR5KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
RHVyYXRpb24sIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVP
dXREdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwotICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3BhY2l0eSk7CisgICAgc2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgZG9jdW1lbnQoKS0+
cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUyk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eU9wYWNpdHksIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogCiAgICAgbV9v
cGFxdWUgPSBmYWxzZTsKIH0KQEAgLTQzNCwxMiArNDI4LDEyIEBAIE1lZGlhQ29udHJvbElucHV0
RWxlbWVudDo6TWVkaWFDb250cm9sSW4KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6
OnNob3coKQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eURpc3BsYXkpOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXNwbGF5KTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmhpZGUo
KQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7CiB9CiAKIApAQCAtMTIxMSwxMyArMTIwNSwx
MyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lCiAgICAgZmxvYXQg
Zm9udFNpemUgPSBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpICogdmlkZW9IZWln
aHRGb250U2l6ZVBlcmNlbnRhZ2U7CiAgICAgaWYgKGZvbnRTaXplICE9IG1fZm9udFNpemUpIHsK
ICAgICAgICAgbV9mb250U2l6ZSA9IGZvbnRTaXplOwotICAgICAgICBlbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1iZXIo
Zm9udFNpemUpICsgInB4Iik7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7CiAgICAgfQog
CiAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihtX3ZpZGVv
RGlzcGxheVNpemUueSgpICsgbV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpIC0gKG1fdmlkZW9E
aXNwbGF5U2l6ZS5oZWlnaHQoKSAqIHRyYWNrQm90dG9tTXVsdGlwbGllcikpOwogICAgIGlmIChi
b3R0b20gIT0gbV9ib3R0b20pIHsKICAgICAgICAgbV9ib3R0b20gPSBib3R0b207Ci0gICAgICAg
IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwg
U3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20pICsgInB4Iik7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNoYWRv
d0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
dGVyU2hhZG93RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDcgKzkzLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZXRlclZhbHVlRWxlbWVudDo6cwogCiB2
b2lkIE1ldGVyVmFsdWVFbGVtZW50OjpzZXRXaWR0aFBlcmNlbnRhZ2UoZG91YmxlIHdpZHRoKQog
ewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdp
ZHRoLCB3aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3
NzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IFByb2dyZXNzVmFsdWVFbGVtZW50CiAKIHZvaWQgUHJvZ3Jlc3NWYWx1ZUVsZW1lbnQ6OnNldFdp
ZHRoUGVyY2VudGFnZShkb3VibGUgd2lkdGgpCiB7Ci0gICAgZW5zdXJlSW5saW5lU3R5bGVEZWNs
KCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlXaWR0aCwgd2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDkgKzMzNSw4
IEBAIFBhc3NSZWZQdHI8VHJhY2tMaW1pdGVyRWxlbWVudD4gVHJhY2tMaW0KIHsKICAgICBSZWZQ
dHI8VHJhY2tMaW1pdGVyRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBUcmFja0xpbWl0
ZXJFbGVtZW50KGRvY3VtZW50KSk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVs
ZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVlSGlkZGVuKTsKLSAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVTdGF0aWMpOworICAgIGVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBDU1NWYWx1ZUhp
ZGRlbik7CisgICAgZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBv
c2l0aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CiAKICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MzgsMjkgKzE3MzgsMjkgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJy
ZW50U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmlt
dW1TaXplKSAtIGN1cnJlbnRTaXplOwogCiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzU3R5bGVkRWxl
bWVudCgpKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
KyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KGVsZW1lbnQpOwogICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+
c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWDsKIAogICAgIGlmIChyZXNpemUgIT0g
UkVTSVpFX1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewogICAgICAgICBpZiAoZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gTWFrZSBpbXBs
aWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlRGVjbGFy
YXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgU3RyaW5nOjpudW1iZXIo
cmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwotICAg
ICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5S
aWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9y
KSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBTdHJpbmc6Om51bWJlcihyZW5kZXJl
ci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CisgICAgICAgICAg
ICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
UmlnaHQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3Rv
cikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lk
dGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDAgOiByZW5kZXJl
ci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwogICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lk
dGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51bWJlcihiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndp
ZHRoKCkpICsgInB4IiwgZmFsc2UpOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSkgKyAicHgiLCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKHJl
c2l6ZSAhPSBSRVNJWkVfSE9SSVpPTlRBTCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CiAgICAg
ICAgIGlmIChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAv
LyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAg
c3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIFN0cmlu
Zzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFs
c2UpOwotICAgICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAv
IHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgU3RyaW5nOjpudW1i
ZXIocmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7Cisg
ICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luQm90dG9tKCkg
LyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRV
bml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIg
PyAwIDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CiAgICAgICAgIGJhc2VI
ZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVEZWNsYXJhdGlv
bi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKGJhc2VIZWln
aHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5n
OjpudW1iZXIoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpICsgInB4IiwgZmFsc2Up
OwogICAgIH0KIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDcgKzMz
Miw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdHlsZUQKICAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCgpKTsKICAgICB9CiAg
ICAgaWYgKEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlciA9IGlucHV0RWxlbWVudCgpLT5wbGFjZWhv
bGRlckVsZW1lbnQoKSkKLSAgICAgICAgcGxhY2Vob2xkZXItPmVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdywgdGV4dFNob3VsZEJlVHJ1
bmNhdGVkKCkgPyBDU1NWYWx1ZUVsbGlwc2lzIDogQ1NTVmFsdWVDbGlwKTsKKyAgICAgICAgcGxh
Y2Vob2xkZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3cs
IHRleHRTaG91bGRCZVRydW5jYXRlZCgpID8gQ1NTVmFsdWVFbGxpcHNpcyA6IENTU1ZhbHVlQ2xp
cCk7CiAgICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIGlubGluZSBTVkdGb250RmFjZUVsZW1lbnQ6OlNWR0ZvbnRGYWNlRWwK
ICAgICAsIG1fZm9udEZhY2VSdWxlKENTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKCkpCiB7CiAgICAg
QVNTRVJUKGhhc1RhZ05hbWUoZm9udF9mYWNlVGFnKSk7Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IHN0eWxlRGVjbGFyYXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobV9mb250
RmFjZVJ1bGUuZ2V0KCkpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZURlY2xh
cmF0aW9uID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGVEZWNsYXJhdGlv
bi0+c2V0U3RyaWN0UGFyc2luZyh0cnVlKTsKICAgICBtX2ZvbnRGYWNlUnVsZS0+c2V0RGVjbGFy
YXRpb24oc3R5bGVEZWNsYXJhdGlvbi5yZWxlYXNlKCkpOwogfQpAQCAtMzIxLDYgKzMyMSw3IEBA
IHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2MKICAgICBTVkdFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIGRvY3VtZW50KCktPm1hcHBlZEVsZW1lbnRT
aGVldCgpLT5hcHBlbmQobV9mb250RmFjZVJ1bGUpOwogICAgIG1fZm9udEZhY2VSdWxlLT5zZXRQ
YXJlbnRTdHlsZVNoZWV0KGRvY3VtZW50KCktPm1hcHBlZEVsZW1lbnRTaGVldCgpKTsKKyAgICBt
X2ZvbnRGYWNlUnVsZS0+ZGVjbGFyYXRpb24oKS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoZG9jdW1l
bnQoKS0+bWFwcGVkRWxlbWVudFNoZWV0KCkpOwogICAgIHJlYnVpbGRGb250RmFjZSgpOwogfQog
CkBAIC0zNDgsNiArMzQ5LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZUZyb21N
YXBwZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAgbV9mb250RmFj
ZVJ1bGUtPmRlY2xhcmF0aW9uKCktPnNldENvbnRleHRTdHlsZVNoZWV0KDApOwogICAgIGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogfQogCg==
</data>
<flag name="commit-queue"
          id="129061"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127057</attachid>
            <date>2012-02-14 15:25:40 -0800</date>
            <delta_ts>2012-02-15 13:54:33 -0800</delta_ts>
            <desc>another</desc>
            <filename>style-rule-11.patch</filename>
            <type>text/plain</type>
            <size>75006</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDc3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBDU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShD
U1NTdHlsCiBDU1NGb250RmFjZVJ1bGU6On5DU1NGb250RmFjZVJ1bGUoKQogewogICAgIGlmICht
X3N0eWxlKQotICAgICAgICBtX3N0eWxlLT5jbGVhclBhcmVudFJ1bGUoKTsKKyAgICAgICAgbV9z
dHlsZS0+Y2xlYXJQYXJlbnRSdWxlKHRoaXMpOwogfQogCiBTdHJpbmcgQ1NTRm9udEZhY2VSdWxl
Ojpjc3NUZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJ
KHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICB+Q1NTRm9u
dEZhY2VSdWxlKCk7CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5zdXJlUnVs
ZUNTU1N0eWxlRGVjbGFyYXRpb24odGhpcyk7IH0KIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24gMTA3NzM1
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBDU1NQYWdlUnVsZTo6Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVTaGVldCog
CiAKIENTU1BhZ2VSdWxlOjp+Q1NTUGFnZVJ1bGUoKQogeworICAgIG1fc3R5bGUtPmNsZWFyUGFy
ZW50UnVsZSh0aGlzKTsKIH0KIAogU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDEwNzczNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfkNTU1BhZ2VSdWxlKCk7CiAKLSAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24odGhp
cyk7IH0KIAogICAgIFN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKICAgICB2b2lkIHNldFNl
bGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAg
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdl
dCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNl
bGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIHsgQVNTRVJUKHN0eWxlLT5wYXJlbnRSdWxl
SW50ZXJuYWwoKSA9PSB0aGlzKTsgbV9zdHlsZSA9IHN0eWxlOyB9CisgICAgdm9pZCBzZXREZWNs
YXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSB7IG1fc3R5bGUgPSBz
dHlsZTsgfQogCiBwcml2YXRlOgogICAgIENTU1BhZ2VSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVu
dCwgaW50IHNvdXJjZUxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlz
aW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NzYwLDcgKzg3NjAsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0
eWxlUnVsZShWZWN0CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9y
cyk7CiAgICAgICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAgICAgIGRl
bGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwotICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihT
dHlsZVByb3BlcnR5U2V0OjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBt
X251bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBt
X251bVBhcnNlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAg
ICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgICAgICBpZiAo
bV9ydWxlUmFuZ2VNYXApIHsKQEAgLTg3OTksNyArODc5OSw3IEBAIENTU1J1bGUqIENTU1BhcnNl
cjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAgICAgfQogICAgIH0KICAgICBSZWZQdHI8Q1NT
Rm9udEZhY2VSdWxlPiBydWxlID0gQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0
KTsKLSAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUocnVs
ZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAg
ICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobV9zdHlsZVNo
ZWV0LCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwogICAgIGNs
ZWFyUHJvcGVydGllcygpOwogICAgIENTU0ZvbnRGYWNlUnVsZSogcmVzdWx0ID0gcnVsZS5nZXQo
KTsKICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CkBAIC04ODcwLDcg
Kzg4NzAsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NPCiAgICAg
ICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2VsZWN0b3JWZWN0b3I7CiAg
ICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAgICBydWxl
LT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcnVsZS0+c2V0
RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHJ1bGUuZ2V0KCksIG1fcGFyc2Vk
UHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIHJ1bGUtPnNldERl
Y2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1fcGFyc2Vk
UHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAgICAgICAgIHBhZ2VSdWxlID0g
cnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkp
OwogICAgIH0KQEAgLTg5NTQsNyArODk1NCw3IEBAIFdlYktpdENTU0tleWZyYW1lUnVsZSogQ1NT
UGFyc2VyOjpjcmVhdGUKIAogICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZy
YW1lID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKICAgICBr
ZXlmcmFtZS0+c2V0S2V5VGV4dChrZXlTdHJpbmcpOwotICAgIGtleWZyYW1lLT5zZXREZWNsYXJh
dGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoa2V5ZnJhbWUuZ2V0KCksIG1fcGFyc2VkUHJv
cGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAga2V5ZnJhbWUtPnNldERlY2xh
cmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1fcGFyc2VkUHJv
cGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAKICAgICBjbGVhclByb3BlcnRpZXMo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlzaW9uIDEwNzcz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIENTU1N0eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKENTU1N0eWxlU2hl
ZXQKIENTU1N0eWxlUnVsZTo6fkNTU1N0eWxlUnVsZSgpCiB7CiAgICAgaWYgKG1fc3R5bGUpCi0g
ICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSgpOworICAgICAgICBtX3N0eWxlLT5jbGVh
clBhcmVudFJ1bGUodGhpcyk7CiAgICAgY2xlYW51cCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxMiBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0b3JU
ZXh0KGNvbnN0IFN0cmluZyYpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7IH0KKyAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVu
c3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKHRoaXMpOyB9CiAKICAgICBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNl
bGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIHsgQVNTRVJUKHN0eWxlLT5wYXJlbnRSdWxl
SW50ZXJuYWwoKSA9PSB0aGlzKTsgbV9zdHlsZSA9IHN0eWxlOyB9CisgICAgdm9pZCBzZXREZWNs
YXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSB7IG1fc3R5bGUgPSBz
dHlsZTsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdG9yTGlzdDsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQqIGRlY2xh
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDc2
LDE5ICsyNDc2LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luc2lkZVJlZ2lvblJ1bGUoU3QK
IHsKICAgICBBU1NFUlQoc3R5bGVEZWNsYXJhdGlvbik7CiAKLSAgICBDU1NSdWxlKiBwYXJlbnRS
dWxlID0gc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZUludGVybmFsKCk7CisvKiAgICBDU1NS
dWxlKiBwYXJlbnRSdWxlID0gc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZUludGVybmFsKCk7
CiAgICAgd2hpbGUgKHBhcmVudFJ1bGUpIHsKICAgICAgICAgaWYgKHBhcmVudFJ1bGUtPmlzUmVn
aW9uUnVsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHBhcmVudFJ1bGUg
PSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7Ci0gICAgfQorICAgIH0qLwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9u
LCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHN0eWxlRGVjbGFyYXRpb24tPnBhcmVudFJ1bGVJ
bnRlcm5hbCgpKTsKKy8vICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBz
dHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSk7CiAgICAgYm9vbCBzdHlsZURl
Y2xhcmF0aW9uSW5zaWRlUmVnaW9uUnVsZSA9IG1fcmVnaW9uRm9yU3R5bGluZyA/IGlzSW5zaWRl
UmVnaW9uUnVsZShzdHlsZURlY2xhcmF0aW9uKSA6IGZhbHNlOwogCiAgICAgdW5zaWduZWQgcHJv
cGVydHlDb3VudCA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5Q291bnQoKTsKQEAgLTI1Mjcs
NyArMjUyNyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbigKICAg
ICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQogICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgfQotICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKKy8vICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKIH0KIAog
dGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQ
cm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTIgKzU2LDE2IEBAIHN0
YXRpYyBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCYgcHJvcGUKIGNsYXNzIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKIHB1Ymxp
YzoKICAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydHlTZXQpIDogbV9wcm9wZXJ0eVNldChwcm9wZXJ0eVNldCkgeyB9CisgICAgCisgICAg
dmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgT1ZFUlJJ
REUgeyBtX3Byb3BlcnR5U2V0LT5yZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIE9W
RVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+ZGVyZWYoKTsgfQogCi0gICAgdmlydHVhbCBDU1NSdWxl
KiBwYXJlbnRSdWxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDU1NSdWxlKiBwYXJl
bnRSdWxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfTsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZF
UlJJREU7CkBAIC04MSwxNiArODUsNTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIENTU1N0eWxl
U2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURF
OwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9OworCitw
cm90ZWN0ZWQ6CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogbV9wcm9wZXJ0eVNldDsKIH07CiAKK2Ns
YXNzIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxl
UHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBDU1NSdWxlKiBwYXJlbnRSdWxlKQorICAgICAgICA6
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKKyAgICAgICAgLCBt
X3BhcmVudFJ1bGUocGFyZW50UnVsZSkgCisgICAgeyB9CisKK3ByaXZhdGU6ICAgIAorICAgIHZp
cnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsg
fTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IG1fcGFyZW50UnVsZSA9
IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIAorICAg
IENTU1J1bGUqIG1fcGFyZW50UnVsZTsKK307CisKK2NsYXNzIElubGluZUNTU1N0eWxlRGVjbGFy
YXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCit7CitwdWJsaWM6
CisgICAgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
eVNldCwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkKKyAgICAgICAgOiBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRFbGVt
ZW50KHBhcmVudEVsZW1lbnQpIAorICAgIHsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3R5
bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVu
dDsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxl
bWVudCA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworCisg
ICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OworfTsKKwogbmFtZXNwYWNlIHsKIAog
Y2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUpOwogcHVibGljOgotICAgIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsKQorICAgIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZShQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGRlY2wp
CiAgICAgewogICAgICAgICArK3Nfc2NvcGVDb3VudDsKIApAQCAtMTAzLDggKzE0Miw2IEBAIHB1
YmxpYzoKICAgICAgICAgc19jdXJyZW50RGVjbCA9IGRlY2w7CiAKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQotICAgICAgICBpZiAoIXNfY3VycmVudERlY2wtPmlzSW5saW5lU3R5bGVE
ZWNsYXJhdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXNfY3VycmVu
dERlY2wtPnBhcmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9t
dXRhdGlvblJlY2lwaWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRl
Rm9yQXR0cmlidXRlc011dGF0aW9uKHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRN
TE5hbWVzOjpzdHlsZUF0dHIpOwpAQCAtMTMyLDEwICsxNjksMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIgaW50
ZXJuYWwgc3RhdGUgYmVmb3JlIGNhbGxpbmcgSW5zcGVjdG9yJ3MgY29kZS4KLSAgICAgICAgU3R5
bGVQcm9wZXJ0eVNldCogbG9jYWxDb3B5U3R5bGVEZWNsID0gc19jdXJyZW50RGVjbDsKKyAgICAg
ICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBsb2NhbENvcHlTdHlsZURlY2wgPSBz
X2N1cnJlbnREZWNsOwogICAgICAgICBzX2N1cnJlbnREZWNsID0gMDsKICAgICAgICAgc19zaG91
bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKGxvY2FsQ29weVN0eWxlRGVj
bC0+aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJl
bnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3Vt
ZW50KCkpCisgICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKSAm
JiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkKICAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihs
b2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgbG9jYWxDb3B5
U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkpOwogICAgIH0KIApAQCAtMTQ4LDEzICsxODUsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzX2N1cnJlbnREZWNsLT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSk7
CiAgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gdHJ1ZTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIHVuc2lnbmVkIHNfc2NvcGVDb3VudDsKLSAgICBzdGF0aWMgU3R5bGVQ
cm9wZXJ0eVNldCogc19jdXJyZW50RGVjbDsKKyAgICBzdGF0aWMgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uKiBzX2N1cnJlbnREZWNsOwogICAgIHN0YXRpYyBib29sIHNfc2hvdWxkTm90
aWZ5SW5zcGVjdG9yOwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgc3RhdGlj
IGJvb2wgc19zaG91bGREZWxpdmVyOwpAQCAtMTY1LDcgKzIwMSw3IEBAIHByaXZhdGU6CiB9Owog
CiB1bnNpZ25lZCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7
Ci1TdHlsZVByb3BlcnR5U2V0KiBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVu
dERlY2wgPSAwOworUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZUF0dHJpYnV0
ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAwOwogYm9vbCBTdHlsZUF0dHJpYnV0ZU11
dGF0aW9uU2NvcGU6OnNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7CiAjaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKIGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpz
X3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKQEAgLTE3NSwzOSArMjExLDMxIEBAIGJvb2wgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3UKIAogU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQ
cm9wZXJ0eVNldCgpCiAgICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX3BhcmVu
dElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGZhbHNl
KQogICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCi0gICAgLCBtX3BhcmVudChzdGF0aWNf
Y2FzdDxDU1NSdWxlKj4oMCkpCisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KDApCiB7CiB9CiAK
LVN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSkK
LSAgICA6IG1fc3RyaWN0UGFyc2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJp
Y3RQYXJzaW5nKCkpCi0gICAgLCBtX3BhcmVudElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGZhbHNlKQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9w
ZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQorICAgIDogbV9w
cm9wZXJ0aWVzKHByb3BlcnRpZXMpCisgICAgLCBtX3N0cmljdFBhcnNpbmcodHJ1ZSkKICAgICAs
IG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotICAgICwgbV9wYXJlbnQocGFyZW50UnVsZSkKKyAg
ICAsIG1fY29udGV4dFN0eWxlU2hlZXQoMCkKIHsKKyAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9G
aXQoKTsKIH0KIAotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBw
YXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQotICAgIDog
bV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCi0gICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVudFJ1
bGUgfHwgcGFyZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQotICAgICwgbV9wYXJlbnRJc0Vs
ZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKK1N0
eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTU3R5bGVTaGVldCogY29udGV4dFN0
eWxlU2hlZXQpCisgICAgOiBtX3N0cmljdFBhcnNpbmcoIWNvbnRleHRTdHlsZVNoZWV0IHx8IGNv
bnRleHRTdHlsZVNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAgLCBtX2hhc0NTU09NV3Jh
cHBlcihmYWxzZSkKLSAgICAsIG1fcGFyZW50KHBhcmVudFJ1bGUpCisgICAgLCBtX2NvbnRleHRT
dHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KQogewotICAgIG1fcHJvcGVydGllcy5zaHJpbmtU
b0ZpdCgpOwogfQogCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqIHByb3BlcnRpZXMsIGludCBu
dW1Qcm9wZXJ0aWVzKQotICAgIDogbV9zdHJpY3RQYXJzaW5nKCFwYXJlbnRSdWxlIHx8IHBhcmVu
dFJ1bGUtPnVzZVN0cmljdFBhcnNpbmcoKSkKLSAgICAsIG1fcGFyZW50SXNFbGVtZW50KGZhbHNl
KQotICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oZmFsc2UpCitTdHlsZVByb3BlcnR5
U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0LCBj
b25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykK
KyAgICA6IG1fc3RyaWN0UGFyc2luZyghY29udGV4dFN0eWxlU2hlZXQgfHwgY29udGV4dFN0eWxl
U2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNl
KQotICAgICwgbV9wYXJlbnQocGFyZW50UnVsZSkKKyAgICAsIG1fY29udGV4dFN0eWxlU2hlZXQo
Y29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtUHJvcGVydGllcyk7CiAgICAgSGFzaE1hcDxpbnQsIGJvb2w+IGNhbmRpZGF0ZXM7
CkBAIC0yMjAsNyArMjQ4LDcgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChD
U1NSdQogICAgICAgICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewogICAgICAgICAgICAg
aWYgKCFpbXBvcnRhbnQgJiYgaXQtPnNlY29uZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LT5pZCgpLCBmYWxzZSwgZmFsc2Up
OworICAgICAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHktPmlkKCkpOwogICAgICAgICB9
CiAKICAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCgqcHJvcGVydHkpOwpAQCAtMjI4LDE1ICsy
NTYsNiBAQCBTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1J1CiAgICAgfQog
fQogCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQsIGJvb2wgaXNJbmxpbmVTdHlsZSkKLSAgICA6IG1fc3RyaWN0UGFyc2luZyhm
YWxzZSkKLSAgICAsIG1fcGFyZW50SXNFbGVtZW50KHRydWUpCi0gICAgLCBtX2lzSW5saW5lU3R5
bGVEZWNsYXJhdGlvbihpc0lubGluZVN0eWxlKQotICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFs
c2UpCi0gICAgLCBtX3BhcmVudChwYXJlbnRFbGVtZW50KQotewotfQotCiBTdHlsZVByb3BlcnR5
U2V0Ojp+U3R5bGVQcm9wZXJ0eVNldCgpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0NTU09NV3JhcHBl
ciB8fCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKQEAgLTI0
NCwxNSArMjYzLDYgQEAgU3R5bGVQcm9wZXJ0eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQogICAg
ICAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotQ1NT
U3R5bGVTaGVldCogU3R5bGVQcm9wZXJ0eVNldDo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAot
ewotICAgIGlmIChtX3BhcmVudElzRWxlbWVudCkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX3BhcmVudC5lbGVtZW50ID8gbV9wYXJlbnQuZWxlbWVudC0+ZG9jdW1lbnQoKSA6IDA7
Ci0gICAgICAgIHJldHVybiBkb2N1bWVudCA/IGRvY3VtZW50LT5lbGVtZW50U2hlZXQoKSA6IDA7
Ci0gICAgfQotICAgIHJldHVybiBtX3BhcmVudC5ydWxlID8gbV9wYXJlbnQucnVsZS0+cGFyZW50
U3R5bGVTaGVldCgpIDogMDsKLX0KLQogdm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVy
dGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgb3RoZXIpCiB7CiAgICAgbV9wcm9wZXJ0
aWVzID0gb3RoZXIubV9wcm9wZXJ0aWVzOwpAQCAtNjcxLDY4ICs2ODEsMzggQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gU3R5bGVQcm9wZXJ0eVNldDo6ZwogICAgIHJldHVybiBwcm9wZXJ0eSA/IHBy
b3BlcnR5LT52YWx1ZSgpIDogMDsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVT
aG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkKQorYm9v
bCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCkKIHsKICAgICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9w
ZXJ0eShwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWxvbmdoYW5kLmxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnRpZXNJblNldChsb25naGFuZC5w
cm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxlbmd0aCgpLCBub3RpZnlDaGFuZ2VkKTsKKyAgICByZXR1
cm4gcmVtb3ZlUHJvcGVydGllc0luU2V0KGxvbmdoYW5kLnByb3BlcnRpZXMoKSwgbG9uZ2hhbmQu
bGVuZ3RoKCkpOwogfQogCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0KQorYm9v
bCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgU3RyaW5n
KiByZXR1cm5UZXh0KQogewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQot
ICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2Vk
KSkgeworICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewogICAg
ICAgICAvLyBGSVhNRTogUmV0dXJuIGFuIGVxdWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4gcG9zc2li
bGUuCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHJldHVyblRleHQpCisg
ICAgICAgICAgICAqcmV0dXJuVGV4dCA9ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICBDU1NQcm9wZXJ0eSogZm91bmRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChw
cm9wZXJ0eUlEKTsKLSAgICBpZiAoIWZvdW5kUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICBpZiAoIWZvdW5kUHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHJldHVyblRleHQp
CisgICAgICAgICAgICAqcmV0dXJuVGV4dCA9ICIiOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0gcmV0dXJuVGV4dCA/IGZvdW5kUHJvcGVydHktPnZh
bHVlKCktPmNzc1RleHQoKSA6IFN0cmluZygpOworICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAg
ICAqcmV0dXJuVGV4dCA9IGZvdW5kUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKIAogICAg
IC8vIEEgbW9yZSBlZmZpY2llbnQgcmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtp
bmcgZW50cmllcyBhcyBlbXB0eQogICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZl
Y3RvciBncm93cyB0b28gYmlnLgogICAgIG1fcHJvcGVydGllcy5yZW1vdmUoZm91bmRQcm9wZXJ0
eSAtIG1fcHJvcGVydGllcy5kYXRhKCkpOwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0K
LSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwot
Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldE5lZWRz
U3R5bGVSZWNhbGMoKQotewotICAgIGlmIChtX3BhcmVudElzRWxlbWVudCkgewotICAgICAgICBT
dHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcGFyZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX2lzSW5saW5lU3R5
bGVEZWNsYXJhdGlvbikgewotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYW4gaW5saW5l
IHN0eWxlLCBpdCdzIGFuIGF0dHJpYnV0ZSBzdHlsZSwgYW5kIHdlIHNob3VsZG4ndCBtYXJrIHRo
ZSBlbGVtZW50IGZvciBzdHlsZSByZWNhbGMKLSAgICAgICAgICAgIC8vIGFzIHRoYXQgaXMgaGFu
ZGxlZCBieSBTdHlsZWRFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKCkuCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxj
KElubGluZVN0eWxlQ2hhbmdlKTsKLSAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQXR0
cmlidXRlKCk7Ci0gICAgICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSh0aGlzKS5kaWRJ
bnZhbGlkYXRlU3R5bGVBdHRyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnRleHRTdHlsZVNoZWV0KCkpIHsKLSAgICAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKQot
ICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5
bGUpOwotICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTdHlsZVByb3Bl
cnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25zdApAQCAtNzY0
LDQ1ICs3NDQsMjMgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaQog
ICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0K
IAotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jv
b2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cyk7Ci0jZW5kaWYKLQogICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmlu
ZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAgIC8v
IFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1
bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KICAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQs
IGZhbHNlKTsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHBy
b3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBs
aXN0LgogICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92
ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgYm9vbCBzdWNjZXNzID0gQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVz
ZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIC8vIENTUyBE
T00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIGhlcmUsIGJ1dCB0aGlzIGlzIHRvbyBkYW5n
ZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCi0gICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUu
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAgIGlmIChub3RpZnlDaGFuZ2Vk
KQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBp
bXBvcnRhbnQsIHVzZVN0cmljdFBhcnNpbmcoKSk7CiB9CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSog
c2xvdCkKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KLSAgICBpZiAo
IXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCksIGZhbHNlKSkgeworICAgIGlm
ICghcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkocHJvcGVydHkuaWQoKSkpIHsKICAgICAgICAgQ1NT
UHJvcGVydHkqIHRvUmVwbGFjZSA9IHNsb3QgPyBzbG90IDogZmluZFByb3BlcnR5V2l0aElkKHBy
b3BlcnR5LmlkKCkpOwogICAgICAgICBpZiAodG9SZXBsYWNlKSB7CiAgICAgICAgICAgICAqdG9S
ZXBsYWNlID0gcHJvcGVydHk7CkBAIC04MTAsODUgKzc2OCw0OCBAQCB2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9wcm9wZXJ0
aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKIH0KIAot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IGlk
ZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxl
UHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllciwg
Ym9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTsK
LSAgICBpZiAobV9wYXJlbnRJc0VsZW1lbnQgJiYgcGFyZW50RWxlbWVudCgpICYmIHBhcmVudEVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgdmFsdWUgPSBwYXJlbnRFbGVtZW50KCktPmRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmll
cik7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTsgICAgCisgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fY29udGV4dFN0eWxlU2hlZXQgPyBtX2NvbnRleHRTdHlsZVNo
ZWV0LT5maW5kRG9jdW1lbnQoKSA6IDApCisgICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllcik7CiAgICAgZWxzZQog
ICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkZW50
aWZpZXIpOwogCiAgICAgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUu
cmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0eWxl
UHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90
aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBi
b29sIGltcG9ydGFudCkKIHsKICAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlELCBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBz
ZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlv
bikKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRl
TXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KICAgICBtX3Byb3Bl
cnRpZXMuY2xlYXIoKTsKICAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7
CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7Ci0K
LSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
IH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENT
U1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCiB7Ci0jaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2Nv
cGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgbV9wcm9wZXJ0aWVzLnJlc2Vy
dmVDYXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkKICAgICAgICAgYWRkUGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0p
OwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVu
cXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9i
YWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0TmVlZHNTdHlsZVJlY2FsYygpIGlmIHNvbWV0
aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAotICAgIC8vIGEgbm90aWZ5Q2hh
bmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3Ro
ZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCiB9CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQogewotI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3Bl
IG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQogICAgIC8vIE9ubHkgYWRkIHByb3BlcnRp
ZXMgdGhhdCBoYXZlIG5vICFpbXBvcnRhbnQgY291bnRlcnBhcnQgcHJlc2VudAogICAgIGlmICgh
cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eS5pZCgpKSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFu
dCgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCksIGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwogICAgICAgICBtX3By
b3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0j
ZW5kaWYKIH0KIAogU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmFzVGV4dCgpIGNvbnN0CkBAIC05
NTUsMTAgKzg3Niw2IEBAIFN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25zdAog
CiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIG90
aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgdW5zaWduZWQgc2l6ZSA9IG90aGVyLT5tX3Byb3BlcnRp
ZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKICAg
ICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25d
OwpAQCAtOTcwLDEzICs4ODcsNiBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0
IFN0eWxlCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCh0
b01lcmdlKTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11
dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAgIC8vIEZJ
WE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXROZWVkc1N0eWxlUmVj
YWxjKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAg
Ly8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRo
ZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KIH0KIAogdm9pZCBTdHls
ZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYg
dXJscykKQEAgLTEwMjUsMTUgKzkzNSwxMSBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92
ZUJsb2NrUHJvcGVyCiAgICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywg
bnVtQmxvY2tQcm9wZXJ0aWVzKTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQ
cm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3Rp
ZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAobV9wcm9wZXJ0aWVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0
aCBzdGF0aWMgc2V0cyBhbmQgaW4gdGhhdCBjYXNlIGNvbnN0cnVjdGluZyB0aGUgaGFzaCByZXBl
YXRlZGx5IGlzIHByZXR0eSBwb2ludGxlc3MuCiAgICAgSGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKQEAgLTEwNTUsMTQgKzk2
MSw2IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0kKIAogICAgIGJv
b2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRpZXMuc2l6ZSgpICE9IG1fcHJvcGVydGllcy5zaXplKCk7
CiAgICAgbV9wcm9wZXJ0aWVzID0gbmV3UHJvcGVydGllczsKLQotICAgIGlmIChub3RpZnlDaGFu
Z2VkKSB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAgbXV0YXRpb25T
Y29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgotICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTExMjAs
NyArMTAxOCw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFAKIAog
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgbV9wcm9w
ZXJ0aWVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KG1fcHJv
cGVydGllcykpOwogfQogCiBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVy
dHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0
aCkgY29uc3QKQEAgLTExMzcsMTQgKzEwMzUsNTkgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiBTdHlsZVByb3BlcgogCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0
OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9oYXNDU1NP
TVdyYXBwZXIpCisgICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7CisgICAgICAgIEFTU0VSVCgh
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVy
TWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpKTsKKyAgICAgICAgQVNTRVJUKCFwcm9wZXJ0
eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+cGFyZW50RWxlbWVudCgpKTsKICAgICAg
ICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpOworICAgIH0K
ICAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRydWU7CiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpKTsKICAgICBwcm9wZXJ0eVNl
dENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKICAg
ICByZXR1cm4gY3Nzb21XcmFwcGVyOwogfQogCitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVBy
b3BlcnR5U2V0OjplbnN1cmVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBDU1NSdWxlKiBw
YXJlbnRSdWxlKSBjb25zdAoreworICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NT
T01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpID09IHBhcmVudFJ1bGUpOwor
ICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7Cisg
ICAgfQorICAgIG1faGFzQ1NTT01XcmFwcGVyID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG5ldyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlv
bihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSwgY29uc3RfY2FzdDxDU1NSdWxl
Kj4ocGFyZW50UnVsZSkpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRo
aXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikpOworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9
CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUlubGluZUNT
U1N0eWxlRGVjbGFyYXRpb24oY29uc3QgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgY29u
c3QKK3sKKyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKHByb3Bl
cnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gcGFy
ZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgp
LmdldCh0aGlzKTsKKyAgICB9CisgICAgbV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOworICAgIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IElubGluZUNT
U1N0eWxlRGVjbGFyYXRpb24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNv
bnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpKTsKKyAgICBwcm9wZXJ0eVNl
dENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKKyAg
ICByZXR1cm4gY3Nzb21XcmFwcGVyOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFy
UGFyZW50UnVsZShDU1NSdWxlKiBydWxlKQoreworICAgIG1fY29udGV4dFN0eWxlU2hlZXQgPSAw
OworICAgIGlmICghbV9oYXNDU1NPTVdyYXBwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlRfVU5VU0VEKHJ1bGUsIHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0
eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSA9PSBydWxlKTsK
KyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRS
dWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRFbGVtZW50KFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9jb250ZXh0U3R5bGVTaGVldCA9IDA7Cisg
ICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9V
TlVTRUQoZWxlbWVudCwgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBh
cmVudEVsZW1lbnQoKSA9PSBlbGVtZW50KTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1h
cCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRFbGVtZW50KCk7Cit9CisKIHVuc2lnbmVkIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3VudCgpOwpAQCAtMTE1NywxMSArMTEwMCw2IEBAIFN0
cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmkKICAgICByZXR1cm4gZ2V0UHJv
cGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydHlTZXQtPnByb3Bl
cnR5QXQoaSkuaWQoKSkpOwogfQogCi1DU1NSdWxlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5w
YXJlbnRSdWxlSW50ZXJuYWwoKTsKLX0KLQogU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFz
VGV4dCgpOwpAQCAtMTE2OSw5ICsxMTA3LDE1IEBAIFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmMKICAgICAKIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRpZgogICAgIGVjID0gMDsKICAgICAvLyBG
SVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KICAgICBtX3Byb3BlcnR5U2V0
LT5wYXJzZURlY2xhcmF0aW9uKHRleHQpOworCisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAogfQogCiBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMjE5LDIxICsxMTYz
LDQzIEBAIGJvb2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjppc1AKIAogdm9pZCBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQor
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2Vu
ZGlmCiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAg
ICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CiAgICAg
ZWMgPSAwOwotICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOworICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOworICAgIGlmIChjaGFuZ2Vk
KSB7CisgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBh
cnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5
LAorICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyOTY+LgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKyNlbmRpZgorICAgIH0KIH0KIAogU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKICAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAo
IXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBlYyA9IDA7Ci0gICAg
cmV0dXJuIG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIHRy
dWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9wcm9wZXJ0eVNl
dC0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgJnJlc3VsdCk7CisgICAgaWYgKGNoYW5nZXMp
IHsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7
CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVl
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQpAQCAtMTI0OCw4ICsxMjE0LDE3IEBA
IFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmcKIAogdm9pZCBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7IAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKICAg
ICBlYyA9IDA7Ci0gICAgbV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFs
dWUsIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgaWYgKGNoYW5n
ZWQpIHsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KCk7CisjZW5kaWYKKyAgICB9CiB9CiAKIENTU1N0eWxlU2hlZXQqIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CkBAIC0xMjcyLDYgKzEyNDcs
MjQgQEAgYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzcwogICAgIHJldHVy
biBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eU1hdGNoZXMocHJvcGVydHkpOwogfQogCit2b2lkIFJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3sKKyAgICBpZiAo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IG1fcHJvcGVydHlTZXQtPmNvbnRleHRTdHlsZVNo
ZWV0KCkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZp
bmREb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3JDaGFuZ2Vk
KERlZmVyUmVjYWxjU3R5bGUpOworICAgIH0KK30KKwordm9pZCBJbmxpbmVDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3sKKyAgICBpZiAoIW1fcGFyZW50RWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGFyZW50RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgbV9wYXJlbnRFbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGUoKTsKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUodGhpcyku
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOworICAgIHJldHVybjsKK30KKwogY2xhc3MgU2FtZVNp
emVBc1N0eWxlUHJvcGVydHlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzU3R5bGVQ
cm9wZXJ0eVNldD4gewogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4gcHJvcGVydGllczsKICAg
ICB1bnNpZ25lZCBiaXRmaWVsZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlT
ZXQuaAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjUgKzQyLDE3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldCk7CiAgICAgfQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShDU1NSdWxlKiBw
YXJlbnRSdWxlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0
ZShDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxlKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChjb250ZXh0U3R5bGVTaGVldCkpOwog
ICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoQ1NT
UnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBp
bnQgbnVtUHJvcGVydGllcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBjcmVhdGUoQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQsIGNvbnN0IENTU1Byb3Bl
cnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQocGFyZW50UnVsZSwgcHJvcGVy
dGllcywgbnVtUHJvcGVydGllcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxl
UHJvcGVydHlTZXQoY29udGV4dFN0eWxlU2hlZXQsIHByb3BlcnRpZXMsIG51bVByb3BlcnRpZXMp
KTsKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRl
KGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mIHByb3BlcnRpZXMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgcHJvcGVydGllcykpOwotICAg
IH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGVJbmxpbmUo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3R5bGVQcm9wZXJ0eVNldChlbGVtZW50LCAvKmlzSW5saW5lU3R5bGUqLyB0cnVlKSk7Ci0g
ICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZUF0dHJp
YnV0ZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoZWxlbWVudCwgLyppc0lubGluZVN0eWxlKi8g
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBy
b3BlcnRpZXMpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsgfQpAQCAtNzMsMTMgKzY1LDEyIEBAIHB1Ymxp
YzoKICAgICBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owog
ICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKIAotICAg
IGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgdHJ1ZSk7IH0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBkb3Vi
bGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIHVuaXQs
IGltcG9ydGFudCwgdHJ1ZSk7IH0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBz
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQorICAgIGJv
b2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQg
PSBmYWxzZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91YmxlIHZh
bHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50ID0g
ZmFsc2UpOworICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwogICAgIHZvaWQgc2V0UHJvcGVydHko
Y29uc3QgQ1NTUHJvcGVydHkmLCBDU1NQcm9wZXJ0eSogc2xvdCA9IDApOwogICAgIAotICAgIHZv
aWQgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQpIHsgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJRCwgdHJ1ZSwgZmFsc2UpOyB9Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIGJvb2wgcmV0dXJuVGV4dCk7CisgICAgYm9vbCBy
ZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0ID0gMCk7CiAK
ICAgICAvLyBUaGUgZm9sbG93aW5nIHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xhcmF0
aW9uLgogICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFy
YXRpb24pOwpAQCAtOTIsMTMgKzgzLDEyIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gY29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwogICAgIHZvaWQgcmVt
b3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29u
c3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoc2V0
LCBsZW5ndGgsIHRydWUpOyB9CisgICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKIAogICAg
IHZvaWQgc2V0U3RyaWN0UGFyc2luZyhib29sIGIpIHsgbV9zdHJpY3RQYXJzaW5nID0gYjsgfQog
ICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2lu
ZzsgfQotICAgIGJvb2wgaXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb247IH0KIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKIApAQCAtMTExLDI0ICsxMDEsMjMgQEAgcHVi
bGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5UHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCi0gICAgQ1NTUnVs
ZSogcGFyZW50UnVsZUludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRJc0VsZW1lbnQg
PyAwIDogbV9wYXJlbnQucnVsZTsgfQotICAgIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NF
UlQoIW1fcGFyZW50SXNFbGVtZW50KTsgbV9wYXJlbnQucnVsZSA9IDA7IH0KLQotICAgIFN0eWxl
ZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IEFTU0VSVChtX3BhcmVudElzRWxlbWVu
dCk7IHJldHVybiBtX3BhcmVudC5lbGVtZW50OyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudEVsZW1l
bnQoKSB7IEFTU0VSVChtX3BhcmVudElzRWxlbWVudCk7IG1fcGFyZW50LmVsZW1lbnQgPSAwOyB9
Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OworICAgIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
U3R5bGVTaGVldDsgfQorICAgIHZvaWQgc2V0Q29udGV4dFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCkgeyBtX2NvbnRleHRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsgfQogICAg
IAogICAgIFN0cmluZyBhc1RleHQoKSBjb25zdDsKICAgICAKKyAgICB2b2lkIGNsZWFyUGFyZW50
UnVsZShDU1NSdWxlKiBydWxlKTsKKyAgICB2b2lkIGNsZWFyUGFyZW50RWxlbWVudChTdHlsZWRF
bGVtZW50KiBlbGVtZW50KTsKKwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUNTU1N0
eWxlRGVjbGFyYXRpb24oKSBjb25zdDsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdDsK
KyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
KGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIFN0eWxlUHJvcGVydHlTZXQoKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBh
cmVudFJ1bGUpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29u
c3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwotICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSog
cGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVz
KTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqLCBib29sIGlzSW5saW5lU3R5
bGUpOworICAgIFN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwor
ICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCk7Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0LCBjb25z
dCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwogCiAgICAgdm9pZCBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKQEAgLTE0NCwxMSArMTMzLDcgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gU3RyaW5nIGdldENvbW1vblZhbHVlKGNvbnN0IGludCAo
JnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJldHVybiBnZXRDb21tb25WYWx1ZShwcm9wZXJ0
aWVzLCBzaXplKTsgfQogICAgIHRlbXBsYXRlPHNpemVfdCBzaXplPiBTdHJpbmcgZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCAoJnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJl
dHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgc2l6ZSk7IH0KIAotICAg
IGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBib29sIGlt
cG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3Rp
ZnlDaGFuZ2VkKTsKLSAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0
eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydGllc0luU2V0
KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Cisg
ICAgYm9vbCByZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCk7CiAgICAgYm9v
bCBwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKIAogICAgIGNvbnN0
IENTU1Byb3BlcnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OwpA
QCAtMTU3LDE2ICsxNDIsOSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4g
bV9wcm9wZXJ0aWVzOwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmcgOiAxOwotICAgIGJvb2wg
bV9wYXJlbnRJc0VsZW1lbnQgOiAxOwotICAgIGJvb2wgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRp
b24gOiAxOwogICAgIG11dGFibGUgYm9vbCBtX2hhc0NTU09NV3JhcHBlciA6IDE7CiAKLSAgICB1
bmlvbiBQYXJlbnQgewotICAgICAgICBQYXJlbnQoQ1NTUnVsZSogcnVsZSkgOiBydWxlKHJ1bGUp
IHsgfQotICAgICAgICBQYXJlbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVs
ZW1lbnQpIHsgfQotICAgICAgICBDU1NSdWxlKiBydWxlOwotICAgICAgICBTdHlsZWRFbGVtZW50
KiBlbGVtZW50OwotICAgIH0gbV9wYXJlbnQ7CisgICAgQ1NTU3R5bGVTaGVldCogbV9jb250ZXh0
U3R5bGVTaGVldDsKICAgICAKICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OldlYktpdENTU0tleWZyYW1lCiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU6On5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKQogewogICAgIGlmIChtX3N0eWxlKQotICAg
ICAgICBtX3N0eWxlLT5jbGVhclBhcmVudFJ1bGUoKTsKKyAgICAgICAgbV9zdHlsZS0+Y2xlYXJQ
YXJlbnRSdWxlKHRoaXMpOwogfQogCiBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NU
ZXh0KCkgY29uc3QKQEAgLTU0LDcgKzU0LDYgQEAgU3RyaW5nIFdlYktpdENTU0tleWZyYW1lUnVs
ZTo6Y3NzVGV4dCgpIAogCiB2b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6c2V0RGVjbGFyYXRp
b24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkKIHsKLSAgICBBU1NFUlQoc3R5
bGUtPnBhcmVudFJ1bGVJbnRlcm5hbCgpID09IHRoaXMpOwogICAgIG1fc3R5bGUgPSBzdHlsZTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAko
cmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2V0S2V5cyhWZWN0b3I8ZmxvYXQ+JiBrZXlzKSBjb25zdCAgIHsgcGFyc2VLZXlTdHJpbmco
bV9rZXksIGtleXMpOyB9CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUgPyBtX3N0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkg
OiAwOyB9CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlID8gbV9zdHlsZS0+ZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24odGhpcykgOiAw
OyB9CiAKICAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDE3ICs0NSwxNyBAQCBTdHlsZVByb3BlcnR5U2V0KiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6CiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkgewogICAgICAgICBBU1NFUlQoZWxl
bWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwotICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9IFN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZUlubGluZShzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4o
ZWxlbWVudCkpOworICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShlbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgICAgIG1f
aW5saW5lU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7CiB9CiAKLXZvaWQgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6ZGVzdHJveUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQogewogICAg
IGlmICghbV9pbmxpbmVTdHlsZURlY2wpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lubGluZVN0
eWxlRGVjbC0+Y2xlYXJQYXJlbnRFbGVtZW50KCk7CisgICAgbV9pbmxpbmVTdHlsZURlY2wtPmNs
ZWFyUGFyZW50RWxlbWVudChlbGVtZW50KTsKICAgICBtX2lubGluZVN0eWxlRGVjbCA9IDA7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCShyZXZp
c2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBpbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5n
ZXQoKTsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlRGVjbChTdHls
ZWRFbGVtZW50Kik7Ci0gICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgdm9p
ZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpOwogCiAgICAg
U3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZVN0eWxlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVTdHlsZShQYXNzUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSB7IG1fYXR0cmlidXRlU3R5bGUgPSBzdHlsZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw2ICs2MSwyNiBAQCBTdHlsZWRFbGVtZW50Ojp+U3R5bGVkRWxlbWVudCgpCiAgICAgZGVz
dHJveUlubGluZVN0eWxlRGVjbCgpOwogfQogCit2b2lkIFN0eWxlZEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKK3sKKyAgICBFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwor
CisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gaW5saW5lU3R5bGVEZWNs
KCkpCisgICAgICAgIGlubGluZVN0eWxlLT5zZXRDb250ZXh0U3R5bGVTaGVldChkb2N1bWVudCgp
LT5lbGVtZW50U2hlZXQoKSk7CisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0
eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVTdHlsZSgp
IDogMCkKKyAgICAgICAgYXR0cmlidXRlU3R5bGUtPnNldENvbnRleHRTdHlsZVNoZWV0KGRvY3Vt
ZW50KCktPmVsZW1lbnRTaGVldCgpKTsKK30KKwordm9pZCBTdHlsZWRFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKK3sKKyAgICBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CisK
KyAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2wo
KSkKKyAgICAgICAgaW5saW5lU3R5bGUtPnNldENvbnRleHRTdHlsZVNoZWV0KDApOworICAgIGlm
IChTdHlsZVByb3BlcnR5U2V0KiBhdHRyaWJ1dGVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0
dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6IDApCisgICAgICAgIGF0dHJpYnV0ZVN0
eWxlLT5zZXRDb250ZXh0U3R5bGVTaGVldCgwKTsKK30KKwogdm9pZCBTdHlsZWRFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoIShhdHRyLT5uYW1l
KCkgPT0gc3R5bGVBdHRyICYmIGlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpKQpAQCAt
MTA4LDYgKzEyOCw0NiBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJp
CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CisgICAgCitib29sIFN0
eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOwor
ICAgIGlmICghY2hhbmdlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxp
ZChmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3R5bGVkRWxlbWVudDo6c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgZG91YmxlIHZhbHVlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50KQoreworICAgIGJvb2wg
Y2hhbmdlcyA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlE
LCB2YWx1ZSwgdW5pdCwgaW1wb3J0YW50KTsKKyAgICBpZiAoIWNoYW5nZXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsK
KyAgICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoZmFsc2UpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQoreworICAgIGJvb2wg
Y2hhbmdlcyA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlE
LCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICBpZiAoIWNoYW5nZXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBz
ZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5
SUQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92
ZVByb3BlcnR5KHByb3BlcnR5SUQpOworICAgIGlmICghY2hhbmdlcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAg
IHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZChmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAK
IHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewpAQCAtMTE3LDcgKzE3Nyw3IEBAIHZvaWQgU3R5bGVk
RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWIKIAogdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRh
dGVBdHRyaWJ1dGVTdHlsZSgpCiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxl
ID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlQXR0cmlidXRlU3R5bGUodGhpcyk7CisgICAgUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGRv
Y3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXR0cmlidXRlQ291bnQoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgY29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKGF0dHJp
YnV0ZSwgc3R5bGUuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCShy
ZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAgICBTdHlsZVByb3Bl
cnR5U2V0KiBpbmxpbmVTdHlsZURlY2woKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCkg
PyBhdHRyaWJ1dGVEYXRhKCktPmlubGluZVN0eWxlRGVjbCgpIDogMDsgfQogICAgIFN0eWxlUHJv
cGVydHlTZXQqIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpIHsgcmV0dXJuIGVuc3VyZUF0dHJpYnV0
ZURhdGEoKS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKHRoaXMpOyB9Ci0gICAgdmlydHVhbCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIE9WRVJSSURFIHsgcmV0dXJuIGVuc3VyZUlubGluZVN0
eWxlRGVjbCgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7IH0KKyAgICAKKyAgICAvLyBV
bmxpa2UgU3R5bGVQcm9wZXJ0eVNldCBzZXR0ZXJzLCB0aGVzZSBpbXBsZW1lbnQgaW52YWxpZGF0
aW9uLgorICAgIGJvb2wgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50
IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKKyAgICBib29sIHNldElubGluZVN0eWxl
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKKyAgICBib29sIHNldElu
bGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50ID0gZmFsc2UpOworICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCk7CisgICAgCisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSgpIE9WRVJSSURFIHsgcmV0dXJuIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5lbnN1
cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKHRoaXMpOyB9CiAKICAgICBTdHlsZVByb3BlcnR5
U2V0KiBhdHRyaWJ1dGVTdHlsZSgpOwogCkBAIC02Niw2ICs3Myw5IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBwYXJzZUF0dHJpYnV0ZSAoY2FsbGVkIHZpYSBzZXRBdHRyaWJ1dGUoKSkgYW5kCiAgICAg
Ly8gc3ZnQXR0cmlidXRlQ2hhbmdlZCAoY2FsbGVkIHdoZW4gZWxlbWVudC5jbGFzc05hbWUuYmFz
ZVZhbHVlIGlzIHNldCkKICAgICB2b2lkIGNsYXNzQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9t
aWNTdHJpbmcmIG5ld0NsYXNzU3RyaW5nKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpIGNv
bnN0OwpAQCAtNzUsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVzdHJveUlubGluZVN0
eWxlRGVjbCgpCiAgICAgewogICAgICAgICBpZiAoYXR0cmlidXRlRGF0YSgpKQotICAgICAgICAg
ICAgYXR0cmlidXRlRGF0YSgpLT5kZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CisgICAgICAgICAg
ICBhdHRyaWJ1dGVEYXRhKCktPmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wodGhpcyk7CiAgICAgfQog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgICAgICBmbG9hdCBkZXNpcmVkRm9u
dFNpemUgPSBtYXgoTWluaW11bUZvbnRTaXplLCBzdGFydGluZ0ZvbnRTaXplcy5nZXQobm9kZSkg
KyBzdHlsZS0+Zm9udFNpemVEZWx0YSgpKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IGlubGluZVN0eWxlRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRT
aXplKTsKICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOworICAgICAgICAgICAgZWxlbWVu
dC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKICAgICAg
ICAgICAgIGN1cnJlbnRGb250U2l6ZSA9IGNvbXB1dGVkRm9udFNpemUobm9kZSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBkZXNpcmVkRm9udFNpemUpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDE3ICsyMDUsMTYgQEAg
dm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxldAogICAgIFJlZlB0cjxIVE1M
RGl2RWxlbWVudD4gY29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+
ZG9jdW1lbnQoKSk7CiAgICAgY29udGFpbmVyLT5zZXRJZEF0dHJpYnV0ZShjb250YWluZXJFbGVt
ZW50SWRlbnRpZmllcik7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGNvbnRhaW5l
ci0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VXNlckRyYWcsIENTU1ZhbHVlTm9uZSk7Ci0gICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwgQ1NTVmFsdWVOb25lKTsKLSAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5LCBDU1NWYWx1ZVJlYWRP
bmx5KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBDU1NW
YWx1ZUhpZGRlbik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1
cnNvciwgQ1NTVmFsdWVEZWZhdWx0KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlUb3AsICIwIik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UmlnaHQsICIw
Iik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCAiMCIpOwotICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7CisgICAgY29udGFpbmVy
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIENTU1Zh
bHVlTm9uZSk7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0VXNlclNlbGVjdCwgQ1NTVmFsdWVOb25lKTsKKyAgICBjb250YWluZXItPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5LCBDU1NWYWx1ZVJl
YWRPbmx5KTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5LCBDU1NWYWx1ZUhpZGRlbik7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOworICAg
IGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgQ1NT
VmFsdWVEZWZhdWx0KTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlUb3AsICIwIik7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5UmlnaHQsICIwIik7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7CiAKICAgICBSZWZQdHI8SFRNTERp
dkVsZW1lbnQ+IG91dGxpbmUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKG1fdGFyZ2V0LT5kb2N1
bWVudCgpKTsKICAgICBvdXRsaW5lLT5zZXRJZEF0dHJpYnV0ZShvdXRsaW5lRWxlbWVudElkZW50
aWZpZXIpOwpAQCAtMjIzLDE2ICsyMjIsMTUgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVy
OjpjcmVhdGVEZWxldAogICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDQ7CiAgICAgY29uc3Qg
aW50IGJvcmRlclJhZGl1cyA9IDY7CiAKLSAgICBzdHlsZSA9IG91dGxpbmUtPmVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9u
LCBDU1NWYWx1ZUFic29sdXRlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHla
SW5kZXgsIFN0cmluZzo6bnVtYmVyKC0xMDAwMDAwKSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5VG9wLCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3RhcmdldC0+
cmVuZGVyQm94KCktPmJvcmRlclRvcCgpKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVJpZ2h0LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3Rhcmdl
dC0+cmVuZGVyQm94KCktPmJvcmRlclJpZ2h0KCkpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBt
X3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlckJvdHRvbSgpKSArICJweCIpOwotICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0
aCAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyTGVmdCgpKSArICJweCIpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlciwgU3RyaW5nOjpudW1iZXIoYm9yZGVy
V2lkdGgpICsgInB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC42KSIpOwotICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywgU3RyaW5nOjpudW1iZXIoYm9y
ZGVyUmFkaXVzKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVZp
c2liaWxpdHksIENTU1ZhbHVlVmlzaWJsZSk7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKKyAgICBvdXRs
aW5lLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5WkluZGV4LCBTdHJpbmc6Om51
bWJlcigtMTAwMDAwMCkpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlUb3AsIFN0cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5k
ZXJCb3goKS0+Ym9yZGVyVG9wKCkpICsgInB4Iik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVJpZ2h0LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGgg
LSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlclJpZ2h0KCkpICsgInB4Iik7CisgICAgb3V0
bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgU3RyaW5nOjpu
dW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3R0b20o
KSkgKyAicHgiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5TGVmdCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJlbmRlckJv
eCgpLT5ib3JkZXJMZWZ0KCkpICsgInB4Iik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlciwgU3RyaW5nOjpudW1iZXIoYm9yZGVyV2lkdGgpICsg
InB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC42KSIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsIFN0cmluZzo6bnVtYmVy
KGJvcmRlclJhZGl1cykgKyAicHgiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVWaXNpYmxlKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQob3V0bGluZS5nZXQo
KSwgZWMpOwpAQCAtMjQ3LDE0ICsyNDUsMTMgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVy
OjpjcmVhdGVEZWxldAogICAgIGNvbnN0IGludCBidXR0b25IZWlnaHQgPSAzMDsKICAgICBjb25z
dCBpbnQgYnV0dG9uQm90dG9tU2hhZG93T2Zmc2V0ID0gMjsKIAotICAgIHN0eWxlID0gYnV0dG9u
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5WkluZGV4LCBTdHJpbmc6Om51bWJlcigxMDAwMDAwKSk7Ci0gICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBTdHJpbmc6Om51bWJlcigoLWJ1dHRvbkhlaWdo
dCAvIDIpIC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3JkZXJUb3AoKSAtIChib3JkZXJXaWR0
aCAvIDIpICsgYnV0dG9uQm90dG9tU2hhZG93T2Zmc2V0KSArICJweCIpOwotICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIFN0cmluZzo6bnVtYmVyKCgtYnV0dG9uV2lkdGgg
LyAyKSAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyTGVmdCgpIC0gKGJvcmRlcldpZHRo
IC8gMikpICsgInB4Iik7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgs
IFN0cmluZzo6bnVtYmVyKGJ1dHRvbldpZHRoKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uSGVpZ2h0KSArICJw
eCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1Zh
bHVlVmlzaWJsZSk7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRleCwgU3RyaW5nOjpudW1iZXIoMTAwMDAwMCkpOwor
ICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgU3RyaW5n
OjpudW1iZXIoKC1idXR0b25IZWlnaHQgLyAyKSAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9y
ZGVyVG9wKCkgLSAoYm9yZGVyV2lkdGggLyAyKSArIGJ1dHRvbkJvdHRvbVNoYWRvd09mZnNldCkg
KyAicHgiKTsKKyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlM
ZWZ0LCBTdHJpbmc6Om51bWJlcigoLWJ1dHRvbldpZHRoIC8gMikgLSBtX3RhcmdldC0+cmVuZGVy
Qm94KCktPmJvcmRlckxlZnQoKSAtIChib3JkZXJXaWR0aCAvIDIpKSArICJweCIpOworICAgIGJ1
dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51
bWJlcihidXR0b25XaWR0aCkgKyAicHgiKTsKKyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKGJ1dHRvbkhlaWdodCkgKyAi
cHgiKTsKKyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlWaXNp
YmlsaXR5LCBDU1NWYWx1ZVZpc2libGUpOwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ig
PSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvcihtX2ZyYW1lKTsKICAgICBSZWZQdHI8SW1hZ2U+
IGJ1dHRvbkltYWdlOwpAQCAtMzEwLDEyICszMDcsMTIgQEAgdm9pZCBEZWxldGVCdXR0b25Db250
cm9sbGVyOjpzaG93KEhUTUxFbAogICAgIH0KIAogICAgIGlmIChtX3RhcmdldC0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikgewotICAgICAgICBtX3Rh
cmdldC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9z
aXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOworICAgICAgICBtX3RhcmdldC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKICAgICAg
ICAgbV93YXNTdGF0aWNQb3NpdGlvbmVkID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV90YXJn
ZXQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKSkgewotICAgICAgICBtX3Rh
cmdldC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Wklu
ZGV4LCAiMCIpOworICAgICAgICBtX3RhcmdldC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVpJbmRleCwgIjAiKTsKICAgICAgICAgbV93YXNBdXRvWkluZGV4ID0gdHJ1ZTsKICAg
ICB9CiB9CkBAIC0zMzEsOSArMzI4LDkgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpo
aWRlKCkKIAogICAgIGlmIChtX3RhcmdldCkgewogICAgICAgICBpZiAobV93YXNTdGF0aWNQb3Np
dGlvbmVkKQotICAgICAgICAgICAgbV90YXJnZXQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CisgICAgICAg
ICAgICBtX3RhcmdldC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9u
LCBDU1NWYWx1ZVN0YXRpYyk7CiAgICAgICAgIGlmIChtX3dhc0F1dG9aSW5kZXgpCi0gICAgICAg
ICAgICBtX3RhcmdldC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1By
b3BlcnR5WkluZGV4LCBDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgbV90YXJnZXQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlaSW5kZXgsIENTU1ZhbHVlQXV0byk7CiAgICAg
fQogCiAgICAgbV93YXNTdGF0aWNQb3NpdGlvbmVkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NDUsMTAgKzI3NDUsMTAgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KAogICAgIEFTU0VSVChlbGVtZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSk7CiAgICAgaWYgKCFlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
LSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQi
LCBmYWxzZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TmJzcE1v
ZGUsICJzcGFjZSIsIGZhbHNlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsKKyAgICBTdHlsZWRF
bGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1l
bnQpOworICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlXb3JkV3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSk7CisgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCAic3BhY2UiLCBm
YWxzZSk7CisgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UpOwogfQogCiAv
LyBTZWFyY2hlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50IGlmIG5vdGhpbmcg
aXMgc2VsZWN0ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzMiw5ICs1MzIsOSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
CiAgICAgICAgICAgICAvLyByZXN1bHRzLiBXZSBhbHJlYWR5IGtub3cgb25lIGlzc3VlIGJlY2F1
c2UgdGQgZWxlbWVudHMgaWdub3JlIHRoZWlyIGRpc3BsYXkgcHJvcGVydHkKICAgICAgICAgICAg
IC8vIGluIHF1aXJrcyBtb2RlICh3aGljaCBNYWlsLmFwcCBpcyBhbHdheXMgaW4pLiBXZSBzaG91
bGQgbG9vayBmb3IgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICBpZiAoaXNCbG9jayhlbGVt
ZW50KSkKLSAgICAgICAgICAgICAgICBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1ZUlubGluZSk7CisgICAgICAg
ICAgICAgICAgZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3Bs
YXksIENTU1ZhbHVlSW5saW5lKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigp
ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxvYXRpbmcoKSkKLSAgICAgICAg
ICAgICAgICBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIENvbG9ySW5w
dXRUeXBlOjp1cGRhdGVDb2xvclN3YXRjaCgpCiAgICAgaWYgKCFjb2xvclN3YXRjaCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY29sb3JTd2F0Y2gtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWxlbWVudCgpLT52YWx1ZSgp
LCBmYWxzZSk7CisgICAgY29sb3JTd2F0Y2gtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsIGVsZW1lbnQoKS0+dmFsdWUoKSwgZmFsc2UpOwogfQogCiBI
VE1MRWxlbWVudCogQ29sb3JJbnB1dFR5cGU6OnNoYWRvd0NvbG9yU3dhdGNoKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBA
IHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVAKICAgICBpZiAoIXBsYWNl
aG9sZGVyKQogICAgICAgICByZXR1cm47CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
cGxhY2Vob2xkZXItPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVZpc2liaWxpdHksIHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkgPyAidmlzaWJsZSIg
OiAiaGlkZGVuIiwgZWMpOworICAgIHBsYWNlaG9sZGVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSA/ICJ2
aXNpYmxlIiA6ICJoaWRkZW4iLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUz
LDcgKzI1Myw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCgpCiAgICAg
bV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKHN0YXRpY19jYXN0PGludD4oaW1hZ2VTaXplLndpZHRo
KCkgKiBzY2FsZSkpOwogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8
aW50PihpbWFnZVNpemUuaGVpZ2h0KCkgKiBzY2FsZSkpOwogICAgIAotICAgIG1faW1hZ2VFbGVt
ZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJz
b3IsICItd2Via2l0LXpvb20taW4iLCBmYWxzZSk7CisgICAgbV9pbWFnZUVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20taW4iLCBm
YWxzZSk7CiB9CiAKIHZvaWQgSW1hZ2VEb2N1bWVudDo6aW1hZ2VDbGlja2VkKGludCB4LCBpbnQg
eSkKQEAgLTMwNyw5ICszMDcsOSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNp
emUoKQogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRIZWlnaHQoaW1hZ2VTaXplLmhlaWdodCgpKTsK
ICAgICAKICAgICBpZiAoaW1hZ2VGaXRzSW5XaW5kb3coKSkKLSAgICAgICAgbV9pbWFnZUVsZW1l
bnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1
cnNvcik7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5yZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5Q3Vyc29yKTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5l
bnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICIt
d2Via2l0LXpvb20tb3V0IiwgZmFsc2UpOworICAgICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBm
YWxzZSk7CiAgICAgICAgIAogICAgIG1fZGlkU2hyaW5rSW1hZ2UgPSBmYWxzZTsKIH0KQEAgLTM0
MCw5ICszNDAsOSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKCkKICAg
ICAvLyBhbmQgc2V0IGl0IHRvIGEgem9vbSBvdXQgY3Vyc29yIGlmIHRoZSBpbWFnZSBkb2Vzbid0
IGZpdAogICAgIGlmICghbV9zaG91bGRTaHJpbmtJbWFnZSkgewogICAgICAgICBpZiAoZml0c0lu
V2luZG93KQotICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvcik7CisgICAgICAgICAgICBtX2lt
YWdlRWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvcik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20t
b3V0IiwgZmFsc2UpOworICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0IiwgZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9W
YWxpZGF0aW9uTWVzc2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9W
YWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTQgKzEy
MCwxMyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RCdWJibGVQb3NpdGlvbihjb25zdCBMCiAgICAgICAg
IGhvc3RZIC09IGNvbnRhaW5lckxvY2F0aW9uLnkoKSArIGNvbnRhaW5lci0+Ym9yZGVyVG9wKCk7
CiAgICAgfQogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBidWJibGUtPmVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwg
aG9zdFkgKyBob3N0UmVjdC5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Cisg
ICAgYnViYmxlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBob3N0WSAr
IGhvc3RSZWN0LmhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAvLyBU
aGUgJ2xlZnQnIHZhbHVlIG9mIDo6LXdlYmtpdC12YWxpZGF0aW9uLWJ1YmJsZS1hcnJvdy4KICAg
ICBjb25zdCBpbnQgYnViYmxlQXJyb3dUb3BPZmZzZXQgPSAzMjsKICAgICBkb3VibGUgYnViYmxl
WCA9IGhvc3RYOwogICAgIGlmIChob3N0UmVjdC53aWR0aCgpIC8gMiA8IGJ1YmJsZUFycm93VG9w
T2Zmc2V0KQogICAgICAgICBidWJibGVYID0gbWF4KGhvc3RYICsgaG9zdFJlY3Qud2lkdGgoKSAv
IDIgLSBidWJibGVBcnJvd1RvcE9mZnNldCwgMC4wKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlMZWZ0LCBidWJibGVYLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAg
ICBidWJibGUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBidWJibGVY
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIH0KIAogdm9pZCBWYWxpZGF0aW9uTWVzc2Fn
ZTo6YnVpbGRCdWJibGVUcmVlKFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiopCkBAIC0xMzgsNyAr
MTM3LDcgQEAgdm9pZCBWYWxpZGF0aW9uTWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKAogICAgIG1f
YnViYmxlLT5zZXRTaGFkb3dQc2V1ZG9JZCgiLXdlYmtpdC12YWxpZGF0aW9uLWJ1YmJsZSIpOwog
ICAgIC8vIE5lZWQgdG8gZm9yY2UgcG9zaXRpb246YWJzb2x1dGUgYmVjYXVzZSBSZW5kZXJNZW51
TGlzdCBkb2Vzbid0IGFzc3VtZSBpdAogICAgIC8vIGNvbnRhaW5zIG5vbi1hYnNvbHV0ZSBvciBu
b24tZml4ZWQgcmVuZGVyZXJzIGFzIGNoaWxkcmVuLgotICAgIG1fYnViYmxlLT5lbnN1cmVJbmxp
bmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVB
YnNvbHV0ZSk7CisgICAgbV9idWJibGUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgaG9zdC0+ZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChtX2J1YmJsZS5nZXQo
KSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gMTA3NzM1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MiwxMiArOTIsMTIgQEAgTWVkaWFDb250cm9sRWxlbWVudDo6TWVk
aWFDb250cm9sRWxlbWVudAogCiB2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQogewot
ICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXkpOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5
KTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBlbnN1cmVJ
bmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1
ZU5vbmUpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBD
U1NWYWx1ZU5vbmUpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x
NzUsMTcgKzE3NSwxNSBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZW5kRHJhZygp
CiAKIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBMYXlv
dXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBlbnN1
cmVJbmxpbmVTdHlsZURlY2woKTsKLQogICAgIGRvdWJsZSBsZWZ0ID0gcG9zaXRpb24ueCgpOwog
ICAgIGRvdWJsZSB0b3AgPSBwb3NpdGlvbi55KCk7CiAKICAgICAvLyBTZXQgdGhlIGxlZnQgYW5k
IHRvcCB0byBjb250cm9sIHRoZSBwYW5lbCdzIHBvc2l0aW9uOyB0aGlzIGRlcGVuZHMgb24gaXQg
YmVpbmcgYWJzb2x1dGUgcG9zaXRpb25lZC4KICAgICAvLyBTZXQgdGhlIG1hcmdpbiB0byB6ZXJv
IHNpbmNlIHRoZSBwb3NpdGlvbiBwYXNzZWQgaW4gd2lsbCBhbHJlYWR5IGluY2x1ZGUgdGhlIGVm
ZmVjdCBvZiB0aGUgbWFyZ2luLgotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxl
ZnQsIGxlZnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAwLjAsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpblRvcCwgMC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgbGVmdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgdG9wLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCAwLjAsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAg
IGNsYXNzTGlzdCgpLT5hZGQoImRyYWdnZWQiLCBpZ25vcmVkKTsKQEAgLTE5MywxMiArMTkxLDEw
IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzZXRQb3NpdGkKIAogdm9pZCBNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnJlc2V0UG9zaXRpb24oKQogewotICAgIFN0eWxlUHJvcGVy
dHlTZXQqIHN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0KLSAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0KTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlUb3ApOwotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkxlZnQpOwotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRv
cCk7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQpOworICAg
IHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3ApOworICAgIHJlbW92ZUlu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0KTsKKyAgICByZW1vdmVJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgaWdub3JlZDsKICAgICBjbGFzc0xpc3QoKS0+cmVtb3ZlKCJkcmFnZ2VkIiwgaWdub3JlZCk7
CkBAIC0yMTEsMTAgKzIwNyw5IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtl
T3BhcXUKIAogICAgIGRvdWJsZSBkdXJhdGlvbiA9IGRvY3VtZW50KCktPnBhZ2UoKSA/IGRvY3Vt
ZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCkgOiAw
OwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBlbnN1cmVJbmxpbmVTdHlsZURlY2wo
KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJv
cGVydHksIENTU1Byb3BlcnR5T3BhY2l0eSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbiwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAx
LjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9w
YWNpdHkpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uRHVyYXRpb24sIGR1cmF0aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOworICAg
IHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5LCAxLjAsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIAogICAgIG1fb3BhcXVlID0gdHJ1ZTsKIH0KQEAgLTIy
NCwxMCArMjE5LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VUcmFucwog
ICAgIGlmICghbV9vcGFxdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNp
dHkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25E
dXJhdGlvbiwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91
dER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUyk7Ci0gICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwgMC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKKyAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCBkb2N1bWVudCgpLT5w
YWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
T3BhY2l0eSwgMC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKICAgICBtX29w
YXF1ZSA9IGZhbHNlOwogfQpAQCAtNDM0LDEyICs0MjgsMTIgQEAgTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50OjpNZWRpYUNvbnRyb2xJbgogCiB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6
c2hvdygpCiB7Ci0gICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5RGlzcGxheSk7CisgICAgcmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eURpc3BsYXkpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6aGlkZSgp
CiB7Ci0gICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
RGlzcGxheSwgQ1NTVmFsdWVOb25lKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVOb25lKTsKIH0KIAogCkBAIC0xMjExLDEzICsxMjA1LDEz
IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICBmbG9hdCBm
b250U2l6ZSA9IG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCkgKiB2aWRlb0hlaWdo
dEZvbnRTaXplUGVyY2VudGFnZTsKICAgICBpZiAoZm9udFNpemUgIT0gbV9mb250U2l6ZSkgewog
ICAgICAgICBtX2ZvbnRTaXplID0gZm9udFNpemU7Ci0gICAgICAgIGVuc3VyZUlubGluZVN0eWxl
RGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihm
b250U2l6ZSkgKyAicHgiKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihmb250U2l6ZSkgKyAicHgiKTsKICAgICB9CiAK
ICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KG1fdmlkZW9E
aXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVvRGlzcGxheVNpemUuaGVpZ2h0KCkgLSAobV92aWRlb0Rp
c3BsYXlTaXplLmhlaWdodCgpICogdHJhY2tCb3R0b21NdWx0aXBsaWVyKSk7CiAgICAgaWYgKGJv
dHRvbSAhPSBtX2JvdHRvbSkgewogICAgICAgICBtX2JvdHRvbSA9IGJvdHRvbTsKLSAgICAgICAg
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBT
dHJpbmc6Om51bWJlcihib3R0b20pICsgInB4Iik7CisgICAgICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlCb3R0b20sIFN0cmluZzo6bnVtYmVyKGJvdHRvbSkgKyAicHgiKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0
ZXJTaGFkb3dFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NyArOTMsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1ldGVyVmFsdWVFbGVtZW50OjpzCiAKIHZv
aWQgTWV0ZXJWYWx1ZUVsZW1lbnQ6OnNldFdpZHRoUGVyY2VudGFnZShkb3VibGUgd2lkdGgpCiB7
Ci0gICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIHdpZHRoLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgd2lkdGgsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc1NoYWRvd0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYg
UHJvZ3Jlc3NWYWx1ZUVsZW1lbnQKIAogdm9pZCBQcm9ncmVzc1ZhbHVlRWxlbWVudDo6c2V0V2lk
dGhQZXJjZW50YWdlKGRvdWJsZSB3aWR0aCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2wo
KS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgd2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdpZHRoLCB3aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsOSArMzM1LDgg
QEAgUGFzc1JlZlB0cjxUcmFja0xpbWl0ZXJFbGVtZW50PiBUcmFja0xpbQogewogICAgIFJlZlB0
cjxUcmFja0xpbWl0ZXJFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IFRyYWNrTGltaXRl
ckVsZW1lbnQoZG9jdW1lbnQpKTsKIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZWxl
bWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVIaWRkZW4pOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CisgICAgZWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVlSGlk
ZGVuKTsKKyAgICBlbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9z
aXRpb24sIENTU1ZhbHVlU3RhdGljKTsKIAogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMTA3NzM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTczOCwyOSArMTczOCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjpy
ZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgTGF5b3V0U2l6ZSBkaWZmZXJlbmNlID0gKGN1cnJl
bnRTaXplICsgbmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFuZGVkVG8obWluaW11
bVNpemUpIC0gY3VycmVudFNpemU7CiAKICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRFbGVt
ZW50KCkpOwotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24gPSBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwor
ICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4oZWxlbWVudCk7CiAgICAgYm9vbCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5z
dHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YOwogCiAgICAgaWYgKHJlc2l6ZSAhPSBS
RVNJWkVfVkVSVElDQUwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7CiAgICAgICAgIGlmIChlbGVt
ZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVEZWNsYXJh
dGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBTdHJpbmc6Om51bWJlcihy
ZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7Ci0gICAg
ICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJp
Z2h0LCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3Ip
ICsgInB4IiwgZmFsc2UpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVy
LT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5S
aWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9y
KSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0
aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMCA6IHJlbmRlcmVy
LT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0
aCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lk
dGgoKSkgKyAicHgiLCBmYWxzZSk7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYmFzZVdpZHRoICsg
ZGlmZmVyZW5jZS53aWR0aCgpKSArICJweCIsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAocmVz
aXplICE9IFJFU0laRV9IT1JJWk9OVEFMICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKICAgICAg
ICAgaWYgKGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8v
IE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBz
dHlsZURlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgU3RyaW5n
OjpudW1iZXIocmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8g
em9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6Om51bWJl
cihyZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKKyAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAv
IHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVu
aXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/
IDAgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKICAgICAgICAgYmFzZUhl
aWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZURlY2xhcmF0aW9u
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5nOjpudW1iZXIoYmFzZUhlaWdo
dCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpICsgInB4IiwgZmFsc2UpOworICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6
Om51bWJlcihiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSkgKyAicHgiLCBmYWxzZSk7
CiAgICAgfQogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAJKHJldmlzaW9uIDEwNzczNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNyArMzMy
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRAogICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKCkpOwogICAgIH0KICAg
ICBpZiAoSFRNTEVsZW1lbnQqIHBsYWNlaG9sZGVyID0gaW5wdXRFbGVtZW50KCktPnBsYWNlaG9s
ZGVyRWxlbWVudCgpKQotICAgICAgICBwbGFjZWhvbGRlci0+ZW5zdXJlSW5saW5lU3R5bGVEZWNs
KCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dE92ZXJmbG93LCB0ZXh0U2hvdWxkQmVUcnVu
Y2F0ZWQoKSA/IENTU1ZhbHVlRWxsaXBzaXMgOiBDU1NWYWx1ZUNsaXApOworICAgICAgICBwbGFj
ZWhvbGRlci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdywg
dGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgPyBDU1NWYWx1ZUVsbGlwc2lzIDogQ1NTVmFsdWVDbGlw
KTsKICAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3NzM1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgaW5saW5lIFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZHRm9udEZhY2VFbAog
ICAgICwgbV9mb250RmFjZVJ1bGUoQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUoKSkKIHsKICAgICBB
U1NFUlQoaGFzVGFnTmFtZShmb250X2ZhY2VUYWcpKTsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gc3R5bGVEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX2ZvbnRG
YWNlUnVsZS5nZXQoKSk7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlRGVjbGFy
YXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBzdHlsZURlY2xhcmF0aW9u
LT5zZXRTdHJpY3RQYXJzaW5nKHRydWUpOwogICAgIG1fZm9udEZhY2VSdWxlLT5zZXREZWNsYXJh
dGlvbihzdHlsZURlY2xhcmF0aW9uLnJlbGVhc2UoKSk7CiB9CkBAIC0zMjEsNiArMzIxLDcgQEAg
dm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvYwogICAgIFNWR0VsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQoKS0+bWFwcGVkRWxlbWVudFNo
ZWV0KCktPmFwcGVuZChtX2ZvbnRGYWNlUnVsZSk7CiAgICAgbV9mb250RmFjZVJ1bGUtPnNldFBh
cmVudFN0eWxlU2hlZXQoZG9jdW1lbnQoKS0+bWFwcGVkRWxlbWVudFNoZWV0KCkpOworICAgIG1f
Zm9udEZhY2VSdWxlLT5kZWNsYXJhdGlvbigpLT5zZXRDb250ZXh0U3R5bGVTaGVldChkb2N1bWVu
dCgpLT5tYXBwZWRFbGVtZW50U2hlZXQoKSk7CiAgICAgcmVidWlsZEZvbnRGYWNlKCk7CiB9CiAK
QEAgLTM0OCw2ICszNDksNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlRnJvbU1h
cHBlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKyAgICBtX2ZvbnRGYWNl
UnVsZS0+ZGVjbGFyYXRpb24oKS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoMCk7CiAgICAgZG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="129092"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127228</attachid>
            <date>2012-02-15 13:54:33 -0800</date>
            <delta_ts>2012-02-15 22:28:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-rule-13.patch</filename>
            <type>text/plain</type>
            <size>82654</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxMi0wMi0xNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgY29udGV4dCBp
bnZhbGlkYXRpb24gY29kZSBvdXQgZnJvbSBTdHlsZVByb3BlcnR5U2V0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQgc2hvdWxk
IGJlIGluZGVwZW5kZW50IG9mIGl0cyBjb250ZXh0IHNvIHRoYXQgdGhleSBjYW4gaW4gdGhlIGZ1
dHVyZQorICAgICAgICBiZSBzaGFyZWQgYmV0d2VlbiBkb2N1bWVudHMuIFRoZSBjb250ZXh0IGlu
dmFsaWRhdGlvbiBjb2RlIHNob3VsZCBtb3ZlIHRvIHRoZSBDU1NPTSB3cmFwcGVyLgorICAgICAg
ICAKKyAgICAgICAgUGFyZW50IHJ1bGUgYW5kIHBhcmVudCBlbGVtZW50IHBvaW50ZXJzIG1vdmUg
dG8gdGhlIENTU09NIHdyYXBwZXIgY2xhc3Nlcy4gCisgICAgICAgIAorICAgICAgICBUaGUgd3Jh
cHBlciBpcyByZXNwb25zaWJsZSBvZiBpbnZhbGlkYXRpbmcgdGhlIGVsZW1lbnQgb3IgZG9jdW1l
bnQgc3R5bGUgb24gbXV0YXRpb24uCisgICAgICAgIEluIGNhc2Ugb2YgaW50ZXJuYWwgbXV0YXRp
b24gb2Ygc3R5bGUgYXR0cmlidXRlLCBTdHlsZWRFbGVtZW50IHRha2VzIGNhcmUgb2YgdGhlIAor
ICAgICAgICBpbnZhbGlkYXRpb24uCisgICAgICAgIAorICAgICAgICBUaGUgU3R5bGVQcm9wZXJ0
eVNldCB3aWxsIHN0aWxsIGhhdmUgYSBwb2ludGVyIHRvIHRoZSBjb250ZXh0IHN0eWxlc2hlZXQg
c28gdGhlIHBhdGNoCisgICAgICAgIGRvZXNuJ3QgYWN0dWFsbHkgcmVkdWNlIG1lbW9yeSB1c2Fn
ZS4gVGhhdCBwb2ludGVyIHdpbGwgYmUgZmFjdG9yZWQgb3V0IGxhdGVyLgorCisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1
bGU6On5DU1NGb250RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlUnVsZTo6c3R5bGUpOgorICAgICAgICAqIGNz
cy9DU1NQYWdlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVsZTo6fkNTU1Bh
Z2VSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhZ2VSdWxlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVsZTo6c2V0
RGVjbGFyYXRpb24pOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpjcmVhdGVQYWdlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUtl
eWZyYW1lUnVsZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpzZXREZWNsYXJhdGlvbik6CisgICAgICAgICog
Y3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAgICAoUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6cGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVS
ZWNhbGMpOgorICAgICAgICAoUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OlJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpjbGVhclBhcmVudFJ1
bGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbmxpbmVDU1NTdHlsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OklubGlu
ZUNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVDU1NT
dHlsZURlY2xhcmF0aW9uOjpjbGVhclBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldDo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlUHJvcGVydGllc0luU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dHlTZXQ6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJl
Q1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0
OjplbnN1cmVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVByb3BlcnR5U2V0OjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50UnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpjbGVhclBhcmVudEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpy
ZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZUNT
U1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6CisgICAg
ICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OnVzZVN0cmljdFBhcnNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Y29udGV4dFN0eWxlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6c2V0Q29udGV4dFN0eWxlU2hlZXQpOgorICAgICAg
ICAqIGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlOjp+V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYktpdENTU0tleWZyYW1lUnVsZTo6c2V0RGVjbGFyYXRpb24pOgorICAgICAgICAq
IGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENT
U0tleWZyYW1lUnVsZTo6c3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6ZW5zdXJlSW5s
aW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpk
ZXN0cm95SW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuaDoKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKiBkb20vU3R5
bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxl
bWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1l
bnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxl
bWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogZG9tL1N0eWxlZEVs
ZW1lbnQuaDoKKyAgICAgICAgKFN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6ZGVzdHJveUlubGluZVN0eWxlRGVjbCk6CisgICAgICAgICogZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgICogZWRpdGluZy9EZWxl
dGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXI6OmNyZWF0ZURlbGV0aW9uVUkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlQnV0
dG9uQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVCdXR0b25Db250
cm9sbGVyOjpoaWRlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVt
b3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUp
OgorICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3JJbnB1dFR5cGU6OnVwZGF0ZUNvbG9yU3dhdGNoKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAq
IGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50
OjpyZXNpemVJbWFnZVRvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OnJl
c3RvcmVJbWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6d2luZG93
U2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRqdXN0QnViYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJlZSk6CisgICAgICAgICogaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sRWxlbWVudDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xFbGVtZW50
OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojpy
ZXNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dDo6bWFrZU9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ6Om1ha2VUcmFuc3BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZXRlclNo
YWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWV0ZXJWYWx1ZUVsZW1lbnQ6OnNl
dFdpZHRoUGVyY2VudGFnZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzVmFsdWVFbGVtZW50OjpzZXRX
aWR0aFBlcmNlbnRhZ2UpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0xpbWl0ZXJFbGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjpTVkdGb250RmFj
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJl
bW92ZUZyb21NYXBwZWRFbGVtZW50U2hlZXQpOgorCiAyMDEyLTAyLTE1ICBPamFuIFZhZmFpICA8
b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSBvZiBmbGV4LWl0
ZW0tYWxpZ246YXV0byBzaG91bGQgcmVzb2x2ZSB0byBpdCdzIHBhcmVudCdzIGZsZXgtYWxpZ24g
dmFsdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lv
biAxMDc4MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBDU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNl
UnVsZShDU1NTdHlsCiBDU1NGb250RmFjZVJ1bGU6On5DU1NGb250RmFjZVJ1bGUoKQogewogICAg
IGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0eWxlLT5jbGVhclBhcmVudFJ1bGUoKTsKKyAgICAg
ICAgbV9zdHlsZS0+Y2xlYXJQYXJlbnRSdWxlKHRoaXMpOwogfQogCiBTdHJpbmcgQ1NTRm9udEZh
Y2VSdWxlOjpjc3NUZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VS
dWxlLmgJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICB+
Q1NTRm9udEZhY2VSdWxlKCk7CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5z
dXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24odGhpcyk7IH0KIAogICAgIFN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24g
MTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBDU1NQYWdlUnVsZTo6Q1NTUGFnZVJ1bGUoQ1NTU3R5bGVT
aGVldCogCiAKIENTU1BhZ2VSdWxlOjp+Q1NTUGFnZVJ1bGUoKQogeworICAgIG1fc3R5bGUtPmNs
ZWFyUGFyZW50UnVsZSh0aGlzKTsKIH0KIAogU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRl
eHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDEwNzgy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfkNTU1BhZ2VSdWxlKCk7CiAKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUtPmVu
c3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS0+ZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRp
b24odGhpcyk7IH0KIAogICAgIFN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKICAgICB2b2lk
IHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlLmdldCgpOyB9CiAgICAgCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5h
ZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9u
KFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIHsgQVNTRVJUKHN0eWxlLT5wYXJl
bnRSdWxlSW50ZXJuYWwoKSA9PSB0aGlzKTsgbV9zdHlsZSA9IHN0eWxlOyB9CisgICAgdm9pZCBz
ZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSB7IG1fc3R5
bGUgPSBzdHlsZTsgfQogCiBwcml2YXRlOgogICAgIENTU1BhZ2VSdWxlKENTU1N0eWxlU2hlZXQq
IHBhcmVudCwgaW50IHNvdXJjZUxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJ
KHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NzYwLDcgKzg3NjAsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNy
ZWF0ZVN0eWxlUnVsZShWZWN0CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNl
bGVjdG9ycyk7CiAgICAgICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAg
ICAgIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwotICAgICAgICBydWxlLT5zZXREZWNsYXJh
dGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0
aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9wYXJzZWRQcm9wZXJ0
aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcmVzdWx0ID0gcnVsZS5nZXQo
KTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgICAg
ICBpZiAobV9ydWxlUmFuZ2VNYXApIHsKQEAgLTg3OTksNyArODc5OSw3IEBAIENTU1J1bGUqIENT
U1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAgICAgfQogICAgIH0KICAgICBSZWZQ
dHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlID0gQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUobV9zdHls
ZVNoZWV0KTsKLSAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMp
KTsKKyAgICBydWxlLT5zZXREZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobV9z
dHlsZVNoZWV0LCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwog
ICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIENTU0ZvbnRGYWNlUnVsZSogcmVzdWx0ID0gcnVs
ZS5nZXQoKTsKICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CkBAIC04
ODcwLDcgKzg4NzAsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NP
CiAgICAgICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2VsZWN0b3JWZWN0
b3I7CiAgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAg
ICBydWxlLT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcnVs
ZS0+c2V0RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHJ1bGUuZ2V0KCksIG1f
cGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIHJ1bGUt
PnNldERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1f
cGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAgICAgICAgIHBhZ2VS
dWxlID0gcnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxl
YXNlKCkpOwogICAgIH0KQEAgLTg5NTQsNyArODk1NCw3IEBAIFdlYktpdENTU0tleWZyYW1lUnVs
ZSogQ1NTUGFyc2VyOjpjcmVhdGUKIAogICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+
IGtleWZyYW1lID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsK
ICAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dChrZXlTdHJpbmcpOwotICAgIGtleWZyYW1lLT5zZXRE
ZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoa2V5ZnJhbWUuZ2V0KCksIG1fcGFy
c2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAga2V5ZnJhbWUtPnNl
dERlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1fcGFy
c2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7CiAKICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlzaW9u
IDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENTU1N0eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKENTU1N0
eWxlU2hlZXQKIENTU1N0eWxlUnVsZTo6fkNTU1N0eWxlUnVsZSgpCiB7CiAgICAgaWYgKG1fc3R5
bGUpCi0gICAgICAgIG1fc3R5bGUtPmNsZWFyUGFyZW50UnVsZSgpOworICAgICAgICBtX3N0eWxl
LT5jbGVhclBhcmVudFJ1bGUodGhpcyk7CiAgICAgY2xlYW51cCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxMDc4MjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxMiBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2Vs
ZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7
IH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUtPmVuc3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKHRoaXMpOyB9CiAKICAgICBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5h
ZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9u
KFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIHsgQVNTRVJUKHN0eWxlLT5wYXJl
bnRSdWxlSW50ZXJuYWwoKSA9PSB0aGlzKTsgbV9zdHlsZSA9IHN0eWxlOyB9CisgICAgdm9pZCBz
ZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSB7IG1fc3R5
bGUgPSBzdHlsZTsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yTGlzdDsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQq
IGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMiArNTYsMTYgQEAgc3RhdGljIFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwJiBwcm9w
ZQogY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxl
RGVjbGFyYXRpb24gewogcHVibGljOgogICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5
U2V0KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRF
bGVtZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCByZWYoKSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPnJlZigpOyB9CiAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJREUgeyBtX3Byb3BlcnR5U2V0LT5kZXJlZigpOyB9CiAK
LSAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKQEAgLTgxLDE2ICs4NSw1MyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1h
a2VNdXRhYmxlKCkgT1ZFUlJJREU7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5
bGVSZWNhbGMoKSB7IH07CisKK3Byb3RlY3RlZDoKICAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3By
b3BlcnR5U2V0OwogfTsKIAorY2xhc3MgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCit7CitwdWJsaWM6CisgICAgUnVsZUNTU1N0
eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBh
cmVudFJ1bGUpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3Bl
cnR5U2V0KQorICAgICAgICAsIG1fcGFyZW50UnVsZShwYXJlbnRSdWxlKSAKKyAgICB7CisgICAg
fQorCitwcml2YXRlOiAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJl
bnRSdWxlKCkgeyBtX3BhcmVudFJ1bGUgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICAKKyAgICBDU1NSdWxlKiBtX3BhcmVudFJ1bGU7Cit9OworCitj
bGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24o
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0
KQorICAgICAgICAsIG1fcGFyZW50RWxlbWVudChwYXJlbnRFbGVtZW50KSAKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVudDsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVh
clBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxlbWVudCA9IDA7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworCisgICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRF
bGVtZW50OworfTsKKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlv
blNjb3BlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZUF0dHJpYnV0ZU11dGF0aW9u
U2NvcGUpOwogcHVibGljOgotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZShTdHlsZVBy
b3BlcnR5U2V0KiBkZWNsKQorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZShQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGRlY2wpCiAgICAgewogICAgICAgICArK3Nfc2NvcGVD
b3VudDsKIApAQCAtMTAzLDggKzE0NCw2IEBAIHB1YmxpYzoKICAgICAgICAgc19jdXJyZW50RGVj
bCA9IGRlY2w7CiAKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgICAgICBpZiAo
IXNfY3VycmVudERlY2wtPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKQotICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIXNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9tdXRhdGlvblJlY2lwaWVudHMgPSBNdXRhdGlv
bk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9yQXR0cmlidXRlc011dGF0aW9uKHNfY3Vy
cmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHlsZUF0dHIpOwpAQCAtMTMy
LDEwICsxNzEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIgaW50ZXJuYWwgc3RhdGUgYmVmb3JlIGNhbGxpbmcg
SW5zcGVjdG9yJ3MgY29kZS4KLSAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogbG9jYWxDb3B5U3R5
bGVEZWNsID0gc19jdXJyZW50RGVjbDsKKyAgICAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uKiBsb2NhbENvcHlTdHlsZURlY2wgPSBzX2N1cnJlbnREZWNsOwogICAgICAgICBzX2N1
cnJlbnREZWNsID0gMDsKICAgICAgICAgc19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsK
LSAgICAgICAgaWYgKGxvY2FsQ29weVN0eWxlRGVjbC0+aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9u
KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5
bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3VtZW50KCkpCisgICAgICAgIGlmIChsb2NhbENv
cHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVu
dEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKSwgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkp
OwogICAgIH0KIApAQCAtMTQ4LDEzICsxODcsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRJ
bnZhbGlkYXRlU3R5bGVBdHRyKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzX2N1cnJlbnREZWNs
LT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSk7CiAgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5z
cGVjdG9yID0gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHVuc2lnbmVkIHNf
c2NvcGVDb3VudDsKLSAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogc19jdXJyZW50RGVjbDsK
KyAgICBzdGF0aWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBzX2N1cnJlbnREZWNs
OwogICAgIHN0YXRpYyBib29sIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yOwogI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCiAgICAgc3RhdGljIGJvb2wgc19zaG91bGREZWxpdmVyOwpAQCAt
MTY1LDcgKzIwMyw3IEBAIHByaXZhdGU6CiB9OwogCiB1bnNpZ25lZCBTdHlsZUF0dHJpYnV0ZU11
dGF0aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7Ci1TdHlsZVByb3BlcnR5U2V0KiBTdHlsZUF0
dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAwOworUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKiBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERl
Y2wgPSAwOwogYm9vbCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkTm90aWZ5
SW5zcGVjdG9yID0gZmFsc2U7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKIGJvb2wg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKQEAg
LTE3NSwzOSArMjEzLDMxIEBAIGJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3No
b3UKIAogU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldCgpCiAgICAgOiBtX3N0cmlj
dFBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX3BhcmVudElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1f
aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNDU1NPTVdyYXBwZXIo
ZmFsc2UpCi0gICAgLCBtX3BhcmVudChzdGF0aWNfY2FzdDxDU1NSdWxlKj4oMCkpCisgICAgLCBt
X2NvbnRleHRTdHlsZVNoZWV0KDApCiB7CiB9CiAKLVN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJv
cGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSkKLSAgICA6IG1fc3RyaWN0UGFyc2luZyghcGFy
ZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCi0gICAgLCBtX3BhcmVu
dElzRWxlbWVudChmYWxzZSkKLSAgICAsIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGZhbHNl
KQorU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NTUHJv
cGVydHk+JiBwcm9wZXJ0aWVzKQorICAgIDogbV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCisgICAg
LCBtX3N0cmljdFBhcnNpbmcodHJ1ZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQot
ICAgICwgbV9wYXJlbnQocGFyZW50UnVsZSkKKyAgICAsIG1fY29udGV4dFN0eWxlU2hlZXQoMCkK
IHsKKyAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAotU3R5bGVQcm9wZXJ0eVNl
dDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBWZWN0b3I8Q1NT
UHJvcGVydHk+JiBwcm9wZXJ0aWVzKQotICAgIDogbV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCi0g
ICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVudFJ1bGUgfHwgcGFyZW50UnVsZS0+dXNlU3RyaWN0
UGFyc2luZygpKQotICAgICwgbV9wYXJlbnRJc0VsZW1lbnQoZmFsc2UpCi0gICAgLCBtX2lzSW5s
aW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVy
dHlTZXQoQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCisgICAgOiBtX3N0cmljdFBh
cnNpbmcoIWNvbnRleHRTdHlsZVNoZWV0IHx8IGNvbnRleHRTdHlsZVNoZWV0LT51c2VTdHJpY3RQ
YXJzaW5nKCkpCiAgICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLSAgICAsIG1fcGFyZW50
KHBhcmVudFJ1bGUpCisgICAgLCBtX2NvbnRleHRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0
KQogewotICAgIG1fcHJvcGVydGllcy5zaHJpbmtUb0ZpdCgpOwogfQogCi1TdHlsZVByb3BlcnR5
U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3Bl
cnR5KiBjb25zdCAqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotICAgIDogbV9zdHJp
Y3RQYXJzaW5nKCFwYXJlbnRSdWxlIHx8IHBhcmVudFJ1bGUtPnVzZVN0cmljdFBhcnNpbmcoKSkK
LSAgICAsIG1fcGFyZW50SXNFbGVtZW50KGZhbHNlKQotICAgICwgbV9pc0lubGluZVN0eWxlRGVj
bGFyYXRpb24oZmFsc2UpCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1N0
eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0LCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiBw
cm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKKyAgICA6IG1fc3RyaWN0UGFyc2luZyghY29u
dGV4dFN0eWxlU2hlZXQgfHwgY29udGV4dFN0eWxlU2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSkK
ICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotICAgICwgbV9wYXJlbnQocGFyZW50UnVs
ZSkKKyAgICAsIG1fY29udGV4dFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAg
bV9wcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtUHJvcGVydGllcyk7CiAgICAg
SGFzaE1hcDxpbnQsIGJvb2w+IGNhbmRpZGF0ZXM7CkBAIC0yMjAsNyArMjUwLDcgQEAgU3R5bGVQ
cm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChDU1NSdQogICAgICAgICBpZiAoaXQgIT0gY2Fu
ZGlkYXRlcy5lbmQoKSkgewogICAgICAgICAgICAgaWYgKCFpbXBvcnRhbnQgJiYgaXQtPnNlY29u
ZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LT5pZCgpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgcmVtb3ZlUHJvcGVy
dHkocHJvcGVydHktPmlkKCkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9wcm9wZXJ0aWVzLmFw
cGVuZCgqcHJvcGVydHkpOwpAQCAtMjI4LDE1ICsyNTgsNiBAQCBTdHlsZVByb3BlcnR5U2V0OjpT
dHlsZVByb3BlcnR5U2V0KENTU1J1CiAgICAgfQogfQogCi1TdHlsZVByb3BlcnR5U2V0OjpTdHls
ZVByb3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIGJvb2wgaXNJbmxpbmVT
dHlsZSkKLSAgICA6IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKLSAgICAsIG1fcGFyZW50SXNFbGVt
ZW50KHRydWUpCi0gICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihpc0lubGluZVN0eWxl
KQotICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCi0gICAgLCBtX3BhcmVudChwYXJlbnRF
bGVtZW50KQotewotfQotCiBTdHlsZVByb3BlcnR5U2V0Ojp+U3R5bGVQcm9wZXJ0eVNldCgpCiB7
CiAgICAgQVNTRVJUKCFtX2hhc0NTU09NV3JhcHBlciB8fCBwcm9wZXJ0eVNldENTU09NV3JhcHBl
ck1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKQEAgLTI0NCwxNSArMjY1LDYgQEAgU3R5bGVQcm9wZXJ0
eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQogICAgICAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBl
ck1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotQ1NTU3R5bGVTaGVldCogU3R5bGVQcm9wZXJ0eVNl
dDo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIGlmIChtX3BhcmVudElzRWxlbWVu
dCkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BhcmVudC5lbGVtZW50ID8gbV9w
YXJlbnQuZWxlbWVudC0+ZG9jdW1lbnQoKSA6IDA7Ci0gICAgICAgIHJldHVybiBkb2N1bWVudCA/
IGRvY3VtZW50LT5lbGVtZW50U2hlZXQoKSA6IDA7Ci0gICAgfQotICAgIHJldHVybiBtX3BhcmVu
dC5ydWxlID8gbV9wYXJlbnQucnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKLX0KLQogdm9p
ZCBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCYgb3RoZXIpCiB7CiAgICAgbV9wcm9wZXJ0aWVzID0gb3RoZXIubV9wcm9wZXJ0aWVzOwpA
QCAtNjcxLDY4ICs2ODMsMzggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVQcm9wZXJ0eVNl
dDo6ZwogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKIH0KIAot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVT
aG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkKIHsKICAgICBDU1NQcm9wZXJ0eUxvbmdo
YW5kIGxvbmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICBpZiAo
IWxvbmdoYW5kLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJl
bW92ZVByb3BlcnRpZXNJblNldChsb25naGFuZC5wcm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxlbmd0
aCgpLCBub3RpZnlDaGFuZ2VkKTsKKyAgICByZXR1cm4gcmVtb3ZlUHJvcGVydGllc0luU2V0KGxv
bmdoYW5kLnByb3BlcnRpZXMoKSwgbG9uZ2hhbmQubGVuZ3RoKCkpOwogfQogCi1TdHJpbmcgU3R5
bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0KQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0KQogewotI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11
dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQotICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkKSkgeworICAgIGlmIChyZW1vdmVTaG9ydGhh
bmRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewogICAgICAgICAvLyBGSVhNRTogUmV0dXJuIGFuIGVx
dWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4gcG9zc2libGUuCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgaWYgKHJldHVyblRleHQpCisgICAgICAgICAgICAqcmV0dXJuVGV4dCA9ICIi
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBDU1NQcm9wZXJ0eSogZm91bmRQ
cm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIWZvdW5k
UHJvcGVydHkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWZvdW5kUHJvcGVy
dHkpIHsKKyAgICAgICAgaWYgKHJldHVyblRleHQpCisgICAgICAgICAgICAqcmV0dXJuVGV4dCA9
ICIiOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0g
cmV0dXJuVGV4dCA/IGZvdW5kUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSA6IFN0cmluZygp
OworICAgIGlmIChyZXR1cm5UZXh0KQorICAgICAgICAqcmV0dXJuVGV4dCA9IGZvdW5kUHJvcGVy
dHktPnZhbHVlKCktPmNzc1RleHQoKTsKIAogICAgIC8vIEEgbW9yZSBlZmZpY2llbnQgcmVtb3Zh
bCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBlbXB0eQogICAgIC8v
IGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZlY3RvciBncm93cyB0b28gYmlnLgogICAgIG1f
cHJvcGVydGllcy5yZW1vdmUoZm91bmRQcm9wZXJ0eSAtIG1fcHJvcGVydGllcy5kYXRhKCkpOwot
Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVl
dWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0KLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12
b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldE5lZWRzU3R5bGVSZWNhbGMoKQotewotICAgIGlmICht
X3BhcmVudElzRWxlbWVudCkgewotICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcGFy
ZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKCFtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbikgewotICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBub3QgYW4gaW5saW5lIHN0eWxlLCBpdCdzIGFuIGF0dHJpYnV0ZSBz
dHlsZSwgYW5kIHdlIHNob3VsZG4ndCBtYXJrIHRoZSBlbGVtZW50IGZvciBzdHlsZSByZWNhbGMK
LSAgICAgICAgICAgIC8vIGFzIHRoYXQgaXMgaGFuZGxlZCBieSBTdHlsZWRFbGVtZW50OjphdHRy
aWJ1dGVDaGFuZ2VkKCkuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKLSAgICAg
ICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgICAgIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZSh0aGlzKS5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9
IGNvbnRleHRTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxl
U2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwotICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50
KGludCBwcm9wZXJ0eUlEKSBjb25zdApAQCAtNzY0LDQ1ICs3NDYsMjMgQEAgYm9vbCBTdHlsZVBy
b3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaQogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3Bl
cnR5LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpz
ZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
KQogewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVN
dXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQogICAgIC8vIFNldHRp
bmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmluZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5
IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAgIC8vIFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0
byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0
aGUgc2FtZS4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQsIGZhbHNlKTsKKyAgICAgICAgcmVtb3ZlUHJv
cGVydHkocHJvcGVydHlJRCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8v
IFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRo
ZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgIC8vIEZpcmVmb3ggcHJlc2Vy
dmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdp
bm5pbmcuCi0gICAgYm9vbCBzdWNjZXNzID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHBy
b3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgaWYg
KCFzdWNjZXNzKSB7Ci0gICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhf
RVJSIGhlcmUsIGJ1dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCi0g
ICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5
Nj4uCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0j
ZW5kaWYKLQotICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVzZVN0cmljdFBhcnNpbmco
KSk7CiB9CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJv
cGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkKIHsKLSNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNj
b3BlKHRoaXMpOwotI2VuZGlmCi0KLSAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHBy
b3BlcnR5LmlkKCksIGZhbHNlKSkgeworICAgIGlmICghcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHko
cHJvcGVydHkuaWQoKSkpIHsKICAgICAgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFjZSA9IHNsb3Qg
PyBzbG90IDogZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5LmlkKCkpOwogICAgICAgICBpZiAo
dG9SZXBsYWNlKSB7CiAgICAgICAgICAgICAqdG9SZXBsYWNlID0gcHJvcGVydHk7CkBAIC04MTAs
ODUgKzc3MCw0OCBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0CiAg
ICAgICAgIH0KICAgICB9CiAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0KLSNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKIH0KIAotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50LCBi
b29sIG5vdGlmeUNoYW5nZWQpCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTsKLSAgICBpZiAobV9wYXJlbnRJc0VsZW1lbnQg
JiYgcGFyZW50RWxlbWVudCgpICYmIHBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgdmFsdWUgPSBwYXJlbnRFbGVtZW50KCktPmRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllcik7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YWx1ZTsgICAgCisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fY29udGV4
dFN0eWxlU2hlZXQgPyBtX2NvbnRleHRTdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSA6IDApCisg
ICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWRlbnRpZmllcik7CiAgICAgZWxzZQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCiAgICAgc2V0UHJvcGVydHko
Q1NTUHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKLSAg
ICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
dW5pdCwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKK2Jvb2wgU3R5bGVQcm9w
ZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKIHsKICAgICBDU1NQ
cm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlLCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAg
aWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9u
KGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbikKIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3Bl
KHRoaXMpOwotI2VuZGlmCi0KICAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKICAgICBDU1NQYXJz
ZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRp
b24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYK
LQotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0
OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGll
cywgaW50IG51bVByb3BlcnRpZXMpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
LSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNl
bmRpZgotCiAgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKICAgICAgICAgYWRk
UGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2Vu
ZGlmCi0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8g
c2V0TmVlZHNTdHlsZVJlY2FsYygpIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3
aXNoIHRvIGFkZAotICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0
aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3Mu
CiB9CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5KQogewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0g
ICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5k
aWYKLQogICAgIC8vIE9ubHkgYWRkIHByb3BlcnRpZXMgdGhhdCBoYXZlIG5vICFpbXBvcnRhbnQg
Y291bnRlcnBhcnQgcHJlc2VudAogICAgIGlmICghcHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0
eS5pZCgpKSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5LmlkKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LmlkKCkpOwogICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsK
ICAgICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2Nv
cGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFN0eWxlUHJv
cGVydHlTZXQ6OmFzVGV4dCgpIGNvbnN0CkBAIC05NTUsMTAgKzg3OCw2IEBAIFN0cmluZyBTdHls
ZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25zdAogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1l
cmdlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIG90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29u
ZmxpY3QpCiB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgdW5z
aWduZWQgc2l6ZSA9IG90aGVyLT5tX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRv
TWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25dOwpAQCAtOTcwLDEzICs4ODksNiBAQCB2b2lk
IFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCh0b01lcmdlKTsKICAgICB9Ci0KLSNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKCk7Ci0jZW5kaWYKLQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBo
YXZlIGEgY2FsbCB0byBzZXROZWVkc1N0eWxlUmVjYWxjKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQu
IFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50
IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMg
aW4gdGhpcyBjbGFzcy4KIH0KIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKQEAgLTEwMjUsMTUgKzkzNywxMSBA
QCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUJsb2NrUHJvcGVyCiAgICAgcmVtb3ZlUHJv
cGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKIH0KIAot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKQorYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCiAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0aCBzdGF0aWMgc2V0cyBhbmQgaW4gdGhhdCBj
YXNlIGNvbnN0cnVjdGluZyB0aGUgaGFzaCByZXBlYXRlZGx5IGlzIHByZXR0eSBwb2ludGxlc3Mu
CiAgICAgSGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKQEAgLTEwNTUsMTQgKzk2Myw2IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlUHJvcGVydGllc0kKIAogICAgIGJvb2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRpZXMu
c2l6ZSgpICE9IG1fcHJvcGVydGllcy5zaXplKCk7CiAgICAgbV9wcm9wZXJ0aWVzID0gbmV3UHJv
cGVydGllczsKLQotICAgIGlmIChub3RpZnlDaGFuZ2VkKSB7Ci0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKLSNlbmRpZgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotCiAgICAg
cmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTExMjAsNyArMTAyMCw3IEBAIHZvaWQgU3R5bGVQcm9w
ZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFAKIAogUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgbV9wcm9wZXJ0aWVzKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KG1fcHJvcGVydGllcykpOwogfQogCiBQYXNzUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKQEAgLTExMzcsMTQgKzEwMzcs
NTkgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcgogCiBDU1NTdHls
ZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkgY29uc3QKIHsKLSAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpCisgICAgaWYgKG1faGFzQ1NT
T01XcmFwcGVyKSB7CisgICAgICAgIEFTU0VSVCghc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJh
dGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVs
ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0
aGlzKS0+cGFyZW50RWxlbWVudCgpKTsKICAgICAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwKCkuZ2V0KHRoaXMpOworICAgIH0KICAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRy
dWU7CiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBu
ZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0
eVNldCo+KHRoaXMpKTsKICAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlz
LCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKICAgICByZXR1cm4gY3Nzb21XcmFwcGVyOwogfQog
CitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVSdWxlQ1NTU3R5
bGVEZWNsYXJhdGlvbihjb25zdCBDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdAoreworICAgIGlm
IChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+
cGFyZW50UnVsZSgpID09IHBhcmVudFJ1bGUpOworICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7CisgICAgfQorICAgIG1faGFzQ1NTT01XcmFwcGVy
ID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBl
ciA9IG5ldyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlT
ZXQqPih0aGlzKSwgY29uc3RfY2FzdDxDU1NSdWxlKj4ocGFyZW50UnVsZSkpOworICAgIHByb3Bl
cnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikp
OworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0
eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgU3R5
bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNDU1NPTVdy
YXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0
KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gcGFyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVy
biBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKTsKKyAgICB9CisgICAgbV9o
YXNDU1NPTVdyYXBwZXIgPSB0cnVlOworICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
biogY3Nzb21XcmFwcGVyID0gbmV3IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3RfY2Fz
dDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBh
cmVudEVsZW1lbnQpKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlz
LCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKKyAgICByZXR1cm4gY3Nzb21XcmFwcGVyOworfQor
Cit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50UnVsZShDU1NSdWxlKiBydWxlKQor
eworICAgIG1fY29udGV4dFN0eWxlU2hlZXQgPSAwOworICAgIGlmICghbV9oYXNDU1NPTVdyYXBw
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlRfVU5VU0VEKHJ1bGUsIHN0YXRpY19jYXN0
PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0
aGlzKSktPnBhcmVudFJ1bGUoKSA9PSBydWxlKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBl
ck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRSdWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9w
ZXJ0eVNldDo6Y2xlYXJQYXJlbnRFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgbV9jb250ZXh0U3R5bGVTaGVldCA9IDA7CisgICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikK
KyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9VTlVTRUQoZWxlbWVudCwgcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1lbnQoKSA9PSBlbGVtZW50KTsK
KyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQYXJlbnRF
bGVtZW50KCk7Cit9CisKIHVuc2lnbmVkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlDb3Vu
dCgpOwpAQCAtMTE1NywxMSArMTEwMiw2IEBAIFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OmkKICAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1By
b3BlcnR5SUQ+KG1fcHJvcGVydHlTZXQtPnByb3BlcnR5QXQoaSkuaWQoKSkpOwogfQogCi1DU1NS
dWxlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5wYXJlbnRSdWxlSW50ZXJuYWwoKTsKLX0KLQog
U3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFzVGV4dCgpOwpAQCAtMTE2OSw5ICsxMTA5LDE3
IEBAIFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmMKICAgICAKIHZvaWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsK
KyNlbmRpZgogICAgIGVjID0gMDsKICAgICAvLyBGSVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMg
YW5kIHNldCBlYy4KICAgICBtX3Byb3BlcnR5U2V0LT5wYXJzZURlY2xhcmF0aW9uKHRleHQpOwor
CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsgICAgCisjZW5k
aWYKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQpAQCAt
MTIxOSwyMSArMTE2Nyw0MyBAQCBib29sIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
aXNQCiAKIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZSh0aGlzKTsKKyNlbmRpZgogICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmICghcHJvcGVydHlJRCkKICAgICAgICAgcmV0dXJuOwogICAgIGJv
b2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1wb3J0YW50IiwgMCwgZmFsc2UpICE9IG5v
dEZvdW5kOwogICAgIGVjID0gMDsKLSAgICBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICBib29sIGNoYW5nZWQgPSBtX3By
b3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAg
ICBpZiAoY2hhbmdlZCkgeworICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lO
VEFYX0VSUiBvZiBwYXJzaW5nIGZhaWxlZCwgYnV0IHRoaXMgaXMgdG9vIGRhbmdlcm91cyBmb3Ig
Y29tcGF0aWJpbGl0eSwKKyAgICAgICAgLy8gc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03Mjk2Pi4KKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKCk7CisjZW5kaWYKKyAgICB9CiB9CiAKIFN0cmluZyBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMp
OworI2VuZGlmCiAgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
ZWMgPSAwOwotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlELCB0cnVlLCB0cnVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2hhbmdlcyA9
IG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsICZyZXN1bHQpOworICAg
IGlmIChjaGFuZ2VzKSB7CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRh
dGlvblJlY29yZCgpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKQEAgLTEyNDgs
OCArMTIxOCwxNyBAQCBTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnCiAK
IHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFs
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeyAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMp
OworI2VuZGlmCiAgICAgZWMgPSAwOwotICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworICAgIGJvb2wgY2hhbmdlZCA9IG1f
cHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOwor
ICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVN
dXRhdGlvblJlY29yZCgpOworI2VuZGlmCisgICAgfQogfQogCiBDU1NTdHlsZVNoZWV0KiBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdApAQCAt
MTI3Miw2ICsxMjUxLDI0IEBAIGJvb2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpj
c3MKICAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRjaGVzKHByb3BlcnR5KTsK
IH0KIAordm9pZCBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
Cit7CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBtX3Byb3BlcnR5U2V0LT5j
b250ZXh0U3R5bGVTaGVldCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBz
dHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNl
bGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5saW5l
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCit7CisgICAgaWYgKCFt
X3BhcmVudEVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhcmVudEVsZW1lbnQtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIG1fcGFyZW50RWxlbWVu
dC0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7CisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlv
blNjb3BlKHRoaXMpLmRpZEludmFsaWRhdGVTdHlsZUF0dHIoKTsKKyAgICByZXR1cm47Cit9CisK
IGNsYXNzIFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U2Ft
ZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IHBy
b3BlcnRpZXM7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVQcm9wZXJ0eVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2V0LmgJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnR5U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI1ICs0MiwxNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlT
ZXQpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVh
dGUoQ1NTUnVsZSogcGFyZW50UnVsZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBjcmVhdGUoQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQocGFyZW50UnVsZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoY29udGV4dFN0
eWxlU2hlZXQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gY3JlYXRlKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCog
cHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0LCBj
b25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KHBhcmVu
dFJ1bGUsIHByb3BlcnRpZXMsIG51bVByb3BlcnRpZXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGNvbnRleHRTdHlsZVNoZWV0LCBwcm9wZXJ0aWVzLCBu
dW1Qcm9wZXJ0aWVzKSk7CiAgICAgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KDAsIHByb3Bl
cnRpZXMpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
Y3JlYXRlSW5saW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoZWxlbWVudCwgLyppc0lubGluZVN0eWxl
Ki8gdHJ1ZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBjcmVhdGVBdHRyaWJ1dGVTdHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGVsZW1lbnQsIC8qaXNJ
bmxpbmVTdHlsZSovIGZhbHNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQ
cm9wZXJ0eVNldChwcm9wZXJ0aWVzKSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcHJvcGVydHlD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KQEAgLTczLDEzICs2
NSwxMiBAQCBwdWJsaWM6CiAgICAgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0
eUlEKSBjb25zdDsKICAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkg
Y29uc3Q7CiAKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUs
IGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQs
IGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQs
IHZhbHVlLCB1bml0LCBpbXBvcnRhbnQsIHRydWUpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxz
ZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1
ZSk7IH0KKyAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJv
b2wgaW1wb3J0YW50ID0gZmFsc2UpOworICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5
SWQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29s
IGltcG9ydGFudCA9IGZhbHNlKTsKKyAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lk
IHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsK
ICAgICAKLSAgICB2b2lkIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlEKSB7IHJlbW92ZVBy
b3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIGZhbHNlKTsgfQotICAgIFN0cmluZyByZW1vdmVQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJldHVyblRleHQp
OworICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIFN0cmluZyogcmV0dXJu
VGV4dCA9IDApOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBz
dHlsZSBkZWNsYXJhdGlvbi4KICAgICB2b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5n
JiBzdHlsZURlY2xhcmF0aW9uKTsKQEAgLTkyLDEzICs4MywxMiBAQCBwdWJsaWM6CiAKICAgICBQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3ZlUHJvcGVy
dGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmVtb3ZlUHJvcGVy
dGllc0luU2V0KHNldCwgbGVuZ3RoLCB0cnVlKTsgfQorICAgIGJvb2wgcmVtb3ZlUHJvcGVydGll
c0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdm9pZCBtZXJn
ZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0g
dHJ1ZSk7CiAKICAgICB2b2lkIHNldFN0cmljdFBhcnNpbmcoYm9vbCBiKSB7IG1fc3RyaWN0UGFy
c2luZyA9IGI7IH0KICAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBt
X3N0cmljdFBhcnNpbmc7IH0KLSAgICBib29sIGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uOyB9CiAKICAgICB2b2lkIGFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jik7CiAKQEAgLTExMSwyNCAr
MTAxLDIzIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29w
eVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
IAotICAgIENTU1J1bGUqIHBhcmVudFJ1bGVJbnRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
ZW50SXNFbGVtZW50ID8gMCA6IG1fcGFyZW50LnJ1bGU7IH0KLSAgICB2b2lkIGNsZWFyUGFyZW50
UnVsZSgpIHsgQVNTRVJUKCFtX3BhcmVudElzRWxlbWVudCk7IG1fcGFyZW50LnJ1bGUgPSAwOyB9
Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyBBU1NFUlQobV9w
YXJlbnRJc0VsZW1lbnQpOyByZXR1cm4gbV9wYXJlbnQuZWxlbWVudDsgfQotICAgIHZvaWQgY2xl
YXJQYXJlbnRFbGVtZW50KCkgeyBBU1NFUlQobV9wYXJlbnRJc0VsZW1lbnQpOyBtX3BhcmVudC5l
bGVtZW50ID0gMDsgfQotCi0gICAgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBj
b25zdDsKKyAgICBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dFN0eWxlU2hlZXQ7IH0KKyAgICB2b2lkIHNldENvbnRleHRTdHlsZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpIHsgbV9jb250ZXh0U3R5bGVTaGVldCA9IHN0eWxl
U2hlZXQ7IH0KICAgICAKICAgICBTdHJpbmcgYXNUZXh0KCkgY29uc3Q7CiAgICAgCisgICAgdm9p
ZCBjbGVhclBhcmVudFJ1bGUoQ1NTUnVsZSogcnVsZSk7CisgICAgdm9pZCBjbGVhclBhcmVudEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCk7CisKICAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3Q7CisgICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFyZW50
UnVsZSkgY29uc3Q7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lQ1NTU3R5
bGVEZWNsYXJhdGlvbihjb25zdCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBTdHlsZVByb3BlcnR5U2V0KCk7Ci0gICAgU3R5bGVQcm9wZXJ0eVNl
dChDU1NSdWxlKiBwYXJlbnRSdWxlKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBh
cmVudFJ1bGUsIGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mKTsKLSAgICBTdHlsZVByb3BlcnR5
U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqLCBpbnQg
bnVtUHJvcGVydGllcyk7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldChTdHlsZWRFbGVtZW50KiwgYm9v
bCBpc0lubGluZVN0eWxlKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KGNvbnN0IFZlY3RvcjxDU1NQ
cm9wZXJ0eT4mKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KENTU1N0eWxlU2hlZXQqIHBhcmVudFN0
eWxlU2hlZXQpOworICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldCwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsK
IAogICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCkBAIC0xNDQsMTEgKzEzMyw3IEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IFN0cmluZyBnZXRDb21tb25WYWx1
ZShjb25zdCBpbnQgKCZwcm9wZXJ0aWVzKVtzaXplXSkgY29uc3QgeyByZXR1cm4gZ2V0Q29tbW9u
VmFsdWUocHJvcGVydGllcywgc2l6ZSk7IH0KICAgICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gU3Ry
aW5nIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQgKCZwcm9wZXJ0aWVzKVtzaXpl
XSkgY29uc3QgeyByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMsIHNp
emUpOyB9CiAKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUs
IGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgc2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SWQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCBzZXRQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCByZW1vdmVTaG9ydGhhbmRQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHJlbW92ZVBy
b3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIG5vdGlm
eUNoYW5nZWQpOworICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5
SUQpOwogICAgIGJvb2wgcHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3Q7
CiAKICAgICBjb25zdCBDU1NQcm9wZXJ0eSogZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0
eUlkKSBjb25zdDsKQEAgLTE1NywxNiArMTQyLDkgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q1NT
UHJvcGVydHksIDQ+IG1fcHJvcGVydGllczsKIAogICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nIDog
MTsKLSAgICBib29sIG1fcGFyZW50SXNFbGVtZW50IDogMTsKLSAgICBib29sIG1faXNJbmxpbmVT
dHlsZURlY2xhcmF0aW9uIDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9oYXNDU1NPTVdyYXBwZXIg
OiAxOwogCi0gICAgdW5pb24gUGFyZW50IHsKLSAgICAgICAgUGFyZW50KENTU1J1bGUqIHJ1bGUp
IDogcnVsZShydWxlKSB7IH0KLSAgICAgICAgUGFyZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQp
IDogZWxlbWVudChlbGVtZW50KSB7IH0KLSAgICAgICAgQ1NTUnVsZSogcnVsZTsKLSAgICAgICAg
U3R5bGVkRWxlbWVudCogZWxlbWVudDsKLSAgICB9IG1fcGFyZW50OworICAgIENTU1N0eWxlU2hl
ZXQqIG1fY29udGV4dFN0eWxlU2hlZXQ7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZQogV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlOjp+V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKCkKIHsKICAgICBpZiAo
bV9zdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+Y2xlYXJQYXJlbnRSdWxlKCk7CisgICAgICAgIG1f
c3R5bGUtPmNsZWFyUGFyZW50UnVsZSh0aGlzKTsKIH0KIAogU3RyaW5nIFdlYktpdENTU0tleWZy
YW1lUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC01NCw3ICs1NCw2IEBAIFN0cmluZyBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSAKIAogdm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpCiB7Ci0g
ICAgQVNTRVJUKHN0eWxlLT5wYXJlbnRSdWxlSW50ZXJuYWwoKSA9PSB0aGlzKTsKICAgICBtX3N0
eWxlID0gc3R5bGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmgJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdldEtleXMoVmVjdG9yPGZsb2F0PiYga2V5cykgY29uc3QgICB7IHBh
cnNlS2V5U3RyaW5nKG1fa2V5LCBrZXlzKTsgfQogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlID8gbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVE
ZWNsYXJhdGlvbigpIDogMDsgfQorICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZSA/IG1fc3R5bGUtPmVuc3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0
aW9uKHRoaXMpIDogMDsgfQogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCShyZXZpc2lvbiAx
MDc4MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxNyArNDUsMTcgQEAgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OgogewogICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKICAgICAg
ICAgQVNTRVJUKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKLSAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGVJbmxpbmUoc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KGVsZW1lbnQpKTsKKyAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkp
OwogICAgICAgICBtX2lubGluZVN0eWxlRGVjbC0+c2V0U3RyaWN0UGFyc2luZyhlbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgpOwogfQogCi12b2lkIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGVEZWNsKCkKK3ZvaWQgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woU3R5bGVkRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9pbmxpbmVTdHlsZURlY2wtPmNsZWFyUGFyZW50RWxlbWVudCgpOworICAgIG1faW5saW5l
U3R5bGVEZWNsLT5jbGVhclBhcmVudEVsZW1lbnQoZWxlbWVudCk7CiAgICAgbV9pbmxpbmVTdHls
ZURlY2wgPSAwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuaAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRB
dHRyaWJ1dGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gbV9pbmxp
bmVTdHlsZURlY2wuZ2V0KCk7IH0KICAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVT
dHlsZURlY2woU3R5bGVkRWxlbWVudCopOwotICAgIHZvaWQgZGVzdHJveUlubGluZVN0eWxlRGVj
bCgpOworICAgIHZvaWQgZGVzdHJveUlubGluZVN0eWxlRGVjbChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KTsKIAogICAgIFN0eWxlUHJvcGVydHlTZXQqIGF0dHJpYnV0ZVN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVTdHlsZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0QXR0cmlidXRlU3R5
bGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgeyBtX2F0dHJpYnV0ZVN0eWxl
ID0gc3R5bGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMjYgQEAgU3R5bGVkRWxlbWVudDo6flN0eWxlZEVsZW1l
bnQoKQogICAgIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKIH0KIAordm9pZCBTdHlsZWRFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCit7CisgICAgRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKKworICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGlu
bGluZVN0eWxlRGVjbCgpKQorICAgICAgICBpbmxpbmVTdHlsZS0+c2V0Q29udGV4dFN0eWxlU2hl
ZXQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAgIGlmIChTdHlsZVByb3BlcnR5U2V0
KiBhdHRyaWJ1dGVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0
cmlidXRlU3R5bGUoKSA6IDApCisgICAgICAgIGF0dHJpYnV0ZVN0eWxlLT5zZXRDb250ZXh0U3R5
bGVTaGVldChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7Cit9CisKK3ZvaWQgU3R5bGVkRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCit7CisgICAgRWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpOworCisgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gaW5s
aW5lU3R5bGVEZWNsKCkpCisgICAgICAgIGlubGluZVN0eWxlLT5zZXRDb250ZXh0U3R5bGVTaGVl
dCgwKTsKKyAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUgPSBhdHRyaWJ1
dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZVN0eWxlKCkgOiAwKQorICAgICAg
ICBhdHRyaWJ1dGVTdHlsZS0+c2V0Q29udGV4dFN0eWxlU2hlZXQoMCk7Cit9CisKIHZvaWQgU3R5
bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYg
KCEoYXR0ci0+bmFtZSgpID09IHN0eWxlQXR0ciAmJiBpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJp
YnV0ZSgpKSkKQEAgLTEwNiw5ICsxMjYsNDkgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShBdHRyaQogICAgICAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnBhcnNl
RGVjbGFyYXRpb24oYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIHNldElzU3R5bGVBdHRyaWJ1dGVW
YWxpZCgpOwogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlz
KTsKICAgICB9CiB9CiAKK3ZvaWQgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKCkK
K3sKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBzZXRJ
c1N0eWxlQXR0cmlidXRlVmFsaWQoZmFsc2UpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKK30KKyAgICAKK2Jv
b2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
aW50IHZhbHVlLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJ
bmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFu
dCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOworICAg
IHJldHVybiBjaGFuZ2VzOworfQorCitib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxl
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBl
bnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIHVu
aXQsIGltcG9ydGFudCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGlubGluZVN0eWxlQ2hh
bmdlZCgpOworICAgIHJldHVybiBjaGFuZ2VzOworfQorCitib29sIFN0eWxlZEVsZW1lbnQ6OnNl
dElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wgaW1wb3J0YW50KQoreworICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUlubGluZVN0eWxl
RGVjbCgpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICBp
ZiAoY2hhbmdlcykKKyAgICAgICAgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CisgICAgcmV0dXJuIGNo
YW5nZXM7Cit9CisKK2Jvb2wgU3R5bGVkRWxlbWVudDo6cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBlbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKGNoYW5nZXMpCisg
ICAgICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOworICAgIHJldHVybiBjaGFuZ2VzOworfQorCiB2
b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscykgY29uc3QKIHsKICAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogaW5saW5l
U3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKQEAgLTExNyw3ICsxNzcsNyBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmliCiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBk
YXRlQXR0cmlidXRlU3R5bGUoKQogewotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHls
ZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZUF0dHJpYnV0ZVN0eWxlKHRoaXMpOworICAgIFJl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShk
b2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGNvbGxlY3RTdHlsZUZvckF0dHJpYnV0ZShhdHRy
aWJ1dGUsIHN0eWxlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAko
cmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTQgQEAgcHVibGljOgogCiAgICAgU3R5bGVQcm9w
ZXJ0eVNldCogaW5saW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZURlY2woKSA6IDA7IH0KICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1
dGVEYXRhKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCh0aGlzKTsgfQotICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBPVkVSUklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOyB9CisgICAgCisgICAgLy8g
VW5saWtlIFN0eWxlUHJvcGVydHlTZXQgc2V0dGVycywgdGhlc2UgaW1wbGVtZW50IGludmFsaWRh
dGlvbi4KKyAgICBib29sIHNldElubGluZVN0eWxlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGlu
dCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRJbmxpbmVTdHls
ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCA9IGZhbHNlKTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQpOworICAgIAorICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUoKSBPVkVSUklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+ZW5z
dXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbih0aGlzKTsgfQogCiAgICAgU3R5bGVQcm9wZXJ0
eVNldCogYXR0cmlidXRlU3R5bGUoKTsKIApAQCAtNjYsMTYgKzczLDIwIEBAIHByb3RlY3RlZDoK
ICAgICAvLyBwYXJzZUF0dHJpYnV0ZSAoY2FsbGVkIHZpYSBzZXRBdHRyaWJ1dGUoKSkgYW5kCiAg
ICAgLy8gc3ZnQXR0cmlidXRlQ2hhbmdlZCAoY2FsbGVkIHdoZW4gZWxlbWVudC5jbGFzc05hbWUu
YmFzZVZhbHVlIGlzIHNldCkKICAgICB2b2lkIGNsYXNzQXR0cmlidXRlQ2hhbmdlZChjb25zdCBB
dG9taWNTdHJpbmcmIG5ld0NsYXNzU3RyaW5nKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgp
IGNvbnN0OworICAgIHZvaWQgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CiAKICAgICB2b2lkIHVwZGF0
ZUF0dHJpYnV0ZVN0eWxlKCk7CiAKICAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQog
ICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKLSAgICAgICAgICAgIGF0dHJpYnV0
ZURhdGEoKS0+ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOworICAgICAgICAgICAgYXR0cmlidXRl
RGF0YSgpLT5kZXN0cm95SW5saW5lU3R5bGVEZWNsKHRoaXMpOwogICAgIH0KIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lv
biAxMDc4MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAgICAgZmxvYXQgZGVzaXJlZEZvbnRTaXplID0gbWF4
KE1pbmltdW1Gb250U2l6ZSwgc3RhcnRpbmdGb250U2l6ZXMuZ2V0KG5vZGUpICsgc3R5bGUtPmZv
bnRTaXplRGVsdGEoKSk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBpbmxpbmVT
dHlsZURlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSk7CiAgICAg
ICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5yZW1vdmVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUlu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CiAgICAgICAgICAgICBjdXJy
ZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5vZGUpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVzaXJlZEZvbnRTaXplKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNyArMjA1LDE2IEBAIHZvaWQgRGVsZXRl
QnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXQKICAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+
IGNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV90YXJnZXQtPmRvY3VtZW50KCkp
OwogICAgIGNvbnRhaW5lci0+c2V0SWRBdHRyaWJ1dGUoY29udGFpbmVyRWxlbWVudElkZW50aWZp
ZXIpOwogCi0gICAgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUgPSBjb250YWluZXItPmVuc3VyZUlu
bGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7Ci0gICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVSZWFkT25seSk7Ci0gICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NTVmFsdWVIaWRkZW4p
OwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFi
c29sdXRlKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIENTU1Zh
bHVlRGVmYXVsdCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCAiMCIp
OwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVJpZ2h0LCAiMCIpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKLSAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBDU1NWYWx1ZU5vbmUpOwor
ICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFVz
ZXJTZWxlY3QsIENTU1ZhbHVlTm9uZSk7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeSwgQ1NTVmFsdWVSZWFkT25seSk7Cisg
ICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0
eSwgQ1NTVmFsdWVIaWRkZW4pOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZUFic29sdXRlKTsKKyAgICBjb250YWluZXIt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIENTU1ZhbHVlRGVmYXVs
dCk7CisgICAgY29udGFpbmVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9w
LCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVJpZ2h0LCAiMCIpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJvdHRvbSwgIjAiKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlMZWZ0LCAiMCIpOwogCiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBv
dXRsaW5lID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+ZG9jdW1lbnQoKSk7CiAg
ICAgb3V0bGluZS0+c2V0SWRBdHRyaWJ1dGUob3V0bGluZUVsZW1lbnRJZGVudGlmaWVyKTsKQEAg
LTIyMywxNiArMjIyLDE1IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVs
ZXQKICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSA0OwogICAgIGNvbnN0IGludCBib3JkZXJS
YWRpdXMgPSA2OwogCi0gICAgc3R5bGUgPSBvdXRsaW5lLT5lbnN1cmVJbmxpbmVTdHlsZURlY2wo
KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVB
YnNvbHV0ZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5WkluZGV4LCBTdHJp
bmc6Om51bWJlcigtMTAwMDAwMCkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRvcCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJlbmRlckJveCgp
LT5ib3JkZXJUb3AoKSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlSaWdodCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJlbmRlckJv
eCgpLT5ib3JkZXJSaWdodCgpKSArICJweCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJvdHRvbSwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQtPnJl
bmRlckJveCgpLT5ib3JkZXJCb3R0b20oKSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlMZWZ0LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3Rhcmdl
dC0+cmVuZGVyQm94KCktPmJvcmRlckxlZnQoKSkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXIsIFN0cmluZzo6bnVtYmVyKGJvcmRlcldpZHRoKSArICJw
eCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNikiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsIFN0cmluZzo6bnVtYmVyKGJvcmRlclJhZGl1cykg
KyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBD
U1NWYWx1ZVZpc2libGUpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgb3V0bGluZS0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRleCwgU3RyaW5nOjpudW1iZXIoLTEwMDAw
MDApKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9w
LCBTdHJpbmc6Om51bWJlcigtYm9yZGVyV2lkdGggLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJv
cmRlclRvcCgpKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlSaWdodCwgU3RyaW5nOjpudW1iZXIoLWJvcmRlcldpZHRoIC0gbV90YXJnZXQt
PnJlbmRlckJveCgpLT5ib3JkZXJSaWdodCgpKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3R0b20sIFN0cmluZzo6bnVtYmVyKC1ib3Jk
ZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm90dG9tKCkpICsgInB4Iik7
CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIFN0
cmluZzo6bnVtYmVyKC1ib3JkZXJXaWR0aCAtIG1fdGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVy
TGVmdCgpKSArICJweCIpOworICAgIG91dGxpbmUtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlCb3JkZXIsIFN0cmluZzo6bnVtYmVyKGJvcmRlcldpZHRoKSArICJweCBzb2xpZCBy
Z2JhKDAsIDAsIDAsIDAuNikiKTsKKyAgICBvdXRsaW5lLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLCBTdHJpbmc6Om51bWJlcihib3JkZXJSYWRp
dXMpICsgInB4Iik7CisgICAgb3V0bGluZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVlVmlzaWJsZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKG91dGxpbmUuZ2V0KCksIGVjKTsKQEAg
LTI0NywxNCArMjQ1LDEzIEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVs
ZXQKICAgICBjb25zdCBpbnQgYnV0dG9uSGVpZ2h0ID0gMzA7CiAgICAgY29uc3QgaW50IGJ1dHRv
bkJvdHRvbVNoYWRvd09mZnNldCA9IDI7CiAKLSAgICBzdHlsZSA9IGJ1dHRvbi0+ZW5zdXJlSW5s
aW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRp
b24sIENTU1ZhbHVlQWJzb2x1dGUpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVpJbmRleCwgU3RyaW5nOjpudW1iZXIoMTAwMDAwMCkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRvcCwgU3RyaW5nOjpudW1iZXIoKC1idXR0b25IZWlnaHQgLyAyKSAtIG1f
dGFyZ2V0LT5yZW5kZXJCb3goKS0+Ym9yZGVyVG9wKCkgLSAoYm9yZGVyV2lkdGggLyAyKSArIGJ1
dHRvbkJvdHRvbVNoYWRvd09mZnNldCkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlMZWZ0LCBTdHJpbmc6Om51bWJlcigoLWJ1dHRvbldpZHRoIC8gMikgLSBtX3Rh
cmdldC0+cmVuZGVyQm94KCktPmJvcmRlckxlZnQoKSAtIChib3JkZXJXaWR0aCAvIDIpKSArICJw
eCIpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51
bWJlcihidXR0b25XaWR0aCkgKyAicHgiKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKGJ1dHRvbkhlaWdodCkgKyAicHgiKTsKLSAgICBz
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBDU1NWYWx1ZVZpc2libGUp
OworICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9u
LCBDU1NWYWx1ZUFic29sdXRlKTsKKyAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlaSW5kZXgsIFN0cmluZzo6bnVtYmVyKDEwMDAwMDApKTsKKyAgICBidXR0b24t
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIFN0cmluZzo6bnVtYmVyKCgt
YnV0dG9uSGVpZ2h0IC8gMikgLSBtX3RhcmdldC0+cmVuZGVyQm94KCktPmJvcmRlclRvcCgpIC0g
KGJvcmRlcldpZHRoIC8gMikgKyBidXR0b25Cb3R0b21TaGFkb3dPZmZzZXQpICsgInB4Iik7Cisg
ICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgU3RyaW5n
OjpudW1iZXIoKC1idXR0b25XaWR0aCAvIDIpIC0gbV90YXJnZXQtPnJlbmRlckJveCgpLT5ib3Jk
ZXJMZWZ0KCkgLSAoYm9yZGVyV2lkdGggLyAyKSkgKyAicHgiKTsKKyAgICBidXR0b24tPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9u
V2lkdGgpICsgInB4Iik7CisgICAgYnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25IZWlnaHQpICsgInB4Iik7CisgICAg
YnV0dG9uLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQ1NT
VmFsdWVWaXNpYmxlKTsKIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gV2ViQ29yZTo6
ZGV2aWNlU2NhbGVGYWN0b3IobV9mcmFtZSk7CiAgICAgUmVmUHRyPEltYWdlPiBidXR0b25JbWFn
ZTsKQEAgLTMxMCwxMiArMzA3LDEyIEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6c2hv
dyhIVE1MRWwKICAgICB9CiAKICAgICBpZiAobV90YXJnZXQtPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pIHsKLSAgICAgICAgbV90YXJnZXQtPmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NW
YWx1ZVJlbGF0aXZlKTsKKyAgICAgICAgbV90YXJnZXQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVSZWxhdGl2ZSk7CiAgICAgICAgIG1fd2FzU3Rh
dGljUG9zaXRpb25lZCA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fdGFyZ2V0LT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5oYXNBdXRvWkluZGV4KCkpIHsKLSAgICAgICAgbV90YXJnZXQtPmVuc3Vy
ZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRleCwgIjAiKTsK
KyAgICAgICAgbV90YXJnZXQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlaSW5k
ZXgsICIwIik7CiAgICAgICAgIG1fd2FzQXV0b1pJbmRleCA9IHRydWU7CiAgICAgfQogfQpAQCAt
MzMxLDkgKzMyOCw5IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6aGlkZSgpCiAKICAg
ICBpZiAobV90YXJnZXQpIHsKICAgICAgICAgaWYgKG1fd2FzU3RhdGljUG9zaXRpb25lZCkKLSAg
ICAgICAgICAgIG1fdGFyZ2V0LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVTdGF0aWMpOworICAgICAgICAgICAgbV90YXJn
ZXQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVT
dGF0aWMpOwogICAgICAgICBpZiAobV93YXNBdXRvWkluZGV4KQotICAgICAgICAgICAgbV90YXJn
ZXQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVpJbmRl
eCwgQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgIG1fdGFyZ2V0LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5WkluZGV4LCBDU1NWYWx1ZUF1dG8pOwogICAgIH0KIAogICAgIG1f
d2FzU3RhdGljUG9zaXRpb25lZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ1LDEwICsyNzQ1LDEwIEBAIHZvaWQgRWRpdG9yOjph
cHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCgKICAgICBBU1NFUlQoZWxlbWVudC0+aXNTdHlsZWRF
bGVtZW50KCkpOwogICAgIGlmICghZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlbGVtZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAsICJicmVhay13b3JkIiwgZmFsc2UpOwot
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCAic3BhY2Ui
LCBmYWxzZSk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJy
ZWFrLCAiYWZ0ZXItd2hpdGUtc3BhY2UiLCBmYWxzZSk7CisgICAgU3R5bGVkRWxlbWVudCogc3R5
bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAs
ICJicmVhay13b3JkIiwgZmFsc2UpOworICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UpOworICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRM
aW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsKIH0KIAogLy8gU2VhcmNoZXMg
ZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5nIGlzIHNlbGVjdGVk
LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVy
dHlDb21tYW5kLmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyAr
NDUsMTIgQEAgdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIFN0
eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gbV9lbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAg
ICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0eSk7CiAgICAg
bV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3Byb3BlcnR5KTsKLSAg
ICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkobV9wcm9wZXJ0eSk7CisgICAgbV9lbGVtZW50LT5yZW1v
dmVJbmxpbmVTdHlsZVByb3BlcnR5KG1fcHJvcGVydHkpOwogfQogCiB2b2lkIFJlbW92ZUNTU1By
b3BlcnR5Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5
KG1fcHJvcGVydHksIG1fb2xkVmFsdWUsIG1faW1wb3J0YW50KTsKKyAgICBtX2VsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkobV9wcm9wZXJ0eSwgbV9vbGRWYWx1ZSwgbV9pbXBvcnRhbnQp
OwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MzIsOSArNTMyLDkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlUmVkdQogICAgICAgICAgICAgLy8gcmVzdWx0cy4gV2UgYWxyZWFkeSBrbm93IG9uZSBp
c3N1ZSBiZWNhdXNlIHRkIGVsZW1lbnRzIGlnbm9yZSB0aGVpciBkaXNwbGF5IHByb3BlcnR5CiAg
ICAgICAgICAgICAvLyBpbiBxdWlya3MgbW9kZSAod2hpY2ggTWFpbC5hcHAgaXMgYWx3YXlzIGlu
KS4gV2Ugc2hvdWxkIGxvb2sgZm9yIGFuIGFsdGVybmF0aXZlLgogICAgICAgICAgICAgaWYgKGlz
QmxvY2soZWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVJbmxpbmUp
OworICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXNwbGF5LCBDU1NWYWx1ZUlubGluZSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+
cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0Zsb2F0aW5nKCkp
Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5RmxvYXQsIENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAg
ZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0LCBDU1NWYWx1
ZU5vbmUpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xv
cklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9p
ZCBDb2xvcklucHV0VHlwZTo6dXBkYXRlQ29sb3JTd2F0Y2goKQogICAgIGlmICghY29sb3JTd2F0
Y2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbG9yU3dhdGNoLT5lbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGVsZW1lbnQo
KS0+dmFsdWUoKSwgZmFsc2UpOworICAgIGNvbG9yU3dhdGNoLT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlbGVtZW50KCktPnZhbHVlKCksIGZhbHNl
KTsKIH0KIAogSFRNTEVsZW1lbnQqIENvbG9ySW5wdXRUeXBlOjpzaGFkb3dDb2xvclN3YXRjaCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3
ICsxNTMsNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQCiAgICAg
aWYgKCFwbGFjZWhvbGRlcikKICAgICAgICAgcmV0dXJuOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIHBsYWNlaG9sZGVyLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpID8g
InZpc2libGUiIDogImhpZGRlbiIsIGVjKTsKKyAgICBwbGFjZWhvbGRlci0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNp
YmxlKCkgPyAidmlzaWJsZSIgOiAiaGlkZGVuIiwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDEwNzgy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9G
aXQoKQogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGltYWdl
U2l6ZS53aWR0aCgpICogc2NhbGUpKTsKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KHN0
YXRpY19jYXN0PGludD4oaW1hZ2VTaXplLmhlaWdodCgpICogc2NhbGUpKTsKICAgICAKLSAgICBt
X2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFsc2UpOworICAgIG1faW1hZ2VFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16
b29tLWluIiwgZmFsc2UpOwogfQogCiB2b2lkIEltYWdlRG9jdW1lbnQ6OmltYWdlQ2xpY2tlZChp
bnQgeCwgaW50IHkpCkBAIC0zMDcsOSArMzA3LDkgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXN0
b3JlSW1hZ2VTaXplKCkKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGltYWdlU2l6ZS5o
ZWlnaHQoKSk7CiAgICAgCiAgICAgaWYgKGltYWdlRml0c0luV2luZG93KCkpCi0gICAgICAgIG1f
aW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlDdXJzb3IpOworICAgICAgICBtX2ltYWdlRWxlbWVudC0+cmVtb3ZlSW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvcik7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdl
RWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlKTsKKyAgICAgICAgbV9pbWFnZUVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpv
b20tb3V0IiwgZmFsc2UpOwogICAgICAgICAKICAgICBtX2RpZFNocmlua0ltYWdlID0gZmFsc2U7
CiB9CkBAIC0zNDAsOSArMzQwLDkgQEAgdm9pZCBJbWFnZURvY3VtZW50Ojp3aW5kb3dTaXplQ2hh
bmdlZCgpCiAgICAgLy8gYW5kIHNldCBpdCB0byBhIHpvb20gb3V0IGN1cnNvciBpZiB0aGUgaW1h
Z2UgZG9lc24ndCBmaXQKICAgICBpZiAoIW1fc2hvdWxkU2hyaW5rSW1hZ2UpIHsKICAgICAgICAg
aWYgKGZpdHNJbldpbmRvdykKLSAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxp
bmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IpOworICAgICAg
ICAgICAgbV9pbWFnZUVsZW1lbnQtPnJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlDdXJzb3IpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5z
dXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdl
YmtpdC16b29tLW91dCIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIs
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCShyZXZpc2lvbiAxMDc4MjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIwLDE0ICsxMjAsMTMgQEAgc3RhdGljIHZvaWQgYWRqdXN0QnViYmxlUG9zaXRpb24oY29uc3Qg
TAogICAgICAgICBob3N0WSAtPSBjb250YWluZXJMb2NhdGlvbi55KCkgKyBjb250YWluZXItPmJv
cmRlclRvcCgpOwogICAgIH0KIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gYnViYmxl
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlUb3AsIGhvc3RZICsgaG9zdFJlY3QuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOworICAgIGJ1YmJsZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRv
cCwgaG9zdFkgKyBob3N0UmVjdC5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7
CiAgICAgLy8gVGhlICdsZWZ0JyB2YWx1ZSBvZiA6Oi13ZWJraXQtdmFsaWRhdGlvbi1idWJibGUt
YXJyb3cuCiAgICAgY29uc3QgaW50IGJ1YmJsZUFycm93VG9wT2Zmc2V0ID0gMzI7CiAgICAgZG91
YmxlIGJ1YmJsZVggPSBob3N0WDsKICAgICBpZiAoaG9zdFJlY3Qud2lkdGgoKSAvIDIgPCBidWJi
bGVBcnJvd1RvcE9mZnNldCkKICAgICAgICAgYnViYmxlWCA9IG1heChob3N0WCArIGhvc3RSZWN0
LndpZHRoKCkgLyAyIC0gYnViYmxlQXJyb3dUb3BPZmZzZXQsIDAuMCk7Ci0gICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgYnViYmxlWCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CisgICAgYnViYmxlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVm
dCwgYnViYmxlWCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiB9CiAKIHZvaWQgVmFsaWRh
dGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJlZShUaW1lcjxWYWxpZGF0aW9uTWVzc2FnZT4qKQpA
QCAtMTM4LDcgKzEzNyw3IEBAIHZvaWQgVmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJl
ZSgKICAgICBtX2J1YmJsZS0+c2V0U2hhZG93UHNldWRvSWQoIi13ZWJraXQtdmFsaWRhdGlvbi1i
dWJibGUiKTsKICAgICAvLyBOZWVkIHRvIGZvcmNlIHBvc2l0aW9uOmFic29sdXRlIGJlY2F1c2Ug
UmVuZGVyTWVudUxpc3QgZG9lc24ndCBhc3N1bWUgaXQKICAgICAvLyBjb250YWlucyBub24tYWJz
b2x1dGUgb3Igbm9uLWZpeGVkIHJlbmRlcmVycyBhcyBjaGlsZHJlbi4KLSAgICBtX2J1YmJsZS0+
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24s
IENTU1ZhbHVlQWJzb2x1dGUpOworICAgIG1fYnViYmxlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGhvc3QtPmVuc3VyZVNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9i
dWJibGUuZ2V0KCksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9u
IDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTIgKzkyLDEyIEBAIE1lZGlhQ29udHJvbEVs
ZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50Ojpz
aG93KCkKIHsKLSAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlEaXNwbGF5KTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5RGlzcGxheSk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6aGlkZSgpCiB7Ci0g
ICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxh
eSwgQ1NTVmFsdWVOb25lKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
RGlzcGxheSwgQ1NTVmFsdWVOb25lKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtMTc1LDE3ICsxNzUsMTUgQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6
OmVuZERyYWcoKQogCiB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0UG9zaXRpb24o
Y29uc3QgTGF5b3V0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlID0gZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7Ci0KICAgICBkb3VibGUgbGVmdCA9IHBvc2l0
aW9uLngoKTsKICAgICBkb3VibGUgdG9wID0gcG9zaXRpb24ueSgpOwogCiAgICAgLy8gU2V0IHRo
ZSBsZWZ0IGFuZCB0b3AgdG8gY29udHJvbCB0aGUgcGFuZWwncyBwb3NpdGlvbjsgdGhpcyBkZXBl
bmRzIG9uIGl0IGJlaW5nIGFic29sdXRlIHBvc2l0aW9uZWQuCiAgICAgLy8gU2V0IHRoZSBtYXJn
aW4gdG8gemVybyBzaW5jZSB0aGUgcG9zaXRpb24gcGFzc2VkIGluIHdpbGwgYWxyZWFkeSBpbmNs
dWRlIHRoZSBlZmZlY3Qgb2YgdGhlIG1hcmdpbi4KLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlMZWZ0LCBsZWZ0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIHRvcCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgMC4w
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5Ub3AsIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlU
b3AsIHRvcCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgc2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwg
MC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgaWdu
b3JlZDsKICAgICBjbGFzc0xpc3QoKS0+YWRkKCJkcmFnZ2VkIiwgaWdub3JlZCk7CkBAIC0xOTMs
MTIgKzE5MSwxMCBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2V0UG9zaXRpCiAK
IHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpyZXNldFBvc2l0aW9uKCkKIHsKLSAgICBT
dHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotCi0gICAg
c3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCk7Ci0gICAgc3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5MZWZ0KTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Ub3ApOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlM
ZWZ0KTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wKTsKKyAg
ICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCk7CisgICAg
cmVtb3ZlSW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGlnbm9yZWQ7CiAgICAgY2xhc3NMaXN0KCktPnJlbW92ZSgiZHJhZ2dlZCIs
IGlnbm9yZWQpOwpAQCAtMjExLDEwICsyMDcsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6bWFrZU9wYXF1CiAKICAgICBkb3VibGUgZHVyYXRpb24gPSBkb2N1bWVudCgpLT5wYWdl
KCkgPyBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJh
dGlvbigpIDogMDsKIAotICAgIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlID0gZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgZHVyYXRpb24sIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUyk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
T3BhY2l0eSwgMS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NT
UHJvcGVydHlPcGFjaXR5KTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCBkdXJhdGlvbiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSwgMS4w
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKICAgICBtX29wYXF1ZSA9IHRydWU7
CiB9CkBAIC0yMjQsMTAgKzIxOSw5IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojpt
YWtlVHJhbnMKICAgICBpZiAoIW1fb3BhcXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSA9IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJv
cGVydHlPcGFjaXR5KTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uRHVyYXRpb24sIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250
cm9sc0ZhZGVPdXREdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHksIDAuMCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5T3BhY2l0eSk7CisgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgZG9j
dW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUyk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU9wYWNpdHksIDAuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwog
CiAgICAgbV9vcGFxdWUgPSBmYWxzZTsKIH0KQEAgLTQzNCwxMiArNDI4LDEyIEBAIE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW4KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQ6OnNob3coKQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkpOworICAgIHJlbW92ZUlubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQ6OmhpZGUoKQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7CiB9CiAKIApAQCAtMTIxMSwx
MyArMTIwNSwxMyBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lCiAg
ICAgZmxvYXQgZm9udFNpemUgPSBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpICog
dmlkZW9IZWlnaHRGb250U2l6ZVBlcmNlbnRhZ2U7CiAgICAgaWYgKGZvbnRTaXplICE9IG1fZm9u
dFNpemUpIHsKICAgICAgICAgbV9mb250U2l6ZSA9IGZvbnRTaXplOwotICAgICAgICBlbnN1cmVJ
bmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3RyaW5n
OjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7
CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0
PihtX3ZpZGVvRGlzcGxheVNpemUueSgpICsgbV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpIC0g
KG1fdmlkZW9EaXNwbGF5U2l6ZS5oZWlnaHQoKSAqIHRyYWNrQm90dG9tTXVsdGlwbGllcikpOwog
ICAgIGlmIChib3R0b20gIT0gbV9ib3R0b20pIHsKICAgICAgICAgbV9ib3R0b20gPSBib3R0b207
Ci0gICAgICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUJvdHRvbSwgU3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20p
ICsgInB4Iik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZXRlclNoYWRvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01ldGVyU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkzLDcgKzkzLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZXRlclZhbHVlRWxlbWVu
dDo6cwogCiB2b2lkIE1ldGVyVmFsdWVFbGVtZW50OjpzZXRXaWR0aFBlcmNlbnRhZ2UoZG91Ymxl
IHdpZHRoKQogewotICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoLCB3aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
KyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1Byb2dyZXNzU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcAkocmV2
aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NTaGFk
b3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIFByb2dyZXNzVmFsdWVFbGVtZW50CiAKIHZvaWQgUHJvZ3Jlc3NWYWx1ZUVsZW1l
bnQ6OnNldFdpZHRoUGVyY2VudGFnZShkb3VibGUgd2lkdGgpCiB7Ci0gICAgZW5zdXJlSW5saW5l
U3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlXaWR0aCwgd2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMTA3ODIxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1
LDkgKzMzNSw4IEBAIFBhc3NSZWZQdHI8VHJhY2tMaW1pdGVyRWxlbWVudD4gVHJhY2tMaW0KIHsK
ICAgICBSZWZQdHI8VHJhY2tMaW1pdGVyRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBU
cmFja0xpbWl0ZXJFbGVtZW50KGRvY3VtZW50KSk7CiAKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBz
dHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVZpc2liaWxpdHksIENTU1ZhbHVlSGlkZGVuKTsKLSAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVTdGF0aWMpOworICAg
IGVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBD
U1NWYWx1ZUhpZGRlbik7CisgICAgZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVN0YXRpYyk7CiAKICAgICByZXR1cm4gZWxlbWVudC5y
ZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDEwNzgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzgsMjkgKzE3MzgsMjkgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIExheW91dFNpemUgZGlmZmVyZW5j
ZSA9IChjdXJyZW50U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRl
ZFRvKG1pbmltdW1TaXplKSAtIGN1cnJlbnRTaXplOwogCiAgICAgQVNTRVJUKGVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9u
ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHls
ZURlY2woKTsKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpOwogICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSBy
ZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWDsKIAogICAgIGlmIChy
ZXNpemUgIT0gUkVTSVpFX1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewogICAgICAg
ICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8g
TWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0
eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgU3RyaW5n
OjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFs
c2UpOwotICAgICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5SaWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6
b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBTdHJpbmc6Om51bWJl
cihyZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7Cisg
ICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5TWFyZ2luUmlnaHQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8g
em9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0VW5p
dCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDAg
OiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwogICAgICAgICBiYXNlV2lkdGgg
PSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51bWJlcihiYXNlV2lkdGggKyBkaWZm
ZXJlbmNlLndpZHRoKCkpICsgInB4IiwgZmFsc2UpOworICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKGJh
c2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSkgKyAicHgiLCBmYWxzZSk7CiAgICAgfQogCiAg
ICAgaWYgKHJlc2l6ZSAhPSBSRVNJWkVfSE9SSVpPTlRBTCAmJiBkaWZmZXJlbmNlLmhlaWdodCgp
KSB7CiAgICAgICAgIGlmIChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CiAgICAg
ICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQg
KHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAg
ICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5U
b3AsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IpICsg
InB4IiwgZmFsc2UpOwotICAgICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5C
b3R0b20oKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOworICAgICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgU3Ry
aW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBm
YWxzZSk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2lu
Qm90dG9tKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAg
ICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXpp
bmdCb3JkZXIgPyAwIDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CiAgICAg
ICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVE
ZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVy
KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSArICJweCIsIGZhbHNlKTsKKyAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdo
dCwgU3RyaW5nOjpudW1iZXIoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpICsgInB4
IiwgZmFsc2UpOwogICAgIH0KIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAxMDc4MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMyLDcgKzMzMiw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdHlsZUQK
ICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCgpKTsK
ICAgICB9CiAgICAgaWYgKEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlciA9IGlucHV0RWxlbWVudCgp
LT5wbGFjZWhvbGRlckVsZW1lbnQoKSkKLSAgICAgICAgcGxhY2Vob2xkZXItPmVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdywgdGV4dFNo
b3VsZEJlVHJ1bmNhdGVkKCkgPyBDU1NWYWx1ZUVsbGlwc2lzIDogQ1NTVmFsdWVDbGlwKTsKKyAg
ICAgICAgcGxhY2Vob2xkZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0
T3ZlcmZsb3csIHRleHRTaG91bGRCZVRydW5jYXRlZCgpID8gQ1NTVmFsdWVFbGxpcHNpcyA6IENT
U1ZhbHVlQ2xpcCk7CiAgICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzgy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGlubGluZSBTVkdGb250RmFjZUVsZW1lbnQ6OlNWR0Zv
bnRGYWNlRWwKICAgICAsIG1fZm9udEZhY2VSdWxlKENTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKCkp
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9udF9mYWNlVGFnKSk7Ci0gICAgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHN0eWxlRGVjbGFyYXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUobV9mb250RmFjZVJ1bGUuZ2V0KCkpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZURlY2xhcmF0aW9uID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgc3R5bGVE
ZWNsYXJhdGlvbi0+c2V0U3RyaWN0UGFyc2luZyh0cnVlKTsKICAgICBtX2ZvbnRGYWNlUnVsZS0+
c2V0RGVjbGFyYXRpb24oc3R5bGVEZWNsYXJhdGlvbi5yZWxlYXNlKCkpOwogfQpAQCAtMzIxLDYg
KzMyMSw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2MKICAgICBT
VkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIGRvY3VtZW50KCktPm1hcHBl
ZEVsZW1lbnRTaGVldCgpLT5hcHBlbmQobV9mb250RmFjZVJ1bGUpOwogICAgIG1fZm9udEZhY2VS
dWxlLT5zZXRQYXJlbnRTdHlsZVNoZWV0KGRvY3VtZW50KCktPm1hcHBlZEVsZW1lbnRTaGVldCgp
KTsKKyAgICBtX2ZvbnRGYWNlUnVsZS0+ZGVjbGFyYXRpb24oKS0+c2V0Q29udGV4dFN0eWxlU2hl
ZXQoZG9jdW1lbnQoKS0+bWFwcGVkRWxlbWVudFNoZWV0KCkpOwogICAgIHJlYnVpbGRGb250RmFj
ZSgpOwogfQogCkBAIC0zNDgsNiArMzQ5LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJl
bW92ZUZyb21NYXBwZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisgICAg
bV9mb250RmFjZVJ1bGUtPmRlY2xhcmF0aW9uKCktPnNldENvbnRleHRTdHlsZVNoZWV0KDApOwog
ICAgIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwog
fQogCg==
</data>
<flag name="review"
          id="129306"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>