<?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>235422</bug_id>
          
          <creation_ts>2022-01-20 15:26:15 -0800</creation_ts>
          <short_desc>Web Inspector: Element tooltips in overlays should use same encodable/decodable Label type as grid overlays</short_desc>
          <delta_ts>2022-02-14 15:00:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Patrick Angle">pangle</reporter>
          <assigned_to name="Patrick Angle">pangle</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1832593</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-01-20 15:26:15 -0800</bug_when>
    <thetext>Element tooltips are currently their own separate implementation of a tooltip/label from the ones we implemented for Grid overlays. We should share this implementation as we work towards further unifying the overlay drawing code paths across platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832594</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-20 15:26:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/87853106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832825</commentid>
    <comment_count>2</comment_count>
      <attachid>449676</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-01-21 11:36:50 -0800</bug_when>
    <thetext>Created attachment 449676
Patch v1.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833567</commentid>
    <comment_count>3</comment_count>
      <attachid>449676</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2022-01-24 17:18:38 -0800</bug_when>
    <thetext>Comment on attachment 449676
Patch v1.0

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

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:1106
&gt; +    return InspectorOverlayLabel(WTFMove(labelContents), { labelX, labelY }, elementTitleBackgroundColor, arrowDirection, arrowEdgePosition).draw(context);

NIT: I&apos;d make the `InspectorOverlayLabel` into a local so it&apos;s clearer that the return value of this function is the return value of `draw`.

&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:49
&gt; +

Style: unnecessary newline

&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:54
&gt; +: InspectorOverlayLabel({ Content(text) }, location, backgroundColor, arrowDirection, arrowEdgePosition)

Style: missing indent

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:45
&gt; +    enum class ArrowDirection {

```
enum class ArrowDirection : uint8_t {
```

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:53
&gt; +    enum class ArrowEdgePosition {

ditto (:45)

NIT: Rather than have this be two separate `enum class`, maybe we could combine them into a `struct`?
```
struct Arrow {
    enum class Direction : uint8_t {
        ...
    };

    enum class Alignment : uint8_t {
        ...
    };

    Direction direction;
    Alignment alignment;
};
```
This way, it&apos;s only one contained argument to provide to `InspectorOverlayLabel` instead of two related ones.

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:64
&gt; +        String text;
&gt; +        Color textColor;

Can we make these `const`?  Or are they reassigned somewhere?

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:66
&gt; +        Content(String text, Color textColor = Color::black)

`const String&amp;`?  `String&amp;&amp;`?
`const Color&amp;`?  `Color&amp;&amp;`?

Also, is this actually necessary?  It seems like you&apos;re always instantiating with aggregate initialization instead of explicitly using this constructor.  I think it might be better to require all callsites to explicitly provide a `Color` instead of having this implicit behavior.

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:106
&gt; +    encoder &lt;&lt; static_cast&lt;uint32_t&gt;(m_arrowDirection);

I don&apos;t think we want to do this.  You should be able to add support for encoding/decoding `enum class` by adding the following at the bottom of this file
```
namespace WTF {

template&lt;&gt; struct EnumTraits&lt;WebCore::InspectorOverlayLabel::ArrowDirection&gt; {
    using values = EnumValues&lt;
        WebCore::InspectorOverlayLabel::ArrowDirection,
        WebCore::InspectorOverlayLabel::ArrowDirection::None,
        WebCore::InspectorOverlayLabel::ArrowDirection::Down,
        WebCore::InspectorOverlayLabel::ArrowDirection::Up,
        WebCore::InspectorOverlayLabel::ArrowDirection::Left,
        WebCore::InspectorOverlayLabel::ArrowDirection::Right
    &gt;;
};

} // namespace WTF

```

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:107
&gt; +    encoder &lt;&lt; static_cast&lt;uint32_t&gt;(m_arrowEdgePosition);

ditto (:106)

&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:114
&gt; +    Vector&lt;Content&gt; contents;
&gt; +    if (!decoder.decode(contents))
&gt; +        return { };

Can we use the new style of decoding?
```
std::optional&lt;Vector&lt;Content&gt;&gt; contents;
decoder &gt;&gt; contents;
if (!contents)
    return std::nullopt;

...

return { {
    WTFMove(*contents),
    ...
} };
```

ditto below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833584</commentid>
    <comment_count>4</comment_count>
      <attachid>449676</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-01-24 18:40:58 -0800</bug_when>
    <thetext>Comment on attachment 449676
Patch v1.0

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

Thanks for the comments! As mentioned offline I&apos;ll also prepare a diff of the label drawing code to make that comparison easier as well as write up more detailed changelog info for those functions. I also clearly need to rebase to appease EWS.

&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:53
&gt;&gt; +    enum class ArrowEdgePosition {
&gt; 
&gt; ditto (:45)
&gt; 
&gt; NIT: Rather than have this be two separate `enum class`, maybe we could combine them into a `struct`?
&gt; ```
&gt; struct Arrow {
&gt;     enum class Direction : uint8_t {
&gt;         ...
&gt;     };
&gt; 
&gt;     enum class Alignment : uint8_t {
&gt;         ...
&gt;     };
&gt; 
&gt;     Direction direction;
&gt;     Alignment alignment;
&gt; };
&gt; ```
&gt; This way, it&apos;s only one contained argument to provide to `InspectorOverlayLabel` instead of two related ones.

That would work. Although the static `InspectorOverlayLabel::expectedSize()` only needs a direction, not an alignment since where along the edge the arrow is doesn&apos;t effect the overall shape of the label, which iirc is why these were separate previously. But maybe that method should get both anyways in case in the future it does affect sizing.

&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:64
&gt;&gt; +        Color textColor;
&gt; 
&gt; Can we make these `const`?  Or are they reassigned somewhere?

They are not reassigned, so yeah `const` is a good idea here

&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.h:66
&gt;&gt; +        Content(String text, Color textColor = Color::black)
&gt; 
&gt; `const String&amp;`?  `String&amp;&amp;`?
&gt; `const Color&amp;`?  `Color&amp;&amp;`?
&gt; 
&gt; Also, is this actually necessary?  It seems like you&apos;re always instantiating with aggregate initialization instead of explicitly using this constructor.  I think it might be better to require all callsites to explicitly provide a `Color` instead of having this implicit behavior.

I was almost ready to say yes, but only three call sites rely on the implicit color (2x in InspectorOverlay::drawElementTitle, and 1x in InspectorOverlayLabel::InspectorOverlayLabel when a String is provided instead of `Content`s), so probably best just to explicitly set a color at those call sites instead, yeah</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837134</commentid>
    <comment_count>5</comment_count>
      <attachid>450827</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-03 15:07:03 -0800</bug_when>
    <thetext>Created attachment 450827
Patch v1.1 - Address review comments so far, rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837136</commentid>
    <comment_count>6</comment_count>
      <attachid>450828</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-03 15:08:55 -0800</bug_when>
    <thetext>Created attachment 450828
Diff of Moved Drawing Code

This diff shows the old InspectorOverlay methods for drawing diffed against the new InspectorOverlayLabel methods that replace them, since there are changes in their implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839936</commentid>
    <comment_count>7</comment_count>
      <attachid>450827</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2022-02-10 14:19:16 -0800</bug_when>
    <thetext>Comment on attachment 450827
Patch v1.1 - Address review comments so far, rebase

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

r=mews, neat stuff!  Thanks for uploading the other diff :)

&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:43
&gt; +InspectorOverlayLabel::InspectorOverlayLabel(Vector&lt;Content&gt;&amp;&amp; contents, const FloatPoint&amp; location, const Color&amp; backgroundColor, Arrow arrow)

NIT: I realize that it&apos;s a `struct` of two `enum`, but it&apos;s probably a good idea to make all these `const Arrow&amp;` in case a new member is added.

ditto below

&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:221
&gt; +            auto text = lines.at(i);

NIT: Any reason not to just `[i]` instead?

ditto below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840100</commentid>
    <comment_count>8</comment_count>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-10 19:28:25 -0800</bug_when>
    <thetext>I&apos;m pretty sure this change will need rebased on top of Bug 236465 once it lands. In addition to Devin&apos;s review notes I also forgot to add the new header to the non-Xcode build file so that windows/gtk/wpe build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840722</commentid>
    <comment_count>9</comment_count>
      <attachid>451791</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-12 12:46:43 -0800</bug_when>
    <thetext>Created attachment 451791
[fast-cq] Patch v1.2 - Address review nits, fix non-Cocoa builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840726</commentid>
    <comment_count>10</comment_count>
      <attachid>450827</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-12 13:33:59 -0800</bug_when>
    <thetext>Comment on attachment 450827
Patch v1.1 - Address review comments so far, rebase

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

&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:43
&gt;&gt; +InspectorOverlayLabel::InspectorOverlayLabel(Vector&lt;Content&gt;&amp;&amp; contents, const FloatPoint&amp; location, const Color&amp; backgroundColor, Arrow arrow)
&gt; 
&gt; NIT: I realize that it&apos;s a `struct` of two `enum`, but it&apos;s probably a good idea to make all these `const Arrow&amp;` in case a new member is added.
&gt; 
&gt; ditto below

I would literally say the opposite. We should stop doing const&amp; on everything by default, and only do it when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840727</commentid>
    <comment_count>11</comment_count>
      <attachid>450827</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-12 14:08:04 -0800</bug_when>
    <thetext>Comment on attachment 450827
Patch v1.1 - Address review comments so far, rebase

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

&gt;&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:43
&gt;&gt;&gt; +InspectorOverlayLabel::InspectorOverlayLabel(Vector&lt;Content&gt;&amp;&amp; contents, const FloatPoint&amp; location, const Color&amp; backgroundColor, Arrow arrow)
&gt;&gt; 
&gt;&gt; NIT: I realize that it&apos;s a `struct` of two `enum`, but it&apos;s probably a good idea to make all these `const Arrow&amp;` in case a new member is added.
&gt;&gt; 
&gt;&gt; ditto below
&gt; 
&gt; I would literally say the opposite. We should stop doing const&amp; on everything by default, and only do it when needed.

What are the disadvantages to these parameters being `const&amp;` here? Is it that (as opposed to passing by value) we could theoretically be modifying the passed value if some aspect of it was mutable even when `const`, or am I perhaps missing another aspect here? Also, if we don&apos;t normally want to be using `const&amp;` here, is there some kind of threshold we should consider (large memory footprint, etc?) to switch from parameters being values to being `const&amp;`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840729</commentid>
    <comment_count>12</comment_count>
      <attachid>450827</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-12 14:18:48 -0800</bug_when>
    <thetext>Comment on attachment 450827
Patch v1.1 - Address review comments so far, rebase

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

&gt;&gt;&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:43
&gt;&gt;&gt;&gt; +InspectorOverlayLabel::InspectorOverlayLabel(Vector&lt;Content&gt;&amp;&amp; contents, const FloatPoint&amp; location, const Color&amp; backgroundColor, Arrow arrow)
&gt;&gt;&gt; 
&gt;&gt;&gt; NIT: I realize that it&apos;s a `struct` of two `enum`, but it&apos;s probably a good idea to make all these `const Arrow&amp;` in case a new member is added.
&gt;&gt;&gt; 
&gt;&gt;&gt; ditto below
&gt;&gt; 
&gt;&gt; I would literally say the opposite. We should stop doing const&amp; on everything by default, and only do it when needed.
&gt; 
&gt; What are the disadvantages to these parameters being `const&amp;` here? Is it that (as opposed to passing by value) we could theoretically be modifying the passed value if some aspect of it was mutable even when `const`, or am I perhaps missing another aspect here? Also, if we don&apos;t normally want to be using `const&amp;` here, is there some kind of threshold we should consider (large memory footprint, etc?) to switch from parameters being values to being `const&amp;`?

There are two disadvantages of using const&amp;:

1) Poorer performance. By passing a small structure as const&amp; we prevent it from being efficiently passed in the normal fashion, typically in registers, and instead pass a pointer to it. For StringView we measured this as slower, so if we used const StringView&amp; we got slower code than just StringView.

2) Lifetime trickiness. This is a very small disadvantage, but it’s possible in some cases to pass a reference to something that is deleted.

Here is the threshold I think we should consider for moving from passing by value to const&amp;:

1) Anything that involves reference counting, non-trivial copy constructors and destructors. In that case const&amp; is almost certainly more efficient, and we also consider moving with &amp;&amp; sometimes too.

2) Even if no non-trivial copy/destroy operation is is involved, a structure that is much larger than a pointer, say as big as three or four pointers, is big enough that passing const&amp; may help performance. Since we are mostly optimizing for 64-bit systems and typically 32-bit integers, that roughly means structures that contain 3 or 4 pointers, or 6 or more int-sized things. If we are taking 8-bit enumerations, we’d need to have like 16 or more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840730</commentid>
    <comment_count>13</comment_count>
      <attachid>450827</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-12 14:35:18 -0800</bug_when>
    <thetext>Comment on attachment 450827
Patch v1.1 - Address review comments so far, rebase

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/inspector/InspectorOverlayLabel.cpp:43
&gt;&gt;&gt;&gt;&gt; +InspectorOverlayLabel::InspectorOverlayLabel(Vector&lt;Content&gt;&amp;&amp; contents, const FloatPoint&amp; location, const Color&amp; backgroundColor, Arrow arrow)
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; NIT: I realize that it&apos;s a `struct` of two `enum`, but it&apos;s probably a good idea to make all these `const Arrow&amp;` in case a new member is added.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; ditto below
&gt;&gt;&gt; 
&gt;&gt;&gt; I would literally say the opposite. We should stop doing const&amp; on everything by default, and only do it when needed.
&gt;&gt; 
&gt;&gt; What are the disadvantages to these parameters being `const&amp;` here? Is it that (as opposed to passing by value) we could theoretically be modifying the passed value if some aspect of it was mutable even when `const`, or am I perhaps missing another aspect here? Also, if we don&apos;t normally want to be using `const&amp;` here, is there some kind of threshold we should consider (large memory footprint, etc?) to switch from parameters being values to being `const&amp;`?
&gt; 
&gt; There are two disadvantages of using const&amp;:
&gt; 
&gt; 1) Poorer performance. By passing a small structure as const&amp; we prevent it from being efficiently passed in the normal fashion, typically in registers, and instead pass a pointer to it. For StringView we measured this as slower, so if we used const StringView&amp; we got slower code than just StringView.
&gt; 
&gt; 2) Lifetime trickiness. This is a very small disadvantage, but it’s possible in some cases to pass a reference to something that is deleted.
&gt; 
&gt; Here is the threshold I think we should consider for moving from passing by value to const&amp;:
&gt; 
&gt; 1) Anything that involves reference counting, non-trivial copy constructors and destructors. In that case const&amp; is almost certainly more efficient, and we also consider moving with &amp;&amp; sometimes too.
&gt; 
&gt; 2) Even if no non-trivial copy/destroy operation is is involved, a structure that is much larger than a pointer, say as big as three or four pointers, is big enough that passing const&amp; may help performance. Since we are mostly optimizing for 64-bit systems and typically 32-bit integers, that roughly means structures that contain 3 or 4 pointers, or 6 or more int-sized things. If we are taking 8-bit enumerations, we’d need to have like 16 or more.

That makes a lot of sense. Thank you for the explanation!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841277</commentid>
    <comment_count>14</comment_count>
      <attachid>451911</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2022-02-14 09:13:48 -0800</bug_when>
    <thetext>Created attachment 451911
[fast-cq] Patch v1.3 - Address additional feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841421</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-14 15:00:26 -0800</bug_when>
    <thetext>Committed r289769 (247241@main): &lt;https://commits.webkit.org/247241@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451911.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449676</attachid>
            <date>2022-01-21 11:36:50 -0800</date>
            <delta_ts>2022-02-03 15:07:01 -0800</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-235422-20220121113649.patch</filename>
            <type>text/plain</type>
            <size>83290</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZmNzg3OWE2OGZhMTM2
OTAwN2IzZThiMGIzMzdiNTVhMzFlOGI4OC4uYTdmNmNkYmE2ZmVmOTRmMjdhYjJiZmUyODYyMGFh
Mjk5YWU5NGU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIyLTAxLTIwICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
bGVtZW50IHRvb2x0aXBzIGluIG92ZXJsYXlzIHNob3VsZCB1c2Ugc2FtZSBlbmNvZGFibGUvZGVj
b2RhYmxlIExhYmVsIHR5cGUgYXMgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRvb2x0aXAgZm9yIGVsZW1lbnRzIHByZXZp
b3VzbHkgdXNlZCBpdHMgb3duIHNsaWdodGx5IGRpZmZlcmVudCBsYWJlbHMgZnJvbSB0aG9zZSB1
c2VkIGZvciBncmlkIG92ZXJsYXlzLAorICAgICAgICB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4g
c3VjaCBhIHdheSB0byBzdXBwb3J0IGJlaW5nIHNlbnQgdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGlP
UyBvdmVybGF5IHN1cHBvcnQuIFRoaXMgcGF0Y2gKKyAgICAgICAgYWRkcyBzdXBwb3J0IGZvciB0
aGUgc2V0dGluZyBkaWZmZXJlbnQgY29sb3JzIGZvciBkaWZmZXJlbnQgcnVucyBvZiB0ZXh0IGFs
b25nIHdpdGggbXVsdGktbGluZSBsYWJlbHMgdG8gYWxsb3cKKyAgICAgICAgdGhlIHNhbWUgbGFi
ZWwgdG8gYmUgdXNlZCBmb3IgYm90aCBHcmlkIG92ZXJsYXlzIGFzIHdlbGwgYXMgZWxlbWVudCB0
b29sdGlwcy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgYFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsYCB3YXMgbW92ZWQgdG8K
KyAgICAgICAgYFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbGAgYXMgaXQgaXMgbm8gbG9u
Z2VyIGV4Y2x1c2l2ZWx5IHVzZWQgZm9yIGdyaWRzLgorCisgICAgICAgIFdpdGggdGhhdCBzdXBw
b3J0LCB3ZSBjYW4gbm93IHVzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWwgZm9yIGVsZW1lbnQgdG9v
bHRpcHMgd2l0aG91dCBuZWVkaW5nIGR1cGxpY2F0ZWQgbGF5b3V0CisgICAgICAgIGFuZCBkcmF3
aW5nIGNvZGUuIEFkZGl0aW9uYWxseSwgdGhlIGZvbnQgdXNlZCBpbiB0aGUgdG9vbHRpcCBpcyBu
b3cgY29uc2lzdGVudCB3aXRoIGdyaWQgbGFiZWxzLCB3aGVyZSBhcworICAgICAgICBwcmV2aW91
c2x5IHdlIHVzZWQgZGlmZmVyZW50IGZvbnQgZmFtaWxpZXMgZm9yIHRoZSBncmlkIGFuZCBlbGVt
ZW50IGxhYmVscy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmJ1aWxkR3JpZE92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dEZvckxheW91dExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tncm91bmRQ
YXRoRm9yTGF5b3V0TGFiZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRT
aXplRm9yTGF5b3V0TGFiZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91
dExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTGFiZWwpOiBEZWxldGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpM
YWJlbDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsOjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuY3Bw
OiBBZGRlZCwgY29kZSBtb3ZlZCBmcm9tIEluc3BlY3Rvck92ZXJsYXkuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpiYWNrZ3Jv
dW5kUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpleHBlY3RlZFNpemUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaDogQWRkZWQsIGNv
ZGUgbW92ZWQgZnJvbSBJbnNwZWN0b3JPdmVybGF5LmguCisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OkNvbnRlbnQpOgorICAgICAgICAtIEFkZCBhIG5l
dyBjb250ZW50IHN0cnVjdCB0byBhbGxvdyBjdXN0b21pemluZyBjb250ZW50IChjdXJyZW50bHkg
anVzdCBjb2xvcikgZm9yIHBhcnRzIG9mIHRoZSBsYWJlbCdzIGNvbnRlbnRzLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250ZW50OjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250ZW50OjpkZWNvZGUpOgorCiAy
MDIyLTAxLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIFttYWNPU10gVmFyaW91cyB0ZXN0cyBoaXQgZGVidWcgYXNzZXJ0aW9ucyB1bmRlciBgU2Vh
cmNoQnVmZmVyOjpzZWFyY2hgIGFmdGVyIHN5c3RlbSBJQ1UgY2hhbmdlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggZTUwMzcyZjZiZDVhMGFhYTEzMmMyYmUxZWNjMjk5OGE0YjIyZjY5ZS4uYjRiYTM0
NDViN2RlMGQxY2IwYjExYjY3ZTQ5N2JiZjQ0YzZlZmY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC05NDEsNiArOTQxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25QdWJsaWMuaAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25XZWJLaXQuaAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmgKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmgKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgKICAgICBpbnNwZWN0b3IvUGFnZURl
YnVnZ2VyLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzZmEwYmJkOTgyNGY5YTg2YTEyZmUzODc5YWJk
ZTBkM2U0ODU5YWY1Li5jNjQzMmFmMTdlNjBiMTBkZDYwOTkwMWJjMmI2OWUyMDBkNzhhMDkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMTQ4NSw2ICsxNDg1LDcgQEAgaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvblB1YmxpYy5jcHAKIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25XZWJLaXQuY3BwCiBpbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAKIGluc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmNwcAoraW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5j
cHAKIGluc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAogaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCiBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBiODI5ZDE0YTRkYzVhNTRiODQzZjMzZTRkN2Q4ZTcyMjY3MjU3OTMzLi44MjkzYjkwMjI0MjVm
NDJmNzRlZWFiMmJmNzRlNGQxZmRmZmY4N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDEsMTQgKzI0MSwxMyBAQAogCQkw
ODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEzMEYw
MUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovOyB9OwogCQkw
ODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBNTBG
MDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggKi87IH07CiAJ
CTA4NDRCMDFEMTI1NUI0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ0QjAxRDEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovOyB9OworCQkw
ODQ0QjAxRDEyNTVCNUE2MTBCOEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ0QjAxRDEyNTVFNUE2MTBC
OEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYw
MDk2MEE5RiAvKiBGb250TWV0cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg0NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg1NEIw
MTUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMDMxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR0lubGluZS5oICovOyB9OwogCQkwODU0QjAxNzEyNTVFNEU2MDBCOUNERDAgLyog
UmVuZGVyU1ZHSW5saW5lVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg1NEIwMDUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRl
eHQuaCAqLzsgfTsKIAkJMDg1NEIwMTkxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDA3
MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmggKi87IH07CiAJCTA4NTRCMDFCMTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMDkxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR1RleHRQYXRoLmggKi87IH07CiAJCTA4NTRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBS
ZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg1NEIwMEIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmggKi87IH07
Ci0JCTA4NDRCMDFEMTI1NUI0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ0QjAx
RDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovOyB9Owot
CQkwODQ0QjAxRDEyNTVCNUE2MTBCOEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ0QjAxRDEyNTVFNUE2
MTBCOEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmggKi87IH07CiAJCTA4NTRCMDFGMTI1NUU0
RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lRmxvd0JveC5oICovOyB9OwogCQkwODU0QjAyMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg1NEIwMEYxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsK
IAkJMDg1NEIwMjMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYw
MEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggKi87IH07CkBAIC05MjAsNiArOTE5LDcgQEAK
IAkJMkVDRjdBREQxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREIxMDE2MkIzODAwNDI3
REU3IC8qIEpTRXJyb3JFdmVudC5oICovOyB9OwogCQkyRUNGN0FFMjEwMTYyQjU4MDA0MjdERTcg
LyogRXJyb3JFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkVDRjdBREYxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCAqLzsgfTsKIAkJ
MkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUg
LyogRE9NRm9ybURhdGEuaCAqLzsgfTsKKwkJMkVEREFGNDQyNzkyMEVCNDAwNUQxOEU0IC8qIElu
c3BlY3Rvck92ZXJsYXlMYWJlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkVEREFGNDMyNzkyMEVCNDAwNUQxOEU0IC8qIEluc3BlY3Rvck92ZXJsYXlM
YWJlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJFREVGMUY0MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUUxMjFCMEVGQzAwNzI2REIyIC8q
IEJsb2JEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkVERUYxRjUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUYxMjFCMEVGQzAw
NzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0
cnlJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RURFRjFGMTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMjM5LDggKzEyMzksOCBA
QAogCQk0MzU4RTg4MTEzNjBBMzE3MDBFNDc0OEMgLyogRkVEcm9wU2hhZG93LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3RjEzNjBBMzE3MDBF
NDc0OEMgLyogRkVEcm9wU2hhZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDM1OEU4ODYxMzYwQTMzQjAwRTQ3NDhDIC8qIFNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNThFODgzMTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50Lmgg
Ki87IH07CiAJCTQzNjcwOEMxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODIxMkQ5
Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmggKi87IH07Ci0JCTQzNjcwOEM0MzNGOENB
NEMxMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwNzc0MTJEOUJDNEEwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdDb250YWluZXIuaCAqLzsgfTsKIAkJNDM2NzA4QzMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExl
Z2FjeVJlbmRlclNWR0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4ODQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNW
R0NvbnRhaW5lci5oICovOyB9OworCQk0MzY3MDhDNDMzRjhDQTRDMTAwNDQyMzQgLyogUmVuZGVy
U1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDc3NDEyRDlCQzRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87
IH07CiAJCTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3Au
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODg2
MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLzsgfTsKIAkJNDM2
NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODgxMkQ5Q0E0
QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQk0MzY3MDhD
OTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdJbWFnZS5oICovOyB9OwpAQCAtNjIwMSwxMSArNjIwMSwxMyBAQAogCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODM0QjAwQzEyNDRFNEU2MDBCOUNE
RDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgzNEIwMEMxMjQ0RTVBNjEwQjhBRkQxIC8qIFNWR0NvbnRh
aW5lckxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdD
b250YWluZXJMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODQ0QjAxRDEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NDRCMDFEMTI1NUU1QTYxMEI4QUZEMSAvKiBTVkdD
b250YWluZXJMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQ29u
dGFpbmVyTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NDU2ODA3MTJC
OTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb250TWV0cmljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0
QjAwMjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0lubGluZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDAzMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJ
bmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSW5saW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjE2LDEwICs2MjE4LDYgQEAKIAkJ
MDg1NEIwMDgxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RleHRQYXRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMDkxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1RleHRQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDBCMTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdUU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwODM0QjAwQzEyNDRFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgzNEIwMEMxMjQ0
RTVBNjEwQjhBRkQxIC8qIFNWR0NvbnRhaW5lckxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDb250YWluZXJMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4NDRC
MDFEMTI1NUU1QTYxMEI4QUZEMSAvKiBTVkdDb250YWluZXJMYXlvdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQ29udGFpbmVyTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZUZs
b3dCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRDEyNTVFNEU2
MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4NTRCMDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZVRleHRCb3guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIwOSw2ICs4MjA3LDggQEAKIAkJMkVDRjdBRTAx
MDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEVycm9yRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUQ2MDlCQTEx
NDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRE9NRm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkVEREFGNDMyNzkyMEVCNDAwNUQxOEU0IC8qIEluc3BlY3Rvck92ZXJsYXlM
YWJlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5TGFiZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVEREFGNDUyNzkyMEVDMzAwNUQxOEU0IC8qIEluc3BlY3Rv
ck92ZXJsYXlMYWJlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRURFRjFFRDEyMUIwRUZDMDA3
MjZEQjIgLyogQmxvYkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvYkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRURFRjFFRTEy
MUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUYx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkwMDMsMTIgKzkwMDMsMTIgQEAKIAkJNDM1OEU4ODIxMzYwQTMzQjAwRTQ3NDhDIC8qIFNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzNThFODgzMTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM1OEU4ODQxMzYwQTMzQjAwRTQ3NDhD
IC8qIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDc3NDEyRDlCQzRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4MTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZH
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZH
QmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4MjEyRDlDQTRB
MDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU1ZHQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDM2
NzA4ODQ0MkE5QUMzQjEwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdDb250YWluZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4MzEyRDlDQTRBMDAwNDQyMzQgLyogTGVn
YWN5UmVuZGVyU1ZHQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExlZ2FjeVJlbmRlclNWR0NvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzNjcwODg0MTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdDb250
YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZH
Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQzNjcwNzc0MTJEOUJD
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwODg0NDJBOUFDM0IxMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4ODUxMkQ5Q0E0QTAwMDQ0
MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MzY3MDg4NjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3JhZGll
bnRTdG9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4NzEyRDlDQTRB
MDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDMyOCw2ICsyMDMyOCw4IEBACiAJCQkJNTA0QUFD
Q0MxODM0NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuaCAqLywKIAkJCQk3QzUy
MkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8sCiAJCQkJN0M1
MjJENEExNUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLywKKwkJCQkyRURE
QUY0NTI3OTIwRUMzMDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCAqLywKKwkJ
CQkyRUREQUY0MzI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggKi8s
CiAJCQkJNkE3Mjc5ODkxRjE2QzI5QjAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0u
Y3BwICovLAogCQkJCTZBNzI3OTg4MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtLmggKi8sCiAJCQkJODJBQjE3NkYxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0
eWxlU2hlZXQuY3BwICovLApAQCAtMzQ5ODUsNiArMzQ5ODcsNyBAQAogCQkJCUE1QjgxQ0IxMUZB
QTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUwNEFBQ0NFMTgzNDQ1NTkwMEUzRDlCQyAvKiBJbnNwZWN0b3JOb2RlRmluZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjAzQzA3NTE4ODQ4MDU1MDBBNUY4Q0EgLyogSW5zcGVjdG9yT3Zl
cmxheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVEREFGNDQyNzkyMEVCNDAwNUQxOEU0IC8qIElu
c3BlY3Rvck92ZXJsYXlMYWJlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCODFDQjIxRkFBNDQ2
MjAwMzdEMUU2IC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkE3
Mjc5OEIxRjE2QzI5QzAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNo
ZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTE0LDcgKzM2MTE3LDYgQEAKIAkJCQlERjlBRkQ3
MjEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDOEI1QTMxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTUwNTI0
RjQxQjcxMkZGNjAwNjk2QUE5IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0I0NDEwRTEyNzk1OEZDNTAwMEI0RjhBIC8qIE1lZGlh
U2FtcGxlVmlkZW9GcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc3QkE1NzYyNjBGQURGNjAw
NzJGMTlGIC8qIE1lZGlhUG9zaXRpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJFMkNB
RkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRFMTk1OTJBMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmggaW4gSGVhZGVycyAqLywK
QEAgLTM2MTM3LDYgKzM2MTM5LDcgQEAKIAkJCQlDRUVGQ0Q3QTE5REIzMUY3MDAzODc2RDcgLyog
TWVkaWFSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUJGOURCM0MxRDM5NzNB
RDAwMjZBRUI3IC8qIE1lZGlhU2FtcGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQjEyNEQ4RDFE
MzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3QjQ0MTBFMTI3OTU4RkM1MDAwQjRGOEEgLyogTWVkaWFTYW1wbGVWaWRlb0ZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREJFQUVBRDE5RDkyQjZDMDBCRUJBODggLyogTWVkaWFTZWxlY3Rp
b25Hcm91cEFWRk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExN0QyNzVFMUVBQzU3OTgwMEJG
MDFFNyAvKiBNZWRpYVNlbGVjdGlvbk9wdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc3QkE1
NzUyNjBGQTVGRTAwNzJGMTlGIC8qIE1lZGlhU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggMmEwNGYw
MDA4M2JmYzBmM2NlYjZkM2FiZjA4N2VlODM1MmZkMTU0Yi4uN2IyNjQzODk3MDliMzdjZTk3Njg4
NWI4Y2QyYTNkYzA3M2FjYzkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcApAQCAtNzQsMTAgKzc0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGVs
ZW1lbnREYXRhU3BhY2luZyA9IDI7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGVsZW1lbnREYXRh
QXJyb3dTaXplID0gNzsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVudERhdGFCb3JkZXJT
aXplID0gMTsKLQogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclNpemUgPSAxNTsKIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgcnVsZXJMYWJlbFNpemUgPSAxMzsKIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgcnVsZXJTdGVwSW5jcmVtZW50ID0gNTA7CkBAIC04NSw5ICs4MSw2IEBAIHN0YXRpYyBj
b25zdGV4cHIgZmxvYXQgcnVsZXJTdGVwTGVuZ3RoID0gODsKIHN0YXRpYyBjb25zdGV4cHIgZmxv
YXQgcnVsZXJTdWJTdGVwSW5jcmVtZW50ID0gNTsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgcnVs
ZXJTdWJTdGVwTGVuZ3RoID0gNTsKIAotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBsYXlvdXRMYWJl
bFBhZGRpbmcgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBsYXlvdXRMYWJlbEFycm93U2l6
ZSA9IDY7Ci0KIHN0YXRpYyBjb25zdGV4cHIgVUNoYXIgYnVsbGV0ID0gMHgyMDIyOwogc3RhdGlj
IGNvbnN0ZXhwciBVQ2hhciBlbGxpcHNpcyA9IDB4MjAyNjsKIHN0YXRpYyBjb25zdGV4cHIgVUNo
YXIgbXVsdGlwbGljYXRpb25TaWduID0gMHgwMEQ3OwpAQCAtMTAzMywxNDEgKzEwMjYsODQgQEAg
UGF0aCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgTm9kZSYgbm9kZSwgY28KICAgICAgICAgICAgIGVsZW1lbnRSb2xlID0gYXhPYmpl
Y3QtPmNvbXB1dGVkUm9sZVN0cmluZygpOwogICAgIH0KIAotICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyh7
ICJNZW5sbyIsIG1fcGFnZS5zZXR0aW5ncygpLmZpeGVkRm9udEZhbWlseSgpIH0pOwotICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoMTEpOwotCi0gICAgRm9udENhc2NhZGUgZm9u
dChXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIDAsIDApOwotICAgIGZvbnQudXBkYXRlKG51bGxw
dHIpOwotCi0gICAgaW50IGZvbnRIZWlnaHQgPSBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
Ci0KLSAgICBmbG9hdCBlbGVtZW50RGF0YVdpZHRoOwotICAgIGZsb2F0IGVsZW1lbnREYXRhSGVp
Z2h0ID0gZm9udEhlaWdodDsKLSAgICBib29sIGhhc1NlY29uZExpbmUgPSAhZWxlbWVudFJvbGUu
aXNFbXB0eSgpOwotCi0gICAgewotICAgICAgICBhdXRvIGZpcnN0TGluZSA9IG1ha2VTdHJpbmco
ZWxlbWVudFRhZ05hbWUsIGVsZW1lbnRJRFZhbHVlLCBlbGVtZW50Q2xhc3NWYWx1ZSwgZWxlbWVu
dFBzZXVkb1R5cGUsICcgJywgZWxlbWVudFdpZHRoLCAicHgiLCAnICcsIG11bHRpcGxpY2F0aW9u
U2lnbiwgJyAnLCBlbGVtZW50SGVpZ2h0LCAicHgiKTsKLSAgICAgICAgYXV0byBzZWNvbmRMaW5l
ID0gbWFrZVN0cmluZygiUm9sZSAiLCBlbGVtZW50Um9sZSk7Ci0KLSAgICAgICAgZmxvYXQgZmly
c3RMaW5lV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oZmlyc3RMaW5lKSk7Ci0gICAgICAgIGZs
b2F0IHNlY29uZExpbmVXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihzZWNvbmRMaW5lKSk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlVGFnQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7
IDEzNiwgMTgsIDEyOCB9OyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC50YWcpCisgICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQXR0cmlidXRlVmFsdWVDb2xv
ciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjYsIDI2LCAxNjYgfTsgLy8gS2VlcCB0aGlzIGluIHN5bmMg
d2l0aCBYTUxWaWV3ZXIuY3NzICguYXR0cmlidXRlLXZhbHVlKQorICAgIGNvbnN0ZXhwciBhdXRv
IGVsZW1lbnRUaXRsZUF0dHJpYnV0ZU5hbWVDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMTUzLCA2
OSwgMCB9OyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1
dGUtbmFtZSkKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVSb2xlQ29sb3IgPSBTUkdC
QTx1aW50OF90PiB7IDE3MCwgMTMsIDE0NSB9OworCisgICAgVmVjdG9yPEluc3BlY3Rvck92ZXJs
YXlMYWJlbDo6Q29udGVudD4gbGFiZWxDb250ZW50cyA9IHsKKyAgICAgICAgeyBlbGVtZW50VGFn
TmFtZSwgZWxlbWVudFRpdGxlVGFnQ29sb3IgfSwKKyAgICAgICAgeyBlbGVtZW50SURWYWx1ZSwg
ZWxlbWVudFRpdGxlQXR0cmlidXRlVmFsdWVDb2xvciB9LAorICAgICAgICB7IGVsZW1lbnRDbGFz
c1ZhbHVlLCBlbGVtZW50VGl0bGVBdHRyaWJ1dGVOYW1lQ29sb3IgfSwKKyAgICAgICAgeyBlbGVt
ZW50UHNldWRvVHlwZSwgZWxlbWVudFRpdGxlVGFnQ29sb3IgfSwKKyAgICAgICAgeyBtYWtlU3Ry
aW5nKGVtU3BhY2UsIGVsZW1lbnRXaWR0aCkgfSwKKyAgICAgICAgeyBtYWtlU3RyaW5nKCJweCAi
X3MsIG11bHRpcGxpY2F0aW9uU2lnbiwgIiAiX3MpLCBDb2xvcjo6ZGFya0dyYXkgfSwKKyAgICAg
ICAgeyBlbGVtZW50SGVpZ2h0IH0sCisgICAgICAgIHsgInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkg
fSwKKyAgICB9OwogCi0gICAgICAgIGVsZW1lbnREYXRhV2lkdGggPSBzdGQ6OmZtYXgoZmlyc3RM
aW5lV2lkdGgsIHNlY29uZExpbmVXaWR0aCk7Ci0gICAgICAgIGlmIChoYXNTZWNvbmRMaW5lKQot
ICAgICAgICAgICAgZWxlbWVudERhdGFIZWlnaHQgKz0gZm9udEhlaWdodDsKKyAgICBpZiAoIWVs
ZW1lbnRSb2xlLmlzRW1wdHkoKSkgeworICAgICAgICBsYWJlbENvbnRlbnRzLmFwcGVuZCh7ICJc
blJvbGUgIl9zLCBlbGVtZW50VGl0bGVSb2xlQ29sb3IgfSk7CisgICAgICAgIGxhYmVsQ29udGVu
dHMuYXBwZW5kKHsgZWxlbWVudFJvbGUgfSk7CiAgICAgfQogCiAgICAgRnJhbWVWaWV3KiBwYWdl
VmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCk7CiAKICAgICBGbG9hdFNpemUgdmlld3Bv
cnRTaXplID0gcGFnZVZpZXctPnNpemVGb3JWaXNpYmxlQ29udGVudCgpOwotICAgIHZpZXdwb3J0
U2l6ZS5leHBhbmQoLWVsZW1lbnREYXRhU3BhY2luZywgLWVsZW1lbnREYXRhU3BhY2luZyk7Ci0K
ICAgICBGbG9hdFNpemUgY29udGVudEluc2V0KDAsIHBhZ2VWaWV3LT50b3BDb250ZW50SW5zZXQo
U2Nyb2xsVmlldzo6VG9wQ29udGVudEluc2V0VHlwZTo6V2ViQ29yZU9yUGxhdGZvcm1Db250ZW50
SW5zZXQpKTsKLSAgICBjb250ZW50SW5zZXQuZXhwYW5kKGVsZW1lbnREYXRhU3BhY2luZywgZWxl
bWVudERhdGFTcGFjaW5nKTsKICAgICBpZiAobV9zaG93UnVsZXJzIHx8IG1fc2hvd1J1bGVyc0R1
cmluZ0VsZW1lbnRTZWxlY3Rpb24pCiAgICAgICAgIGNvbnRlbnRJbnNldC5leHBhbmQocnVsZXJT
aXplLCBydWxlclNpemUpOwogCisgICAgYXV0byBleHBlY3RlZExhYmVsU2l6ZSA9IEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6ZXhwZWN0ZWRTaXplKGxhYmVsQ29udGVudHMsIEluc3BlY3Rvck92ZXJs
YXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlVwKTsKKyAgICBhdXRvIGJvdW5kc0NlbnRlclggPSBi
b3VuZHMuY2VudGVyKCkueCgpOworCisgICAgZmxvYXQgbGFiZWxYOworICAgIEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb24gYXJyb3dFZGdlUG9zaXRpb247CisgICAgaWYg
KGJvdW5kc0NlbnRlclggKyAoZXhwZWN0ZWRMYWJlbFNpemUud2lkdGgoKSAvIDIpIDwgdmlld3Bv
cnRTaXplLndpZHRoKCkKKyAgICAgICAgJiYgYm91bmRzQ2VudGVyWCAtIChleHBlY3RlZExhYmVs
U2l6ZS53aWR0aCgpIC8gMikgPiBjb250ZW50SW5zZXQud2lkdGgoKSkgeworICAgICAgICBsYWJl
bFggPSBib3VuZHMueCgpICsgKGJvdW5kcy53aWR0aCgpIC8gMik7CisgICAgICAgIGFycm93RWRn
ZVBvc2l0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbjo6TWlk
ZGxlOworICAgIH0gZWxzZSBpZiAoYm91bmRzLngoKSA8IGNvbnRlbnRJbnNldC53aWR0aCgpKSB7
CisgICAgICAgIGxhYmVsWCA9IGZtYXgoY29udGVudEluc2V0LndpZHRoKCksIGJvdW5kc0NlbnRl
clgpOworICAgICAgICBhcnJvd0VkZ2VQb3NpdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6
QXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc7CisgICAgfSBlbHNlIGlmIChib3VuZHMubWF4WCgp
ID4gdmlld3BvcnRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgbGFiZWxYID0gZm1pbih2aWV3cG9y
dFNpemUud2lkdGgoKSwgYm91bmRzQ2VudGVyWCk7CisgICAgICAgIGFycm93RWRnZVBvc2l0aW9u
ID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGFiZWxYID0gYm91bmRzQ2VudGVyWDsKKyAgICAgICAgYXJy
b3dFZGdlUG9zaXRpb24gPSBib3VuZHNDZW50ZXJYIDwgKHZpZXdwb3J0U2l6ZS53aWR0aCgpIC8g
MikgPyBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nIDog
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc7CisgICAg
fQorCiAgICAgZmxvYXQgYW5jaG9yVG9wID0gYm91bmRzLnkoKTsKICAgICBmbG9hdCBhbmNob3JC
b3R0b20gPSBib3VuZHMubWF4WSgpOwogCi0gICAgYm9vbCByZW5kZXJBcnJvd1VwID0gZmFsc2U7
Ci0gICAgYm9vbCByZW5kZXJBcnJvd0Rvd24gPSBmYWxzZTsKLQotICAgIGZsb2F0IGJveFdpZHRo
ID0gZWxlbWVudERhdGFXaWR0aCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAyKTsKLSAgICBmbG9h
dCBib3hIZWlnaHQgPSBlbGVtZW50RGF0YUFycm93U2l6ZSArIGVsZW1lbnREYXRhSGVpZ2h0ICsg
KGVsZW1lbnREYXRhU3BhY2luZyAqIDIpOwotCi0gICAgZmxvYXQgYm94WCA9IGJvdW5kcy54KCk7
Ci0gICAgaWYgKGJveFggPCBjb250ZW50SW5zZXQud2lkdGgoKSkKLSAgICAgICAgYm94WCA9IGNv
bnRlbnRJbnNldC53aWR0aCgpOwotICAgIGVsc2UgaWYgKGJveFggPiB2aWV3cG9ydFNpemUud2lk
dGgoKSAtIGJveFdpZHRoKQotICAgICAgICBib3hYID0gdmlld3BvcnRTaXplLndpZHRoKCkgLSBi
b3hXaWR0aDsKLSAgICBlbHNlCi0gICAgICAgIGJveFggKz0gZWxlbWVudERhdGFTcGFjaW5nOwot
Ci0gICAgZmxvYXQgYm94WTsKKyAgICBmbG9hdCBsYWJlbFk7CisgICAgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbjsKICAgICBpZiAoYW5jaG9yVG9w
ID4gdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIGJveFkgPSB2aWV3cG9ydFNpemUu
aGVpZ2h0KCkgLSBib3hIZWlnaHQ7Ci0gICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7Cisg
ICAgICAgIGxhYmVsWSA9IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgYXJyb3dEaXJl
Y3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpEb3duOwogICAg
IH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tIDwgY29udGVudEluc2V0LmhlaWdodCgpKSB7Ci0gICAg
ICAgIGJveFkgPSBjb250ZW50SW5zZXQuaGVpZ2h0KCkgKyBlbGVtZW50RGF0YUFycm93U2l6ZTsK
LSAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhbmNob3JUb3Ag
LSBib3hIZWlnaHQgLSBlbGVtZW50RGF0YVNwYWNpbmcgPiBjb250ZW50SW5zZXQuaGVpZ2h0KCkp
IHsKLSAgICAgICAgYm94WSA9IGFuY2hvclRvcCAtIGJveEhlaWdodCAtIGVsZW1lbnREYXRhU3Bh
Y2luZzsKLSAgICAgICAgcmVuZGVyQXJyb3dEb3duID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFu
Y2hvckJvdHRvbSArIGJveEhlaWdodCArIGVsZW1lbnREYXRhU3BhY2luZyA8IHZpZXdwb3J0U2l6
ZS5oZWlnaHQoKSkgewotICAgICAgICBib3hZID0gYW5jaG9yQm90dG9tICsgZWxlbWVudERhdGFB
cnJvd1NpemUgKyBlbGVtZW50RGF0YVNwYWNpbmc7Ci0gICAgICAgIHJlbmRlckFycm93VXAgPSB0
cnVlOworICAgICAgICBsYWJlbFkgPSBjb250ZW50SW5zZXQuaGVpZ2h0KCk7CisgICAgICAgIGFy
cm93RGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6VXA7
CisgICAgfSBlbHNlIGlmIChhbmNob3JUb3AgLSBleHBlY3RlZExhYmVsU2l6ZS5oZWlnaHQoKSA+
IGNvbnRlbnRJbnNldC5oZWlnaHQoKSkgeworICAgICAgICBsYWJlbFkgPSBhbmNob3JUb3A7Cisg
ICAgICAgIGFycm93RGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVj
dGlvbjo6RG93bjsKKyAgICB9IGVsc2UgaWYgKGFuY2hvckJvdHRvbSArIGV4cGVjdGVkTGFiZWxT
aXplLmhlaWdodCgpIDwgdmlld3BvcnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIGxhYmVsWSA9
IGFuY2hvckJvdHRvbTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93RGlyZWN0aW9uOjpVcDsKICAgICB9IGVsc2UgewotICAgICAgICBib3hZID0g
Y29udGVudEluc2V0LmhlaWdodCgpOwotICAgICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOwot
ICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLm1vdmVUbyh7IGJveFgsIGJveFkgfSk7
Ci0gICAgaWYgKHJlbmRlckFycm93VXApIHsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBib3hY
ICsgKGVsZW1lbnREYXRhQXJyb3dTaXplICogMiksIGJveFkgfSk7Ci0gICAgICAgIHBhdGguYWRk
TGluZVRvKHsgYm94WCArIChlbGVtZW50RGF0YUFycm93U2l6ZSAqIDMpLCBib3hZIC0gZWxlbWVu
dERhdGFBcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgYm94WCArIChlbGVt
ZW50RGF0YUFycm93U2l6ZSAqIDQpLCBib3hZIH0pOworICAgICAgICBsYWJlbFkgPSBjb250ZW50
SW5zZXQuaGVpZ2h0KCkgKyBleHBlY3RlZExhYmVsU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgYXJy
b3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpEb3du
OwogICAgIH0KLSAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyBlbGVtZW50RGF0YVdpZHRoICsg
KGVsZW1lbnREYXRhU3BhY2luZyAqIDIpLCBib3hZIH0pOwotICAgIHBhdGguYWRkTGluZVRvKHsg
Ym94WCArIGVsZW1lbnREYXRhV2lkdGggKyAoZWxlbWVudERhdGFTcGFjaW5nICogMiksIGJveFkg
KyBlbGVtZW50RGF0YUhlaWdodCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAyKSB9KTsKLSAgICBp
ZiAocmVuZGVyQXJyb3dEb3duKSB7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgYm94WCArIChl
bGVtZW50RGF0YUFycm93U2l6ZSAqIDQpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQgKyAoZWxl
bWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgYm94WCAr
IChlbGVtZW50RGF0YUFycm93U2l6ZSAqIDMpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQgKyAo
ZWxlbWVudERhdGFTcGFjaW5nICogMikgKyBlbGVtZW50RGF0YUFycm93U2l6ZSB9KTsKLSAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnREYXRhQXJyb3dTaXplICogMiksIGJv
eFkgKyBlbGVtZW50RGF0YUhlaWdodCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAyKSB9KTsKLSAg
ICB9Ci0gICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQg
KyAoZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLQot
ICAgIGNvbnRleHQudHJhbnNsYXRlKGVsZW1lbnREYXRhQm9yZGVyU2l6ZSAvIDIuMGYsIGVsZW1l
bnREYXRhQm9yZGVyU2l6ZSAvIDIuMGYpOwogCiAgICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDI1NSwgMTk0IH07Ci0g
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRpdGxlQmFja2dyb3VuZENvbG9yKTsKLQot
ICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0KLSAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwotCiAgICAgY29uc3RleHByIGF1dG8gZWxlbWVu
dFRpdGxlQm9yZGVyQ29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7Ci0gICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihlbGVtZW50VGl0bGVCb3JkZXJDb2xvcik7Ci0KLSAgICBjb250ZXh0LnN0cm9rZVBh
dGgocGF0aCk7Ci0KLSAgICBGbG9hdFBvaW50IHRleHRQb3NpdGlvbihib3hYICsgZWxlbWVudERh
dGFTcGFjaW5nLCBib3hZIC0gKGVsZW1lbnREYXRhU3BhY2luZyAvIDIuMGYpICsgZm9udEhlaWdo
dCk7Ci0gICAgY29uc3QgYXV0byBkcmF3VGV4dCA9IFsmXSAoY29uc3QgU3RyaW5nJiB0ZXh0LCBT
UkdCQTx1aW50OF90PiBjb2xvcikgewotICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IpOwot
ICAgICAgICB0ZXh0UG9zaXRpb24gKz0gY29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRl
eHQpLCB0ZXh0UG9zaXRpb24pOwotICAgIH07CiAKLSAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFt
ZSwgeyAxMzYsIDE4LCAxMjggfSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2Vy
LmNzcyAoLnRhZykKLSAgICBkcmF3VGV4dChlbGVtZW50SURWYWx1ZSwgeyAyNiwgMjYsIDE2NiB9
KTsgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBYTUxWaWV3ZXIuY3NzICguYXR0cmlidXRlLXZh
bHVlKQotICAgIGRyYXdUZXh0KGVsZW1lbnRDbGFzc1ZhbHVlLCB7IDE1MywgNjksIDAgfSk7IC8v
IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQot
ICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBlLCB7IDEzNiwgMTgsIDEyOCB9KTsgLy8gS2Vl
cCB0aGlzIGluIHN5bmMgd2l0aCBYTUxWaWV3ZXIuY3NzICgudGFnKQotICAgIGRyYXdUZXh0KCIg
Il9zLCBDb2xvcjo6YmxhY2spOwotICAgIGRyYXdUZXh0KGVsZW1lbnRXaWR0aCwgQ29sb3I6OmJs
YWNrKTsKLSAgICBkcmF3VGV4dCgicHgiX3MsIENvbG9yOjpkYXJrR3JheSk7Ci0gICAgZHJhd1Rl
eHQoIiAiX3MsIENvbG9yOjpkYXJrR3JheSk7Ci0gICAgZHJhd1RleHQobWFrZVN0cmluZyhtdWx0
aXBsaWNhdGlvblNpZ24pLCBDb2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KCIgIl9zLCBD
b2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KGVsZW1lbnRIZWlnaHQsIENvbG9yOjpibGFj
ayk7Ci0gICAgZHJhd1RleHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwotCi0gICAgaWYgKGhh
c1NlY29uZExpbmUpIHsKLSAgICAgICAgdGV4dFBvc2l0aW9uLnNldFgoYm94WCArIGVsZW1lbnRE
YXRhU3BhY2luZyk7Ci0gICAgICAgIHRleHRQb3NpdGlvbi5tb3ZlKDAsIGZvbnRIZWlnaHQpOwot
ICAgICAgICAKLSAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIHsgMTcwLCAxMywgMTQ1IH0pOwot
ICAgICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNrKTsKLSAgICAgICAgZHJhd1RleHQo
ZWxlbWVudFJvbGUsIENvbG9yOjpibGFjayk7Ci0gICAgfQorICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcygxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGVsZW1lbnRUaXRsZUJvcmRlckNv
bG9yKTsKIAotICAgIHJldHVybiBwYXRoOworICAgIHJldHVybiBJbnNwZWN0b3JPdmVybGF5TGFi
ZWwoV1RGTW92ZShsYWJlbENvbnRlbnRzKSwgeyBsYWJlbFgsIGxhYmVsWSB9LCBlbGVtZW50VGl0
bGVCYWNrZ3JvdW5kQ29sb3IsIGFycm93RGlyZWN0aW9uLCBhcnJvd0VkZ2VQb3NpdGlvbikuZHJh
dyhjb250ZXh0KTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd0xheW91dEhhdGNoaW5nKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgRmxvYXRRdWFkIHF1YWQpCkBAIC0xMjA0LDI2OCArMTE0MCw2IEBA
IHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IEZsb2F0UXVhZCBxdWFkKQogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChoYXRjaFBhdGgpOwogfQog
Ci1zdGF0aWMgRm9udENhc2NhZGUgZm9udEZvckxheW91dExhYmVsKCkKLXsKLSAgICBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWxpZXMoeyAic3lzdGVtLXVpIiB9KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0
KEZvbnRTZWxlY3Rpb25WYWx1ZSg1MDApKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKDEyKTsKLQotICAgIEZvbnRDYXNjYWRlIGZvbnQoV1RGTW92ZShmb250RGVzY3JpcHRp
b24pLCAwLCAwKTsKLSAgICBmb250LnVwZGF0ZShudWxscHRyKTsKLSAgICByZXR1cm4gZm9udDsK
LX0KLQotc3RhdGljIFBhdGggYmFja2dyb3VuZFBhdGhGb3JMYXlvdXRMYWJlbChmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGFy
cm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uIGFy
cm93RWRnZVBvc2l0aW9uLCBmbG9hdCBhcnJvd1NpemUpCi17Ci0gICAgUGF0aCBwYXRoOwotICAg
IEZsb2F0U2l6ZSBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbjsKLQotICAgIHN3aXRjaCAoYXJy
b3dEaXJlY3Rpb24pIHsKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJl
Y3Rpb246OkRvd246Ci0gICAgICAgIHBhdGgubW92ZVRvKHsgLSh3aWR0aCAvIDIpLCAtaGVpZ2h0
IC0gYXJyb3dTaXplfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCAt
YXJyb3dTaXplIH0pOwotCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFk
aW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIDAgfSk7Ci0g
ICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSArIGFycm93U2l6ZSwgLWFy
cm93U2l6ZSB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAo
d2lkdGggLyAyKSwgMCB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgotICAgICAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBh
cnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1NpemUsIC1hcnJv
d1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAwIH0p
OwotICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IC0od2lkdGggLyAy
KSwgMCB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgLWFycm93U2l6
ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgLWhlaWdodCAtIGFy
cm93U2l6ZSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpM
YWJlbEFycm93RGlyZWN0aW9uOjpVcDoKLSAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRoIC8g
MiksIGhlaWdodCArIGFycm93U2l6ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdp
ZHRoIC8gMiksIGFycm93U2l6ZSB9KTsKLQotICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3Np
dGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIp
LCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMikgKyBhcnJv
d1NpemUsIGFycm93U2l6ZSB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0
aW9uID0geyAod2lkdGggLyAyKSwgMCB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgotICAg
ICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Ci0gICAg
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxp
bmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpIC0gYXJyb3dTaXpl
LCBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIp
LCAwIH0pOwotICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IC0od2lk
dGggLyAyKSwgMCB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgYXJy
b3dTaXplIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCBoZWlnaHQg
KyBhcnJvd1NpemUgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgIHBhdGgubW92ZVRvKHsgLXdp
ZHRoIC0gYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRv
KHsgLWFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOwotCi0gICAgICAgIHN3aXRjaCAoYXJyb3dF
ZGdlUG9zaXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJy
b3dTaXplLCAtKGhlaWdodCAvIDIpICsgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAwLCAtKGhlaWdodCAvIDIpIH0pOwotICAgICAgICAgICAgb2Zmc2V0Rm9yQXJy
b3dFZGdlUG9zaXRpb24gPSB7IDAsIChoZWlnaHQgLyAyKSB9OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6
TWlkZGxlOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCBhcnJvd1Np
emUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7Ci0gICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpUcmFpbGluZzoKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgKGhlaWdo
dCAvIDIpIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAoaGVp
Z2h0IC8gMikgLSBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQ
b3NpdGlvbiA9IHsgMCwgLShoZWlnaHQgLyAyKSB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAtYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IC13aWR0aCAtIGFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAg
ICAgICBwYXRoLm1vdmVUbyh7IHdpZHRoICsgYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7Ci0g
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7Ci0KLSAg
ICAgICAgc3dpdGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rv
ck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICBw
YXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9KTsK
LSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAg
ICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikgfTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVs
QXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsg
YXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAs
IDAgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLWFycm93U2l6
ZSB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6
OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRM
aW5lVG8oeyAwLCAoaGVpZ2h0IC8gMikgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgb2Zm
c2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikgfTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok5vbmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOwotICAgICAgICBw
YXRoLmFkZExpbmVUbyh7IHdpZHRoICsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rp
b246Ok5vbmU6Ci0gICAgICAgIHBhdGgubW92ZVRvKHsgLSh3aWR0aCAvIDIpLCAtKGhlaWdodCAv
IDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSwgaGVpZ2h0IC8g
MiB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCAvIDIsIGhlaWdodCAvIDIgfSk7
Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgd2lkdGggLyAyLCAtKGhlaWdodCAvIDIpIH0pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgIHBh
dGgudHJhbnNsYXRlKG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uKTsKLQotICAgIHJldHVybiBw
YXRoOwotfQotCi1zdGF0aWMgRmxvYXRTaXplIGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKFN0
cmluZyBsYWJlbCwgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGZsb2F0IG1heGltdW1XaWR0aCA9IDApCi17Ci0gICAgYXV0byBmb250ID0gZm9udEZvckxh
eW91dExhYmVsKCk7Ci0KLSAgICBmbG9hdCB0ZXh0SGVpZ2h0ID0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0SGVpZ2h0KCk7Ci0gICAgZmxvYXQgdGV4dFdpZHRoID0gZm9udC53aWR0aChUZXh0UnVu
KGxhYmVsKSk7Ci0gICAgaWYgKG1heGltdW1XaWR0aCAmJiB0ZXh0V2lkdGggKyAobGF5b3V0TGFi
ZWxQYWRkaW5nICogMikgPiBtYXhpbXVtV2lkdGgpCi0gICAgICAgIHRleHRXaWR0aCA9IG1heGlt
dW1XaWR0aDsKLQotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHJldHVybiB7IHRleHRXaWR0
aCArIChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSwgdGV4dEhlaWdodCArIChsYXlvdXRMYWJlbFBh
ZGRpbmcgKiAyKSArIGxheW91dExhYmVsQXJyb3dTaXplIH07Ci0gICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICBjYXNlIEluc3BlY3Rvck92
ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgIHJldHVybiB7IHRleHRX
aWR0aCArIChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSArIGxheW91dExhYmVsQXJyb3dTaXplLCB0
ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpIH07Ci0gICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICByZXR1cm4geyB0
ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMiksIHRleHRIZWlnaHQgKyAobGF5b3V0
TGFiZWxQYWRkaW5nICogMikgfTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3TGF5b3V0TGFiZWwoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBTdHJpbmcgbGFiZWwsIEZsb2F0UG9pbnQgcG9pbnQsIEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dEaXJlY3Rpb24gYXJyb3dEaXJlY3Rpb24sIEluc3BlY3Rvck92ZXJsYXk6
OkxhYmVsQXJyb3dFZGdlUG9zaXRpb24gYXJyb3dFZGdlUG9zaXRpb24sIENvbG9yIGJhY2tncm91
bmRDb2xvciwgZmxvYXQgbWF4aW11bVdpZHRoID0gMCkKLXsKLSAgICBBU1NFUlQoYXJyb3dFZGdl
UG9zaXRpb24gIT0gSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9u
ZSB8fCBhcnJvd0RpcmVjdGlvbiA9PSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0
aW9uOjpOb25lKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4
dCk7Ci0gICAgCi0gICAgY29udGV4dC50cmFuc2xhdGUocG9pbnQpOwotCi0gICAgYXV0byBmb250
ID0gZm9udEZvckxheW91dExhYmVsKCk7Ci0gICAgZmxvYXQgdGV4dEhlaWdodCA9IGZvbnQuZm9u
dE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOwotICAgIGZsb2F0IHRleHREZXNjZW50ID0gZm9udC5m
b250TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwotICAgIAotICAgIGZsb2F0IHRleHRXaWR0aCA9
IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOwotICAgIGlmIChtYXhpbXVtV2lkdGggJiYgdGV4
dFdpZHRoICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bVdpZHRoKSB7Ci0gICAg
ICAgIGxhYmVsLmFwcGVuZCgiLi4uIl9zKTsKLSAgICAgICAgd2hpbGUgKHRleHRXaWR0aCArIChs
YXlvdXRMYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1XaWR0aCAmJiBsYWJlbC5sZW5ndGgoKSA+
PSA0KSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGZvdXJ0aCBmcm9tIGxhc3QgY2hhcmFj
dGVyICh0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgZWxsaXBzaXMpIGFuZCByZW1lYXN1cmUuCi0g
ICAgICAgICAgICBsYWJlbC5yZW1vdmUobGFiZWwubGVuZ3RoKCkgLSA0KTsKLSAgICAgICAgICAg
IHRleHRXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgRmxvYXRQb2ludCB0ZXh0UG9zaXRpb247Ci0gICAgc3dpdGNoIChhcnJvd0RpcmVj
dGlvbikgewotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6
RG93bjoKLSAgICAgICAgc3dpdGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNl
IEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAg
ICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVsUGFkZGluZywgLXRl
eHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxv
YXRQb2ludCgtKHRleHRXaWR0aCAvIDIpLCAtdGV4dERlc2NlbnQgLSBsYXlvdXRMYWJlbEFycm93
U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoK
LSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0V2lkdGgpIC0gbGF5
b3V0TGFiZWxQYWRkaW5nLCAtdGV4dERlc2NlbnQgLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxh
eW91dExhYmVsUGFkZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpVcDoKLSAgICAgICAgc3dpdGNoIChhcnJvd0VkZ2VQ
b3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50
KGxheW91dExhYmVsUGFkZGluZywgdGV4dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFi
ZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlk
ZGxlOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKHRleHRXaWR0aCAv
IDIpLCB0ZXh0SGVpZ2h0IC0gdGV4dERlc2NlbnQgKyBsYXlvdXRMYWJlbEFycm93U2l6ZSArIGxh
eW91dExhYmVsUGFkZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAgICAgICAg
ICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0V2lkdGgpIC0gbGF5b3V0TGFiZWxQ
YWRkaW5nLCB0ZXh0SGVpZ2h0IC0gdGV4dERlc2NlbnQgKyBsYXlvdXRMYWJlbEFycm93U2l6ZSAr
IGxheW91dExhYmVsUGFkZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgc3dpdGNoIChhcnJv
d0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9h
dFBvaW50KC10ZXh0V2lkdGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVsUGFk
ZGluZywgbGF5b3V0TGFiZWxQYWRkaW5nICsgdGV4dEhlaWdodCAtIHRleHREZXNjZW50KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoLXRleHRXaWR0aCAtIGxheW91dExhYmVsQXJyb3dTaXplIC0gbGF5b3V0TGFiZWxQYWRk
aW5nLCAodGV4dEhlaWdodCAvIDIpIC0gdGV4dERlc2NlbnQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6
VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC10ZXh0V2lk
dGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZywgLWxheW91dExh
YmVsUGFkZGluZyAtIHRleHREZXNjZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgIHN3aXRjaCAo
YXJyb3dFZGdlUG9zaXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0g
RmxvYXRQb2ludChsYXlvdXRMYWJlbEFycm93U2l6ZSArIGxheW91dExhYmVsUGFkZGluZywgbGF5
b3V0TGFiZWxQYWRkaW5nICsgdGV4dEhlaWdodCAtIHRleHREZXNjZW50KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9z
aXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5
b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcsICh0ZXh0SGVpZ2h0IC8gMikg
LSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAgICAgICAgICAg
IHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRM
YWJlbFBhZGRpbmcsIC1sYXlvdXRMYWJlbFBhZGRpbmcgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRn
ZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpO
b25lOgotICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoIC8gMiks
ICh0ZXh0SGVpZ2h0IC8gMikgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIFBhdGggbGFiZWxQYXRoID0gYmFja2dyb3VuZFBhdGhGb3JMYXlvdXRMYWJlbCh0ZXh0
V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMiksIHRleHRIZWlnaHQgKyAobGF5b3V0TGFi
ZWxQYWRkaW5nICogMiksIGFycm93RGlyZWN0aW9uLCBhcnJvd0VkZ2VQb3NpdGlvbiwgbGF5b3V0
TGFiZWxBcnJvd1NpemUpOwotCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENv
bG9yKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKGxhYmVsUGF0aCk7Ci0gICAgY29udGV4dC5zdHJv
a2VQYXRoKGxhYmVsUGF0aCk7Ci0gICAgCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKLSAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4obGFiZWwpLCB0ZXh0
UG9zaXRpb24pOwotfQotCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dDo6R3JpZEhpZ2hsaWdodE92ZXJsYXkmIGdyaWRPdmVybGF5KQogewogICAgIGNvbnN0ZXhwciBh
dXRvIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcjo6d2hpdGUuY29sb3JX
aXRoQWxwaGFCeXRlKDIzMCk7CkBAIC0xNDkxLDEwICsxMTY1LDEwIEBAIHZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW5zcGVjdG9yCiAgICAgLy8gRHJhdyBsYWJlbHMgb24gdG9wIG9mIGFsbCBvdGhlciBsaW5lcy4K
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBmb3IgKGF1dG8gYXJlYSA6
IGdyaWRPdmVybGF5LmFyZWFzKQotICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4dCwgYXJl
YS5uYW1lLCBhcmVhLnF1YWQuY2VudGVyKCksIExhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmUsIExh
YmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmUsIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29s
b3IsIGFyZWEucXVhZC5ib3VuZGluZ0JveCgpLndpZHRoKCkpOworICAgICAgICBJbnNwZWN0b3JP
dmVybGF5TGFiZWwoYXJlYS5uYW1lLCBhcmVhLnF1YWQuY2VudGVyKCksIHRyYW5zbHVjZW50TGFi
ZWxCYWNrZ3JvdW5kQ29sb3IsIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246
Ok5vbmUsIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246Ok5vbmUpLmRy
YXcoY29udGV4dCwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCkud2lkdGgoKSk7CiAKICAgICBmb3Ig
KGF1dG8gbGFiZWwgOiBncmlkT3ZlcmxheS5sYWJlbHMpCi0gICAgICAgIGRyYXdMYXlvdXRMYWJl
bChjb250ZXh0LCBsYWJlbC50ZXh0LCBsYWJlbC5sb2NhdGlvbiwgbGFiZWwuYXJyb3dEaXJlY3Rp
b24sIGxhYmVsLmFycm93RWRnZVBvc2l0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IpOworICAg
ICAgICBsYWJlbC5kcmF3KGNvbnRleHQpOwogfQogCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYXV0
aG9yZWRHcmlkVHJhY2tTaXplcyhOb2RlKiBub2RlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uLCB1bnNpZ25lZCBleHBlY3RlZFRyYWNrQ291bnQpCkBAIC0xNTk1LDE3ICsxMjY5
LDYgQEAgc3RhdGljIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCBncmlkTGluZU5hbWVzKGNvbnN0
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgR3IKICAgICByZXR1cm4gY29tYmluZWRHcmlkTGlu
ZU5hbWVzOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGln
aGxpZ2h0T3ZlcmxheTo6TGFiZWwgYnVpbGRMYWJlbChTdHJpbmcgdGV4dCwgRmxvYXRQb2ludCBs
b2NhdGlvbiwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFy
cm93RGlyZWN0aW9uIGFycm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RWRnZVBvc2l0aW9uIGFycm93RWRnZVBvc2l0aW9uKQotewotICAgIEluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVsOwotICAgIGxhYmVs
LnRleHQgPSB0ZXh0OwotICAgIGxhYmVsLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgbGFiZWwu
YmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOwotICAgIGxhYmVsLmFycm93RGlyZWN0
aW9uID0gYXJyb3dEaXJlY3Rpb247Ci0gICAgbGFiZWwuYXJyb3dFZGdlUG9zaXRpb24gPSBhcnJv
d0VkZ2VQb3NpdGlvbjsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9y
T3ZlcmxheTo6YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBn
cmlkT3ZlcmxheSwgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkKIHsKICAgICAvLyBJZiB0aGUg
bm9kZSBXZWFrUHRyIGhhcyBiZWVuIGNsZWFyZWQsIHRoZW4gdGhlIG5vZGUgaXMgZ29uZSBhbmQg
dGhlcmUncyBub3RoaW5nIHRvIGRyYXcuCkBAIC0xNjkyLDQxICsxMzU1LDQxIEBAIHN0ZDo6b3B0
aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4g
SW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgIH07CiAgICAgfTsKIAotICAgIGF1dG8gY29ycmVjdGVk
QXJyb3dEaXJlY3Rpb24gPSBbJl0oTGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IExhYmVsQXJyb3dEaXJlY3Rp
b24geworICAgIGF1dG8gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24gPSBbJl0oSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJl
Y3Rpb24gewogICAgICAgICBpZiAoKHNpemluZ0RpcmVjdGlvbiA9PSBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb246OkZvckNvbHVtbnMgJiYgaXNXcml0aW5nTW9kZUZsaXBwZWQpIHx8IChzaXppbmdE
aXJlY3Rpb24gPT0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzICYmIGlzRGlyZWN0
aW9uRmxpcHBlZCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgICAg
ICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Ci0gICAgICAgICAgICAgICAgZGly
ZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA7CisgICAgICAgICAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OkRvd246CisgICAgICAgICAgICAgICAg
ZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6VXA7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rp
b246OlVwOgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246
OkRvd247CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJl
Y3Rpb246OlVwOgorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlM
YWJlbDo6QXJyb3dEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgICAgICAgICAg
ZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ7CisgICAgICAgICAgICBjYXNl
IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgICAg
ICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6
UmlnaHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJy
b3dEaXJlY3Rpb246OlJpZ2h0OgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJy
b3dEaXJlY3Rpb246OkxlZnQ7CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3dEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OkxlZnQ7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6Cisg
ICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246Ok5v
bmU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSB7CiAgICAgICAgICAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgewotICAgICAgICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpE
b3duOgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlJp
Z2h0OworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0
aW9uOjpEb3duOgorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlM
YWJlbDo6QXJyb3dEaXJlY3Rpb246OlJpZ2h0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpVcDoKLSAgICAgICAgICAgICAgICBk
aXJlY3Rpb24gPSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OworICAgICAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgICAgICAg
ICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpMZWZ0
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMYWJlbEFycm93RGly
ZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJl
Y3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlVwOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAg
ICAgICBkaXJlY3Rpb24gPSBMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpSaWdodDoKKyAgICAg
ICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0
aW9uOjpEb3duOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMYWJl
bEFycm93RGlyZWN0aW9uOjpOb25lOgorICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93RGlyZWN0aW9uOjpOb25lOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzM0LDEyICsxMzk3LDEyIEBAIHN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5z
cGVjdG9yT3ZlcmxhCiAgICAgICAgIHJldHVybiBkaXJlY3Rpb247CiAgICAgfTsKIAotICAgIGF1
dG8gY29ycmVjdGVkQXJyb3dFZGdlUG9zaXRpb24gPSBbJl0oTGFiZWxBcnJvd0VkZ2VQb3NpdGlv
biBlZGdlUG9zaXRpb24sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24p
IC0+IExhYmVsQXJyb3dFZGdlUG9zaXRpb24geworICAgIGF1dG8gY29ycmVjdGVkQXJyb3dFZGdl
UG9zaXRpb24gPSBbJl0oSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbiBl
ZGdlUG9zaXRpb24sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+
IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb24gewogICAgICAgICBpZiAo
KHNpemluZ0RpcmVjdGlvbiA9PSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MgJiYg
aXNXcml0aW5nTW9kZUZsaXBwZWQpIHx8IChzaXppbmdEaXJlY3Rpb24gPT0gR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zICYmIGlzRGlyZWN0aW9uRmxpcHBlZCkpIHsKLSAgICAg
ICAgICAgIGlmIChlZGdlUG9zaXRpb24gPT0gTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGlu
ZykKLSAgICAgICAgICAgICAgICByZXR1cm4gTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxp
bmc7Ci0gICAgICAgICAgICBpZiAoZWRnZVBvc2l0aW9uID09IExhYmVsQXJyb3dFZGdlUG9zaXRp
b246OlRyYWlsaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBMYWJlbEFycm93RWRnZVBvc2l0
aW9uOjpMZWFkaW5nOworICAgICAgICAgICAgaWYgKGVkZ2VQb3NpdGlvbiA9PSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nKQorICAgICAgICAgICAgICAg
IHJldHVybiBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGlu
ZzsKKyAgICAgICAgICAgIGlmIChlZGdlUG9zaXRpb24gPT0gSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gZWRnZVBvc2l0aW9uOwpAQCAtMTc4Niw3ICsxNDQ5LDcgQEAg
c3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRP
dmVybGF5PiBJbnNwZWN0b3JPdmVybGEKICAgICAgICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25m
aWcuc2hvd1RyYWNrU2l6ZXMpIHsKICAgICAgICAgICAgICAgICBhdXRvIGF1dGhvcmVkVHJhY2tT
aXplID0gaSA8IGF1dGhvcmVkVHJhY2tDb2x1bW5TaXplcy5zaXplKCkgPyBhdXRob3JlZFRyYWNr
Q29sdW1uU2l6ZXNbaV0gOiAiYXV0byJfczsKICAgICAgICAgICAgICAgICBGbG9hdExpbmUgdHJh
Y2tUb3BMaW5lID0geyBjb2x1bW5TdGFydExpbmUuc3RhcnQoKSwgY29sdW1uRW5kTGluZS5zdGFy
dCgpIH07Ci0gICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVu
ZChidWlsZExhYmVsKGF1dGhvcmVkVHJhY2tTaXplLCB0cmFja1RvcExpbmUucG9pbnRBdFJlbGF0
aXZlRGlzdGFuY2UoMC41KSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgY29ycmVj
dGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0RpcmVjdGlvbjo6VXAsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyksIExhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSkp
OworICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQoeyBh
dXRob3JlZFRyYWNrU2l6ZSwgdHJhY2tUb3BMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAu
NSksIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGNvcnJlY3RlZEFycm93RGlyZWN0
aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlVwLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpLCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
RWRnZVBvc2l0aW9uOjpNaWRkbGUgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRMaW5lID0gY29sdW1uU3RhcnRMaW5lOwpAQCAt
MTgwNywyMSArMTQ3MCwyMSBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogCiAgICAgICAgIGlm
ICghbGluZUxhYmVsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0byB0ZXh0ID0gbGluZUxh
YmVsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhdXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVj
dGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0RpcmVjdGlvbjo6RG93biwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKLSAgICAgICAgICAgIGF1dG8gYXJyb3dFZGdlUG9z
aXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpNaWRkbGUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CisgICAgICAg
ICAgICBhdXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6RG93biwgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uOjpGb3JDb2x1bW5zKTsKKyAgICAgICAgICAgIGF1dG8gYXJyb3dFZGdlUG9zaXRpb24g
PSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
RWRnZVBvc2l0aW9uOjpNaWRkbGUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1u
cyk7CiAKICAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAgICBhcnJvd0VkZ2VQb3Np
dGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9zaXRpb246
OkxlYWRpbmcsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CisgICAgICAg
ICAgICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOwogICAgICAgICAgICAgZWxzZSBpZiAoaSA9
PSBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBhcnJvd0VkZ2VQ
b3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9zaXRp
b246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOworICAg
ICAgICAgICAgICAgIGFycm93RWRnZVBvc2l0aW9uID0gY29ycmVjdGVkQXJyb3dFZGdlUG9zaXRp
b24oSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmcsIEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CiAKLSAgICAgICAgICAgIGF1dG8g
ZXhwZWN0ZWRMYWJlbFNpemUgPSBleHBlY3RlZFNpemVGb3JMYXlvdXRMYWJlbCh0ZXh0LCBhcnJv
d0RpcmVjdGlvbik7CisgICAgICAgICAgICBhdXRvIGV4cGVjdGVkTGFiZWxTaXplID0gSW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjpleHBlY3RlZFNpemUodGV4dCwgYXJyb3dEaXJlY3Rpb24pOwogICAg
ICAgICAgICAgYXV0byBnYXBMYWJlbFBvc2l0aW9uID0gZ2FwTGFiZWxMaW5lLnN0YXJ0KCk7CiAK
ICAgICAgICAgICAgIC8vIFRoZSBhcmVhIHVuZGVyIHRoZSB3aW5kb3cncyB0b29sYmFyIGlzIGRy
YXdhYmxlLCBidXQgbm90IG1lYW5pbmdmdWxseSB2aXNpYmxlLCBzbyB3ZSBtdXN0IGFjY291bnQg
Zm9yIHRoYXQgc3BhY2UuCiAgICAgICAgICAgICBhdXRvIHRvcEVkZ2VJbnNldCA9IHBhZ2VWaWV3
LT50b3BDb250ZW50SW5zZXQoU2Nyb2xsVmlldzo6VG9wQ29udGVudEluc2V0VHlwZTo6V2ViQ29y
ZU9yUGxhdGZvcm1Db250ZW50SW5zZXQpOwogICAgICAgICAgICAgaWYgKGdhcExhYmVsTGluZS5z
dGFydCgpLnkoKSAtIGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpIC0gdG9wRWRnZUluc2V0ICsg
c2Nyb2xsUG9zaXRpb24ueSgpIC0gdmlld3BvcnRCb3VuZHMueSgpIDwgMCkgewotICAgICAgICAg
ICAgICAgIGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJv
d0RpcmVjdGlvbjo6VXAsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7Cisg
ICAgICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpVcCwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKIAogICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz
ZSBmb3IgdGhlIGZpcnN0IGNvbHVtbiB0byBtYWtlIHN1cmUgdGhlIGxhYmVsIHdpbGwgYmUgb3V0
IG9mIHRoZSB3YXkgb2YgdGhlIGZpcnN0IHJvdydzIGxhYmVsLgogICAgICAgICAgICAgICAgIC8v
IFRoZSBsYWJlbCBoZWlnaHRzIHdpbGwgYmUgdGhlIHNhbWUsIGFzIHRoZXkgdXNlIHRoZSBzYW1l
IGZvbnQsIHNvIG1vdmluZyBkb3duIGJ5IHRoaXMgbGFiZWwncyBzaXplIHdpbGwKQEAgLTE4MzAs
NyArMTQ5Myw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICAgICAgICAg
IGdhcExhYmVsUG9zaXRpb24gPSBnYXBMYWJlbExpbmUucG9pbnRBdEFic29sdXRlRGlzdGFuY2Uo
ZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwodGV4dCwgZ2Fw
TGFiZWxQb3NpdGlvbiwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgYXJyb3dEaXJl
Y3Rpb24sIGFycm93RWRnZVBvc2l0aW9uKSk7CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3Zl
cmxheS5sYWJlbHMuYXBwZW5kKHsgdGV4dCwgZ2FwTGFiZWxQb3NpdGlvbiwgdHJhbnNsdWNlbnRM
YWJlbEJhY2tncm91bmRDb2xvciwgYXJyb3dEaXJlY3Rpb24sIGFycm93RWRnZVBvc2l0aW9uIH0p
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODcwLDcgKzE1MzMsNyBAQCBzdGQ6Om9wdGlvbmFs
PEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3Bl
Y3Rvck92ZXJsYQogICAgICAgICAgICAgaWYgKGdyaWRPdmVybGF5LmNvbmZpZy5zaG93VHJhY2tT
aXplcykgewogICAgICAgICAgICAgICAgIGF1dG8gYXV0aG9yZWRUcmFja1NpemUgPSBpIDwgYXV0
aG9yZWRUcmFja1Jvd1NpemVzLnNpemUoKSA/IGF1dGhvcmVkVHJhY2tSb3dTaXplc1tpXSA6ICJh
dXRvIl9zOwogICAgICAgICAgICAgICAgIEZsb2F0TGluZSB0cmFja0xlZnRMaW5lID0geyByb3dT
dGFydExpbmUuc3RhcnQoKSwgcm93RW5kTGluZS5zdGFydCgpIH07Ci0gICAgICAgICAgICAgICAg
Z3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKGF1dGhvcmVkVHJh
Y2tTaXplLCB0cmFja0xlZnRMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5z
bHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVs
QXJyb3dEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyks
IExhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSkpOworICAgICAgICAgICAgICAgIGdyaWRI
aWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQoeyBhdXRob3JlZFRyYWNrU2l6ZSwgdHJhY2tM
ZWZ0TGluZS5wb2ludEF0UmVsYXRpdmVEaXN0YW5jZSgwLjUpLCB0cmFuc2x1Y2VudExhYmVsQmFj
a2dyb3VuZENvbG9yLCBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93RGlyZWN0aW9uOjpMZWZ0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJv
d3MpLCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGUgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcHJldmlvdXNSb3dF
bmRMaW5lID0gcm93U3RhcnRMaW5lOwpAQCAtMTg5MSwxOSArMTU1NCwxOSBAQCBzdGQ6Om9wdGlv
bmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IElu
c3BlY3Rvck92ZXJsYQogCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgYXV0byB0ZXh0ID0gbGluZUxhYmVsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBh
dXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0Rp
cmVjdGlvbjo6UmlnaHQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7Ci0gICAg
ICAgICAgICBhdXRvIGFycm93RWRnZVBvc2l0aW9uID0gY29ycmVjdGVkQXJyb3dFZGdlUG9zaXRp
b24oTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b246OkZvclJvd3MpOworICAgICAgICAgICAgYXV0byBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3Rl
ZEFycm93RGlyZWN0aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlJp
Z2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOworICAgICAgICAgICAgYXV0
byBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JSb3dzKTsKIAogICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAg
ICAgIGFycm93RWRnZVBvc2l0aW9uID0gY29ycmVjdGVkQXJyb3dFZGdlUG9zaXRpb24oTGFiZWxB
cnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZywgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JS
b3dzKTsKKyAgICAgICAgICAgICAgICBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93
RWRnZVBvc2l0aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246Okxl
YWRpbmcsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7CiAgICAgICAgICAgICBl
bHNlIGlmIChpID09IHJvd1Bvc2l0aW9ucy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGFy
cm93RWRnZVBvc2l0aW9uID0gY29ycmVjdGVkQXJyb3dFZGdlUG9zaXRpb24oTGFiZWxBcnJvd0Vk
Z2VQb3NpdGlvbjo6VHJhaWxpbmcsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7
CisgICAgICAgICAgICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQ
b3NpdGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGlu
ZywgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKIAotICAgICAgICAgICAgYXV0
byBleHBlY3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQsIGFy
cm93RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7CiAg
ICAgICAgICAgICBpZiAoZ2FwTGFiZWxQb3NpdGlvbi54KCkgLSBleHBlY3RlZExhYmVsU2l6ZS53
aWR0aCgpICsgc2Nyb2xsUG9zaXRpb24ueCgpIC0gdmlld3BvcnRCb3VuZHMueCgpIDwgMCkKLSAg
ICAgICAgICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExh
YmVsQXJyb3dEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93
cyk7CisgICAgICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVj
dGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpMZWZ0LCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogCi0gICAgICAgICAgICBncmlkSGlnaGxpZ2h0
T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwodGV4dCwgZ2FwTGFiZWxQb3NpdGlvbiwg
dHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgYXJyb3dEaXJlY3Rpb24sIGFycm93RWRn
ZVBvc2l0aW9uKSk7CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBw
ZW5kKHsgdGV4dCwgZ2FwTGFiZWxQb3NpdGlvbiwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRD
b2xvciwgYXJyb3dEaXJlY3Rpb24sIGFycm93RWRnZVBvc2l0aW9uIH0pOwogICAgICAgICB9CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRl
eCA4NGY4OTIxNzY2MjlmNTIwM2Y4OTBkMTVhZWU4NmI5MzE0ZGNjZjQ2Li5hMTBlN2IxMGM2OGJj
YzE4ZWYzM2NhODUyOGQyZWVkNjA3MWI5NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdExp
bmUuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTY1LDIxICs2Niw2IEBA
IHB1YmxpYzoKICAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UmLCBJbnNwZWN0b3JDbGllbnQqKTsK
ICAgICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCi0gICAgZW51bSBjbGFzcyBMYWJlbEFycm93RGly
ZWN0aW9uIHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAg
ICAgIExlZnQsCi0gICAgICAgIFJpZ2h0LAotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIExhYmVs
QXJyb3dFZGdlUG9zaXRpb24gewotICAgICAgICBOb25lLAotICAgICAgICBMZWFkaW5nLCAvLyBQ
b3NpdGlvbmVkIGF0IHRoZSBsZWZ0L3RvcCBzaWRlIG9mIGVkZ2UuCi0gICAgICAgIE1pZGRsZSwg
Ly8gUG9zaXRpb25lZCBhdCB0aGUgY2VudGVyIG9uIHRoZSBlZGdlLgotICAgICAgICBUcmFpbGlu
ZywgLy8gUG9zaXRpb25lZCBhdCB0aGUgcmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCi0g
ICAgfTsKLQogICAgIHN0cnVjdCBIaWdobGlnaHQgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CiAKQEAgLTEwNCwyMCArOTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0
cnVjdCBHcmlkSGlnaGxpZ2h0T3ZlcmxheSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CiAKLSAgICAgICAgICAgIHN0cnVjdCBMYWJlbCB7Ci0gICAgICAgICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICAgICAgICAgIFN0
cmluZyB0ZXh0OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb247Ci0gICAgICAg
ICAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgIExhYmVsQXJy
b3dEaXJlY3Rpb24gYXJyb3dEaXJlY3Rpb247Ci0gICAgICAgICAgICAgICAgTGFiZWxBcnJvd0Vk
Z2VQb3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbjsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hs
aWdodE92ZXJsYXk6OkxhYmVsPiBkZWNvZGUoRGVjb2RlciYpOwotI2VuZGlmCi0gICAgICAgICAg
ICB9OwotCiAgICAgICAgICAgICBzdHJ1Y3QgQXJlYSB7CiAgICAgICAgICAgICAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwpA
QCAtMTMzLDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdExpbmU+
IGdyaWRMaW5lczsKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGdhcHM7CiAgICAgICAg
ICAgICBWZWN0b3I8QXJlYT4gYXJlYXM7Ci0gICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVs
czsKKyAgICAgICAgICAgIFZlY3RvcjxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IGxhYmVsczsKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CkBAIC0yODksMzggKzI2MSw2IEBAIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0OjpHcmlkSGlnaGxpZ2h0CiAgICAgcmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92ZXJsYXkg
fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCB0ZXh0OwotICAgIGVuY29kZXIgPDwgbG9j
YXRpb247Ci0gICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oYXJyb3dEaXJlY3Rpb24pOwotICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFycm93RWRnZVBvc2l0aW9uKTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6Okdy
aWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6Okxh
YmVsIGxhYmVsOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5iYWNrZ3Jv
dW5kQ29sb3IpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdWludDMyX3QgYXJyb3dEaXJl
Y3Rpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKLQotICAgIHVpbnQzMl90IGFy
cm93RWRnZVBvc2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyb3dFZGdlUG9zaXRp
b24pKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGxhYmVsLmFycm93RWRnZVBvc2l0aW9uID0g
KEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb24pYXJyb3dFZGdlUG9zaXRp
b247Ci0KLSAgICByZXR1cm4geyBsYWJlbCB9OwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6
OkFyZWE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
bmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5TGFiZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlM
YWJlbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhNDdhMGNkYTlhNjc1OGMzZWE3N2NiYmRlZWQyMjI5NjRl
OTYwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5TGFiZWwuY3BwCkBAIC0wLDAgKzEsMzk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsUGFkZGluZyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsQXJyb3dTaXplID0gNjsKKworSW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYg
Y29udGVudHMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yLCBBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbiwgQXJyb3dFZGdlUG9zaXRp
b24gYXJyb3dFZGdlUG9zaXRpb24pCisgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29udGVudHMp
KQorICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAsIG1fYmFja2dyb3VuZENvbG9yKGJh
Y2tncm91bmRDb2xvcikKKyAgICAsIG1fYXJyb3dEaXJlY3Rpb24oYXJyb3dEaXJlY3Rpb24pCisg
ICAgLCBtX2Fycm93RWRnZVBvc2l0aW9uKGFycm93RWRnZVBvc2l0aW9uKQorCit7Cit9CisKK0lu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsKGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IsIEFycm93RGlyZWN0aW9uIGFycm93RGlyZWN0aW9uLCBBcnJvd0VkZ2VQb3NpdGlvbiBh
cnJvd0VkZ2VQb3NpdGlvbikKKzogSW5zcGVjdG9yT3ZlcmxheUxhYmVsKHsgQ29udGVudCh0ZXh0
KSB9LCBsb2NhdGlvbiwgYmFja2dyb3VuZENvbG9yLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdl
UG9zaXRpb24pCit7Cit9CisKK3N0YXRpYyBGb250Q2FzY2FkZSBzeXN0ZW1Gb250KCkKK3sKKyAg
ICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0RmFtaWxpZXMoeyAic3lzdGVtLXVpIiB9KTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSg1MDApKTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKDEyKTsKKworICAgIEZvbnRDYXNjYWRlIGZvbnQoV1RGTW92ZShmb250
RGVzY3JpcHRpb24pLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAgICByZXR1
cm4gZm9udDsKK30KKworc3RhdGljIFBhdGggYmFja2dyb3VuZFBhdGgoZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCwgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbiBhcnJvd0Rp
cmVjdGlvbiwgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbiBhcnJvd0Vk
Z2VQb3NpdGlvbiwgZmxvYXQgYXJyb3dTaXplKQoreworICAgIFBhdGggcGF0aDsKKyAgICBGbG9h
dFNpemUgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGFycm93RGly
ZWN0aW9uKSB7CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9u
OjpEb3duOgorICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGggLyAyKSwgLWhlaWdodCAtIGFy
cm93U2l6ZSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIC1hcnJv
d1NpemUgfSk7CisKKyAgICAgICAgc3dpdGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgeworICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6
CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSwgMCB9KTsKKyAgICAg
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpICsgYXJyb3dTaXplLCAtYXJyb3dT
aXplIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7ICh3aWR0
aCAvIDIpLCAwIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6CisgICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IDAsIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93
U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgorICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSAtIGFycm93U2l6ZSwgLWFycm93U2l6
ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIDAgfSk7Cisg
ICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgLSh3aWR0aCAvIDIpLCAw
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93RWRnZVBvc2l0aW9uOjpOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAtYXJyb3dTaXplIH0p
OworICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAtaGVpZ2h0IC0gYXJyb3dT
aXplIH0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6
QXJyb3dEaXJlY3Rpb246OlVwOgorICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGggLyAyKSwg
aGVpZ2h0ICsgYXJyb3dTaXplIH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGgg
LyAyKSwgYXJyb3dTaXplIH0pOworCisgICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9u
OjpMZWFkaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIDAg
fSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSArIGFycm93U2l6
ZSwgYXJyb3dTaXplIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24g
PSB7ICh3aWR0aCAvIDIpLCAwIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6CisgICAgICAg
ICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoK
KyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1NpemUsIGFy
cm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIDAg
fSk7CisgICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgLSh3aWR0aCAv
IDIpLCAwIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpOb25lOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCBhcnJvd1Np
emUgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIGhlaWdodCArIGFy
cm93U2l6ZSB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtd2lkdGgg
LSBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAt
YXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7CisKKyAgICAgICAgc3dpdGNoIChhcnJvd0VkZ2VQ
b3NpdGlvbikgeworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdl
UG9zaXRpb246OkxlYWRpbmc6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1Np
emUsIC0oaGVpZ2h0IC8gMikgKyBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IDAsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0Vk
Z2VQb3NpdGlvbiA9IHsgMCwgKGhlaWdodCAvIDIpIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpNaWRk
bGU6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIGFycm93U2l6ZSB9
KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKKyAgICAgICAgICAgIHBh
dGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dFZGdlUG9zaXRp
b246OlRyYWlsaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAoaGVpZ2h0IC8g
MikgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQg
LyAyKSAtIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0
aW9uID0geyAwLCAtKGhlaWdodCAvIDIpIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RWRnZVBvc2l0aW9uOjpOb25lOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1h
cnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLXdp
ZHRoIC0gYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OkxlZnQ6CisgICAgICAg
IHBhdGgubW92ZVRvKHsgd2lkdGggKyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKyAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKworICAgICAg
ICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpICsgYXJyb3dTaXplIH0pOworICAg
ICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAtKGhlaWdodCAvIDIpIH0pOworICAgICAgICAg
ICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIChoZWlnaHQgLyAyKSB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
d0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJv
d1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9
KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVU
byh7IDAsIChoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJy
b3dTaXplLCAoaGVpZ2h0IC8gMikgLSBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBvZmZzZXRG
b3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgMCwgLShoZWlnaHQgLyAyKSB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3Np
dGlvbjo6Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGF0
aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgd2lkdGggKyBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6
Tm9uZToKKyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRoIC8gMiksIC0oaGVpZ2h0IC8gMikg
fSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgLyAyIH0p
OworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiB9KTsKKyAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCAvIDIsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcGF0aC50
cmFuc2xhdGUob2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24pOworCisgICAgcmV0dXJuIHBhdGg7
Cit9CisKK1BhdGggSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgZmxvYXQgbWF4aW11bUxpbmVXaWR0aCkKK3sKKyAgICBBU1NFUlQobV9hcnJvd0Vk
Z2VQb3NpdGlvbiAhPSBBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZSB8fCBtX2Fycm93RGlyZWN0aW9u
ID09IEFycm93RGlyZWN0aW9uOjpOb25lKTsKKworICAgIGNvbnN0ZXhwciBVQ2hhciBlbGxpcHNp
cyA9IDB4MjAyNjsKKworICAgIGF1dG8gZm9udCA9IHN5c3RlbUZvbnQoKTsKKyAgICBmbG9hdCBs
aW5lSGVpZ2h0ID0gZm9udC5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CisgICAgZmxvYXQg
bGluZURlc2NlbnQgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXREZXNjZW50KCk7CisKKyAgICBW
ZWN0b3I8VGV4dFJ1bj4gdGV4dFJ1bnM7CisgICAgVmVjdG9yPENvbG9yPiB0ZXh0Q29sb3JzOwor
ICAgIFZlY3RvcjxmbG9hdD4gdGV4dFdpZHRoczsKKyAgICBWZWN0b3I8c2l6ZV90PiBsaW5lU3Rh
cnRJbmRleGVzOworICAgIGZsb2F0IGxvbmdlc3RMaW5lV2lkdGggPSAwOworICAgIGludCBjdXJy
ZW50TGluZSA9IDA7CisKKyAgICBmbG9hdCBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICBmb3Ig
KGF1dG8gY29udGVudCA6IG1fY29udGVudHMpIHsKKyAgICAgICAgYXV0byBsaW5lcyA9IGNvbnRl
bnQudGV4dC5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCdcbicpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkg
eworICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4ZXMuYXBwZW5kKHRleHRSdW5zLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgICAgICAgICAg
ICAgKytjdXJyZW50TGluZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0ZXh0
ID0gbGluZXMuYXQoaSk7CisgICAgICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gdGV4dFJ1biA9IFRleHRSdW4o
dGV4dCk7CisgICAgICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4p
OworCisgICAgICAgICAgICBpZiAobWF4aW11bUxpbmVXaWR0aCAmJiBjdXJyZW50TGluZVdpZHRo
ICsgdGV4dFdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bUxpbmVXaWR0aCkgewor
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKGVsbGlwc2lzKTsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoY3VycmVudExpbmVXaWR0aCArIHRleHRXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSA+
IG1heGltdW1MaW5lV2lkdGggJiYgdGV4dC5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSBzZWNvbmQgZnJvbSBsYXN0IGNoYXJhY3RlciAodGhlIGNoYXJh
Y3RlciBiZWZvcmUgdGhlIGVsbGlwc2lzKSBhbmQgcmVtZWFzdXJlLgorICAgICAgICAgICAgICAg
ICAgICB0ZXh0LnJlbW92ZSh0ZXh0Lmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgICAg
IHRleHRSdW4gPSBUZXh0UnVuKHRleHQpOworICAgICAgICAgICAgICAgICAgICB0ZXh0V2lkdGgg
PSBmb250LndpZHRoKHRleHRSdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGV4dFJ1bnMuYXBwZW5kKFdURk1vdmUodGV4dFJ1bikpOworICAgICAg
ICAgICAgdGV4dENvbG9ycy5hcHBlbmQoY29udGVudC50ZXh0Q29sb3IpOworICAgICAgICAgICAg
dGV4dFdpZHRocy5hcHBlbmQodGV4dFdpZHRoKTsKKworICAgICAgICAgICAgY3VycmVudExpbmVX
aWR0aCArPSB0ZXh0V2lkdGg7CisgICAgICAgICAgICBpZiAoY3VycmVudExpbmVXaWR0aCA+IGxv
bmdlc3RMaW5lV2lkdGgpCisgICAgICAgICAgICAgICAgbG9uZ2VzdExpbmVXaWR0aCA9IGN1cnJl
bnRMaW5lV2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbG9hdCB0b3RhbFRleHRIZWln
aHQgPSBsaW5lSGVpZ2h0ICogKGN1cnJlbnRMaW5lICsgMSk7CisKKyAgICBGbG9hdFBvaW50IHRl
eHRQb3NpdGlvbjsKKyAgICBzd2l0Y2ggKG1fYXJyb3dEaXJlY3Rpb24pIHsKKyAgICBjYXNlIEFy
cm93RGlyZWN0aW9uOjpEb3duOgorICAgICAgICBzd2l0Y2ggKG1fYXJyb3dFZGdlUG9zaXRpb24p
IHsKKyAgICAgICAgY2FzZSBBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAgICAgICAgICAg
IHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gdG90
YWxUZXh0SGVpZ2h0IC0gbGluZURlc2NlbnQgLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGlu
Zyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvd0VkZ2VQb3NpdGlvbjo6
TWlkZGxlOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKGxvbmdlc3RM
aW5lV2lkdGggLyAyKSwgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxpbmVEZXNjZW50
IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgorICAgICAgICAgICAgdGV4
dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtbG9uZ2VzdExpbmVXaWR0aCAtIGxhYmVsUGFkZGluZywg
bGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1Np
emUgLSBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
b3dFZGdlUG9zaXRpb246Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rp
b246OlVwOgorICAgICAgICBzd2l0Y2ggKG1fYXJyb3dFZGdlUG9zaXRpb24pIHsKKyAgICAgICAg
Y2FzZSBBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlv
biA9IEZsb2F0UG9pbnQobGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gbGluZURlc2NlbnQgKyBs
YWJlbEFycm93U2l6ZSArIGxhYmVsUGFkZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgorICAgICAgICAgICAgdGV4dFBvc2l0
aW9uID0gRmxvYXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwgbGluZUhlaWdodCAtIGxp
bmVEZXNjZW50ICsgbGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgorICAgICAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtbG9uZ2VzdExpbmVXaWR0aCAtIGxhYmVs
UGFkZGluZywgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50ICsgbGFiZWxBcnJvd1NpemUgKyBsYWJl
bFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3dFZGdlUG9z
aXRpb246Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlJpZ2h0
OgorICAgICAgICBzd2l0Y2ggKG1fYXJyb3dFZGdlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBB
cnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZs
b2F0UG9pbnQoLWxvbmdlc3RMaW5lV2lkdGggLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGlu
ZywgbGFiZWxQYWRkaW5nICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6CisgICAgICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxB
cnJvd1NpemUgLSBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0IC8g
MikgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJv
d0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9h
dFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcs
IGxpbmVIZWlnaHQgLSB0b3RhbFRleHRIZWlnaHQgLSBsYWJlbFBhZGRpbmcgLSBsaW5lRGVzY2Vu
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvd0VkZ2VQb3NpdGlvbjo6
Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJyb3dEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHN3aXRjaCAobV9hcnJvd0VkZ2VQ
b3NpdGlvbikgeworICAgICAgICBjYXNlIEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgorICAg
ICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJlbEFycm93U2l6ZSArIGxhYmVs
UGFkZGluZywgbGFiZWxQYWRkaW5nICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Cisg
ICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxhYmVsQXJyb3dTaXplICsgbGFi
ZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gKHRvdGFsVGV4dEhlaWdodCAvIDIpIC0gbGluZURlc2Nl
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3dFZGdlUG9zaXRpb246
OlRyYWlsaW5nOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJlbEFy
cm93U2l6ZSArIGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxh
YmVsUGFkZGluZyAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJvd0RpcmVjdGlvbjo6Tm9uZToKKyAgICAg
ICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwgLSh0
b3RhbFRleHRIZWlnaHQgLyAyKSArIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIFBhdGggbGFiZWxQYXRoID0gYmFja2dyb3VuZFBhdGgobG9u
Z2VzdExpbmVXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSwgdG90YWxUZXh0SGVpZ2h0ICsgKGxh
YmVsUGFkZGluZyAqIDIpLCBtX2Fycm93RGlyZWN0aW9uLCBtX2Fycm93RWRnZVBvc2l0aW9uLCBs
YWJlbEFycm93U2l6ZSk7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNv
bnRleHQpOworICAgIGNvbnRleHQudHJhbnNsYXRlKG1fbG9jYXRpb24pOworCisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IobV9iYWNrZ3JvdW5kQ29sb3IpOworICAgIGNvbnRleHQuZmlsbFBhdGgo
bGFiZWxQYXRoKTsKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgobGFiZWxQYXRoKTsKKworICAgIGlu
dCBsaW5lID0gMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRleHRSdW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChsaW5lU3RhcnRJbmRl
eGVzLmNvbnRhaW5zKGkpKSB7CisgICAgICAgICAgICB4T2Zmc2V0ID0gMDsKKyAgICAgICAgICAg
ICsrbGluZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRD
b2xvcnMuYXQoaSkpOworICAgICAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHRSdW5zLmF0
KGkpLCB0ZXh0UG9zaXRpb24gKyBGbG9hdFBvaW50KHhPZmZzZXQsIGxpbmUgKiBsaW5lSGVpZ2h0
KSk7CisKKyAgICAgICAgeE9mZnNldCArPSB0ZXh0V2lkdGhzLmF0KGkpOworICAgIH0KKworICAg
IHJldHVybiBsYWJlbFBhdGg7Cit9CisKK0Zsb2F0U2l6ZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6
OmV4cGVjdGVkU2l6ZShjb25zdCBWZWN0b3I8Q29udGVudD4mIGNvbnRlbnRzLCBBcnJvd0RpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgYXV0byBmb250ID0gc3lzdGVtRm9udCgpOworICAgIGZs
b2F0IGxpbmVIZWlnaHQgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsKKworICAg
IGZsb2F0IGxvbmdlc3RMaW5lV2lkdGggPSAwOworICAgIGludCBjdXJyZW50TGluZSA9IDA7CisK
KyAgICBmbG9hdCBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICBmb3IgKGF1dG8gY29udGVudCA6
IGNvbnRlbnRzKSB7CisgICAgICAgIGF1dG8gbGluZXMgPSBjb250ZW50LnRleHQuc3BsaXRBbGxv
d2luZ0VtcHR5RW50cmllcygnXG4nKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aW5lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnRMaW5lOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRleHQgPSBsaW5lcy5hdChpKTsKKyAg
ICAgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCArPSBmb250LndpZHRoKFRleHRSdW4odGV4
dCkpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPiBsb25nZXN0TGluZVdpZHRo
KQorICAgICAgICAgICAgICAgIGxvbmdlc3RMaW5lV2lkdGggPSBjdXJyZW50TGluZVdpZHRoOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZmxvYXQgdG90YWxUZXh0SGVpZ2h0ID0gbGluZUhlaWdo
dCAqIChjdXJyZW50TGluZSArIDEpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OkRvd246CisgICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgcmV0
dXJuIHsgbG9uZ2VzdExpbmVXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSwgdG90YWxUZXh0SGVp
Z2h0ICsgKGxhYmVsUGFkZGluZyAqIDIpICsgbGFiZWxBcnJvd1NpemUgfTsKKyAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246OlJpZ2h0OgorICAgIGNhc2UgSW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0RpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJu
IHsgbG9uZ2VzdExpbmVXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSArIGxhYmVsQXJyb3dTaXpl
LCB0b3RhbFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMikgfTsKKyAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3dEaXJlY3Rpb246Ok5vbmU6CisgICAgICAgIHJldHVybiB7
IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQYWRkaW5nICogMiksIHRvdGFsVGV4dEhlaWdodCAr
IChsYWJlbFBhZGRpbmcgKiAyKSB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK0Zsb2F0U2l6ZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVk
U2l6ZShjb25zdCBTdHJpbmcmIHRleHQsIEFycm93RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAg
ICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpleHBlY3RlZFNpemUoeyBDb250ZW50KHRl
eHQpIH0sIGRpcmVjdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYWNlZjA4ZmJkODNlZDFiY2Y3ZTlhNDRhY2NiZDhkNmQ1MzFmZGZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5oCkBA
IC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0U2l6ZTsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBhdGg7CisKK2NsYXNzIEluc3BlY3Rvck92ZXJs
YXlMYWJlbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBBcnJvd0RpcmVjdGlvbiB7CisgICAgICAgIE5vbmUsCisgICAgICAgIERvd24sCisg
ICAgICAgIFVwLAorICAgICAgICBMZWZ0LAorICAgICAgICBSaWdodCwKKyAgICB9OworCisgICAg
ZW51bSBjbGFzcyBBcnJvd0VkZ2VQb3NpdGlvbiB7CisgICAgICAgIE5vbmUsCisgICAgICAgIExl
YWRpbmcsIC8vIFBvc2l0aW9uZWQgYXQgdGhlIGxlZnQvdG9wIHNpZGUgb2YgZWRnZS4KKyAgICAg
ICAgTWlkZGxlLCAvLyBQb3NpdGlvbmVkIGF0IHRoZSBjZW50ZXIgb24gdGhlIGVkZ2UuCisgICAg
ICAgIFRyYWlsaW5nLCAvLyBQb3NpdGlvbmVkIGF0IHRoZSByaWdodC9ib3R0b20gc2lkZSBvZiB0
aGUgZWRnZS4KKyAgICB9OworCisgICAgc3RydWN0IENvbnRlbnQgeworICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAg
IENvbG9yIHRleHRDb2xvcjsKKworICAgICAgICBDb250ZW50KFN0cmluZyB0ZXh0LCBDb2xvciB0
ZXh0Q29sb3IgPSBDb2xvcjo6YmxhY2spCisgICAgICAgICAgICA6IHRleHQodGV4dCkKKyAgICAg
ICAgICAgICwgdGV4dENvbG9yKHRleHRDb2xvcikKKyAgICAgICAgeworICAgICAgICB9CisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudD4g
ZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZgorICAgIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bnNwZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBBcnJvd0RpcmVjdGlvbiwgQXJyb3dFZGdl
UG9zaXRpb24pOworICAgIEluc3BlY3Rvck92ZXJsYXlMYWJlbChjb25zdCBTdHJpbmcmLCBjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQXJyb3dEaXJlY3Rp
b24sIEFycm93RWRnZVBvc2l0aW9uKTsKKworICAgIFBhdGggZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBmbG9hdCBtYXhpbXVtTGluZVdpZHRoID0gMCk7CisKKyAgICBzdGF0aWMgRmxvYXRTaXplIGV4
cGVjdGVkU2l6ZShjb25zdCBWZWN0b3I8Q29udGVudD4mLCBBcnJvd0RpcmVjdGlvbik7CisgICAg
c3RhdGljIEZsb2F0U2l6ZSBleHBlY3RlZFNpemUoY29uc3QgU3RyaW5nJiwgQXJyb3dEaXJlY3Rp
b24pOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheUxhYmVsPiBkZWNvZGUo
RGVjb2RlciYpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENvbnRlbnQ+IG1fY29u
dGVudHM7CisgICAgRmxvYXRQb2ludCBtX2xvY2F0aW9uOworICAgIENvbG9yIG1fYmFja2dyb3Vu
ZENvbG9yOworICAgIEFycm93RGlyZWN0aW9uIG1fYXJyb3dEaXJlY3Rpb247CisgICAgQXJyb3dF
ZGdlUG9zaXRpb24gbV9hcnJvd0VkZ2VQb3NpdGlvbjsKK307CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEluc3BlY3Rvck92ZXJsYXlM
YWJlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2NvbnRlbnRzOworICAgIGVuY29kZXIgPDwgbV9sb2NhdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1f
YmFja2dyb3VuZENvbG9yOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
YXJyb3dEaXJlY3Rpb24pOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
YXJyb3dFZGdlUG9zaXRpb24pOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9w
dGlvbmFsPEluc3BlY3Rvck92ZXJsYXlMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBWZWN0b3I8Q29udGVudD4gY29udGVudHM7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb250ZW50cykpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBGbG9hdFBvaW50IGxvY2F0aW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobG9jYXRp
b24pKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmFja2dyb3VuZENvbG9yKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHVpbnQzMl90IGFycm93RGlyZWN0aW9uOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoYXJyb3dEaXJlY3Rpb24pKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdWludDMy
X3QgYXJyb3dFZGdlUG9zaXRpb247CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0VkZ2VQ
b3NpdGlvbikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBJbnNwZWN0b3JP
dmVybGF5TGFiZWwoV1RGTW92ZShjb250ZW50cyksIGxvY2F0aW9uLCBiYWNrZ3JvdW5kQ29sb3Is
IChJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93RGlyZWN0aW9uKWFycm93RGlyZWN0aW9uLCAo
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvd0VkZ2VQb3NpdGlvbilhcnJvd0VkZ2VQb3NpdGlv
bikgfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkNvbnRlbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgdGV4dDsKKyAgICBlbmNvZGVyIDw8IHRleHRDb2xvcjsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRl
bnQ+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgU3RyaW5nIHRleHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0KSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIENvbG9yIHRleHRDb2xvcjsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHRleHRDb2xvcikpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJu
IHsgQ29udGVudCh0ZXh0LCB0ZXh0Q29sb3IpIH07Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450827</attachid>
            <date>2022-02-03 15:07:03 -0800</date>
            <delta_ts>2022-02-12 12:46:40 -0800</delta_ts>
            <desc>Patch v1.1 - Address review comments so far, rebase</desc>
            <filename>bug-235422-20220203150702.patch</filename>
            <type>text/plain</type>
            <size>72886</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQ0OGY4NDljYzc4ZTk1
MTVkOWJmNTM0YzRlYzgwMTk2NjI3NzgwZi4uZjYzYzBhMTYwMGJlZDQwNzUyZDNlNWUxMzcyZWE3
NWRiNGMyMTM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIyLTAyLTAzICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
bGVtZW50IHRvb2x0aXBzIGluIG92ZXJsYXlzIHNob3VsZCB1c2Ugc2FtZSBlbmNvZGFibGUvZGVj
b2RhYmxlIExhYmVsIHR5cGUgYXMgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRvb2x0aXAgZm9yIGVsZW1lbnRzIHByZXZp
b3VzbHkgdXNlZCBpdHMgb3duIHNsaWdodGx5IGRpZmZlcmVudCBsYWJlbHMgZnJvbSB0aG9zZSB1
c2VkIGZvciBncmlkIG92ZXJsYXlzLAorICAgICAgICB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4g
c3VjaCBhIHdheSB0byBzdXBwb3J0IGJlaW5nIHNlbnQgdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGlP
UyBvdmVybGF5IHN1cHBvcnQuIFRoaXMgcGF0Y2gKKyAgICAgICAgYWRkcyBzdXBwb3J0IGZvciB0
aGUgc2V0dGluZyBkaWZmZXJlbnQgY29sb3JzIGZvciBkaWZmZXJlbnQgcnVucyBvZiB0ZXh0IGFs
b25nIHdpdGggbXVsdGktbGluZSBsYWJlbHMgdG8gYWxsb3cKKyAgICAgICAgdGhlIHNhbWUgbGFi
ZWwgdG8gYmUgdXNlZCBmb3IgYm90aCBHcmlkIG92ZXJsYXlzIGFzIHdlbGwgYXMgZWxlbWVudCB0
b29sdGlwcy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgYFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsYCB3YXMgbW92ZWQgdG8K
KyAgICAgICAgYFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbGAgYXMgaXQgaXMgbm8gbG9u
Z2VyIGV4Y2x1c2l2ZWx5IHVzZWQgZm9yIGdyaWRzLgorCisgICAgICAgIFdpdGggdGhhdCBzdXBw
b3J0LCB3ZSBjYW4gbm93IHVzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWwgZm9yIGVsZW1lbnQgdG9v
bHRpcHMgd2l0aG91dCBuZWVkaW5nIGR1cGxpY2F0ZWQgbGF5b3V0CisgICAgICAgIGFuZCBkcmF3
aW5nIGNvZGUuIEFkZGl0aW9uYWxseSwgdGhlIGZvbnQgdXNlZCBpbiB0aGUgdG9vbHRpcCBpcyBu
b3cgY29uc2lzdGVudCB3aXRoIGdyaWQgbGFiZWxzLCB3aGVyZSBhcworICAgICAgICBwcmV2aW91
c2x5IHdlIHVzZWQgZGlmZmVyZW50IGZvbnQgZmFtaWxpZXMgZm9yIHRoZSBncmlkIGFuZCBlbGVt
ZW50IGxhYmVscy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdF
bGVtZW50VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dy
aWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkR3Jp
ZE92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udEZvckxheW91dExhYmVsKTogTW92ZWQg
dG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBgc3lzdGVtRm9udGAuCisgICAgICAgIChX
ZWJDb3JlOjpiYWNrZ3JvdW5kUGF0aEZvckxheW91dExhYmVsKTogTW92ZWQgdG8gSW5zcGVjdG9y
T3ZlcmxheUxhYmVsLmNwcCBhcyBgYmFja2dyb3VuZFBhdGhgLgorICAgICAgICAoV2ViQ29yZTo6
ZXhwZWN0ZWRTaXplRm9yTGF5b3V0TGFiZWwpOiBNb3ZlZCB0byBJbnNwZWN0b3JPdmVybGF5TGFi
ZWwuY3BwIGFzIGBleHBlY3RlZFNpemVgLgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dExh
YmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBgZHJhd2AuCisgICAg
ICAgIChXZWJDb3JlOjpidWlsZExhYmVsKTogRGVsZXRlZC4KKworICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6
R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsOjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpiYWNrZ3Jv
dW5kUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmRyYXcp
OgorICAgICAgICAtIFVwZGF0ZWQgbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIHN0cmluZ3MsIGlu
Y2x1ZGluZyBzdHJpbmdzIGNvbnRhaW5pbmcgbmV3bGluZXMuIFN0cmluZ3MgYXJlIG5vdyBlYWNo
CisgICAgICAgIGNvbnZlcnRlZCB0byBhIFRleHRSdW4sIG9yIG11bHRpcGxlIHRleHQgcnVucyBm
b3IgbXVsdGktbGluZSB0ZXh0LCBlYWNoIG9mIHdoaWNoIGlzIG1lYXN1cmVkIHRvIGRldGVybWlu
ZSB0aGUKKyAgICAgICAgb3ZlcmFsbCBoZWlnaHQgYW5kIHdpZHRoIG9mIHRoZSBsYWJlbCwgYXMg
d2VsbCBhcyB0byBsYXRlciBpbiB0aGUgZHJhd2luZyBjb2RlIGdpdmUgdXMgdGhlIGluZm9ybWF0
aW9uIG5lY2Vzc2FyeQorICAgICAgICB0byBhY3R1YWxseSBkcmF3IHRoZXNlIHN0cmluZ3MgaW4g
dGhlIHByb3BlciBsb2NhdGlvbnMuCisgICAgICAgIC0gVXNlIHRoZSB3aWR0aCBvZiB0aGUgbG9u
Z2VzdCBsaW5lIGZvciBkcmF3aW5nIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBsYWJlbC4KKyAgICAg
ICAgLSBJdGVyYXRlIHRocm91Z2ggdGhlIGNvbXB1dGVkIFRleHRSdW5zIGFuZCBkcmF3IHRoZSws
IG1vdmluZyB0byB0aGUgbmV4dCBsaW5lIGZvciBlYWNoIGluZGV4IHRoYXQgd2UgaGFkCisgICAg
ICAgIHByZXZpb3VzbHkgY29tcHV0ZWQgdG8gYmUgdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmUuCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSk6Cisg
ICAgICAgIC0gU2ltaWxhciB0byBgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkcmF3YCB3ZSBuZWVk
IHRvIHRha2UgaW4gdG8gYWNjb3VudCBtdWx0aS1saW5lIHN0cmluZ3MsIGJ1dCBkbyBub3QgbmVl
ZCB0bworICAgICAgICBrZWVwIHRoZSBjb21wdXRlZCBUZXh0UnVucyBvciB0aGVpciB3aWR0aHMs
IG9ubHkgdGhlIHdpZHRoIG9mIHRoZSBsb25nZXN0IGxpbmUgYW5kIHRoZSB0b3RhbCBudW1iZXIg
b2YgbGluZXMsIHRvCisgICAgICAgIGNvbXB1dGUgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGNv
bnRlbnRzIGluIGEgbGFiZWwuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvdzo6QXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3c6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkNvbnRlbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkNvbnRlbnQ6OmRlY29kZSk6CisKIDIwMjItMDItMDMgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgQWJvcnRTaWduYWwudGlt
ZW91dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGIzZjVlMGI3ODQxNzBiZjAyNGQ3ODgzOWZmYzkwODE3
MjRhNzRjYTYuLmJjZThhYTMyZjRlNDMwNDIzZGI2NWQ3MTNmZTk2NWMzMDEzMmRmOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xNDg2LDYgKzE0ODYsNyBAQCBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uUHVibGljLmNwcAogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbldl
YktpdC5jcHAKIGluc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcAogaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwCitpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcAog
aW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCiBpbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM1
ZjQ0ZWYwNGE3MDU4YjE5YjI0Yzg1ZDExZDYzZDk0NTRlM2RiMGMuLjNiNDg4MzEwNGI1NzlkZGRh
Y2M3NGU0NmM0Yzc3MjYxZDUyNGNjYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkyMCw2ICs5MjAsNyBAQAogCQkyRUNGN0FE
RDEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNF
cnJvckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUyMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNG
N0FERjEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5oICovOyB9OwogCQkyRUQ2MDlCRDEx
NDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3Jt
RGF0YS5oICovOyB9OworCQkyRUREQUY0NDI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3Zl
cmxheUxhYmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRUREQUY0MzI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYxRjQx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFFRTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRURF
RjFGNTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFFRjEyMUIwRUZDMDA3MjZEQjIgLyog
QmxvYlJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMkVERUYxRjcxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUYxMTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyMjAsNiArODIyMSw4IEBACiAJCTJFQ0Y3
QUUwMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBFcnJvckV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5
QkExMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERPTUZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkVENjA5QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTJFRERBRjQzMjc5MjBFQjQwMDVEMThFNCAvKiBJbnNwZWN0b3JPdmVy
bGF5TGFiZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRERBRjQ1Mjc5MjBFQzMwMDVEMThFNCAvKiBJbnNw
ZWN0b3JPdmVybGF5TGFiZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUQxMjFCMEVG
QzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJsb2JEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYx
RUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJsb2JEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFREVG
MUVGMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMDM2Nyw2ICsyMDM3MCw4IEBACiAJCQkJNTA0QUFDQ0MxODM0NDU1OTAwRTNEOUJDIC8q
IEluc3BlY3Rvck5vZGVGaW5kZXIuaCAqLywKIAkJCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUg
LyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8sCiAJCQkJN0M1MjJENEExNUI0NzhCMjAwOUI3Qzk1
IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLywKKwkJCQkyRUREQUY0NTI3OTIwRUMzMDA1RDE4RTQg
LyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCAqLywKKwkJCQkyRUREQUY0MzI3OTIwRUI0MDA1
RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggKi8sCiAJCQkJNkE3Mjc5ODkxRjE2QzI5
QjAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uY3BwICovLAogCQkJCTZBNzI3OTg4
MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggKi8sCiAJCQkJODJB
QjE3NkYxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuY3BwICovLApAQCAt
MzUwNDksNiArMzUwNTQsNyBAQAogCQkJCUE1QjgxQ0IxMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUwNEFBQ0NFMTgzNDQ1NTkw
MEUzRDlCQyAvKiBJbnNwZWN0b3JOb2RlRmluZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
QzA3NTE4ODQ4MDU1MDBBNUY4Q0EgLyogSW5zcGVjdG9yT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMkVEREFGNDQyNzkyMEVCNDAwNUQxOEU0IC8qIEluc3BlY3Rvck92ZXJsYXlMYWJlbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCODFDQjIxRkFBNDQ2MjAwMzdEMUU2IC8qIEluc3BlY3Rv
clBhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkE3Mjc5OEIxRjE2QzI5QzAwM0YzOUI4
IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0
MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCAx
YmMwNmU3OTRmNTc2YzcxZjlmZTVmZTc4OWM5MDljZmMxN2RkODg0Li44YmI5NjJmNjk3OTBmYjM2
MTQ2MzdlYzI1ZDhlMzFkYmE0N2UyMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC03NCwxMCArNzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLXN0YXRpYyBjb25zdGV4cHIgZmxv
YXQgZWxlbWVudERhdGFTcGFjaW5nID0gMjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVu
dERhdGFBcnJvd1NpemUgPSA3Owotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBlbGVtZW50RGF0YUJv
cmRlclNpemUgPSAxOwotCiBzdGF0aWMgY29uc3RleHByIGZsb2F0IHJ1bGVyU2l6ZSA9IDE1Owog
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlckxhYmVsU2l6ZSA9IDEzOwogc3RhdGljIGNvbnN0
ZXhwciBmbG9hdCBydWxlclN0ZXBJbmNyZW1lbnQgPSA1MDsKQEAgLTg1LDkgKzgxLDYgQEAgc3Rh
dGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclN0ZXBMZW5ndGggPSA4Owogc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBydWxlclN1YlN0ZXBJbmNyZW1lbnQgPSA1Owogc3RhdGljIGNvbnN0ZXhwciBmbG9h
dCBydWxlclN1YlN0ZXBMZW5ndGggPSA1OwogCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91
dExhYmVsUGFkZGluZyA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91dExhYmVsQXJy
b3dTaXplID0gNjsKLQogc3RhdGljIGNvbnN0ZXhwciBVQ2hhciBidWxsZXQgPSAweDIwMjI7CiBz
dGF0aWMgY29uc3RleHByIFVDaGFyIGVsbGlwc2lzID0gMHgyMDI2Owogc3RhdGljIGNvbnN0ZXhw
ciBVQ2hhciBtdWx0aXBsaWNhdGlvblNpZ24gPSAweDAwRDc7CkBAIC0xMDMzLDE0MSArMTAyNiw4
NSBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBOb2RlJiBub2RlLCBjbwogICAgICAgICAgICAgZWxlbWVudFJvbGUgPSBh
eE9iamVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCk7CiAgICAgfQogCi0gICAgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
aWVzKHsgIk1lbmxvIiwgbV9wYWdlLnNldHRpbmdzKCkuZml4ZWRGb250RmFtaWx5KCkgfSk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMSk7Ci0KLSAgICBGb250Q2FzY2Fk
ZSBmb250KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUo
bnVsbHB0cik7Ci0KLSAgICBpbnQgZm9udEhlaWdodCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZv
bnQoKS5oZWlnaHQoKTsKLQotICAgIGZsb2F0IGVsZW1lbnREYXRhV2lkdGg7Ci0gICAgZmxvYXQg
ZWxlbWVudERhdGFIZWlnaHQgPSBmb250SGVpZ2h0OwotICAgIGJvb2wgaGFzU2Vjb25kTGluZSA9
ICFlbGVtZW50Um9sZS5pc0VtcHR5KCk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5l
ID0gbWFrZVN0cmluZyhlbGVtZW50VGFnTmFtZSwgZWxlbWVudElEVmFsdWUsIGVsZW1lbnRDbGFz
c1ZhbHVlLCBlbGVtZW50UHNldWRvVHlwZSwgJyAnLCBlbGVtZW50V2lkdGgsICJweCIsICcgJywg
bXVsdGlwbGljYXRpb25TaWduLCAnICcsIGVsZW1lbnRIZWlnaHQsICJweCIpOwotICAgICAgICBh
dXRvIHNlY29uZExpbmUgPSBtYWtlU3RyaW5nKCJSb2xlICIsIGVsZW1lbnRSb2xlKTsKLQotICAg
ICAgICBmbG9hdCBmaXJzdExpbmVXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihmaXJzdExpbmUp
KTsKLSAgICAgICAgZmxvYXQgc2Vjb25kTGluZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHNl
Y29uZExpbmUpKTsKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVUYWdDb2xvciA9IFNS
R0JBPHVpbnQ4X3Q+IHsgMTM2LCAxOCwgMTI4IH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLnRhZykKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVBdHRy
aWJ1dGVWYWx1ZUNvbG9yID0gU1JHQkE8dWludDhfdD4geyAyNiwgMjYsIDE2NiB9OyAvLyBLZWVw
IHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtdmFsdWUpCisgICAg
Y29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQXR0cmlidXRlTmFtZUNvbG9yID0gU1JHQkE8dWlu
dDhfdD4geyAxNTMsIDY5LCAwIH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2Vy
LmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZVJv
bGVDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMTcwLCAxMywgMTQ1IH07CisKKyAgICBWZWN0b3I8
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250ZW50PiBsYWJlbENvbnRlbnRzID0geworICAgICAg
ICB7IGVsZW1lbnRUYWdOYW1lLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAgICAgICB7IGVs
ZW1lbnRJRFZhbHVlLCBlbGVtZW50VGl0bGVBdHRyaWJ1dGVWYWx1ZUNvbG9yIH0sCisgICAgICAg
IHsgZWxlbWVudENsYXNzVmFsdWUsIGVsZW1lbnRUaXRsZUF0dHJpYnV0ZU5hbWVDb2xvciB9LAor
ICAgICAgICB7IGVsZW1lbnRQc2V1ZG9UeXBlLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAg
ICAgICB7IG1ha2VTdHJpbmcoZW1TcGFjZSwgZWxlbWVudFdpZHRoKSwgQ29sb3I6OmJsYWNrIH0s
CisgICAgICAgIHsgbWFrZVN0cmluZygicHggIl9zLCBtdWx0aXBsaWNhdGlvblNpZ24sICIgIl9z
KSwgQ29sb3I6OmRhcmtHcmF5IH0sCisgICAgICAgIHsgZWxlbWVudEhlaWdodCwgQ29sb3I6OmJs
YWNrIH0sCisgICAgICAgIHsgInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkgfSwKKyAgICB9OwogCi0g
ICAgICAgIGVsZW1lbnREYXRhV2lkdGggPSBzdGQ6OmZtYXgoZmlyc3RMaW5lV2lkdGgsIHNlY29u
ZExpbmVXaWR0aCk7Ci0gICAgICAgIGlmIChoYXNTZWNvbmRMaW5lKQotICAgICAgICAgICAgZWxl
bWVudERhdGFIZWlnaHQgKz0gZm9udEhlaWdodDsKKyAgICBpZiAoIWVsZW1lbnRSb2xlLmlzRW1w
dHkoKSkgeworICAgICAgICBsYWJlbENvbnRlbnRzLmFwcGVuZCh7ICJcblJvbGUgIl9zLCBlbGVt
ZW50VGl0bGVSb2xlQ29sb3IgfSk7CisgICAgICAgIGxhYmVsQ29udGVudHMuYXBwZW5kKHsgZWxl
bWVudFJvbGUsIENvbG9yOjpibGFjayB9KTsKICAgICB9CiAKICAgICBGcmFtZVZpZXcqIHBhZ2VW
aWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKIAogICAgIEZsb2F0U2l6ZSB2aWV3cG9y
dFNpemUgPSBwYWdlVmlldy0+c2l6ZUZvclZpc2libGVDb250ZW50KCk7Ci0gICAgdmlld3BvcnRT
aXplLmV4cGFuZCgtZWxlbWVudERhdGFTcGFjaW5nLCAtZWxlbWVudERhdGFTcGFjaW5nKTsKLQog
ICAgIEZsb2F0U2l6ZSBjb250ZW50SW5zZXQoMCwgcGFnZVZpZXctPnRvcENvbnRlbnRJbnNldChT
Y3JvbGxWaWV3OjpUb3BDb250ZW50SW5zZXRUeXBlOjpXZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJ
bnNldCkpOwotICAgIGNvbnRlbnRJbnNldC5leHBhbmQoZWxlbWVudERhdGFTcGFjaW5nLCBlbGVt
ZW50RGF0YVNwYWNpbmcpOwogICAgIGlmIChtX3Nob3dSdWxlcnMgfHwgbV9zaG93UnVsZXJzRHVy
aW5nRWxlbWVudFNlbGVjdGlvbikKICAgICAgICAgY29udGVudEluc2V0LmV4cGFuZChydWxlclNp
emUsIHJ1bGVyU2l6ZSk7CiAKKyAgICBhdXRvIGV4cGVjdGVkTGFiZWxTaXplID0gSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpleHBlY3RlZFNpemUobGFiZWxDb250ZW50cywgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpVcCk7CisgICAgYXV0byBib3VuZHNDZW50ZXJYID0g
Ym91bmRzLmNlbnRlcigpLngoKTsKKworICAgIGZsb2F0IGxhYmVsWDsKKyAgICBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQgYXJyb3dBbGlnbm1lbnQ7CisgICAgaWYgKGJv
dW5kc0NlbnRlclggKyAoZXhwZWN0ZWRMYWJlbFNpemUud2lkdGgoKSAvIDIpIDwgdmlld3BvcnRT
aXplLndpZHRoKCkKKyAgICAgICAgJiYgYm91bmRzQ2VudGVyWCAtIChleHBlY3RlZExhYmVsU2l6
ZS53aWR0aCgpIC8gMikgPiBjb250ZW50SW5zZXQud2lkdGgoKSkgeworICAgICAgICBsYWJlbFgg
PSBib3VuZHMueCgpICsgKGJvdW5kcy53aWR0aCgpIC8gMik7CisgICAgICAgIGFycm93QWxpZ25t
ZW50ID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU7Cisg
ICAgfSBlbHNlIGlmIChib3VuZHMueCgpIDwgY29udGVudEluc2V0LndpZHRoKCkpIHsKKyAgICAg
ICAgbGFiZWxYID0gZm1heChjb250ZW50SW5zZXQud2lkdGgoKSwgYm91bmRzQ2VudGVyWCk7Cisg
ICAgICAgIGFycm93QWxpZ25tZW50ID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxp
Z25tZW50OjpMZWFkaW5nOworICAgIH0gZWxzZSBpZiAoYm91bmRzLm1heFgoKSA+IHZpZXdwb3J0
U2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGxhYmVsWCA9IGZtaW4odmlld3BvcnRTaXplLndpZHRo
KCksIGJvdW5kc0NlbnRlclgpOworICAgICAgICBhcnJvd0FsaWdubWVudCA9IEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGFiZWxYID0gYm91bmRzQ2VudGVyWDsKKyAgICAgICAgYXJyb3dBbGlnbm1lbnQgPSBi
b3VuZHNDZW50ZXJYIDwgKHZpZXdwb3J0U2l6ZS53aWR0aCgpIC8gMikgPyBJbnNwZWN0b3JPdmVy
bGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmcgOiBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5nOworICAgIH0KKwogICAgIGZsb2F0IGFuY2hv
clRvcCA9IGJvdW5kcy55KCk7CiAgICAgZmxvYXQgYW5jaG9yQm90dG9tID0gYm91bmRzLm1heFko
KTsKIAotICAgIGJvb2wgcmVuZGVyQXJyb3dVcCA9IGZhbHNlOwotICAgIGJvb2wgcmVuZGVyQXJy
b3dEb3duID0gZmFsc2U7Ci0KLSAgICBmbG9hdCBib3hXaWR0aCA9IGVsZW1lbnREYXRhV2lkdGgg
KyAoZWxlbWVudERhdGFTcGFjaW5nICogMik7Ci0gICAgZmxvYXQgYm94SGVpZ2h0ID0gZWxlbWVu
dERhdGFBcnJvd1NpemUgKyBlbGVtZW50RGF0YUhlaWdodCArIChlbGVtZW50RGF0YVNwYWNpbmcg
KiAyKTsKLQotICAgIGZsb2F0IGJveFggPSBib3VuZHMueCgpOwotICAgIGlmIChib3hYIDwgY29u
dGVudEluc2V0LndpZHRoKCkpCi0gICAgICAgIGJveFggPSBjb250ZW50SW5zZXQud2lkdGgoKTsK
LSAgICBlbHNlIGlmIChib3hYID4gdmlld3BvcnRTaXplLndpZHRoKCkgLSBib3hXaWR0aCkKLSAg
ICAgICAgYm94WCA9IHZpZXdwb3J0U2l6ZS53aWR0aCgpIC0gYm94V2lkdGg7Ci0gICAgZWxzZQot
ICAgICAgICBib3hYICs9IGVsZW1lbnREYXRhU3BhY2luZzsKLQotICAgIGZsb2F0IGJveFk7Cisg
ICAgZmxvYXQgbGFiZWxZOworICAgIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVj
dGlvbiBhcnJvd0RpcmVjdGlvbjsKICAgICBpZiAoYW5jaG9yVG9wID4gdmlld3BvcnRTaXplLmhl
aWdodCgpKSB7Ci0gICAgICAgIGJveFkgPSB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgLSBib3hIZWln
aHQ7Ci0gICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7CisgICAgICAgIGxhYmVsWSA9IHZp
ZXdwb3J0U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgfSBlbHNlIGlmIChhbmNo
b3JCb3R0b20gPCBjb250ZW50SW5zZXQuaGVpZ2h0KCkpIHsKLSAgICAgICAgYm94WSA9IGNvbnRl
bnRJbnNldC5oZWlnaHQoKSArIGVsZW1lbnREYXRhQXJyb3dTaXplOwotICAgICAgICByZW5kZXJB
cnJvd1VwID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFuY2hvclRvcCAtIGJveEhlaWdodCAtIGVs
ZW1lbnREYXRhU3BhY2luZyA+IGNvbnRlbnRJbnNldC5oZWlnaHQoKSkgewotICAgICAgICBib3hZ
ID0gYW5jaG9yVG9wIC0gYm94SGVpZ2h0IC0gZWxlbWVudERhdGFTcGFjaW5nOwotICAgICAgICBy
ZW5kZXJBcnJvd0Rvd24gPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tICsgYm94
SGVpZ2h0ICsgZWxlbWVudERhdGFTcGFjaW5nIDwgdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0g
ICAgICAgIGJveFkgPSBhbmNob3JCb3R0b20gKyBlbGVtZW50RGF0YUFycm93U2l6ZSArIGVsZW1l
bnREYXRhU3BhY2luZzsKLSAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRydWU7CisgICAgICAgIGxh
YmVsWSA9IGNvbnRlbnRJbnNldC5oZWlnaHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOworICAgIH0gZWxzZSBp
ZiAoYW5jaG9yVG9wIC0gZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgPiBjb250ZW50SW5zZXQu
aGVpZ2h0KCkpIHsKKyAgICAgICAgbGFiZWxZID0gYW5jaG9yVG9wOworICAgICAgICBhcnJvd0Rp
cmVjdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsK
KyAgICB9IGVsc2UgaWYgKGFuY2hvckJvdHRvbSArIGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgp
IDwgdmlld3BvcnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIGxhYmVsWSA9IGFuY2hvckJvdHRv
bTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpEaXJlY3Rpb246OlVwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJveFkgPSBjb250ZW50SW5z
ZXQuaGVpZ2h0KCk7Ci0gICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7Ci0gICAgfQotCi0g
ICAgUGF0aCBwYXRoOwotICAgIHBhdGgubW92ZVRvKHsgYm94WCwgYm94WSB9KTsKLSAgICBpZiAo
cmVuZGVyQXJyb3dVcCkgewotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVu
dERhdGFBcnJvd1NpemUgKiAyKSwgYm94WSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBi
b3hYICsgKGVsZW1lbnREYXRhQXJyb3dTaXplICogMyksIGJveFkgLSBlbGVtZW50RGF0YUFycm93
U2l6ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnREYXRhQXJy
b3dTaXplICogNCksIGJveFkgfSk7CisgICAgICAgIGxhYmVsWSA9IGNvbnRlbnRJbnNldC5oZWln
aHQoKSArIGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpOworICAgICAgICBhcnJvd0RpcmVjdGlv
biA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsKICAgICB9
Ci0gICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgZWxlbWVudERhdGFXaWR0aCArIChlbGVtZW50
RGF0YVNwYWNpbmcgKiAyKSwgYm94WSB9KTsKLSAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyBl
bGVtZW50RGF0YVdpZHRoICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIpLCBib3hZICsgZWxlbWVu
dERhdGFIZWlnaHQgKyAoZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgaWYgKHJlbmRl
ckFycm93RG93bikgewotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERh
dGFBcnJvd1NpemUgKiA0KSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRh
U3BhY2luZyAqIDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVu
dERhdGFBcnJvd1NpemUgKiAzKSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnRE
YXRhU3BhY2luZyAqIDIpICsgZWxlbWVudERhdGFBcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgYm94WCArIChlbGVtZW50RGF0YUFycm93U2l6ZSAqIDIpLCBib3hZICsgZWxl
bWVudERhdGFIZWlnaHQgKyAoZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgfQotICAg
IHBhdGguYWRkTGluZVRvKHsgYm94WCwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1l
bnREYXRhU3BhY2luZyAqIDIpIH0pOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0KLSAgICBjb250
ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmKTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJhY2tn
cm91bmRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAyNTUsIDE5NCB9OwotICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcik7Ci0KLSAgICBjb250
ZXh0LmZpbGxQYXRoKHBhdGgpOwotCi0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoZWxl
bWVudERhdGFCb3JkZXJTaXplKTsKLQogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJv
cmRlckNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Io
ZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IpOwotCi0gICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgp
OwotCi0gICAgRmxvYXRQb2ludCB0ZXh0UG9zaXRpb24oYm94WCArIGVsZW1lbnREYXRhU3BhY2lu
ZywgYm94WSAtIChlbGVtZW50RGF0YVNwYWNpbmcgLyAyLjBmKSArIGZvbnRIZWlnaHQpOwotICAg
IGNvbnN0IGF1dG8gZHJhd1RleHQgPSBbJl0gKGNvbnN0IFN0cmluZyYgdGV4dCwgU1JHQkE8dWlu
dDhfdD4gY29sb3IpIHsKLSAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKLSAgICAgICAg
dGV4dFBvc2l0aW9uICs9IGNvbnRleHQuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgdGV4
dFBvc2l0aW9uKTsKLSAgICB9OwogCi0gICAgZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIHsgMTM2
LCAxOCwgMTI4IH0pOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50
YWcpCi0gICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIHsgMjYsIDI2LCAxNjYgfSk7IC8vIEtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAg
ICBkcmF3VGV4dChlbGVtZW50Q2xhc3NWYWx1ZSwgeyAxNTMsIDY5LCAwIH0pOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3
VGV4dChlbGVtZW50UHNldWRvVHlwZSwgeyAxMzYsIDE4LCAxMjggfSk7IC8vIEtlZXAgdGhpcyBp
biBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLnRhZykKLSAgICBkcmF3VGV4dCgiICJfcywgQ29s
b3I6OmJsYWNrKTsKLSAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7Ci0g
ICAgZHJhd1RleHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KCIgIl9z
LCBDb2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KG1ha2VTdHJpbmcobXVsdGlwbGljYXRp
b25TaWduKSwgQ29sb3I6OmRhcmtHcmF5KTsKLSAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmRh
cmtHcmF5KTsKLSAgICBkcmF3VGV4dChlbGVtZW50SGVpZ2h0LCBDb2xvcjo6YmxhY2spOwotICAg
IGRyYXdUZXh0KCJweCJfcywgQ29sb3I6OmRhcmtHcmF5KTsKLQotICAgIGlmIChoYXNTZWNvbmRM
aW5lKSB7Ci0gICAgICAgIHRleHRQb3NpdGlvbi5zZXRYKGJveFggKyBlbGVtZW50RGF0YVNwYWNp
bmcpOwotICAgICAgICB0ZXh0UG9zaXRpb24ubW92ZSgwLCBmb250SGVpZ2h0KTsKLSAgICAgICAg
Ci0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCB7IDE3MCwgMTMsIDE0NSB9KTsKLSAgICAgICAg
ZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7Ci0gICAgICAgIGRyYXdUZXh0KGVsZW1lbnRS
b2xlLCBDb2xvcjo6YmxhY2spOwotICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7
CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0bGVCb3JkZXJDb2xvcik7CiAK
LSAgICByZXR1cm4gcGF0aDsKKyAgICBJbnNwZWN0b3JPdmVybGF5TGFiZWwgbGFiZWwgPSB7IFdU
Rk1vdmUobGFiZWxDb250ZW50cyksIHsgbGFiZWxYLCBsYWJlbFkgfSwgZWxlbWVudFRpdGxlQmFj
a2dyb3VuZENvbG9yLCB7IGFycm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH07CisgICAg
cmV0dXJuIGxhYmVsLmRyYXcoY29udGV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRI
YXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEZsb2F0UXVhZCBxdWFkKQpAQCAtMTIw
NCwyNjggKzExNDEsNiBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBGbG9hdFF1YWQgcXVhZCkKICAgICBjb250ZXh0LnN0cm9rZVBhdGgo
aGF0Y2hQYXRoKTsKIH0KIAotc3RhdGljIEZvbnRDYXNjYWRlIGZvbnRGb3JMYXlvdXRMYWJlbCgp
Ci17Ci0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5c3RlbS11aSIgfSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUoNTAwKSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7Ci0KLSAgICBGb250Q2FzY2FkZSBmb250KFdURk1v
dmUoZm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0cik7Ci0g
ICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLXN0YXRpYyBQYXRoIGJhY2tncm91bmRQYXRoRm9yTGF5b3V0
TGFiZWwoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbiwgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0VkZ2VQb3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbiwgZmxvYXQgYXJyb3dTaXplKQotewotICAg
IFBhdGggcGF0aDsKLSAgICBGbG9hdFNpemUgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb247Ci0K
LSAgICBzd2l0Y2ggKGFycm93RGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
OjpMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lk
dGggLyAyKSwgLWhlaWdodCAtIGFycm93U2l6ZX0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IC0od2lkdGggLyAyKSwgLWFycm93U2l6ZSB9KTsKLQotICAgICAgICBzd2l0Y2ggKGFycm93RWRn
ZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0Vk
Z2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0
aCAvIDIpLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMikg
KyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0Vk
Z2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRs
ZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93U2l6ZSB9
KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKLSAgICAgICAgICAgIHBh
dGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlv
bjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpIC0g
YXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAo
d2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9u
ID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRo
IC8gMiksIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8g
MiksIC1oZWlnaHQgLSBhcnJvd1NpemUgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHBhdGgubW92
ZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgKyBhcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBhcnJvd1NpemUgfSk7Ci0KLSAgICAgICAgc3dpdGNo
IChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVU
byh7IC0od2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3
aWR0aCAvIDIpICsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBvZmZzZXRG
b3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRp
b246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgYXJy
b3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwotICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246OlRyYWlsaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGgg
LyAyKSAtIGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyAod2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBv
c2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGluZVRvKHsg
KHdpZHRoIC8gMiksIGFycm93U2l6ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lk
dGggLyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0OgotICAgICAgICBw
YXRoLm1vdmVUbyh7IC13aWR0aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOwotICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKLQotICAgICAg
ICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9KTsKLSAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAg
ICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikgfTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFy
cm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAw
IH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtYXJyb3dTaXpl
IH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IDAsIChoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsg
LWFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgb2Zm
c2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikgfTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok5vbmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyAtd2lkdGggLSBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVj
dGlvbjo6TGVmdDoKLSAgICAgICAgcGF0aC5tb3ZlVG8oeyB3aWR0aCArIGFycm93U2l6ZSwgKGhl
aWdodCAvIDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgKGhlaWdo
dCAvIDIpIH0pOwotCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5n
OgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikg
KyBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIC0oaGVpZ2h0
IC8gMikgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgMCwg
KGhlaWdodCAvIDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Ci0gICAgICAgICAgICBw
YXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJv
d1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAgICAg
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgKGhlaWdodCAvIDIpIH0pOwotICAgICAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSAtIGFycm93U2l6ZSB9KTsK
LSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAtKGhlaWdodCAv
IDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWlnaHQgLyAy
KSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCArIGFycm93U2l6ZSwgLShoZWln
aHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpM
YWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGgg
LyAyKSwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRo
IC8gMiksIGhlaWdodCAvIDIgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgd2lkdGggLyAy
LCBoZWlnaHQgLyAyIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8gMiwgLSho
ZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGF0aC5jbG9zZVN1
YnBhdGgoKTsKLSAgICBwYXRoLnRyYW5zbGF0ZShvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbik7
Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotc3RhdGljIEZsb2F0U2l6ZSBleHBlY3RlZFNpemVG
b3JMYXlvdXRMYWJlbChTdHJpbmcgbGFiZWwsIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dE
aXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKQotewotICAgIGF1dG8g
Zm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwotCi0gICAgZmxvYXQgdGV4dEhlaWdodCA9IGZv
bnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5mbG9hdEhlaWdodCgpOwotICAgIGZsb2F0IHRleHRX
aWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOwotICAgIGlmIChtYXhpbXVtV2lkdGgg
JiYgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bVdpZHRoKQot
ICAgICAgICB0ZXh0V2lkdGggPSBtYXhpbXVtV2lkdGg7Ci0KLSAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgewotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6RG93
bjoKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlVwOgot
ICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMiksIHRl
eHRIZWlnaHQgKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMikgKyBsYXlvdXRMYWJlbEFycm93U2l6
ZSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Umln
aHQ6Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0
OgotICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMikg
KyBsYXlvdXRMYWJlbEFycm93U2l6ZSwgdGV4dEhlaWdodCArIChsYXlvdXRMYWJlbFBhZGRpbmcg
KiAyKSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6
Tm9uZToKLSAgICAgICAgcmV0dXJuIHsgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFkZGluZyAq
IDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpIH07Ci0gICAgfQotCi0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd0xh
eW91dExhYmVsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU3RyaW5nIGxhYmVsLCBGbG9hdFBv
aW50IHBvaW50LCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGFycm93RGly
ZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uIGFycm93RWRn
ZVBvc2l0aW9uLCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IsIGZsb2F0IG1heGltdW1XaWR0aCA9IDAp
Ci17Ci0gICAgQVNTRVJUKGFycm93RWRnZVBvc2l0aW9uICE9IEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmUgfHwgYXJyb3dEaXJlY3Rpb24gPT0gSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwotICAgIAotICAgIGNvbnRleHQudHJhbnNsYXRl
KHBvaW50KTsKLQotICAgIGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwotICAgIGZs
b2F0IHRleHRIZWlnaHQgPSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCkuZmxvYXRIZWlnaHQo
KTsKLSAgICBmbG9hdCB0ZXh0RGVzY2VudCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5m
bG9hdERlc2NlbnQoKTsKLSAgICAKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250LndpZHRoKFRl
eHRSdW4obGFiZWwpKTsKLSAgICBpZiAobWF4aW11bVdpZHRoICYmIHRleHRXaWR0aCArIChsYXlv
dXRMYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1XaWR0aCkgewotICAgICAgICBsYWJlbC5hcHBl
bmQoIi4uLiJfcyk7Ci0gICAgICAgIHdoaWxlICh0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRk
aW5nICogMikgPiBtYXhpbXVtV2lkdGggJiYgbGFiZWwubGVuZ3RoKCkgPj0gNCkgewotICAgICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSBmb3VydGggZnJvbSBsYXN0IGNoYXJhY3RlciAodGhlIGNoYXJh
Y3RlciBiZWZvcmUgdGhlIGVsbGlwc2lzKSBhbmQgcmVtZWFzdXJlLgotICAgICAgICAgICAgbGFi
ZWwucmVtb3ZlKGxhYmVsLmxlbmd0aCgpIC0gNCk7Ci0gICAgICAgICAgICB0ZXh0V2lkdGggPSBm
b250LndpZHRoKFRleHRSdW4obGFiZWwpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEZsb2F0
UG9pbnQgdGV4dFBvc2l0aW9uOwotICAgIHN3aXRjaCAoYXJyb3dEaXJlY3Rpb24pIHsKLSAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Ci0gICAgICAg
IHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBv
c2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRMYWJlbFBhZGRpbmcsIC10ZXh0RGVzY2VudCAtIGxh
eW91dExhYmVsQXJyb3dTaXplIC0gbGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRp
b246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0
V2lkdGggLyAyKSwgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRM
YWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0
ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVsUGFkZGlu
ZywgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRp
bmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFk
aW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRMYWJlbFBh
ZGRpbmcsIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCArIGxheW91dExhYmVsQXJyb3dTaXplICsg
bGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAg
ICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0V2lkdGggLyAyKSwgdGV4dEhlaWdo
dCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRp
bmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRp
b24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVsUGFkZGluZywgdGV4dEhl
aWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBh
ZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtdGV4dFdp
ZHRoIC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIGxheW91dExh
YmVsUGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpNaWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC10ZXh0V2lk
dGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZywgKHRleHRIZWln
aHQgLyAyKSAtIHRleHREZXNjZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgotICAg
ICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtdGV4dFdpZHRoIC0gbGF5b3V0TGFi
ZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIC1sYXlvdXRMYWJlbFBhZGRpbmcgLSB0
ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpM
YWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3Np
dGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5
b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcsIGxheW91dExhYmVsUGFkZGlu
ZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6
Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVsQXJyb3dT
aXplICsgbGF5b3V0TGFiZWxQYWRkaW5nLCAodGV4dEhlaWdodCAvIDIpIC0gdGV4dERlc2NlbnQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24g
PSBGbG9hdFBvaW50KGxheW91dExhYmVsQXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRkaW5nLCAt
bGF5b3V0TGFiZWxQYWRkaW5nIC0gdGV4dERlc2NlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9u
ZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZToKLSAgICAgICAg
dGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKHRleHRXaWR0aCAvIDIpLCAodGV4dEhlaWdodCAv
IDIpIC0gdGV4dERlc2NlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQYXRoIGxh
YmVsUGF0aCA9IGJhY2tncm91bmRQYXRoRm9yTGF5b3V0TGFiZWwodGV4dFdpZHRoICsgKGxheW91
dExhYmVsUGFkZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIp
LCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9zaXRpb24sIGxheW91dExhYmVsQXJyb3dTaXpl
KTsKLQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0gICAgY29u
dGV4dC5maWxsUGF0aChsYWJlbFBhdGgpOwotICAgIGNvbnRleHQuc3Ryb2tlUGF0aChsYWJlbFBh
dGgpOwotICAgIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0gICAg
Y29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKGxhYmVsKSwgdGV4dFBvc2l0aW9uKTsKLX0K
LQogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5JiBncmlkT3ZlcmxheSkKIHsKICAgICBjb25zdGV4cHIgYXV0byB0cmFuc2x1Y2Vu
dExhYmVsQmFja2dyb3VuZENvbG9yID0gQ29sb3I6OndoaXRlLmNvbG9yV2l0aEFscGhhQnl0ZSgy
MzApOwpAQCAtMTQ5MSwxMCArMTE2NiwxMCBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdH
cmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAg
IC8vIERyYXcgbGFiZWxzIG9uIHRvcCBvZiBhbGwgb3RoZXIgbGluZXMuCiAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAgZm9yIChhdXRvIGFyZWEgOiBncmlkT3ZlcmxheS5h
cmVhcykKLSAgICAgICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIGFyZWEubmFtZSwgYXJlYS5x
dWFkLmNlbnRlcigpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lLCBMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcmVhLnF1YWQu
Ym91bmRpbmdCb3goKS53aWR0aCgpKTsKKyAgICAgICAgSW5zcGVjdG9yT3ZlcmxheUxhYmVsKGFy
ZWEubmFtZSwgYXJlYS5xdWFkLmNlbnRlcigpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENv
bG9yLCB7IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9uZSwgSW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpOb25lIH0pLmRyYXcoY29udGV4
dCwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCkud2lkdGgoKSk7CiAKICAgICBmb3IgKGF1dG8gbGFi
ZWwgOiBncmlkT3ZlcmxheS5sYWJlbHMpCi0gICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0
LCBsYWJlbC50ZXh0LCBsYWJlbC5sb2NhdGlvbiwgbGFiZWwuYXJyb3dEaXJlY3Rpb24sIGxhYmVs
LmFycm93RWRnZVBvc2l0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBsYWJl
bC5kcmF3KGNvbnRleHQpOwogfQogCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYXV0aG9yZWRHcmlk
VHJhY2tTaXplcyhOb2RlKiBub2RlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9u
LCB1bnNpZ25lZCBleHBlY3RlZFRyYWNrQ291bnQpCkBAIC0xNTk1LDE3ICsxMjcwLDYgQEAgc3Rh
dGljIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCBncmlkTGluZU5hbWVzKGNvbnN0IFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSwgR3IKICAgICByZXR1cm4gY29tYmluZWRHcmlkTGluZU5hbWVzOwog
fQogCi1zdGF0aWMgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zl
cmxheTo6TGFiZWwgYnVpbGRMYWJlbChTdHJpbmcgdGV4dCwgRmxvYXRQb2ludCBsb2NhdGlvbiwg
Q29sb3IgYmFja2dyb3VuZENvbG9yLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0
aW9uIGFycm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0
aW9uIGFycm93RWRnZVBvc2l0aW9uKQotewotICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVsOwotICAgIGxhYmVsLnRleHQgPSB0
ZXh0OwotICAgIGxhYmVsLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgbGFiZWwuYmFja2dyb3Vu
ZENvbG9yID0gYmFja2dyb3VuZENvbG9yOwotICAgIGxhYmVsLmFycm93RGlyZWN0aW9uID0gYXJy
b3dEaXJlY3Rpb247Ci0gICAgbGFiZWwuYXJyb3dFZGdlUG9zaXRpb24gPSBhcnJvd0VkZ2VQb3Np
dGlvbjsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3Zl
cmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3ZlcmxheTo6
YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlkT3Zlcmxh
eSwgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkKIHsKICAgICAvLyBJZiB0aGUgbm9kZSBXZWFr
UHRyIGhhcyBiZWVuIGNsZWFyZWQsIHRoZW4gdGhlIG5vZGUgaXMgZ29uZSBhbmQgdGhlcmUncyBu
b3RoaW5nIHRvIGRyYXcuCkBAIC0xNjkyLDQxICsxMzU2LDQxIEBAIHN0ZDo6b3B0aW9uYWw8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9y
T3ZlcmxhCiAgICAgICAgIH07CiAgICAgfTsKIAotICAgIGF1dG8gY29ycmVjdGVkQXJyb3dEaXJl
Y3Rpb24gPSBbJl0oTGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IExhYmVsQXJyb3dEaXJlY3Rpb24geworICAg
IGF1dG8gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24gPSBbJl0oSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvdzo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHNp
emluZ0RpcmVjdGlvbikgLT4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
IHsKICAgICAgICAgaWYgKChzaXppbmdEaXJlY3Rpb24gPT0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uOjpGb3JDb2x1bW5zICYmIGlzV3JpdGluZ01vZGVGbGlwcGVkKSB8fCAoc2l6aW5nRGlyZWN0
aW9uID09IEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc0RpcmVjdGlvbkZs
aXBwZWQpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICAgICAg
Y2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICAgICAgICAgIGRpcmVjdGlv
biA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd246CisgICAgICAgICAgICAgICAgZGly
ZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpVcDsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0RpcmVjdGlv
bjo6VXA6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6
RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGly
ZWN0aW9uOjpVcDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgICAgICAg
ICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ7CisgICAgICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoKKyAgICAg
ICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJl
Y3Rpb246OlJpZ2h0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBM
YWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBM
YWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICAgICAgICAgIGRpcmVj
dGlvbiA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVmdDsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0RpcmVjdGlv
bjo6Tm9uZToKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
RGlyZWN0aW9uOjpOb25lOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSkgewogICAg
ICAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJv
d0RpcmVjdGlvbjo6RG93bjoKLSAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBMYWJlbEFycm93
RGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6UmlnaHQ7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOgot
ICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ7Cisg
ICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6
VXA6CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpB
cnJvdzo6RGlyZWN0aW9uOjpMZWZ0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgICAgIGRpcmVj
dGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgICAgICAgICAg
ZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpVcDsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0RpcmVj
dGlvbjo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVj
dGlvbjo6RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6CisgICAg
ICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9u
ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTczNCwxNSArMTM5OCwxNSBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAgICByZXR1
cm4gZGlyZWN0aW9uOwogICAgIH07CiAKLSAgICBhdXRvIGNvcnJlY3RlZEFycm93RWRnZVBvc2l0
aW9uID0gWyZdKExhYmVsQXJyb3dFZGdlUG9zaXRpb24gZWRnZVBvc2l0aW9uLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gc2l6aW5nRGlyZWN0aW9uKSAtPiBMYWJlbEFycm93RWRnZVBvc2l0aW9u
IHsKKyAgICBhdXRvIGNvcnJlY3RlZEFycm93QWxpZ25tZW50ID0gWyZdKEluc3BlY3Rvck92ZXJs
YXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudCBhbGlnbm1lbnQsIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFs
aWdubWVudCB7CiAgICAgICAgIGlmICgoc2l6aW5nRGlyZWN0aW9uID09IEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc1dyaXRpbmdNb2RlRmxpcHBlZCkgfHwgKHNpemluZ0Rp
cmVjdGlvbiA9PSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMgJiYgaXNEaXJl
Y3Rpb25GbGlwcGVkKSkgewotICAgICAgICAgICAgaWYgKGVkZ2VQb3NpdGlvbiA9PSBMYWJlbEFy
cm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBMYWJlbEFy
cm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzsKLSAgICAgICAgICAgIGlmIChlZGdlUG9zaXRpb24g
PT0gTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmcpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIExhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc7CisgICAgICAgICAgICBpZiAoYWxp
Z25tZW50ID09IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TGVhZGlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
QWxpZ25tZW50OjpUcmFpbGluZzsKKyAgICAgICAgICAgIGlmIChhbGlnbm1lbnQgPT0gSW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFk
aW5nOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVkZ2VQb3NpdGlvbjsKKyAgICAgICAg
cmV0dXJuIGFsaWdubWVudDsKICAgICB9OwogCiAgICAgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSBncmlkSGlnaGxpZ2h0T3ZlcmxheTsKQEAgLTE3ODYs
NyArMTQ1MCw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBpZiAoZ3Jp
ZE92ZXJsYXkuY29uZmlnLnNob3dUcmFja1NpemVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBh
dXRob3JlZFRyYWNrU2l6ZSA9IGkgPCBhdXRob3JlZFRyYWNrQ29sdW1uU2l6ZXMuc2l6ZSgpID8g
YXV0aG9yZWRUcmFja0NvbHVtblNpemVzW2ldIDogImF1dG8iX3M7CiAgICAgICAgICAgICAgICAg
RmxvYXRMaW5lIHRyYWNrVG9wTGluZSA9IHsgY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCksIGNvbHVt
bkVuZExpbmUuc3RhcnQoKSB9OwotICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5
LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbChhdXRob3JlZFRyYWNrU2l6ZSwgdHJhY2tUb3BMaW5l
LnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5k
Q29sb3IsIGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJyb3dEaXJlY3Rpb246OlVwLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpLCBMYWJlbEFycm93RWRnZVBvc2l0
aW9uOjpNaWRkbGUpKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJl
bHMuYXBwZW5kKHsgYXV0aG9yZWRUcmFja1NpemUsIHRyYWNrVG9wTGluZS5wb2ludEF0UmVsYXRp
dmVEaXN0YW5jZSgwLjUpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCB7IGNvcnJl
Y3RlZEFycm93RGlyZWN0aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlv
bjo6VXAsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyksIEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlIH0gfSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRMaW5lID0gY29s
dW1uU3RhcnRMaW5lOwpAQCAtMTgwNywyMSArMTQ3MSwyMSBAQCBzdGQ6Om9wdGlvbmFsPEluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92
ZXJsYQogCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
YXV0byB0ZXh0ID0gbGluZUxhYmVsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhdXRvIGFycm93
RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0RpcmVjdGlvbjo6
RG93biwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKLSAgICAgICAgICAg
IGF1dG8gYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9y
Q29sdW1ucyk7CisgICAgICAgICAgICBhdXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJy
b3dEaXJlY3Rpb24oSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpEb3du
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOworICAgICAgICAgICAgYXV0
byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50KEluc3BlY3Rvck92ZXJs
YXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b246OkZvckNvbHVtbnMpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAg
YXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJlbEFycm93
RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVt
bnMpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dBbGln
bm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOwogICAgICAgICAgICAgZWxzZSBp
ZiAoaSA9PSBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBhcnJv
d0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdl
UG9zaXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMp
OworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dBbGlnbm1l
bnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZywgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKIAotICAgICAgICAgICAgYXV0byBl
eHBlY3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQsIGFycm93
RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7CiAgICAg
ICAgICAgICBhdXRvIGdhcExhYmVsUG9zaXRpb24gPSBnYXBMYWJlbExpbmUuc3RhcnQoKTsKIAog
ICAgICAgICAgICAgLy8gVGhlIGFyZWEgdW5kZXIgdGhlIHdpbmRvdydzIHRvb2xiYXIgaXMgZHJh
d2FibGUsIGJ1dCBub3QgbWVhbmluZ2Z1bGx5IHZpc2libGUsIHNvIHdlIG11c3QgYWNjb3VudCBm
b3IgdGhhdCBzcGFjZS4KICAgICAgICAgICAgIGF1dG8gdG9wRWRnZUluc2V0ID0gcGFnZVZpZXct
PnRvcENvbnRlbnRJbnNldChTY3JvbGxWaWV3OjpUb3BDb250ZW50SW5zZXRUeXBlOjpXZWJDb3Jl
T3JQbGF0Zm9ybUNvbnRlbnRJbnNldCk7CiAgICAgICAgICAgICBpZiAoZ2FwTGFiZWxMaW5lLnN0
YXJ0KCkueSgpIC0gZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgLSB0b3BFZGdlSW5zZXQgKyBz
Y3JvbGxQb3NpdGlvbi55KCkgLSB2aWV3cG9ydEJvdW5kcy55KCkgPCAwKSB7Ci0gICAgICAgICAg
ICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihMYWJlbEFycm93
RGlyZWN0aW9uOjpVcCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKKyAg
ICAgICAgICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6VXAsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNh
c2UgZm9yIHRoZSBmaXJzdCBjb2x1bW4gdG8gbWFrZSBzdXJlIHRoZSBsYWJlbCB3aWxsIGJlIG91
dCBvZiB0aGUgd2F5IG9mIHRoZSBmaXJzdCByb3cncyBsYWJlbC4KICAgICAgICAgICAgICAgICAv
LyBUaGUgbGFiZWwgaGVpZ2h0cyB3aWxsIGJlIHRoZSBzYW1lLCBhcyB0aGV5IHVzZSB0aGUgc2Ft
ZSBmb250LCBzbyBtb3ZpbmcgZG93biBieSB0aGlzIGxhYmVsJ3Mgc2l6ZSB3aWxsCkBAIC0xODMw
LDcgKzE0OTQsNyBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6
R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAgICAgICAgICAgICAg
ICBnYXBMYWJlbFBvc2l0aW9uID0gZ2FwTGFiZWxMaW5lLnBvaW50QXRBYnNvbHV0ZURpc3RhbmNl
KGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKHRleHQsIGdh
cExhYmVsUG9zaXRpb24sIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGFycm93RGly
ZWN0aW9uLCBhcnJvd0VkZ2VQb3NpdGlvbikpOworICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92
ZXJsYXkubGFiZWxzLmFwcGVuZCh7IHRleHQsIGdhcExhYmVsUG9zaXRpb24sIHRyYW5zbHVjZW50
TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIHsgYXJyb3dEaXJlY3Rpb24sIGFycm93QWxpZ25tZW50IH0g
fSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4NzAsNyArMTUzNCw3IEBAIHN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5z
cGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dUcmFj
a1NpemVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhdXRob3JlZFRyYWNrU2l6ZSA9IGkgPCBh
dXRob3JlZFRyYWNrUm93U2l6ZXMuc2l6ZSgpID8gYXV0aG9yZWRUcmFja1Jvd1NpemVzW2ldIDog
ImF1dG8iX3M7CiAgICAgICAgICAgICAgICAgRmxvYXRMaW5lIHRyYWNrTGVmdExpbmUgPSB7IHJv
d1N0YXJ0TGluZS5zdGFydCgpLCByb3dFbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAgICAgICAg
ICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwoYXV0aG9yZWRU
cmFja1NpemUsIHRyYWNrTGVmdExpbmUucG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41KSwgdHJh
bnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFi
ZWxBcnJvd0RpcmVjdGlvbjo6TGVmdCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dz
KSwgTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlKSk7CisgICAgICAgICAgICAgICAgZ3Jp
ZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZCh7IGF1dGhvcmVkVHJhY2tTaXplLCB0cmFj
a0xlZnRMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxC
YWNrZ3JvdW5kQ29sb3IsIHsgY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246
OkZvclJvd3MpLCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok1pZGRs
ZSB9IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHByZXZp
b3VzUm93RW5kTGluZSA9IHJvd1N0YXJ0TGluZTsKQEAgLTE4OTEsMTkgKzE1NTUsMTkgQEAgc3Rk
OjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5PiBJbnNwZWN0b3JPdmVybGEKIAogICAgICAgICBpZiAoIWxpbmVMYWJlbC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGF1dG8gdGV4dCA9IGxpbmVMYWJlbC50b1N0cmluZygpOwotICAgICAg
ICAgICAgYXV0byBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVs
QXJyb3dEaXJlY3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3Mp
OwotICAgICAgICAgICAgYXV0byBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRn
ZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICAgICAgICAgIGF1dG8gYXJyb3dEaXJlY3Rpb24gPSBj
b3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJl
Y3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOworICAgICAg
ICAgICAgYXV0byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50KEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb246OkZvclJvd3MpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAg
ICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZv
clJvd3MpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dB
bGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5n
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogICAgICAgICAgICAgZWxzZSBp
ZiAoaSA9PSByb3dQb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBhcnJvd0Vk
Z2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9z
aXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOworICAg
ICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dBbGlnbm1lbnQoSW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZywgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKIAotICAgICAgICAgICAgYXV0byBleHBlY3RlZExh
YmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQsIGFycm93RGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7CiAgICAgICAgICAgICBp
ZiAoZ2FwTGFiZWxQb3NpdGlvbi54KCkgLSBleHBlY3RlZExhYmVsU2l6ZS53aWR0aCgpICsgc2Ny
b2xsUG9zaXRpb24ueCgpIC0gdmlld3BvcnRCb3VuZHMueCgpIDwgMCkKLSAgICAgICAgICAgICAg
ICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJyb3dEaXJl
Y3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7CisgICAgICAg
ICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbjo6Rm9yUm93cyk7CiAKLSAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5Lmxh
YmVscy5hcHBlbmQoYnVpbGRMYWJlbCh0ZXh0LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFuc2x1Y2Vu
dExhYmVsQmFja2dyb3VuZENvbG9yLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9zaXRpb24p
KTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQoeyB0ZXh0
LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCB7IGFy
cm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH0pOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCA4NGY4OTIx
NzY2MjlmNTIwM2Y4OTBkMTVhZWU4NmI5MzE0ZGNjZjQ2Li5hMTBlN2IxMGM2OGJjYzE4ZWYzM2Nh
ODUyOGQyZWVkNjA3MWI5NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdExpbmUuaCIKICNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTY1LDIxICs2Niw2IEBAIHB1YmxpYzoK
ICAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UmLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB+SW5z
cGVjdG9yT3ZlcmxheSgpOwogCi0gICAgZW51bSBjbGFzcyBMYWJlbEFycm93RGlyZWN0aW9uIHsK
LSAgICAgICAgTm9uZSwKLSAgICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgICAgIExlZnQs
Ci0gICAgICAgIFJpZ2h0LAotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIExhYmVsQXJyb3dFZGdl
UG9zaXRpb24gewotICAgICAgICBOb25lLAotICAgICAgICBMZWFkaW5nLCAvLyBQb3NpdGlvbmVk
IGF0IHRoZSBsZWZ0L3RvcCBzaWRlIG9mIGVkZ2UuCi0gICAgICAgIE1pZGRsZSwgLy8gUG9zaXRp
b25lZCBhdCB0aGUgY2VudGVyIG9uIHRoZSBlZGdlLgotICAgICAgICBUcmFpbGluZywgLy8gUG9z
aXRpb25lZCBhdCB0aGUgcmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCi0gICAgfTsKLQog
ICAgIHN0cnVjdCBIaWdobGlnaHQgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7CiAKQEAgLTEwNCwyMCArOTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0cnVjdCBHcmlk
SGlnaGxpZ2h0T3ZlcmxheSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7CiAKLSAgICAgICAgICAgIHN0cnVjdCBMYWJlbCB7Ci0gICAgICAgICAgICAgICAgV1RG
X01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0
OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb247Ci0gICAgICAgICAgICAgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgIExhYmVsQXJyb3dEaXJlY3Rp
b24gYXJyb3dEaXJlY3Rpb247Ci0gICAgICAgICAgICAgICAgTGFiZWxBcnJvd0VkZ2VQb3NpdGlv
biBhcnJvd0VkZ2VQb3NpdGlvbjsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
ICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJs
YXk6OkxhYmVsPiBkZWNvZGUoRGVjb2RlciYpOwotI2VuZGlmCi0gICAgICAgICAgICB9OwotCiAg
ICAgICAgICAgICBzdHJ1Y3QgQXJlYSB7CiAgICAgICAgICAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwpAQCAtMTMzLDcg
KzEwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdExpbmU+IGdyaWRMaW5l
czsKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGdhcHM7CiAgICAgICAgICAgICBWZWN0
b3I8QXJlYT4gYXJlYXM7Ci0gICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKKyAgICAg
ICAgICAgIFZlY3RvcjxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IGxhYmVsczsKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CkBAIC0yODksMzggKzI2MSw2IEBAIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0CiAgICAgcmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92ZXJsYXkgfTsKIH0KIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCB0ZXh0OwotICAgIGVuY29kZXIgPDwgbG9jYXRpb247Ci0g
ICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYXJyb3dEaXJlY3Rpb24pOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFycm93RWRnZVBvc2l0aW9uKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5OjpMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxp
Z2h0T3ZlcmxheTo6TGFiZWw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIEluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVs
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5iYWNrZ3JvdW5kQ29sb3Ip
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdWludDMyX3QgYXJyb3dEaXJlY3Rpb247Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKLQotICAgIHVpbnQzMl90IGFycm93RWRnZVBv
c2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyb3dFZGdlUG9zaXRpb24pKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIGxhYmVsLmFycm93RWRnZVBvc2l0aW9uID0gKEluc3BlY3Rv
ck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb24pYXJyb3dFZGdlUG9zaXRpb247Ci0KLSAg
ICByZXR1cm4geyBsYWJlbCB9OwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWE6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbmFtZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjc4YWM2M2ZkNzJiMmUyZmQxZGY5YjFkM2EyMmY0OTBkNTFjZDgwYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
TGFiZWwuY3BwCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JPdmVybGF5TGFiZWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsUGFkZGluZyA9IDQ7CitzdGF0
aWMgY29uc3RleHByIGZsb2F0IGxhYmVsQXJyb3dTaXplID0gNjsKKworSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYgY29udGVudHMs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
LCBBcnJvdyBhcnJvdykKKyAgICA6IG1fY29udGVudHMoV1RGTW92ZShjb250ZW50cykpCisgICAg
LCBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3Vu
ZENvbG9yKQorICAgICwgbV9hcnJvdyhhcnJvdykKK3sKK30KKworSW5zcGVjdG9yT3ZlcmxheUxh
YmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQXJyb3cgYXJy
b3cpCisgICAgOiBJbnNwZWN0b3JPdmVybGF5TGFiZWwoeyB7IHRleHQsIENvbG9yOjpibGFjayB9
IH0sIGxvY2F0aW9uLCBiYWNrZ3JvdW5kQ29sb3IsIGFycm93KQoreworfQorCitzdGF0aWMgRm9u
dENhc2NhZGUgc3lzdGVtRm9udCgpCit7CisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5c3RlbS11
aSIgfSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUo
NTAwKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7CisKKyAgICBG
b250Q2FzY2FkZSBmb250KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgMCwgMCk7CisgICAgZm9u
dC51cGRhdGUobnVsbHB0cik7CisgICAgcmV0dXJuIGZvbnQ7Cit9CisKK3N0YXRpYyBQYXRoIGJh
Y2tncm91bmRQYXRoKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEluc3BlY3Rvck92ZXJsYXlM
YWJlbDo6QXJyb3cgYXJyb3csIGZsb2F0IGFycm93U2l6ZSkKK3sKKyAgICBQYXRoIHBhdGg7Cisg
ICAgRmxvYXRTaXplIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uOworCisgICAgc3dpdGNoIChh
cnJvdy5kaXJlY3Rpb24pIHsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6
OkRpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRoIC8gMiksIC1o
ZWlnaHQgLSBhcnJvd1NpemUgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAv
IDIpLCAtYXJyb3dTaXplIH0pOworCisgICAgICAgIHN3aXRjaCAoYXJyb3cuYWxpZ25tZW50KSB7
CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpM
ZWFkaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIDAgfSk7
CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSArIGFycm93U2l6ZSwg
LWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0g
eyAod2lkdGggLyAyKSwgMCB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6CisgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CisgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IGFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6Cisg
ICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpIC0gYXJyb3dTaXplLCAtYXJy
b3dTaXplIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgMCB9
KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAtKHdpZHRoIC8g
MiksIDAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJs
YXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgLWFycm93U2l6
ZSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgLWhlaWdodCAtIGFy
cm93U2l6ZSB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOgorICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGgg
LyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0o
d2lkdGggLyAyKSwgYXJyb3dTaXplIH0pOworCisgICAgICAgIHN3aXRjaCAoYXJyb3cuYWxpZ25t
ZW50KSB7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25t
ZW50OjpMZWFkaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiks
IDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSArIGFycm93
U2l6ZSwgYXJyb3dTaXplIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRp
b24gPSB7ICh3aWR0aCAvIDIpLCAwIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKKyAgICAg
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgYXJyb3dTaXplIH0pOworICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6
CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpIC0gYXJyb3dTaXplLCBh
cnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAw
IH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IC0od2lkdGgg
LyAyKSwgMCB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpOb25lOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCBhcnJvd1Np
emUgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIGhlaWdodCArIGFy
cm93U2l6ZSB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICBwYXRoLm1vdmVUbyh7IC13aWR0
aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKworICAgICAgICBzd2l0Y2ggKGFycm93LmFs
aWdubWVudCkgeworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFs
aWdubWVudDo6TGVhZGluZzoKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6
ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRn
ZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxl
OgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7
CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7CisgICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6
OlRyYWlsaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAoaGVpZ2h0IC8gMikg
fSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAy
KSAtIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9u
ID0geyAwLCAtKGhlaWdodCAvIDIpIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93
U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtd2lkdGgg
LSBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICBw
YXRoLm1vdmVUbyh7IHdpZHRoICsgYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7CisgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgfSk7CisKKyAgICAgICAg
c3dpdGNoIChhcnJvdy5hbGlnbm1lbnQpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IGFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9KTsKKyAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgICAgIG9m
ZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFs
aWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUs
IGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKKyAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwg
KGhlaWdodCAvIDIpIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUs
IChoZWlnaHQgLyAyKSAtIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93
RWRnZVBvc2l0aW9uID0geyAwLCAtKGhlaWdodCAvIDIpIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5v
bmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOworICAgICAgICBwYXRoLmFkZExpbmVU
byh7IHdpZHRoICsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9uZToK
KyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRoIC8gMiksIC0oaGVpZ2h0IC8gMikgfSk7Cisg
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgLyAyIH0pOworICAg
ICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiB9KTsKKyAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyB3aWR0aCAvIDIsIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcGF0aC50cmFuc2xh
dGUob2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24pOworCisgICAgcmV0dXJuIHBhdGg7Cit9CisK
K1BhdGggSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgZmxvYXQgbWF4aW11bUxpbmVXaWR0aCkKK3sKKyAgICBjb25zdGV4cHIgVUNoYXIgZWxsaXBz
aXMgPSAweDIwMjY7CisKKyAgICBhdXRvIGZvbnQgPSBzeXN0ZW1Gb250KCk7CisgICAgZmxvYXQg
bGluZUhlaWdodCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5mbG9hdEhlaWdodCgpOwor
ICAgIGZsb2F0IGxpbmVEZXNjZW50ID0gZm9udC5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmZsb2F0
RGVzY2VudCgpOworCisgICAgVmVjdG9yPFRleHRSdW4+IHRleHRSdW5zOworICAgIFZlY3RvcjxD
b2xvcj4gdGV4dENvbG9yczsKKyAgICBWZWN0b3I8ZmxvYXQ+IHRleHRXaWR0aHM7CisgICAgVmVj
dG9yPHNpemVfdD4gbGluZVN0YXJ0SW5kZXhlczsKKyAgICBmbG9hdCBsb25nZXN0TGluZVdpZHRo
ID0gMDsKKyAgICBpbnQgY3VycmVudExpbmUgPSAwOworCisgICAgZmxvYXQgY3VycmVudExpbmVX
aWR0aCA9IDA7CisgICAgZm9yIChhdXRvIGNvbnRlbnQgOiBtX2NvbnRlbnRzKSB7CisgICAgICAg
IGF1dG8gbGluZXMgPSBjb250ZW50LnRleHQuc3BsaXRBbGxvd2luZ0VtcHR5RW50cmllcygnXG4n
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleGVzLmFw
cGVuZCh0ZXh0UnVucy5zaXplKCkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGgg
PSAwOworICAgICAgICAgICAgICAgICsrY3VycmVudExpbmU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGF1dG8gdGV4dCA9IGxpbmVzLmF0KGkpOworICAgICAgICAgICAgaWYgKHRleHQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRv
IHRleHRSdW4gPSBUZXh0UnVuKHRleHQpOworICAgICAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0g
Zm9udC53aWR0aCh0ZXh0UnVuKTsKKworICAgICAgICAgICAgaWYgKG1heGltdW1MaW5lV2lkdGgg
JiYgY3VycmVudExpbmVXaWR0aCArIHRleHRXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSA+IG1h
eGltdW1MaW5lV2lkdGgpIHsKKyAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZChlbGxpcHNpcyk7
CisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRMaW5lV2lkdGggKyB0ZXh0V2lkdGggKyAo
bGFiZWxQYWRkaW5nICogMikgPiBtYXhpbXVtTGluZVdpZHRoICYmIHRleHQubGVuZ3RoKCkgPiAx
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2Vjb25kIGZyb20gbGFzdCBj
aGFyYWN0ZXIgKHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBlbGxpcHNpcykgYW5kIHJlbWVhc3Vy
ZS4KKyAgICAgICAgICAgICAgICAgICAgdGV4dC5yZW1vdmUodGV4dC5sZW5ndGgoKSAtIDIpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuID0gVGV4dFJ1bih0ZXh0KTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aCh0ZXh0UnVuKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHRSdW5zLmFwcGVuZChXVEZNb3Zl
KHRleHRSdW4pKTsKKyAgICAgICAgICAgIHRleHRDb2xvcnMuYXBwZW5kKGNvbnRlbnQudGV4dENv
bG9yKTsKKyAgICAgICAgICAgIHRleHRXaWR0aHMuYXBwZW5kKHRleHRXaWR0aCk7CisKKyAgICAg
ICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gdGV4dFdpZHRoOworICAgICAgICAgICAgaWYgKGN1
cnJlbnRMaW5lV2lkdGggPiBsb25nZXN0TGluZVdpZHRoKQorICAgICAgICAgICAgICAgIGxvbmdl
c3RMaW5lV2lkdGggPSBjdXJyZW50TGluZVdpZHRoOworICAgICAgICB9CisgICAgfQorCisgICAg
ZmxvYXQgdG90YWxUZXh0SGVpZ2h0ID0gbGluZUhlaWdodCAqIChjdXJyZW50TGluZSArIDEpOwor
CisgICAgRmxvYXRQb2ludCB0ZXh0UG9zaXRpb247CisgICAgc3dpdGNoIChtX2Fycm93LmRpcmVj
dGlvbikgeworICAgIGNhc2UgQXJyb3c6OkRpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgc3dpdGNo
IChtX2Fycm93LmFsaWdubWVudCkgeworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6Okxl
YWRpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxhYmVsUGFkZGlu
ZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJv
d1NpemUgLSBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxv
YXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhl
aWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6
CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRo
IC0gbGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gdG90YWxUZXh0SGVpZ2h0IC0gbGluZURlc2Nl
bnQgLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGluZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpOb25lOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpV
cDoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVudCkgeworICAgICAgICBjYXNlIEFy
cm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9h
dFBvaW50KGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50ICsgbGFiZWxBcnJv
d1NpemUgKyBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxv
YXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50
ICsgbGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAgICB0ZXh0
UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxQYWRkaW5nLCBs
aW5lSGVpZ2h0IC0gbGluZURlc2NlbnQgKyBsYWJlbEFycm93U2l6ZSArIGxhYmVsUGFkZGluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpOb25l
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdu
bWVudCkgeworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxB
cnJvd1NpemUgLSBsYWJlbFBhZGRpbmcsIGxhYmVsUGFkZGluZyArIGxpbmVIZWlnaHQgLSBsaW5l
RGVzY2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25t
ZW50OjpNaWRkbGU6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25n
ZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQg
LSAodG90YWxUZXh0SGVpZ2h0IC8gMikgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAg
IHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLWxvbmdlc3RMaW5lV2lkdGggLSBsYWJlbEFycm93
U2l6ZSAtIGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxhYmVs
UGFkZGluZyAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAg
IHN3aXRjaCAobV9hcnJvdy5hbGlnbm1lbnQpIHsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25t
ZW50OjpMZWFkaW5nOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJl
bEFycm93U2l6ZSArIGxhYmVsUGFkZGluZywgbGFiZWxQYWRkaW5nICsgbGluZUhlaWdodCAtIGxp
bmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93OjpBbGln
bm1lbnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFi
ZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0
IC8gMikgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZs
b2F0UG9pbnQobGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSB0b3Rh
bFRleHRIZWlnaHQgLSBsYWJlbFBhZGRpbmcgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpOb25lOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0
aW9uOjpOb25lOgorICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0obG9uZ2VzdExp
bmVXaWR0aCAvIDIpLCAtKHRvdGFsVGV4dEhlaWdodCAvIDIpICsgbGluZUhlaWdodCAtIGxpbmVE
ZXNjZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUGF0aCBsYWJlbFBhdGggPSBi
YWNrZ3JvdW5kUGF0aChsb25nZXN0TGluZVdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIpLCB0b3Rh
bFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMiksIG1fYXJyb3csIGxhYmVsQXJyb3dTaXpl
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CisgICAg
Y29udGV4dC50cmFuc2xhdGUobV9sb2NhdGlvbik7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihtX2JhY2tncm91bmRDb2xvcik7CisgICAgY29udGV4dC5maWxsUGF0aChsYWJlbFBhdGgpOwor
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aChsYWJlbFBhdGgpOworCisgICAgaW50IGxpbmUgPSAwOwor
ICAgIGZsb2F0IHhPZmZzZXQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGV4dFJ1
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxpbmVTdGFydEluZGV4ZXMuY29udGFpbnMo
aSkpIHsKKyAgICAgICAgICAgIHhPZmZzZXQgPSAwOworICAgICAgICAgICAgKytsaW5lOworICAg
ICAgICB9CisKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodGV4dENvbG9ycy5hdChpKSk7
CisgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1bnMuYXQoaSksIHRleHRQb3Np
dGlvbiArIEZsb2F0UG9pbnQoeE9mZnNldCwgbGluZSAqIGxpbmVIZWlnaHQpKTsKKworICAgICAg
ICB4T2Zmc2V0ICs9IHRleHRXaWR0aHMuYXQoaSk7CisgICAgfQorCisgICAgcmV0dXJuIGxhYmVs
UGF0aDsKK30KKworRmxvYXRTaXplIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6ZXhwZWN0ZWRTaXpl
KGNvbnN0IFZlY3RvcjxDb250ZW50PiYgY29udGVudHMsIEFycm93OjpEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIGF1dG8gZm9udCA9IHN5c3RlbUZvbnQoKTsKKyAgICBmbG9hdCBsaW5lSGVp
Z2h0ID0gZm9udC5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmZsb2F0SGVpZ2h0KCk7CisKKyAgICBm
bG9hdCBsb25nZXN0TGluZVdpZHRoID0gMDsKKyAgICBpbnQgY3VycmVudExpbmUgPSAwOworCisg
ICAgZmxvYXQgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgZm9yIChhdXRvIGNvbnRlbnQgOiBj
b250ZW50cykgeworICAgICAgICBhdXRvIGxpbmVzID0gY29udGVudC50ZXh0LnNwbGl0QWxsb3dp
bmdFbXB0eUVudHJpZXMoJ1xuJyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlu
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAg
Y3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgICAgICAgICAgICAgKytjdXJyZW50TGluZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0ZXh0ID0gbGluZXMuYXQoaSk7CisgICAg
ICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZm9udC53aWR0aChUZXh0UnVuKHRleHQp
KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmVXaWR0aCkK
KyAgICAgICAgICAgICAgICBsb25nZXN0TGluZVdpZHRoID0gY3VycmVudExpbmVXaWR0aDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZsb2F0IHRvdGFsVGV4dEhlaWdodCA9IGxpbmVIZWlnaHQg
KiAoY3VycmVudExpbmUgKyAxKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2Fz
ZSBBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAgIGNhc2UgQXJyb3c6OkRpcmVjdGlvbjo6VXA6
CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQYWRkaW5nICogMiks
IHRvdGFsVGV4dEhlaWdodCArIChsYWJlbFBhZGRpbmcgKiAyKSArIGxhYmVsQXJyb3dTaXplIH07
CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICBjYXNlIEFycm93OjpEaXJl
Y3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQ
YWRkaW5nICogMikgKyBsYWJlbEFycm93U2l6ZSwgdG90YWxUZXh0SGVpZ2h0ICsgKGxhYmVsUGFk
ZGluZyAqIDIpIH07CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpOb25lOgorICAgICAgICBy
ZXR1cm4geyBsb25nZXN0TGluZVdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIpLCB0b3RhbFRleHRI
ZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMikgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitGbG9hdFNpemUgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpl
eHBlY3RlZFNpemUoY29uc3QgU3RyaW5nJiB0ZXh0LCBBcnJvdzo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpleHBlY3RlZFNpemUoeyB7
IHRleHQsIENvbG9yOjpibGFjayB9IH0sIGRpcmVjdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5TGFiZWwuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
TGFiZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NDA4ZDFlNGNhNmQ0NmZmZGYxM2VmNmM0NjJkY2YyYzhjYTk4
ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXlMYWJlbC5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBhdGg7CisKK2Ns
YXNzIEluc3BlY3Rvck92ZXJsYXlMYWJlbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RydWN0IEFycm93IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworCisgICAgICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uIDogdWludDhfdCB7
CisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgRG93biwKKyAgICAgICAgICAgIFVwLAor
ICAgICAgICAgICAgTGVmdCwKKyAgICAgICAgICAgIFJpZ2h0LAorICAgICAgICB9OworCisgICAg
ICAgIGVudW0gY2xhc3MgQWxpZ25tZW50IDogdWludDhfdCB7CisgICAgICAgICAgICBOb25lLAor
ICAgICAgICAgICAgTGVhZGluZywgLy8gUG9zaXRpb25lZCBhdCB0aGUgbGVmdC90b3Agc2lkZSBv
ZiBlZGdlLgorICAgICAgICAgICAgTWlkZGxlLCAvLyBQb3NpdGlvbmVkIGF0IHRoZSBjZW50ZXIg
b24gdGhlIGVkZ2UuCisgICAgICAgICAgICBUcmFpbGluZywgLy8gUG9zaXRpb25lZCBhdCB0aGUg
cmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCisgICAgICAgIH07CisKKyAgICAgICAgRGly
ZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgQWxpZ25tZW50IGFsaWdubWVudDsKKworICAgICAg
ICBBcnJvdyhEaXJlY3Rpb24gZGlyZWN0aW9uLCBBbGlnbm1lbnQgYWxpZ25tZW50KQorICAgICAg
ICAgICAgOiBkaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAgICAgLCBhbGlnbm1lbnQoYWxp
Z25tZW50KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYWxpZ25tZW50ICE9IEFsaWdu
bWVudDo6Tm9uZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpOb25lKTsKKyAgICAgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmCisgICAgfTsKKworICAgIHN0cnVjdCBDb250ZW50
IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIFN0
cmluZyB0ZXh0OworICAgICAgICBDb2xvciB0ZXh0Q29sb3I7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudD4gZGVjb2RlKERlY29kZXIm
KTsKKyNlbmRpZgorICAgIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnNwZWN0b3JPdmVybGF5
TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yLCBBcnJvdyk7CisgICAgSW5zcGVjdG9yT3ZlcmxheUxhYmVsKGNvbnN0
IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
LCBBcnJvdyk7CisKKyAgICBQYXRoIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgbWF4aW11
bUxpbmVXaWR0aCA9IDApOworCisgICAgc3RhdGljIEZsb2F0U2l6ZSBleHBlY3RlZFNpemUoY29u
c3QgVmVjdG9yPENvbnRlbnQ+JiwgQXJyb3c6OkRpcmVjdGlvbik7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBleHBlY3RlZFNpemUoY29uc3QgU3RyaW5nJiwgQXJyb3c6OkRpcmVjdGlvbik7CisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IGRlY29kZShEZWNvZGVyJik7
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Q29udGVudD4gbV9jb250ZW50czsKKyAg
ICBGbG9hdFBvaW50IG1fbG9jYXRpb247CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cisg
ICAgQXJyb3cgbV9hcnJvdzsKK307CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbnRlbnRzOworICAg
IGVuY29kZXIgPDwgbV9sb2NhdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fYmFja2dyb3VuZENvbG9y
OworICAgIGVuY29kZXIgPDwgbV9hcnJvdzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
Q29udGVudD4+IGNvbnRlbnRzOworICAgIGRlY29kZXIgPj4gY29udGVudHM7CisgICAgaWYgKCFj
b250ZW50cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRQb2ludD4gbG9jYXRpb247CisgICAgZGVjb2RlciA+PiBsb2NhdGlvbjsKKyAgICBp
ZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDb2xvcj4gYmFja2dyb3VuZENvbG9yOworICAgIGRlY29kZXIgPj4gYmFja2dyb3Vu
ZENvbG9yOworICAgIGlmICghYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxBcnJvdz4gYXJyb3c7CisgICAgZGVjb2RlciA+
PiBhcnJvdzsKKyAgICBpZiAoIWFycm93KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIHsgeworICAgICAgICBXVEZNb3ZlKCpjb250ZW50cyksCisgICAgICAgICps
b2NhdGlvbiwKKyAgICAgICAgKmJhY2tncm91bmRDb2xvciwKKyAgICAgICAgKmFycm93CisgICAg
fSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIEluc3BlY3Rvck92ZXJsYXlM
YWJlbDo6QXJyb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgZGlyZWN0aW9uOworICAgIGVuY29kZXIgPDwgYWxpZ25tZW50OworfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8RGlyZWN0aW9uPiBkaXJlY3Rpb247CisgICAgZGVjb2Rl
ciA+PiBkaXJlY3Rpb247CisgICAgaWYgKCFkaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEFsaWdubWVudD4gYWxpZ25tZW50OworICAg
IGRlY29kZXIgPj4gYWxpZ25tZW50OworICAgIGlmICghYWxpZ25tZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqZGlyZWN0aW9uLCAqYWxpZ25tZW50
IH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkNvbnRlbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgdGV4dDsKKyAgICBlbmNvZGVyIDw8IHRleHRDb2xvcjsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRl
bnQ+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHRleHQ7CisgICAgZGVjb2RlciA+PiB0
ZXh0OworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHRleHRDb2xvcjsKKyAgICBkZWNvZGVyID4+IHRleHRDb2xv
cjsKKyAgICBpZiAoIXRleHRDb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiB7IHsgKnRleHQsICp0ZXh0Q29sb3IgfSB9OworfQorCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJl
Y3Rpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb24sCisgICAgICAgIFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9uZSwKKyAgICAg
ICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpEb3du
LAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rp
b246OlVwLAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpE
aXJlY3Rpb246OkxlZnQsCisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6
QXJyb3c6OkRpcmVjdGlvbjo6UmlnaHQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1l
bnQ+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQsCisgICAgICAgIFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6Tm9uZSwKKyAgICAgICAg
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5n
LAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1l
bnQ6Ok1pZGRsZSwKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6QWxpZ25tZW50OjpUcmFpbGluZworICAgID47Cit9OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450828</attachid>
            <date>2022-02-03 15:08:55 -0800</date>
            <delta_ts>2022-02-12 12:46:41 -0800</delta_ts>
            <desc>Diff of Moved Drawing Code</desc>
            <filename>LabelDrawingCodeChanges.diff</filename>
            <type>text/plain</type>
            <size>20674</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1VzZXJzL3BhdHJpY2thbmdsZS9EZXNrdG9wL29yaWdpbmFsLWxhYmVsLWRy
YXdpbmcudHh0IGIvVXNlcnMvcGF0cmlja2FuZ2xlL0Rlc2t0b3AvbmV3LWxhYmVsLWRyYXdpbmcu
dHh0CmluZGV4IGFiZThmOTcxNDRhLi5kMDY3Mzk0ZTczOCAxMDA2NDQKLS0tIGEvVXNlcnMvcGF0
cmlja2FuZ2xlL0Rlc2t0b3Avb3JpZ2luYWwtbGFiZWwtZHJhd2luZy50eHQKKysrIGIvVXNlcnMv
cGF0cmlja2FuZ2xlL0Rlc2t0b3AvbmV3LWxhYmVsLWRyYXdpbmcudHh0CkBAIC0xLDQgKzEsNCBA
QAotc3RhdGljIEZvbnRDYXNjYWRlIGZvbnRGb3JMYXlvdXRMYWJlbCgpCitzdGF0aWMgRm9udENh
c2NhZGUgc3lzdGVtRm9udCgpCiB7CiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5c3RlbS11aSIg
fSk7CkBAIC0xMCwxMjEgKzEwLDEyMSBAQCBzdGF0aWMgRm9udENhc2NhZGUgZm9udEZvckxheW91
dExhYmVsKCkKICAgICByZXR1cm4gZm9udDsKIH0KIAotc3RhdGljIFBhdGggYmFja2dyb3VuZFBh
dGhGb3JMYXlvdXRMYWJlbChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGFycm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5
OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uIGFycm93RWRnZVBvc2l0aW9uLCBmbG9hdCBhcnJvd1Np
emUpCitzdGF0aWMgUGF0aCBiYWNrZ3JvdW5kUGF0aChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93IGFycm93LCBmbG9hdCBhcnJvd1NpemUpCiB7
CiAgICAgUGF0aCBwYXRoOwogICAgIEZsb2F0U2l6ZSBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlv
bjsKIAotICAgIHN3aXRjaCAoYXJyb3dEaXJlY3Rpb24pIHsKLSAgICBjYXNlIEluc3BlY3Rvck92
ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Ci0gICAgICAgIHBhdGgubW92ZVRvKHsg
LSh3aWR0aCAvIDIpLCAtaGVpZ2h0IC0gYXJyb3dTaXplfSk7CisgICAgc3dpdGNoIChhcnJvdy5k
aXJlY3Rpb24pIHsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVj
dGlvbjo6RG93bjoKKyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRoIC8gMiksIC1oZWlnaHQg
LSBhcnJvd1NpemUgfSk7CiAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCAt
YXJyb3dTaXplIH0pOwogCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFk
aW5nOgorICAgICAgICBzd2l0Y2ggKGFycm93LmFsaWdubWVudCkgeworICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TGVhZGluZzoKICAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCAwIH0pOwogICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMikgKyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CiAg
ICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAg
fTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKICAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKICAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHsgMCwgMCB9KTsKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXpl
LCAtYXJyb3dTaXplIH0pOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6CisgICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKICAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1NpemUsIC1hcnJv
d1NpemUgfSk7CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAwIH0p
OwogICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IC0od2lkdGggLyAy
KSwgMCB9OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIC1hcnJv
d1NpemUgfSk7CiAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIC1oZWlnaHQg
LSBhcnJvd1NpemUgfSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOgogICAgICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGgg
LyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOwogICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0o
d2lkdGggLyAyKSwgYXJyb3dTaXplIH0pOwogCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9z
aXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpMZWFkaW5nOgorICAgICAgICBzd2l0Y2ggKGFycm93LmFsaWdubWVudCkgeworICAg
ICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TGVhZGlu
ZzoKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCAwIH0pOwogICAg
ICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMikgKyBhcnJvd1NpemUsIGFycm93
U2l6ZSB9KTsKICAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAod2lk
dGggLyAyKSwgMCB9OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgorICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgogICAgICAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CiAgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Cisg
ICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFp
bGluZzoKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1Np
emUsIGFycm93U2l6ZSB9KTsKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8g
MiksIDAgfSk7CiAgICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgLSh3
aWR0aCAvIDIpLCAwIH07CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgorICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6Tm9uZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAod2lkdGggLyAy
KSwgYXJyb3dTaXplIH0pOwogICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCBo
ZWlnaHQgKyBhcnJvd1NpemUgfSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ6CisgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0OgogICAgICAgICBwYXRoLm1vdmVU
byh7IC13aWR0aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOwogICAgICAgICBwYXRoLmFk
ZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKIAotICAgICAgICBzd2l0Y2gg
KGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAgICAgICAgc3dpdGNoIChhcnJvdy5hbGln
bm1lbnQpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGln
bm1lbnQ6OkxlYWRpbmc6CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUs
IC0oaGVpZ2h0IC8gMikgKyBhcnJvd1NpemUgfSk7CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVU
byh7IDAsIC0oaGVpZ2h0IC8gMikgfSk7CiAgICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQ
b3NpdGlvbiA9IHsgMCwgKGhlaWdodCAvIDIpIH07CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6
CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpN
aWRkbGU6CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIGFycm93U2l6
ZSB9KTsKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKICAgICAgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9z
aXRpb246OlRyYWlsaW5nOgorICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAs
IChoZWlnaHQgLyAyKSB9KTsKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6
ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOwogICAgICAgICAgICAgb2Zmc2V0Rm9yQXJy
b3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikgfTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246
Ok5vbmU6CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25t
ZW50OjpOb25lOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7CiAgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgLXdpZHRoIC0gYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0pOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246
OkxlZnQ6CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246
OkxlZnQ6CiAgICAgICAgIHBhdGgubW92ZVRvKHsgd2lkdGggKyBhcnJvd1NpemUsIChoZWlnaHQg
LyAyKSB9KTsKICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAy
KSB9KTsKIAotICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKKyAg
ICAgICAgc3dpdGNoIChhcnJvdy5hbGlnbm1lbnQpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CiAgICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9KTsKICAg
ICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKICAgICAgICAg
ICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikgfTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246Ok1pZGRsZToKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKICAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IDAsIDAgfSk7CiAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLWFycm93
U2l6ZSB9KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgorICAgICAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CiAgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IDAsIChoZWlnaHQgLyAyKSB9KTsKICAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgYXJyb3dTaXplLCAoaGVpZ2h0IC8gMikgLSBhcnJvd1NpemUgfSk7CiAgICAg
ICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgMCwgLShoZWlnaHQgLyAyKSB9
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIp
IH0pOwogICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoICsgYXJyb3dTaXplLCAtKGhlaWdo
dCAvIDIpIH0pOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6
OkFycm93OjpEaXJlY3Rpb246Ok5vbmU6CiAgICAgICAgIHBhdGgubW92ZVRvKHsgLSh3aWR0aCAv
IDIpLCAtKGhlaWdodCAvIDIpIH0pOwogICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGgg
LyAyKSwgaGVpZ2h0IC8gMiB9KTsKICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCAvIDIs
IGhlaWdodCAvIDIgfSk7CkBAIC0xMzgsMTIzICsxMzgsMTkxIEBAIHN0YXRpYyBQYXRoIGJhY2tn
cm91bmRQYXRoRm9yTGF5b3V0TGFiZWwoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgSW5zcGVj
dG9yT3ZlCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdMYXlvdXRMYWJl
bChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFN0cmluZyBsYWJlbCwgRmxvYXRQb2ludCBwb2lu
dCwgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbiwg
SW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlv
biwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKQorUGF0aCBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBtYXhpbXVtTGluZVdpZHRoKQogewotICAgIEFTU0VSVChhcnJvd0VkZ2VQb3NpdGlvbiAhPSBJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lIHx8IGFycm93RGly
ZWN0aW9uID09IEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmUpOwor
ICAgIGNvbnN0ZXhwciBVQ2hhciBlbGxpcHNpcyA9IDB4MjAyNjsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7Ci0gICAgCi0gICAgY29udGV4dC50cmFuc2xh
dGUocG9pbnQpOwotCi0gICAgYXV0byBmb250ID0gZm9udEZvckxheW91dExhYmVsKCk7Ci0gICAg
ZmxvYXQgdGV4dEhlaWdodCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5mbG9hdEhlaWdo
dCgpOwotICAgIGZsb2F0IHRleHREZXNjZW50ID0gZm9udC5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgp
LmZsb2F0RGVzY2VudCgpOwotICAgIAotICAgIGZsb2F0IHRleHRXaWR0aCA9IGZvbnQud2lkdGgo
VGV4dFJ1bihsYWJlbCkpOwotICAgIGlmIChtYXhpbXVtV2lkdGggJiYgdGV4dFdpZHRoICsgKGxh
eW91dExhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bVdpZHRoKSB7Ci0gICAgICAgIGxhYmVsLmFw
cGVuZCgiLi4uIl9zKTsKLSAgICAgICAgd2hpbGUgKHRleHRXaWR0aCArIChsYXlvdXRMYWJlbFBh
ZGRpbmcgKiAyKSA+IG1heGltdW1XaWR0aCAmJiBsYWJlbC5sZW5ndGgoKSA+PSA0KSB7Ci0gICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIGZvdXJ0aCBmcm9tIGxhc3QgY2hhcmFjdGVyICh0aGUgY2hh
cmFjdGVyIGJlZm9yZSB0aGUgZWxsaXBzaXMpIGFuZCByZW1lYXN1cmUuCi0gICAgICAgICAgICBs
YWJlbC5yZW1vdmUobGFiZWwubGVuZ3RoKCkgLSA0KTsKLSAgICAgICAgICAgIHRleHRXaWR0aCA9
IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOworICAgIGF1dG8gZm9udCA9IHN5c3RlbUZvbnQo
KTsKKyAgICBmbG9hdCBsaW5lSGVpZ2h0ID0gZm9udC5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmZs
b2F0SGVpZ2h0KCk7CisgICAgZmxvYXQgbGluZURlc2NlbnQgPSBmb250Lm1ldHJpY3NPZlByaW1h
cnlGb250KCkuZmxvYXREZXNjZW50KCk7CisKKyAgICBWZWN0b3I8VGV4dFJ1bj4gdGV4dFJ1bnM7
CisgICAgVmVjdG9yPENvbG9yPiB0ZXh0Q29sb3JzOworICAgIFZlY3RvcjxmbG9hdD4gdGV4dFdp
ZHRoczsKKyAgICBWZWN0b3I8c2l6ZV90PiBsaW5lU3RhcnRJbmRleGVzOworICAgIGZsb2F0IGxv
bmdlc3RMaW5lV2lkdGggPSAwOworICAgIGludCBjdXJyZW50TGluZSA9IDA7CisKKyAgICBmbG9h
dCBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICBmb3IgKGF1dG8gY29udGVudCA6IG1fY29udGVu
dHMpIHsKKyAgICAgICAgYXV0byBsaW5lcyA9IGNvbnRlbnQudGV4dC5zcGxpdEFsbG93aW5nRW1w
dHlFbnRyaWVzKCdcbicpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgIGxpbmVT
dGFydEluZGV4ZXMuYXBwZW5kKHRleHRSdW5zLnNpemUoKSk7CisgICAgICAgICAgICAgICAgY3Vy
cmVudExpbmVXaWR0aCA9IDA7CisgICAgICAgICAgICAgICAgKytjdXJyZW50TGluZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0ZXh0ID0gbGluZXMuYXQoaSk7CisgICAgICAg
ICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGF1dG8gdGV4dFJ1biA9IFRleHRSdW4odGV4dCk7CisgICAgICAgICAgICBmbG9h
dCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOworCisgICAgICAgICAgICBpZiAobWF4
aW11bUxpbmVXaWR0aCAmJiBjdXJyZW50TGluZVdpZHRoICsgdGV4dFdpZHRoICsgKGxhYmVsUGFk
ZGluZyAqIDIpID4gbWF4aW11bUxpbmVXaWR0aCkgeworICAgICAgICAgICAgICAgIHRleHQuYXBw
ZW5kKGVsbGlwc2lzKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudExpbmVXaWR0aCAr
IHRleHRXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1MaW5lV2lkdGggJiYgdGV4
dC5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZWNv
bmQgZnJvbSBsYXN0IGNoYXJhY3RlciAodGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGVsbGlwc2lz
KSBhbmQgcmVtZWFzdXJlLgorICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlbW92ZSh0ZXh0Lmxl
bmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgICAgIHRleHRSdW4gPSBUZXh0UnVuKHRleHQp
OworICAgICAgICAgICAgICAgICAgICB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGV4dFJ1bnMu
YXBwZW5kKFdURk1vdmUodGV4dFJ1bikpOworICAgICAgICAgICAgdGV4dENvbG9ycy5hcHBlbmQo
Y29udGVudC50ZXh0Q29sb3IpOworICAgICAgICAgICAgdGV4dFdpZHRocy5hcHBlbmQodGV4dFdp
ZHRoKTsKKworICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCArPSB0ZXh0V2lkdGg7CisgICAg
ICAgICAgICBpZiAoY3VycmVudExpbmVXaWR0aCA+IGxvbmdlc3RMaW5lV2lkdGgpCisgICAgICAg
ICAgICAgICAgbG9uZ2VzdExpbmVXaWR0aCA9IGN1cnJlbnRMaW5lV2lkdGg7CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBmbG9hdCB0b3RhbFRleHRIZWlnaHQgPSBsaW5lSGVpZ2h0ICogKGN1cnJl
bnRMaW5lICsgMSk7CisKICAgICBGbG9hdFBvaW50IHRleHRQb3NpdGlvbjsKLSAgICBzd2l0Y2gg
KGFycm93RGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RGlyZWN0aW9uOjpEb3duOgotICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVh
ZGluZzoKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5b3V0TGFiZWxQ
YWRkaW5nLCAtdGV4dERlc2NlbnQgLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVs
UGFkZGluZyk7CisgICAgc3dpdGNoIChtX2Fycm93LmRpcmVjdGlvbikgeworICAgIGNhc2UgQXJy
b3c6OkRpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVudCkg
eworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICB0
ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFs
VGV4dEhlaWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0g
RmxvYXRQb2ludCgtKHRleHRXaWR0aCAvIDIpLCAtdGV4dERlc2NlbnQgLSBsYXlvdXRMYWJlbEFy
cm93U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZyk7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdu
bWVudDo6TWlkZGxlOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKGxv
bmdlc3RMaW5lV2lkdGggLyAyKSwgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxpbmVE
ZXNjZW50IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlv
bjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4
dFdpZHRoKSAtIGxheW91dExhYmVsUGFkZGluZywgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxB
cnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcpOworICAgICAgICBjYXNlIEFycm93OjpBbGln
bm1lbnQ6OlRyYWlsaW5nOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgt
bG9uZ2VzdExpbmVXaWR0aCAtIGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhl
aWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0VkZ2VQb3NpdGlvbjo6Tm9uZToKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpOb25l
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpVcDoKLSAgICAgICAgc3dp
dGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6
OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRp
b24gPSBGbG9hdFBvaW50KGxheW91dExhYmVsUGFkZGluZywgdGV4dEhlaWdodCAtIHRleHREZXNj
ZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcpOworICAgIGNh
c2UgQXJyb3c6OkRpcmVjdGlvbjo6VXA6CisgICAgICAgIHN3aXRjaCAobV9hcnJvdy5hbGlnbm1l
bnQpIHsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nOgorICAgICAgICAg
ICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSBs
aW5lRGVzY2VudCArIGxhYmVsQXJyb3dTaXplICsgbGFiZWxQYWRkaW5nKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9z
aXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0
ZXh0V2lkdGggLyAyKSwgdGV4dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJv
d1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcpOworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1l
bnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLShsb25n
ZXN0TGluZVdpZHRoIC8gMiksIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCArIGxhYmVsQXJyb3dT
aXplICsgbGFiZWxQYWRkaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgotICAgICAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKHRleHRXaWR0aCkgLSBsYXlvdXRMYWJl
bFBhZGRpbmcsIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCArIGxheW91dExhYmVsQXJyb3dTaXpl
ICsgbGF5b3V0TGFiZWxQYWRkaW5nKTsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpU
cmFpbGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLWxvbmdlc3RM
aW5lV2lkdGggLSBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCArIGxhYmVs
QXJyb3dTaXplICsgbGFiZWxQYWRkaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6CisgICAg
ICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6Tm9uZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtdGV4dFdp
ZHRoIC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIGxheW91dExh
YmVsUGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7CisgICAgY2FzZSBBcnJvdzo6
RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVudCkgewor
ICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICB0ZXh0
UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUg
LSBsYWJlbFBhZGRpbmcsIGxhYmVsUGFkZGluZyArIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBG
bG9hdFBvaW50KC10ZXh0V2lkdGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVs
UGFkZGluZywgKHRleHRIZWlnaHQgLyAyKSAtIHRleHREZXNjZW50KTsKKyAgICAgICAgY2FzZSBB
cnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9h
dFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcs
IGxpbmVIZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0IC8gMikgLSBsaW5lRGVzY2VudCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoLXRleHRXaWR0aCAtIGxheW91dExhYmVsQXJyb3dTaXplIC0gbGF5b3V0TGFiZWxQYWRk
aW5nLCAtbGF5b3V0TGFiZWxQYWRkaW5nIC0gdGV4dERlc2NlbnQpOworICAgICAgICBjYXNlIEFy
cm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5nOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxv
YXRQb2ludCgtbG9uZ2VzdExpbmVXaWR0aCAtIGxhYmVsQXJyb3dTaXplIC0gbGFiZWxQYWRkaW5n
LCBsaW5lSGVpZ2h0IC0gdG90YWxUZXh0SGVpZ2h0IC0gbGFiZWxQYWRkaW5nIC0gbGluZURlc2Nl
bnQpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25t
ZW50OjpOb25lOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0Ogot
ICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAg
IHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRM
YWJlbFBhZGRpbmcsIGxheW91dExhYmVsUGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2Vu
dCk7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICBzd2l0Y2ggKG1f
YXJyb3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TGVhZGlu
ZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxBcnJvd1NpemUg
KyBsYWJlbFBhZGRpbmcsIGxhYmVsUGFkZGluZyArIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBG
bG9hdFBvaW50KGxheW91dExhYmVsQXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRkaW5nLCAodGV4
dEhlaWdodCAvIDIpIC0gdGV4dERlc2NlbnQpOworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1l
bnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxB
cnJvd1NpemUgKyBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0IC8g
MikgLSBsaW5lRGVzY2VudCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoKLSAgICAgICAg
ICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlv
dXRMYWJlbFBhZGRpbmcsIC1sYXlvdXRMYWJlbFBhZGRpbmcgLSB0ZXh0RGVzY2VudCk7CisgICAg
ICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAgICB0ZXh0UG9z
aXRpb24gPSBGbG9hdFBvaW50KGxhYmVsQXJyb3dTaXplICsgbGFiZWxQYWRkaW5nLCBsaW5lSGVp
Z2h0IC0gdG90YWxUZXh0SGVpZ2h0IC0gbGFiZWxQYWRkaW5nIC0gbGluZURlc2NlbnQpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0VkZ2VQb3NpdGlvbjo6Tm9uZToKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpOb25l
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICB0
ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoIC8gMiksICh0ZXh0SGVpZ2h0IC8g
MikgLSB0ZXh0RGVzY2VudCk7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpOb25lOgorICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0obG9uZ2VzdExpbmVXaWR0aCAvIDIpLCAt
KHRvdGFsVGV4dEhlaWdodCAvIDIpICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgUGF0aCBsYWJlbFBhdGggPSBiYWNrZ3JvdW5kUGF0aEZv
ckxheW91dExhYmVsKHRleHRXaWR0aCArIChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSwgdGV4dEhl
aWdodCArIChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSwgYXJyb3dEaXJlY3Rpb24sIGFycm93RWRn
ZVBvc2l0aW9uLCBsYXlvdXRMYWJlbEFycm93U2l6ZSk7CisgICAgUGF0aCBsYWJlbFBhdGggPSBi
YWNrZ3JvdW5kUGF0aChsb25nZXN0TGluZVdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIpLCB0b3Rh
bFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMiksIG1fYXJyb3csIGxhYmVsQXJyb3dTaXpl
KTsKIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvcik7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKKyAgICBjb250ZXh0LnRyYW5z
bGF0ZShtX2xvY2F0aW9uKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fYmFja2dyb3Vu
ZENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKGxhYmVsUGF0aCk7CiAgICAgY29udGV4dC5z
dHJva2VQYXRoKGxhYmVsUGF0aCk7Ci0gICAgCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29s
b3I6OmJsYWNrKTsKLSAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4obGFiZWwpLCB0
ZXh0UG9zaXRpb24pOworCisgICAgaW50IGxpbmUgPSAwOworICAgIGZsb2F0IHhPZmZzZXQgPSAw
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGV4dFJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGxpbmVTdGFydEluZGV4ZXMuY29udGFpbnMoaSkpIHsKKyAgICAgICAgICAgIHhP
ZmZzZXQgPSAwOworICAgICAgICAgICAgKytsaW5lOworICAgICAgICB9CisKKyAgICAgICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IodGV4dENvbG9ycy5hdChpKSk7CisgICAgICAgIGNvbnRleHQuZHJh
d1RleHQoZm9udCwgdGV4dFJ1bnMuYXQoaSksIHRleHRQb3NpdGlvbiArIEZsb2F0UG9pbnQoeE9m
ZnNldCwgbGluZSAqIGxpbmVIZWlnaHQpKTsKKworICAgICAgICB4T2Zmc2V0ICs9IHRleHRXaWR0
aHMuYXQoaSk7CisgICAgfQorCisgICAgcmV0dXJuIGxhYmVsUGF0aDsKIH0KIAotc3RhdGljIEZs
b2F0U2l6ZSBleHBlY3RlZFNpemVGb3JMYXlvdXRMYWJlbChTdHJpbmcgbGFiZWwsIEluc3BlY3Rv
ck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCBtYXhpbXVtV2lk
dGggPSAwKQorRmxvYXRTaXplIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6ZXhwZWN0ZWRTaXplKGNv
bnN0IFZlY3RvcjxDb250ZW50PiYgY29udGVudHMsIEFycm93OjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewotICAgIGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOworICAgIGF1dG8gZm9u
dCA9IHN5c3RlbUZvbnQoKTsKKyAgICBmbG9hdCBsaW5lSGVpZ2h0ID0gZm9udC5tZXRyaWNzT2ZQ
cmltYXJ5Rm9udCgpLmZsb2F0SGVpZ2h0KCk7CisKKyAgICBmbG9hdCBsb25nZXN0TGluZVdpZHRo
ID0gMDsKKyAgICBpbnQgY3VycmVudExpbmUgPSAwOworCisgICAgZmxvYXQgY3VycmVudExpbmVX
aWR0aCA9IDA7CisgICAgZm9yIChhdXRvIGNvbnRlbnQgOiBjb250ZW50cykgeworICAgICAgICBh
dXRvIGxpbmVzID0gY29udGVudC50ZXh0LnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCA9IDA7
CisgICAgICAgICAgICAgICAgKytjdXJyZW50TGluZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYXV0byB0ZXh0ID0gbGluZXMuYXQoaSk7CisgICAgICAgICAgICBpZiAodGV4dC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGN1cnJlbnRM
aW5lV2lkdGggKz0gZm9udC53aWR0aChUZXh0UnVuKHRleHQpKTsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmVXaWR0aCkKKyAgICAgICAgICAgICAgICBsb25n
ZXN0TGluZVdpZHRoID0gY3VycmVudExpbmVXaWR0aDsKKyAgICAgICAgfQorICAgIH0KIAotICAg
IGZsb2F0IHRleHRIZWlnaHQgPSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCkuZmxvYXRIZWln
aHQoKTsKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250LndpZHRoKFRleHRSdW4obGFiZWwpKTsK
LSAgICBpZiAobWF4aW11bVdpZHRoICYmIHRleHRXaWR0aCArIChsYXlvdXRMYWJlbFBhZGRpbmcg
KiAyKSA+IG1heGltdW1XaWR0aCkKLSAgICAgICAgdGV4dFdpZHRoID0gbWF4aW11bVdpZHRoOwor
ICAgIGZsb2F0IHRvdGFsVGV4dEhlaWdodCA9IGxpbmVIZWlnaHQgKiAoY3VycmVudExpbmUgKyAx
KTsKIAogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
OjpMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHJldHVybiB7IHRleHRXaWR0aCArIChs
YXlvdXRMYWJlbFBhZGRpbmcgKiAyKSwgdGV4dEhlaWdodCArIChsYXlvdXRMYWJlbFBhZGRpbmcg
KiAyKSArIGxheW91dExhYmVsQXJyb3dTaXplIH07Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
OjpMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6
OkxhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgIHJldHVybiB7IHRleHRXaWR0aCAr
IChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSArIGxheW91dExhYmVsQXJyb3dTaXplLCB0ZXh0SGVp
Z2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpIH07Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICByZXR1cm4geyB0ZXh0V2lk
dGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMiksIHRleHRIZWlnaHQgKyAobGF5b3V0TGFiZWxQ
YWRkaW5nICogMikgfTsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OkRvd246CisgICAgY2Fz
ZSBBcnJvdzo6RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgcmV0dXJuIHsgbG9uZ2VzdExpbmVXaWR0
aCArIChsYWJlbFBhZGRpbmcgKiAyKSwgdG90YWxUZXh0SGVpZ2h0ICsgKGxhYmVsUGFkZGluZyAq
IDIpICsgbGFiZWxBcnJvd1NpemUgfTsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OlJpZ2h0
OgorICAgIGNhc2UgQXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIHsgbG9u
Z2VzdExpbmVXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSArIGxhYmVsQXJyb3dTaXplLCB0b3Rh
bFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMikgfTsKKyAgICBjYXNlIEFycm93OjpEaXJl
Y3Rpb246Ok5vbmU6CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQ
YWRkaW5nICogMiksIHRvdGFsVGV4dEhlaWdodCArIChsYWJlbFBhZGRpbmcgKiAyKSB9OwogICAg
IH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451791</attachid>
            <date>2022-02-12 12:46:43 -0800</date>
            <delta_ts>2022-02-14 09:13:45 -0800</delta_ts>
            <desc>[fast-cq] Patch v1.2 - Address review nits, fix non-Cocoa builds</desc>
            <filename>bug-235422-20220212124642.patch</filename>
            <type>text/plain</type>
            <size>73596</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzExYzEyMGNiMTFhM2Yz
NmE1MmNkNWQ0ZTVlNjVmYjk0ZmZmZDQ0Mi4uN2RjMDgzODQxNWIzZjhmZjkzYzI4NGUzNzJkMzk5
Yzg4MzhmMGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIyLTAyLTEyICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
bGVtZW50IHRvb2x0aXBzIGluIG92ZXJsYXlzIHNob3VsZCB1c2Ugc2FtZSBlbmNvZGFibGUvZGVj
b2RhYmxlIExhYmVsIHR5cGUgYXMgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGV2aW4gUm91c3NvLgorCisgICAgICAgIFRoZSB0b29sdGlwIGZvciBlbGVtZW50cyBwcmV2aW91
c2x5IHVzZWQgaXRzIG93biBzbGlnaHRseSBkaWZmZXJlbnQgbGFiZWxzIGZyb20gdGhvc2UgdXNl
ZCBmb3IgZ3JpZCBvdmVybGF5cywKKyAgICAgICAgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIHN1
Y2ggYSB3YXkgdG8gc3VwcG9ydCBiZWluZyBzZW50IHRvIHRoZSBVSSBwcm9jZXNzIGZvciBpT1Mg
b3ZlcmxheSBzdXBwb3J0LiBUaGlzIHBhdGNoCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3IgdGhl
IHNldHRpbmcgZGlmZmVyZW50IGNvbG9ycyBmb3IgZGlmZmVyZW50IHJ1bnMgb2YgdGV4dCBhbG9u
ZyB3aXRoIG11bHRpLWxpbmUgbGFiZWxzIHRvIGFsbG93CisgICAgICAgIHRoZSBzYW1lIGxhYmVs
IHRvIGJlIHVzZWQgZm9yIGJvdGggR3JpZCBvdmVybGF5cyBhcyB3ZWxsIGFzIGVsZW1lbnQgdG9v
bHRpcHMuCisKKyAgICAgICAgVGhlIGV4aXN0aW5nIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbGAgd2FzIG1vdmVkIHRvCisg
ICAgICAgIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWxgIGFzIGl0IGlzIG5vIGxvbmdl
ciBleGNsdXNpdmVseSB1c2VkIGZvciBncmlkcy4KKworICAgICAgICBXaXRoIHRoYXQgc3VwcG9y
dCwgd2UgY2FuIG5vdyB1c2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsIGZvciBlbGVtZW50IHRvb2x0
aXBzIHdpdGhvdXQgbmVlZGluZyBkdXBsaWNhdGVkIGxheW91dAorICAgICAgICBhbmQgZHJhd2lu
ZyBjb2RlLiBBZGRpdGlvbmFsbHksIHRoZSBmb250IHVzZWQgaW4gdGhlIHRvb2x0aXAgaXMgbm93
IGNvbnNpc3RlbnQgd2l0aCBncmlkIGxhYmVscywgd2hlcmUgYXMKKyAgICAgICAgcHJldmlvdXNs
eSB3ZSB1c2VkIGRpZmZlcmVudCBmb250IGZhbWlsaWVzIGZvciB0aGUgZ3JpZCBhbmQgZWxlbWVu
dCBsYWJlbHMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmJ1aWxkR3JpZE92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dEZvckxheW91dExhYmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBg
c3lzdGVtRm9udGAuCisgICAgICAgIChXZWJDb3JlOjpiYWNrZ3JvdW5kUGF0aEZvckxheW91dExh
YmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBgYmFja2dyb3VuZFBh
dGhgLgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRTaXplRm9yTGF5b3V0TGFiZWwpOiBNb3Zl
ZCB0byBJbnNwZWN0b3JPdmVybGF5TGFiZWwuY3BwIGFzIGBleHBlY3RlZFNpemVgLgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd0xheW91dExhYmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxh
YmVsLmNwcCBhcyBgZHJhd2AuCisgICAgICAgIChXZWJDb3JlOjpidWlsZExhYmVsKTogRGVsZXRl
ZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5
OjpMYWJlbDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsOjpkZWNv
ZGUpOiBEZWxldGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJl
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpJ
bnNwZWN0b3JPdmVybGF5TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpiYWNrZ3JvdW5kUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OmRyYXcpOgorICAgICAgICAtIFVwZGF0ZWQgbG9naWMgdG8gaGFu
ZGxlIG11bHRpcGxlIHN0cmluZ3MsIGluY2x1ZGluZyBzdHJpbmdzIGNvbnRhaW5pbmcgbmV3bGlu
ZXMuIFN0cmluZ3MgYXJlIG5vdyBlYWNoCisgICAgICAgIGNvbnZlcnRlZCB0byBhIFRleHRSdW4s
IG9yIG11bHRpcGxlIHRleHQgcnVucyBmb3IgbXVsdGktbGluZSB0ZXh0LCBlYWNoIG9mIHdoaWNo
IGlzIG1lYXN1cmVkIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgb3ZlcmFsbCBoZWlnaHQgYW5k
IHdpZHRoIG9mIHRoZSBsYWJlbCwgYXMgd2VsbCBhcyB0byBsYXRlciBpbiB0aGUgZHJhd2luZyBj
b2RlIGdpdmUgdXMgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeQorICAgICAgICB0byBhY3R1YWxs
eSBkcmF3IHRoZXNlIHN0cmluZ3MgaW4gdGhlIHByb3BlciBsb2NhdGlvbnMuCisgICAgICAgIC0g
VXNlIHRoZSB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIGZvciBkcmF3aW5nIHRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSBsYWJlbC4KKyAgICAgICAgLSBJdGVyYXRlIHRocm91Z2ggdGhlIGNvbXB1dGVk
IFRleHRSdW5zIGFuZCBkcmF3IHRoZSwsIG1vdmluZyB0byB0aGUgbmV4dCBsaW5lIGZvciBlYWNo
IGluZGV4IHRoYXQgd2UgaGFkCisgICAgICAgIHByZXZpb3VzbHkgY29tcHV0ZWQgdG8gYmUgdGhl
IHN0YXJ0IG9mIGEgbmV3IGxpbmUuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OmV4cGVjdGVkU2l6ZSk6CisgICAgICAgIC0gU2ltaWxhciB0byBgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpkcmF3YCB3ZSBuZWVkIHRvIHRha2UgaW4gdG8gYWNjb3VudCBtdWx0aS1saW5l
IHN0cmluZ3MsIGJ1dCBkbyBub3QgbmVlZCB0bworICAgICAgICBrZWVwIHRoZSBjb21wdXRlZCBU
ZXh0UnVucyBvciB0aGVpciB3aWR0aHMsIG9ubHkgdGhlIHdpZHRoIG9mIHRoZSBsb25nZXN0IGxp
bmUgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMsIHRvCisgICAgICAgIGNvbXB1dGUgdGhl
IGV4cGVjdGVkIHNpemUgb2YgdGhlIGNvbnRlbnRzIGluIGEgbGFiZWwuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QXJyb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OmRlY29kZSk6CisK
IDIwMjItMDItMTIgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBTaG93IGl0ZW0gYm91bmRzLCBnYXBzLCBhbmQgZnJl
ZSBzcGFjZSBpbiBmbGV4IG92ZXJsYXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhNGYxMzQ3ZWNm
NzUxZWZkN2E0MjVlZThjOGRhMDFjZGIwZjg5ZTRlLi40MmQ4NGJmMDYwZDU4YTk5MGU4YTgyNTRl
YTQ2NzNhMWIyMTg1YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTk1MSw2ICs5NTEsNyBAQCBz
ZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbldlYktpdC5oCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JXZWJBZ2VudEJhc2UuaAogICAgIGluc3BlY3Rvci9QYWdlRGVidWdnZXIuaAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDIwMTkwNTYyYzEzMzYxNjgzMjVhMzQ5OGU1YjMxZDQwODJkYjY3Y2IuLmZiNTcw
ZWZmODllYTdlZDgxYjdkNDc3YzI1ODU4ZWVmZjY1NTQ5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0x
NDg2LDYgKzE0ODYsNyBAQCBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGlj
LmNwcAogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbldlYktpdC5jcHAKIGluc3Bl
Y3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcAogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCitpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcAogaW5zcGVjdG9yL0luc3Bl
Y3RvclNoYWRlclByb2dyYW0uY3BwCiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAK
IGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYxZWU5NzEyNjVlZmFkNzM2
MWEyMTljYmNkY2Y4ZDI1NDJiMzdjNjAuLmEwYWU5OTQ1ZWNhNjViYmE2ZDRiMTAzNzA5ZDE3Y2U3
MmI2MGJkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTkyMSw2ICs5MjEsNyBAQAogCQkyRUNGN0FERDEwMTYyQjM4MDA0MjdE
RTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggKi87
IH07CiAJCTJFQ0Y3QUUyMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FERjEwMTYyQjU4MDA0
MjdERTcgLyogRXJyb3JFdmVudC5oICovOyB9OwogCQkyRUQ2MDlCRDExNDVCMDcxMDBDODY4NEUg
LyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oICovOyB9Owor
CQkyRUREQUY0NDI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUREQUY0MzI3OTIw
RUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYxRjQxMjFCMEVGQzAwNzI2REIy
IC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFFRTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRURFRjFGNTEyMUIwRUZDMDA3
MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRURFRjFFRjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjcxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUYxMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iUmVnaXN0cnlJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgyMzEsNiArODIzMiw4IEBACiAJCTJFQ0Y3QUUwMTAxNjJCNTgwMDQy
N0RFNyAvKiBFcnJvckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJvckV2ZW50
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkExMTQ1QjA3MTAwQzg2
ODRFIC8qIERPTUZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERPTUZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5
QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFRERBRjQzMjc5MjBFQjQwMDVEMThFNCAvKiBJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJFRERBRjQ1Mjc5MjBFQzMwMDVEMThFNCAvKiBJbnNwZWN0b3JPdmVybGF5TGFi
ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUQxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUUxMjFCMEVGQzAwNzI2
REIyIC8qIEJsb2JEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFREVGMUVGMTIxQjBFRkMwMDcy
NkRCMiAvKiBCbG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDM5Myw2ICsy
MDM5Niw4IEBACiAJCQkJNTA0QUFDQ0MxODM0NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVG
aW5kZXIuaCAqLywKIAkJCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zl
cmxheS5jcHAgKi8sCiAJCQkJN0M1MjJENEExNUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92
ZXJsYXkuaCAqLywKKwkJCQkyRUREQUY0NTI3OTIwRUMzMDA1RDE4RTQgLyogSW5zcGVjdG9yT3Zl
cmxheUxhYmVsLmNwcCAqLywKKwkJCQkyRUREQUY0MzI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVj
dG9yT3ZlcmxheUxhYmVsLmggKi8sCiAJCQkJNkE3Mjc5ODkxRjE2QzI5QjAwM0YzOUI4IC8qIElu
c3BlY3RvclNoYWRlclByb2dyYW0uY3BwICovLAogCQkJCTZBNzI3OTg4MUYxNkMyOUIwMDNGMzlC
OCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggKi8sCiAJCQkJODJBQjE3NkYxMjVDODI2NzAw
QzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuY3BwICovLApAQCAtMzUwODcsNiArMzUwOTIs
NyBAQAogCQkJCUE1QjgxQ0IxMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUwNEFBQ0NFMTgzNDQ1NTkwMEUzRDlCQyAvKiBJbnNw
ZWN0b3JOb2RlRmluZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzQzA3NTE4ODQ4MDU1MDBB
NUY4Q0EgLyogSW5zcGVjdG9yT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVEREFGNDQy
NzkyMEVCNDAwNUQxOEU0IC8qIEluc3BlY3Rvck92ZXJsYXlMYWJlbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCODFDQjIxRkFBNDQ2MjAwMzdEMUU2IC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkE3Mjc5OEIxRjE2QzI5QzAwM0YzOUI4IC8qIEluc3BlY3RvclNo
YWRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5
RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCBlMzJlODJmM2NmNzU2Yzll
OTExMWJjZTgwMGJmZmMyN2U1ZDkyMzQ0Li4zZGMyYTc3N2NmMWUyZmMyZGY3MzA2NjZkYWM4ZjFh
Zjg1MTY5YjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuY3BwCkBAIC03OSwxMCArNzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVudERhdGFT
cGFjaW5nID0gMjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVudERhdGFBcnJvd1NpemUg
PSA3Owotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBlbGVtZW50RGF0YUJvcmRlclNpemUgPSAxOwot
CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IHJ1bGVyU2l6ZSA9IDE1Owogc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBydWxlckxhYmVsU2l6ZSA9IDEzOwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxl
clN0ZXBJbmNyZW1lbnQgPSA1MDsKQEAgLTkwLDkgKzg2LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBydWxlclN0ZXBMZW5ndGggPSA4Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclN1
YlN0ZXBJbmNyZW1lbnQgPSA1Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclN1YlN0ZXBM
ZW5ndGggPSA1OwogCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91dExhYmVsUGFkZGluZyA9
IDQ7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91dExhYmVsQXJyb3dTaXplID0gNjsKLQog
c3RhdGljIGNvbnN0ZXhwciBVQ2hhciBidWxsZXQgPSAweDIwMjI7CiBzdGF0aWMgY29uc3RleHBy
IFVDaGFyIGVsbGlwc2lzID0gMHgyMDI2Owogc3RhdGljIGNvbnN0ZXhwciBVQ2hhciBtdWx0aXBs
aWNhdGlvblNpZ24gPSAweDAwRDc7CkBAIC0xMDg5LDE0MSArMTA4Miw4NSBAQCBQYXRoIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBO
b2RlJiBub2RlLCBjbwogICAgICAgICAgICAgZWxlbWVudFJvbGUgPSBheE9iamVjdC0+Y29tcHV0
ZWRSb2xlU3RyaW5nKCk7CiAgICAgfQogCi0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgIk1lbmxvIiwg
bV9wYWdlLnNldHRpbmdzKCkuZml4ZWRGb250RmFtaWx5KCkgfSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZSgxMSk7Ci0KLSAgICBGb250Q2FzY2FkZSBmb250KFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0cik7Ci0KLSAg
ICBpbnQgZm9udEhlaWdodCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5oZWlnaHQoKTsK
LQotICAgIGZsb2F0IGVsZW1lbnREYXRhV2lkdGg7Ci0gICAgZmxvYXQgZWxlbWVudERhdGFIZWln
aHQgPSBmb250SGVpZ2h0OwotICAgIGJvb2wgaGFzU2Vjb25kTGluZSA9ICFlbGVtZW50Um9sZS5p
c0VtcHR5KCk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lID0gbWFrZVN0cmluZyhl
bGVtZW50VGFnTmFtZSwgZWxlbWVudElEVmFsdWUsIGVsZW1lbnRDbGFzc1ZhbHVlLCBlbGVtZW50
UHNldWRvVHlwZSwgJyAnLCBlbGVtZW50V2lkdGgsICJweCIsICcgJywgbXVsdGlwbGljYXRpb25T
aWduLCAnICcsIGVsZW1lbnRIZWlnaHQsICJweCIpOwotICAgICAgICBhdXRvIHNlY29uZExpbmUg
PSBtYWtlU3RyaW5nKCJSb2xlICIsIGVsZW1lbnRSb2xlKTsKLQotICAgICAgICBmbG9hdCBmaXJz
dExpbmVXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihmaXJzdExpbmUpKTsKLSAgICAgICAgZmxv
YXQgc2Vjb25kTGluZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHNlY29uZExpbmUpKTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVUYWdDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsg
MTM2LCAxOCwgMTI4IH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAo
LnRhZykKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVBdHRyaWJ1dGVWYWx1ZUNvbG9y
ID0gU1JHQkE8dWludDhfdD4geyAyNiwgMjYsIDE2NiB9OyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgY29uc3RleHByIGF1dG8g
ZWxlbWVudFRpdGxlQXR0cmlidXRlTmFtZUNvbG9yID0gU1JHQkE8dWludDhfdD4geyAxNTMsIDY5
LCAwIH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0
ZS1uYW1lKQorICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZVJvbGVDb2xvciA9IFNSR0JB
PHVpbnQ4X3Q+IHsgMTcwLCAxMywgMTQ1IH07CisKKyAgICBWZWN0b3I8SW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpDb250ZW50PiBsYWJlbENvbnRlbnRzID0geworICAgICAgICB7IGVsZW1lbnRUYWdO
YW1lLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAgICAgICB7IGVsZW1lbnRJRFZhbHVlLCBl
bGVtZW50VGl0bGVBdHRyaWJ1dGVWYWx1ZUNvbG9yIH0sCisgICAgICAgIHsgZWxlbWVudENsYXNz
VmFsdWUsIGVsZW1lbnRUaXRsZUF0dHJpYnV0ZU5hbWVDb2xvciB9LAorICAgICAgICB7IGVsZW1l
bnRQc2V1ZG9UeXBlLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAgICAgICB7IG1ha2VTdHJp
bmcoZW1TcGFjZSwgZWxlbWVudFdpZHRoKSwgQ29sb3I6OmJsYWNrIH0sCisgICAgICAgIHsgbWFr
ZVN0cmluZygicHggIl9zLCBtdWx0aXBsaWNhdGlvblNpZ24sICIgIl9zKSwgQ29sb3I6OmRhcmtH
cmF5IH0sCisgICAgICAgIHsgZWxlbWVudEhlaWdodCwgQ29sb3I6OmJsYWNrIH0sCisgICAgICAg
IHsgInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkgfSwKKyAgICB9OwogCi0gICAgICAgIGVsZW1lbnRE
YXRhV2lkdGggPSBzdGQ6OmZtYXgoZmlyc3RMaW5lV2lkdGgsIHNlY29uZExpbmVXaWR0aCk7Ci0g
ICAgICAgIGlmIChoYXNTZWNvbmRMaW5lKQotICAgICAgICAgICAgZWxlbWVudERhdGFIZWlnaHQg
Kz0gZm9udEhlaWdodDsKKyAgICBpZiAoIWVsZW1lbnRSb2xlLmlzRW1wdHkoKSkgeworICAgICAg
ICBsYWJlbENvbnRlbnRzLmFwcGVuZCh7ICJcblJvbGUgIl9zLCBlbGVtZW50VGl0bGVSb2xlQ29s
b3IgfSk7CisgICAgICAgIGxhYmVsQ29udGVudHMuYXBwZW5kKHsgZWxlbWVudFJvbGUsIENvbG9y
OjpibGFjayB9KTsKICAgICB9CiAKICAgICBGcmFtZVZpZXcqIHBhZ2VWaWV3ID0gbV9wYWdlLm1h
aW5GcmFtZSgpLnZpZXcoKTsKIAogICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUgPSBwYWdlVmll
dy0+c2l6ZUZvclZpc2libGVDb250ZW50KCk7Ci0gICAgdmlld3BvcnRTaXplLmV4cGFuZCgtZWxl
bWVudERhdGFTcGFjaW5nLCAtZWxlbWVudERhdGFTcGFjaW5nKTsKLQogICAgIEZsb2F0U2l6ZSBj
b250ZW50SW5zZXQoMCwgcGFnZVZpZXctPnRvcENvbnRlbnRJbnNldChTY3JvbGxWaWV3OjpUb3BD
b250ZW50SW5zZXRUeXBlOjpXZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCkpOwotICAgIGNv
bnRlbnRJbnNldC5leHBhbmQoZWxlbWVudERhdGFTcGFjaW5nLCBlbGVtZW50RGF0YVNwYWNpbmcp
OwogICAgIGlmIChtX3Nob3dSdWxlcnMgfHwgbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVj
dGlvbikKICAgICAgICAgY29udGVudEluc2V0LmV4cGFuZChydWxlclNpemUsIHJ1bGVyU2l6ZSk7
CiAKKyAgICBhdXRvIGV4cGVjdGVkTGFiZWxTaXplID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpl
eHBlY3RlZFNpemUobGFiZWxDb250ZW50cywgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
RGlyZWN0aW9uOjpVcCk7CisgICAgYXV0byBib3VuZHNDZW50ZXJYID0gYm91bmRzLmNlbnRlcigp
LngoKTsKKworICAgIGZsb2F0IGxhYmVsWDsKKyAgICBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjpBbGlnbm1lbnQgYXJyb3dBbGlnbm1lbnQ7CisgICAgaWYgKGJvdW5kc0NlbnRlclggKyAo
ZXhwZWN0ZWRMYWJlbFNpemUud2lkdGgoKSAvIDIpIDwgdmlld3BvcnRTaXplLndpZHRoKCkKKyAg
ICAgICAgJiYgYm91bmRzQ2VudGVyWCAtIChleHBlY3RlZExhYmVsU2l6ZS53aWR0aCgpIC8gMikg
PiBjb250ZW50SW5zZXQud2lkdGgoKSkgeworICAgICAgICBsYWJlbFggPSBib3VuZHMueCgpICsg
KGJvdW5kcy53aWR0aCgpIC8gMik7CisgICAgICAgIGFycm93QWxpZ25tZW50ID0gSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU7CisgICAgfSBlbHNlIGlmIChi
b3VuZHMueCgpIDwgY29udGVudEluc2V0LndpZHRoKCkpIHsKKyAgICAgICAgbGFiZWxYID0gZm1h
eChjb250ZW50SW5zZXQud2lkdGgoKSwgYm91bmRzQ2VudGVyWCk7CisgICAgICAgIGFycm93QWxp
Z25tZW50ID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5n
OworICAgIH0gZWxzZSBpZiAoYm91bmRzLm1heFgoKSA+IHZpZXdwb3J0U2l6ZS53aWR0aCgpKSB7
CisgICAgICAgIGxhYmVsWCA9IGZtaW4odmlld3BvcnRTaXplLndpZHRoKCksIGJvdW5kc0NlbnRl
clgpOworICAgICAgICBhcnJvd0FsaWdubWVudCA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudDo6VHJhaWxpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGFiZWxYID0g
Ym91bmRzQ2VudGVyWDsKKyAgICAgICAgYXJyb3dBbGlnbm1lbnQgPSBib3VuZHNDZW50ZXJYIDwg
KHZpZXdwb3J0U2l6ZS53aWR0aCgpIC8gMikgPyBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpBbGlnbm1lbnQ6OkxlYWRpbmcgOiBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGln
bm1lbnQ6OlRyYWlsaW5nOworICAgIH0KKwogICAgIGZsb2F0IGFuY2hvclRvcCA9IGJvdW5kcy55
KCk7CiAgICAgZmxvYXQgYW5jaG9yQm90dG9tID0gYm91bmRzLm1heFkoKTsKIAotICAgIGJvb2wg
cmVuZGVyQXJyb3dVcCA9IGZhbHNlOwotICAgIGJvb2wgcmVuZGVyQXJyb3dEb3duID0gZmFsc2U7
Ci0KLSAgICBmbG9hdCBib3hXaWR0aCA9IGVsZW1lbnREYXRhV2lkdGggKyAoZWxlbWVudERhdGFT
cGFjaW5nICogMik7Ci0gICAgZmxvYXQgYm94SGVpZ2h0ID0gZWxlbWVudERhdGFBcnJvd1NpemUg
KyBlbGVtZW50RGF0YUhlaWdodCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAyKTsKLQotICAgIGZs
b2F0IGJveFggPSBib3VuZHMueCgpOwotICAgIGlmIChib3hYIDwgY29udGVudEluc2V0LndpZHRo
KCkpCi0gICAgICAgIGJveFggPSBjb250ZW50SW5zZXQud2lkdGgoKTsKLSAgICBlbHNlIGlmIChi
b3hYID4gdmlld3BvcnRTaXplLndpZHRoKCkgLSBib3hXaWR0aCkKLSAgICAgICAgYm94WCA9IHZp
ZXdwb3J0U2l6ZS53aWR0aCgpIC0gYm94V2lkdGg7Ci0gICAgZWxzZQotICAgICAgICBib3hYICs9
IGVsZW1lbnREYXRhU3BhY2luZzsKLQotICAgIGZsb2F0IGJveFk7CisgICAgZmxvYXQgbGFiZWxZ
OworICAgIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbiBhcnJvd0RpcmVj
dGlvbjsKICAgICBpZiAoYW5jaG9yVG9wID4gdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0gICAg
ICAgIGJveFkgPSB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgLSBib3hIZWlnaHQ7Ci0gICAgICAgIHJl
bmRlckFycm93RG93biA9IHRydWU7CisgICAgICAgIGxhYmVsWSA9IHZpZXdwb3J0U2l6ZS5oZWln
aHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgfSBlbHNlIGlmIChhbmNob3JCb3R0b20gPCBjb250
ZW50SW5zZXQuaGVpZ2h0KCkpIHsKLSAgICAgICAgYm94WSA9IGNvbnRlbnRJbnNldC5oZWlnaHQo
KSArIGVsZW1lbnREYXRhQXJyb3dTaXplOwotICAgICAgICByZW5kZXJBcnJvd1VwID0gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKGFuY2hvclRvcCAtIGJveEhlaWdodCAtIGVsZW1lbnREYXRhU3BhY2lu
ZyA+IGNvbnRlbnRJbnNldC5oZWlnaHQoKSkgewotICAgICAgICBib3hZID0gYW5jaG9yVG9wIC0g
Ym94SGVpZ2h0IC0gZWxlbWVudERhdGFTcGFjaW5nOwotICAgICAgICByZW5kZXJBcnJvd0Rvd24g
PSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tICsgYm94SGVpZ2h0ICsgZWxlbWVu
dERhdGFTcGFjaW5nIDwgdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIGJveFkgPSBh
bmNob3JCb3R0b20gKyBlbGVtZW50RGF0YUFycm93U2l6ZSArIGVsZW1lbnREYXRhU3BhY2luZzsK
LSAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRydWU7CisgICAgICAgIGxhYmVsWSA9IGNvbnRlbnRJ
bnNldC5oZWlnaHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOworICAgIH0gZWxzZSBpZiAoYW5jaG9yVG9wIC0g
ZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgPiBjb250ZW50SW5zZXQuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgbGFiZWxZID0gYW5jaG9yVG9wOworICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsKKyAgICB9IGVsc2UgaWYg
KGFuY2hvckJvdHRvbSArIGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpIDwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKSB7CisgICAgICAgIGxhYmVsWSA9IGFuY2hvckJvdHRvbTsKKyAgICAgICAgYXJy
b3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVw
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJveFkgPSBjb250ZW50SW5zZXQuaGVpZ2h0KCk7Ci0g
ICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7Ci0gICAgfQotCi0gICAgUGF0aCBwYXRoOwot
ICAgIHBhdGgubW92ZVRvKHsgYm94WCwgYm94WSB9KTsKLSAgICBpZiAocmVuZGVyQXJyb3dVcCkg
ewotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUg
KiAyKSwgYm94WSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnRE
YXRhQXJyb3dTaXplICogMyksIGJveFkgLSBlbGVtZW50RGF0YUFycm93U2l6ZSB9KTsKLSAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnREYXRhQXJyb3dTaXplICogNCksIGJv
eFkgfSk7CisgICAgICAgIGxhYmVsWSA9IGNvbnRlbnRJbnNldC5oZWlnaHQoKSArIGV4cGVjdGVk
TGFiZWxTaXplLmhlaWdodCgpOworICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsKICAgICB9Ci0gICAgcGF0aC5hZGRM
aW5lVG8oeyBib3hYICsgZWxlbWVudERhdGFXaWR0aCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAy
KSwgYm94WSB9KTsKLSAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyBlbGVtZW50RGF0YVdpZHRo
ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQgKyAo
ZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgaWYgKHJlbmRlckFycm93RG93bikgewot
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUgKiA0
KSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIpIH0p
OwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUg
KiAzKSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIp
ICsgZWxlbWVudERhdGFBcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgYm94
WCArIChlbGVtZW50RGF0YUFycm93U2l6ZSAqIDIpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQg
KyAoZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgfQotICAgIHBhdGguYWRkTGluZVRv
KHsgYm94WCwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAq
IDIpIH0pOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnRyYW5zbGF0ZShl
bGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBm
KTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvciA9IFNS
R0JBPHVpbnQ4X3Q+IHsgMjU1LCAyNTUsIDE5NCB9OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcik7Ci0KLSAgICBjb250ZXh0LmZpbGxQYXRoKHBh
dGgpOwotCi0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoZWxlbWVudERhdGFCb3JkZXJT
aXplKTsKLQogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJvcmRlckNvbG9yID0gQ29s
b3I6OmRhcmtHcmF5OwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZWxlbWVudFRpdGxlQm9y
ZGVyQ29sb3IpOwotCi0gICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwotCi0gICAgRmxvYXRQ
b2ludCB0ZXh0UG9zaXRpb24oYm94WCArIGVsZW1lbnREYXRhU3BhY2luZywgYm94WSAtIChlbGVt
ZW50RGF0YVNwYWNpbmcgLyAyLjBmKSArIGZvbnRIZWlnaHQpOwotICAgIGNvbnN0IGF1dG8gZHJh
d1RleHQgPSBbJl0gKGNvbnN0IFN0cmluZyYgdGV4dCwgU1JHQkE8dWludDhfdD4gY29sb3IpIHsK
LSAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKLSAgICAgICAgdGV4dFBvc2l0aW9uICs9
IGNvbnRleHQuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgdGV4dFBvc2l0aW9uKTsKLSAg
ICB9OwogCi0gICAgZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIHsgMTM2LCAxOCwgMTI4IH0pOyAv
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1Rl
eHQoZWxlbWVudElEVmFsdWUsIHsgMjYsIDI2LCAxNjYgfSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5j
IHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVt
ZW50Q2xhc3NWYWx1ZSwgeyAxNTMsIDY5LCAwIH0pOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRo
IFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNl
dWRvVHlwZSwgeyAxMzYsIDE4LCAxMjggfSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKLSAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNrKTsKLSAg
ICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7Ci0gICAgZHJhd1RleHQoInB4
Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KCIgIl9zLCBDb2xvcjo6ZGFya0dy
YXkpOwotICAgIGRyYXdUZXh0KG1ha2VTdHJpbmcobXVsdGlwbGljYXRpb25TaWduKSwgQ29sb3I6
OmRhcmtHcmF5KTsKLSAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmRhcmtHcmF5KTsKLSAgICBk
cmF3VGV4dChlbGVtZW50SGVpZ2h0LCBDb2xvcjo6YmxhY2spOwotICAgIGRyYXdUZXh0KCJweCJf
cywgQ29sb3I6OmRhcmtHcmF5KTsKLQotICAgIGlmIChoYXNTZWNvbmRMaW5lKSB7Ci0gICAgICAg
IHRleHRQb3NpdGlvbi5zZXRYKGJveFggKyBlbGVtZW50RGF0YVNwYWNpbmcpOwotICAgICAgICB0
ZXh0UG9zaXRpb24ubW92ZSgwLCBmb250SGVpZ2h0KTsKLSAgICAgICAgCi0gICAgICAgIGRyYXdU
ZXh0KCJSb2xlIl9zLCB7IDE3MCwgMTMsIDE0NSB9KTsKLSAgICAgICAgZHJhd1RleHQoIiAiX3Ms
IENvbG9yOjpibGFjayk7Ci0gICAgICAgIGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6Ymxh
Y2spOwotICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7CisgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihlbGVtZW50VGl0bGVCb3JkZXJDb2xvcik7CiAKLSAgICByZXR1cm4gcGF0
aDsKKyAgICBJbnNwZWN0b3JPdmVybGF5TGFiZWwgbGFiZWwgPSB7IFdURk1vdmUobGFiZWxDb250
ZW50cyksIHsgbGFiZWxYLCBsYWJlbFkgfSwgZWxlbWVudFRpdGxlQmFja2dyb3VuZENvbG9yLCB7
IGFycm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH07CisgICAgcmV0dXJuIGxhYmVsLmRy
YXcoY29udGV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBpbnQgaGF0Y2hTcGFjaW5n
LCBGbGlwIGZsaXApCkBAIC0xMjgzLDI2OCArMTIyMCw2IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwKICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZWZhdWx0TGF5b3V0SGF0
Y2hTcGFjaW5nLCBmbGlwKTsKIH0KIAotc3RhdGljIEZvbnRDYXNjYWRlIGZvbnRGb3JMYXlvdXRM
YWJlbCgpCi17Ci0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5c3RlbS11aSIgfSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUoNTAwKSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7Ci0KLSAgICBGb250Q2FzY2FkZSBmb250
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0
cik7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLXN0YXRpYyBQYXRoIGJhY2tncm91bmRQYXRoRm9y
TGF5b3V0TGFiZWwoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbiwgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbiwgZmxvYXQgYXJyb3dTaXplKQot
ewotICAgIFBhdGggcGF0aDsKLSAgICBGbG9hdFNpemUgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRp
b247Ci0KLSAgICBzd2l0Y2ggKGFycm93RGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICBwYXRoLm1vdmVUbyh7
IC0od2lkdGggLyAyKSwgLWhlaWdodCAtIGFycm93U2l6ZX0pOwotICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IC0od2lkdGggLyAyKSwgLWFycm93U2l6ZSB9KTsKLQotICAgICAgICBzd2l0Y2ggKGFy
cm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsg
LSh3aWR0aCAvIDIpLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRo
IC8gMikgKyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JB
cnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246
Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93
U2l6ZSB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKLSAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQ
b3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAv
IDIpIC0gYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyAod2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBv
c2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGluZVRvKHsg
KHdpZHRoIC8gMiksIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdp
ZHRoIC8gMiksIC1oZWlnaHQgLSBhcnJvd1NpemUgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHBh
dGgubW92ZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgKyBhcnJvd1NpemUgfSk7Ci0gICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBhcnJvd1NpemUgfSk7Ci0KLSAgICAgICAg
c3dpdGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICBwYXRoLmFk
ZExpbmVUbyh7IC0od2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgLSh3aWR0aCAvIDIpICsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBv
ZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6
ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwot
ICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAo
d2lkdGggLyAyKSAtIGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93
RWRnZVBvc2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5v
bmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgKHdpZHRoIC8gMiksIGFycm93U2l6ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAod2lkdGggLyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0OgotICAg
ICAgICBwYXRoLm1vdmVUbyh7IC13aWR0aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOwot
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKLQot
ICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9
KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKLSAg
ICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikg
fTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgLWFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtYXJy
b3dTaXplIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IDAsIChoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgLWFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikgfTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKLSAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtd2lkdGggLSBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikg
fSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0RpcmVjdGlvbjo6TGVmdDoKLSAgICAgICAgcGF0aC5tb3ZlVG8oeyB3aWR0aCArIGFycm93U2l6
ZSwgKGhlaWdodCAvIDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwg
KGhlaWdodCAvIDIpIH0pOwotCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsK
LSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpM
ZWFkaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIC0oaGVpZ2h0
IC8gMikgKyBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIC0o
aGVpZ2h0IC8gMikgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9
IHsgMCwgKGhlaWdodCAvIDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Ci0gICAgICAg
ICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoK
LSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgKGhlaWdodCAvIDIpIH0pOwotICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSAtIGFycm93U2l6
ZSB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAtKGhl
aWdodCAvIDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWln
aHQgLyAyKSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCArIGFycm93U2l6ZSwg
LShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICBwYXRoLm1vdmVUbyh7IC0o
d2lkdGggLyAyKSwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAt
KHdpZHRoIC8gMiksIGhlaWdodCAvIDIgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgd2lk
dGggLyAyLCBoZWlnaHQgLyAyIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8g
MiwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGF0aC5j
bG9zZVN1YnBhdGgoKTsKLSAgICBwYXRoLnRyYW5zbGF0ZShvZmZzZXRGb3JBcnJvd0VkZ2VQb3Np
dGlvbik7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotc3RhdGljIEZsb2F0U2l6ZSBleHBlY3Rl
ZFNpemVGb3JMYXlvdXRMYWJlbChTdHJpbmcgbGFiZWwsIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVs
QXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKQotewotICAg
IGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwotCi0gICAgZmxvYXQgdGV4dEhlaWdo
dCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5mbG9hdEhlaWdodCgpOwotICAgIGZsb2F0
IHRleHRXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOwotICAgIGlmIChtYXhpbXVt
V2lkdGggJiYgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bVdp
ZHRoKQotICAgICAgICB0ZXh0V2lkdGggPSBtYXhpbXVtV2lkdGg7Ci0KLSAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgewotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlv
bjo6RG93bjoKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246
OlVwOgotICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICog
MiksIHRleHRIZWlnaHQgKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMikgKyBsYXlvdXRMYWJlbEFy
cm93U2l6ZSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlv
bjo6UmlnaHQ6Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9u
OjpMZWZ0OgotICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5n
ICogMikgKyBsYXlvdXRMYWJlbEFycm93U2l6ZSwgdGV4dEhlaWdodCArIChsYXlvdXRMYWJlbFBh
ZGRpbmcgKiAyKSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVj
dGlvbjo6Tm9uZToKLSAgICAgICAgcmV0dXJuIHsgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFk
ZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpIH07Ci0gICAg
fQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIHZvaWQg
ZHJhd0xheW91dExhYmVsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU3RyaW5nIGxhYmVsLCBG
bG9hdFBvaW50IHBvaW50LCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGFy
cm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uIGFy
cm93RWRnZVBvc2l0aW9uLCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IsIGZsb2F0IG1heGltdW1XaWR0
aCA9IDApCi17Ci0gICAgQVNTRVJUKGFycm93RWRnZVBvc2l0aW9uICE9IEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmUgfHwgYXJyb3dEaXJlY3Rpb24gPT0gSW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwotICAgIAotICAgIGNvbnRleHQudHJh
bnNsYXRlKHBvaW50KTsKLQotICAgIGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwot
ICAgIGZsb2F0IHRleHRIZWlnaHQgPSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCkuZmxvYXRI
ZWlnaHQoKTsKLSAgICBmbG9hdCB0ZXh0RGVzY2VudCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZv
bnQoKS5mbG9hdERlc2NlbnQoKTsKLSAgICAKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250Lndp
ZHRoKFRleHRSdW4obGFiZWwpKTsKLSAgICBpZiAobWF4aW11bVdpZHRoICYmIHRleHRXaWR0aCAr
IChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1XaWR0aCkgewotICAgICAgICBsYWJl
bC5hcHBlbmQoIi4uLiJfcyk7Ci0gICAgICAgIHdoaWxlICh0ZXh0V2lkdGggKyAobGF5b3V0TGFi
ZWxQYWRkaW5nICogMikgPiBtYXhpbXVtV2lkdGggJiYgbGFiZWwubGVuZ3RoKCkgPj0gNCkgewot
ICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBmb3VydGggZnJvbSBsYXN0IGNoYXJhY3RlciAodGhl
IGNoYXJhY3RlciBiZWZvcmUgdGhlIGVsbGlwc2lzKSBhbmQgcmVtZWFzdXJlLgotICAgICAgICAg
ICAgbGFiZWwucmVtb3ZlKGxhYmVsLmxlbmd0aCgpIC0gNCk7Ci0gICAgICAgICAgICB0ZXh0V2lk
dGggPSBmb250LndpZHRoKFRleHRSdW4obGFiZWwpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IEZsb2F0UG9pbnQgdGV4dFBvc2l0aW9uOwotICAgIHN3aXRjaCAoYXJyb3dEaXJlY3Rpb24pIHsK
LSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Ci0g
ICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAg
dGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRMYWJlbFBhZGRpbmcsIC10ZXh0RGVzY2Vu
dCAtIGxheW91dExhYmVsQXJyb3dTaXplIC0gbGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQo
LSh0ZXh0V2lkdGggLyAyKSwgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBs
YXlvdXRMYWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVs
UGFkZGluZywgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJl
bFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRM
YWJlbFBhZGRpbmcsIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCArIGxheW91dExhYmVsQXJyb3dT
aXplICsgbGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAg
ICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0V2lkdGggLyAyKSwgdGV4
dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJl
bFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0
UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVsUGFkZGluZywg
dGV4dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRM
YWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9z
aXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgt
dGV4dFdpZHRoIC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIGxh
eW91dExhYmVsUGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpNaWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC10
ZXh0V2lkdGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZywgKHRl
eHRIZWlnaHQgLyAyKSAtIHRleHREZXNjZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5n
OgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtdGV4dFdpZHRoIC0gbGF5
b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIC1sYXlvdXRMYWJlbFBhZGRp
bmcgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICBzd2l0Y2ggKGFycm93RWRn
ZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0Vk
Z2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9p
bnQobGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcsIGxheW91dExhYmVs
UGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpN
aWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVs
QXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRkaW5nLCAodGV4dEhlaWdodCAvIDIpIC0gdGV4dERl
c2NlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9z
aXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVsQXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRk
aW5nLCAtbGF5b3V0TGFiZWxQYWRkaW5nIC0gdGV4dERlc2NlbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlv
bjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZToKLSAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKHRleHRXaWR0aCAvIDIpLCAodGV4dEhl
aWdodCAvIDIpIC0gdGV4dERlc2NlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQ
YXRoIGxhYmVsUGF0aCA9IGJhY2tncm91bmRQYXRoRm9yTGF5b3V0TGFiZWwodGV4dFdpZHRoICsg
KGxheW91dExhYmVsUGFkZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGlu
ZyAqIDIpLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9zaXRpb24sIGxheW91dExhYmVsQXJy
b3dTaXplKTsKLQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0g
ICAgY29udGV4dC5maWxsUGF0aChsYWJlbFBhdGgpOwotICAgIGNvbnRleHQuc3Ryb2tlUGF0aChs
YWJlbFBhdGgpOwotICAgIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7
Ci0gICAgY29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKGxhYmVsKSwgdGV4dFBvc2l0aW9u
KTsKLX0KLQogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRI
aWdobGlnaHRPdmVybGF5JiBncmlkT3ZlcmxheSkKIHsKICAgICBjb25zdGV4cHIgYXV0byB0cmFu
c2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yID0gQ29sb3I6OndoaXRlLmNvbG9yV2l0aEFscGhh
Qnl0ZSgyMzApOwpAQCAtMTU3MCwxMCArMTI0NSwxMCBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rv
cgogICAgIC8vIERyYXcgbGFiZWxzIG9uIHRvcCBvZiBhbGwgb3RoZXIgbGluZXMuCiAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAgZm9yIChhdXRvIGFyZWEgOiBncmlkT3Zl
cmxheS5hcmVhcykKLSAgICAgICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIGFyZWEubmFtZSwg
YXJlYS5xdWFkLmNlbnRlcigpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lLCBMYWJlbEFycm93
RWRnZVBvc2l0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcmVh
LnF1YWQuYm91bmRpbmdCb3goKS53aWR0aCgpKTsKKyAgICAgICAgSW5zcGVjdG9yT3ZlcmxheUxh
YmVsKGFyZWEubmFtZSwgYXJlYS5xdWFkLmNlbnRlcigpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dy
b3VuZENvbG9yLCB7IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9u
ZSwgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpOb25lIH0pLmRyYXco
Y29udGV4dCwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCkud2lkdGgoKSk7CiAKICAgICBmb3IgKGF1
dG8gbGFiZWwgOiBncmlkT3ZlcmxheS5sYWJlbHMpCi0gICAgICAgIGRyYXdMYXlvdXRMYWJlbChj
b250ZXh0LCBsYWJlbC50ZXh0LCBsYWJlbC5sb2NhdGlvbiwgbGFiZWwuYXJyb3dEaXJlY3Rpb24s
IGxhYmVsLmFycm93RWRnZVBvc2l0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICBsYWJlbC5kcmF3KGNvbnRleHQpOwogfQogCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYXV0aG9y
ZWRHcmlkVHJhY2tTaXplcyhOb2RlKiBub2RlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCB1bnNpZ25lZCBleHBlY3RlZFRyYWNrQ291bnQpCkBAIC0xNjc0LDE3ICsxMzQ5LDYg
QEAgc3RhdGljIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCBncmlkTGluZU5hbWVzKGNvbnN0IFJl
bmRlclN0eWxlKiByZW5kZXJTdHlsZSwgR3IKICAgICByZXR1cm4gY29tYmluZWRHcmlkTGluZU5h
bWVzOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxp
Z2h0T3ZlcmxheTo6TGFiZWwgYnVpbGRMYWJlbChTdHJpbmcgdGV4dCwgRmxvYXRQb2ludCBsb2Nh
dGlvbiwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RGlyZWN0aW9uIGFycm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRn
ZVBvc2l0aW9uIGFycm93RWRnZVBvc2l0aW9uKQotewotICAgIEluc3BlY3Rvck92ZXJsYXk6Okhp
Z2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVsOwotICAgIGxhYmVsLnRl
eHQgPSB0ZXh0OwotICAgIGxhYmVsLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgbGFiZWwuYmFj
a2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOwotICAgIGxhYmVsLmFycm93RGlyZWN0aW9u
ID0gYXJyb3dEaXJlY3Rpb247Ci0gICAgbGFiZWwuYXJyb3dFZGdlUG9zaXRpb24gPSBhcnJvd0Vk
Z2VQb3NpdGlvbjsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8SW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3Zl
cmxheTo6YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlk
T3ZlcmxheSwgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkKIHsKICAgICAvLyBJZiB0aGUgbm9k
ZSBXZWFrUHRyIGhhcyBiZWVuIGNsZWFyZWQsIHRoZW4gdGhlIG5vZGUgaXMgZ29uZSBhbmQgdGhl
cmUncyBub3RoaW5nIHRvIGRyYXcuCkBAIC0xNzcxLDQxICsxNDM1LDQxIEBAIHN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5z
cGVjdG9yT3ZlcmxhCiAgICAgICAgIH07CiAgICAgfTsKIAotICAgIGF1dG8gY29ycmVjdGVkQXJy
b3dEaXJlY3Rpb24gPSBbJl0oTGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IExhYmVsQXJyb3dEaXJlY3Rpb24g
eworICAgIGF1dG8gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24gPSBbJl0oSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIHNpemluZ0RpcmVjdGlvbikgLT4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGly
ZWN0aW9uIHsKICAgICAgICAgaWYgKChzaXppbmdEaXJlY3Rpb24gPT0gR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JDb2x1bW5zICYmIGlzV3JpdGluZ01vZGVGbGlwcGVkKSB8fCAoc2l6aW5n
RGlyZWN0aW9uID09IEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc0RpcmVj
dGlvbkZsaXBwZWQpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAg
ICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICAgICAgICAgIGRp
cmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd246CisgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpV
cDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0Rp
cmVjdGlvbjo6VXA6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVj
dGlvbjo6RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAg
ICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ7CisgICAgICAg
ICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoK
KyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpEaXJlY3Rpb246OlJpZ2h0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAgICAgICBkaXJlY3Rp
b24gPSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OworICAgICAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICAgICAgICAg
IGRpcmVjdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVm
dDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0Rp
cmVjdGlvbjo6Tm9uZToKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpB
cnJvdzo6RGlyZWN0aW9uOjpOb25lOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSkg
ewogICAgICAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNhc2UgTGFi
ZWxBcnJvd0RpcmVjdGlvbjo6RG93bjoKLSAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBMYWJl
bEFycm93RGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAgICAgICAgICAgICAgIGRpcmVjdGlv
biA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6UmlnaHQ7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246
OlVwOgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246Okxl
ZnQ7CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVj
dGlvbjo6VXA6CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxh
YmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgICAg
IGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgICAg
ICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
OjpVcDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJv
d0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJv
d0RpcmVjdGlvbjo6RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6
CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlv
bjo6Tm9uZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTgxMywxNSArMTQ3NywxNSBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAg
ICByZXR1cm4gZGlyZWN0aW9uOwogICAgIH07CiAKLSAgICBhdXRvIGNvcnJlY3RlZEFycm93RWRn
ZVBvc2l0aW9uID0gWyZdKExhYmVsQXJyb3dFZGdlUG9zaXRpb24gZWRnZVBvc2l0aW9uLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gc2l6aW5nRGlyZWN0aW9uKSAtPiBMYWJlbEFycm93RWRnZVBv
c2l0aW9uIHsKKyAgICBhdXRvIGNvcnJlY3RlZEFycm93QWxpZ25tZW50ID0gWyZdKEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudCBhbGlnbm1lbnQsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudCB7CiAgICAgICAgIGlmICgoc2l6aW5nRGlyZWN0aW9uID09IEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc1dyaXRpbmdNb2RlRmxpcHBlZCkgfHwgKHNp
emluZ0RpcmVjdGlvbiA9PSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMgJiYg
aXNEaXJlY3Rpb25GbGlwcGVkKSkgewotICAgICAgICAgICAgaWYgKGVkZ2VQb3NpdGlvbiA9PSBM
YWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBM
YWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzsKLSAgICAgICAgICAgIGlmIChlZGdlUG9z
aXRpb24gPT0gTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmcpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIExhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc7CisgICAgICAgICAgICBp
ZiAoYWxpZ25tZW50ID09IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6
TGVhZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpB
cnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzsKKyAgICAgICAgICAgIGlmIChhbGlnbm1lbnQgPT0g
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50
OjpMZWFkaW5nOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVkZ2VQb3NpdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGFsaWdubWVudDsKICAgICB9OwogCiAgICAgSW5zcGVjdG9yT3ZlcmxheTo6
SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSBncmlkSGlnaGxpZ2h0T3ZlcmxheTsKQEAg
LTE4NjUsNyArMTUyOSw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBp
ZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dUcmFja1NpemVzKSB7CiAgICAgICAgICAgICAgICAg
YXV0byBhdXRob3JlZFRyYWNrU2l6ZSA9IGkgPCBhdXRob3JlZFRyYWNrQ29sdW1uU2l6ZXMuc2l6
ZSgpID8gYXV0aG9yZWRUcmFja0NvbHVtblNpemVzW2ldIDogImF1dG8iX3M7CiAgICAgICAgICAg
ICAgICAgRmxvYXRMaW5lIHRyYWNrVG9wTGluZSA9IHsgY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCks
IGNvbHVtbkVuZExpbmUuc3RhcnQoKSB9OwotICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRP
dmVybGF5LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbChhdXRob3JlZFRyYWNrU2l6ZSwgdHJhY2tU
b3BMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxCYWNr
Z3JvdW5kQ29sb3IsIGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJyb3dEaXJlY3Rpb246
OlVwLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpLCBMYWJlbEFycm93RWRn
ZVBvc2l0aW9uOjpNaWRkbGUpKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3Zlcmxh
eS5sYWJlbHMuYXBwZW5kKHsgYXV0aG9yZWRUcmFja1NpemUsIHRyYWNrVG9wTGluZS5wb2ludEF0
UmVsYXRpdmVEaXN0YW5jZSgwLjUpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCB7
IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRp
cmVjdGlvbjo6VXAsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyksIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlIH0gfSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRMaW5l
ID0gY29sdW1uU3RhcnRMaW5lOwpAQCAtMTg4NiwyMSArMTU1MCwyMSBAQCBzdGQ6Om9wdGlvbmFs
PEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3Bl
Y3Rvck92ZXJsYQogCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byB0ZXh0ID0gbGluZUxhYmVsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhdXRv
IGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0RpcmVj
dGlvbjo6RG93biwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKLSAgICAg
ICAgICAgIGF1dG8gYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlv
bihMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
bjo6Rm9yQ29sdW1ucyk7CisgICAgICAgICAgICBhdXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVj
dGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
OjpEb3duLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOworICAgICAgICAg
ICAgYXV0byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50KEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb246OkZvckNvbHVtbnMpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAg
ICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZv
ckNvbHVtbnMpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJy
b3dBbGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFk
aW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaSA9PSBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAg
ICBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJy
b3dFZGdlUG9zaXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNv
bHVtbnMpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dB
bGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGlu
ZywgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKIAotICAgICAgICAgICAg
YXV0byBleHBlY3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQs
IGFycm93RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7
CiAgICAgICAgICAgICBhdXRvIGdhcExhYmVsUG9zaXRpb24gPSBnYXBMYWJlbExpbmUuc3RhcnQo
KTsKIAogICAgICAgICAgICAgLy8gVGhlIGFyZWEgdW5kZXIgdGhlIHdpbmRvdydzIHRvb2xiYXIg
aXMgZHJhd2FibGUsIGJ1dCBub3QgbWVhbmluZ2Z1bGx5IHZpc2libGUsIHNvIHdlIG11c3QgYWNj
b3VudCBmb3IgdGhhdCBzcGFjZS4KICAgICAgICAgICAgIGF1dG8gdG9wRWRnZUluc2V0ID0gcGFn
ZVZpZXctPnRvcENvbnRlbnRJbnNldChTY3JvbGxWaWV3OjpUb3BDb250ZW50SW5zZXRUeXBlOjpX
ZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCk7CiAgICAgICAgICAgICBpZiAoZ2FwTGFiZWxM
aW5lLnN0YXJ0KCkueSgpIC0gZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgLSB0b3BFZGdlSW5z
ZXQgKyBzY3JvbGxQb3NpdGlvbi55KCkgLSB2aWV3cG9ydEJvdW5kcy55KCkgPCAwKSB7Ci0gICAg
ICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihMYWJl
bEFycm93RGlyZWN0aW9uOjpVcCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5z
KTsKKyAgICAgICAgICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0
aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6VXAsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CiAKICAgICAgICAgICAgICAgICAvLyBTcGVj
aWFsIGNhc2UgZm9yIHRoZSBmaXJzdCBjb2x1bW4gdG8gbWFrZSBzdXJlIHRoZSBsYWJlbCB3aWxs
IGJlIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBmaXJzdCByb3cncyBsYWJlbC4KICAgICAgICAgICAg
ICAgICAvLyBUaGUgbGFiZWwgaGVpZ2h0cyB3aWxsIGJlIHRoZSBzYW1lLCBhcyB0aGV5IHVzZSB0
aGUgc2FtZSBmb250LCBzbyBtb3ZpbmcgZG93biBieSB0aGlzIGxhYmVsJ3Mgc2l6ZSB3aWxsCkBA
IC0xOTA5LDcgKzE1NzMsNyBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAgICAgICAg
ICAgICAgICBnYXBMYWJlbFBvc2l0aW9uID0gZ2FwTGFiZWxMaW5lLnBvaW50QXRBYnNvbHV0ZURp
c3RhbmNlKGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKHRl
eHQsIGdhcExhYmVsUG9zaXRpb24sIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGFy
cm93RGlyZWN0aW9uLCBhcnJvd0VkZ2VQb3NpdGlvbikpOworICAgICAgICAgICAgZ3JpZEhpZ2hs
aWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZCh7IHRleHQsIGdhcExhYmVsUG9zaXRpb24sIHRyYW5z
bHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIHsgYXJyb3dEaXJlY3Rpb24sIGFycm93QWxpZ25t
ZW50IH0gfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5NDksNyArMTYxMyw3IEBAIHN0ZDo6
b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zlcmxh
eT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNo
b3dUcmFja1NpemVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhdXRob3JlZFRyYWNrU2l6ZSA9
IGkgPCBhdXRob3JlZFRyYWNrUm93U2l6ZXMuc2l6ZSgpID8gYXV0aG9yZWRUcmFja1Jvd1NpemVz
W2ldIDogImF1dG8iX3M7CiAgICAgICAgICAgICAgICAgRmxvYXRMaW5lIHRyYWNrTGVmdExpbmUg
PSB7IHJvd1N0YXJ0TGluZS5zdGFydCgpLCByb3dFbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAg
ICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwoYXV0
aG9yZWRUcmFja1NpemUsIHRyYWNrTGVmdExpbmUucG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41
KSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgY29ycmVjdGVkQXJyb3dEaXJlY3Rp
b24oTGFiZWxBcnJvd0RpcmVjdGlvbjo6TGVmdCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpG
b3JSb3dzKSwgTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlKSk7CisgICAgICAgICAgICAg
ICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZCh7IGF1dGhvcmVkVHJhY2tTaXpl
LCB0cmFja0xlZnRMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50
TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIHsgY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0LCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb246OkZvclJvd3MpLCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6
Ok1pZGRsZSB9IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHByZXZpb3VzUm93RW5kTGluZSA9IHJvd1N0YXJ0TGluZTsKQEAgLTE5NzAsMTkgKzE2MzQsMTkg
QEAgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5PiBJbnNwZWN0b3JPdmVybGEKIAogICAgICAgICBpZiAoIWxpbmVMYWJlbC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dCA9IGxpbmVMYWJlbC50b1N0cmluZygpOwot
ICAgICAgICAgICAgYXV0byBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9u
KExhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZv
clJvd3MpOwotICAgICAgICAgICAgYXV0byBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFy
cm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICAgICAgICAgIGF1dG8gYXJyb3dEaXJlY3Rp
b24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpEaXJlY3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwor
ICAgICAgICAgICAgYXV0byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50
KEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAg
ICAgICAgICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlv
bihMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b246OkZvclJvd3MpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVk
QXJyb3dBbGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpM
ZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaSA9PSByb3dQb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBh
cnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dF
ZGdlUG9zaXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3Mp
OworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dBbGlnbm1l
bnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZywgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKIAotICAgICAgICAgICAgYXV0byBleHBl
Y3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQsIGFycm93RGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7CiAgICAgICAg
ICAgICBpZiAoZ2FwTGFiZWxQb3NpdGlvbi54KCkgLSBleHBlY3RlZExhYmVsU2l6ZS53aWR0aCgp
ICsgc2Nyb2xsUG9zaXRpb24ueCgpIC0gdmlld3BvcnRCb3VuZHMueCgpIDwgMCkKLSAgICAgICAg
ICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJy
b3dEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7Cisg
ICAgICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7CiAKLSAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVy
bGF5LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbCh0ZXh0LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFu
c2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9z
aXRpb24pKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQo
eyB0ZXh0LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9y
LCB7IGFycm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH0pOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCA1
Mjk1M2ExODNmMGNjZTExMzRiMzc1Yzc0NzhmMTMwM2NkNGJhZTcwLi4yNzY3M2NhMDdlN2M5ZDc3
ODU3MmQ0NWI1NWFmZmU4MmJiOGRkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdExpbmUu
aCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTY2LDIxICs2Nyw2IEBAIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UmLCBJbnNwZWN0b3JDbGllbnQqKTsKICAg
ICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCi0gICAgZW51bSBjbGFzcyBMYWJlbEFycm93RGlyZWN0
aW9uIHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgICAg
IExlZnQsCi0gICAgICAgIFJpZ2h0LAotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIExhYmVsQXJy
b3dFZGdlUG9zaXRpb24gewotICAgICAgICBOb25lLAotICAgICAgICBMZWFkaW5nLCAvLyBQb3Np
dGlvbmVkIGF0IHRoZSBsZWZ0L3RvcCBzaWRlIG9mIGVkZ2UuCi0gICAgICAgIE1pZGRsZSwgLy8g
UG9zaXRpb25lZCBhdCB0aGUgY2VudGVyIG9uIHRoZSBlZGdlLgotICAgICAgICBUcmFpbGluZywg
Ly8gUG9zaXRpb25lZCBhdCB0aGUgcmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCi0gICAg
fTsKLQogICAgIHN0cnVjdCBIaWdobGlnaHQgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CiAKQEAgLTEwNSwyMCArOTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0cnVj
dCBHcmlkSGlnaGxpZ2h0T3ZlcmxheSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CiAKLSAgICAgICAgICAgIHN0cnVjdCBMYWJlbCB7Ci0gICAgICAgICAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICAgICAgICAgIFN0cmlu
ZyB0ZXh0OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb247Ci0gICAgICAgICAg
ICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgIExhYmVsQXJyb3dE
aXJlY3Rpb24gYXJyb3dEaXJlY3Rpb247Ci0gICAgICAgICAgICAgICAgTGFiZWxBcnJvd0VkZ2VQ
b3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbjsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdo
dE92ZXJsYXk6OkxhYmVsPiBkZWNvZGUoRGVjb2RlciYpOwotI2VuZGlmCi0gICAgICAgICAgICB9
OwotCiAgICAgICAgICAgICBzdHJ1Y3QgQXJlYSB7CiAgICAgICAgICAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwpAQCAt
MTM0LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdExpbmU+IGdy
aWRMaW5lczsKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGdhcHM7CiAgICAgICAgICAg
ICBWZWN0b3I8QXJlYT4gYXJlYXM7Ci0gICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsK
KyAgICAgICAgICAgIFZlY3RvcjxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IGxhYmVsczsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CkBAIC0zNjEsMzggKzMzMyw2IEBAIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0CiAgICAgcmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92ZXJsYXkgfTsK
IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpIaWdo
bGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCB0ZXh0OwotICAgIGVuY29kZXIgPDwgbG9jYXRp
b247Ci0gICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYXJyb3dEaXJlY3Rpb24pOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGFycm93RWRnZVBvc2l0aW9uKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRI
aWdobGlnaHRPdmVybGF5OjpMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlk
SGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVs
IGxhYmVsOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5iYWNrZ3JvdW5k
Q29sb3IpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdWludDMyX3QgYXJyb3dEaXJlY3Rp
b247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKLQotICAgIHVpbnQzMl90IGFycm93
RWRnZVBvc2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyb3dFZGdlUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGxhYmVsLmFycm93RWRnZVBvc2l0aW9uID0gKElu
c3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb24pYXJyb3dFZGdlUG9zaXRpb247
Ci0KLSAgICByZXR1cm4geyBsYWJlbCB9OwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFy
ZWE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
TGFiZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJl
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDcyNzM1N2RiNDhiMTEzNWMzYzkyYWVjOTQ5NTljY2VmNjQ2MDQ0
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5TGFiZWwuY3BwCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsUGFkZGluZyA9IDQ7
CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsQXJyb3dTaXplID0gNjsKKworSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYgY29u
dGVudHMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBDb2xvciYgYmFja2dyb3Vu
ZENvbG9yLCBjb25zdCBBcnJvdyYgYXJyb3cpCisgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29u
dGVudHMpKQorICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAsIG1fYmFja2dyb3VuZENv
bG9yKGJhY2tncm91bmRDb2xvcikKKyAgICAsIG1fYXJyb3coYXJyb3cpCit7Cit9CisKK0luc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsKGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IsIGNvbnN0IEFycm93JiBhcnJvdykKKyAgICA6IEluc3BlY3Rvck92ZXJsYXlMYWJlbCh7IHsg
dGV4dCwgQ29sb3I6OmJsYWNrIH0gfSwgbG9jYXRpb24sIGJhY2tncm91bmRDb2xvciwgYXJyb3cp
Cit7Cit9CisKK3N0YXRpYyBGb250Q2FzY2FkZSBzeXN0ZW1Gb250KCkKK3sKKyAgICBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWxpZXMoeyAic3lzdGVtLXVpIiB9KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0
KEZvbnRTZWxlY3Rpb25WYWx1ZSg1MDApKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKDEyKTsKKworICAgIEZvbnRDYXNjYWRlIGZvbnQoV1RGTW92ZShmb250RGVzY3JpcHRp
b24pLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAgICByZXR1cm4gZm9udDsK
K30KKworc3RhdGljIFBhdGggYmFja2dyb3VuZFBhdGgoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCwgY29uc3QgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdyYgYXJyb3csIGZsb2F0IGFycm93
U2l6ZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgRmxvYXRTaXplIG9mZnNldEZvckFycm93RWRn
ZVBvc2l0aW9uOworCisgICAgc3dpdGNoIChhcnJvdy5kaXJlY3Rpb24pIHsKKyAgICBjYXNlIElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgcGF0
aC5tb3ZlVG8oeyAtKHdpZHRoIC8gMiksIC1oZWlnaHQgLSBhcnJvd1NpemUgfSk7CisgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCAtYXJyb3dTaXplIH0pOworCisgICAgICAg
IHN3aXRjaCAoYXJyb3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nOgorICAgICAgICAgICAgcGF0aC5hZGRM
aW5lVG8oeyAtKHdpZHRoIC8gMiksIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IC0od2lkdGggLyAyKSArIGFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIG9m
ZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAod2lkdGggLyAyKSwgMCB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxp
Z25tZW50OjpNaWRkbGU6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUs
IC1hcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIDAgfSk7Cisg
ICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3
aWR0aCAvIDIpIC0gYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOworICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgMCB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93
RWRnZVBvc2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6Tm9u
ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyAod2lkdGggLyAyKSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAod2lkdGggLyAyKSwgLWhlaWdodCAtIGFycm93U2l6ZSB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOgorICAg
ICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGggLyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOwor
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSwgYXJyb3dTaXplIH0pOworCisg
ICAgICAgIHN3aXRjaCAoYXJyb3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nOgorICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IC0od2lkdGggLyAyKSArIGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOworICAgICAgICAg
ICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7ICh3aWR0aCAvIDIpLCAwIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpBbGlnbm1lbnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93
U2l6ZSwgYXJyb3dTaXplIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0p
OworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6
QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
ICh3aWR0aCAvIDIpIC0gYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAwIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJy
b3dFZGdlUG9zaXRpb24gPSB7IC0od2lkdGggLyAyKSwgMCB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpO
b25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYXRoLmFkZExp
bmVUbyh7ICh3aWR0aCAvIDIpLCBhcnJvd1NpemUgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgKHdpZHRoIC8gMiksIGhlaWdodCArIGFycm93U2l6ZSB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0Ogor
ICAgICAgICBwYXRoLm1vdmVUbyh7IC13aWR0aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0p
OworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsK
KworICAgICAgICBzd2l0Y2ggKGFycm93LmFsaWdubWVudCkgeworICAgICAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TGVhZGluZzoKKyAgICAgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9
KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKKyAg
ICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAtYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IDAsIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIC1hcnJv
d1NpemUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5nOgorICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAwLCAoaGVpZ2h0IC8gMikgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVU
byh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSAtIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAg
IG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAtKGhlaWdodCAvIDIpIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyAtd2lkdGggLSBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikgfSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICBwYXRoLm1vdmVUbyh7IHdpZHRoICsgYXJyb3dTaXpl
LCAoaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAo
aGVpZ2h0IC8gMikgfSk7CisKKyAgICAgICAgc3dpdGNoIChhcnJvdy5hbGlnbm1lbnQpIHsKKyAg
ICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRp
bmc6CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWlnaHQgLyAy
KSArIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWln
aHQgLyAyKSB9KTsKKyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAw
LCAoaGVpZ2h0IC8gMikgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBh
dGguYWRkTGluZVRvKHsgMCwgMCB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJy
b3dTaXplLCAtYXJyb3dTaXplIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAg
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgKGhlaWdodCAvIDIpIH0pOworICAgICAgICAgICAg
cGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSAtIGFycm93U2l6ZSB9KTsK
KyAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAtKGhlaWdodCAv
IDIpIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtKGhlaWdodCAvIDIp
IH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoICsgYXJyb3dTaXplLCAtKGhlaWdo
dCAvIDIpIH0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9uZToKKyAgICAgICAgcGF0aC5tb3ZlVG8oeyAtKHdpZHRo
IC8gMiksIC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0
aCAvIDIpLCBoZWlnaHQgLyAyIH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8g
MiwgaGVpZ2h0IC8gMiB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCAvIDIsIC0o
aGVpZ2h0IC8gMikgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBhdGguY2xvc2VT
dWJwYXRoKCk7CisgICAgcGF0aC50cmFuc2xhdGUob2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24p
OworCisgICAgcmV0dXJuIHBhdGg7Cit9CisKK1BhdGggSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgbWF4aW11bUxpbmVXaWR0aCkKK3sK
KyAgICBjb25zdGV4cHIgVUNoYXIgZWxsaXBzaXMgPSAweDIwMjY7CisKKyAgICBhdXRvIGZvbnQg
PSBzeXN0ZW1Gb250KCk7CisgICAgZmxvYXQgbGluZUhlaWdodCA9IGZvbnQubWV0cmljc09mUHJp
bWFyeUZvbnQoKS5mbG9hdEhlaWdodCgpOworICAgIGZsb2F0IGxpbmVEZXNjZW50ID0gZm9udC5t
ZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmZsb2F0RGVzY2VudCgpOworCisgICAgVmVjdG9yPFRleHRS
dW4+IHRleHRSdW5zOworICAgIFZlY3RvcjxDb2xvcj4gdGV4dENvbG9yczsKKyAgICBWZWN0b3I8
ZmxvYXQ+IHRleHRXaWR0aHM7CisgICAgVmVjdG9yPHNpemVfdD4gbGluZVN0YXJ0SW5kZXhlczsK
KyAgICBmbG9hdCBsb25nZXN0TGluZVdpZHRoID0gMDsKKyAgICBpbnQgY3VycmVudExpbmUgPSAw
OworCisgICAgZmxvYXQgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgZm9yIChhdXRvIGNvbnRl
bnQgOiBtX2NvbnRlbnRzKSB7CisgICAgICAgIGF1dG8gbGluZXMgPSBjb250ZW50LnRleHQuc3Bs
aXRBbGxvd2luZ0VtcHR5RW50cmllcygnXG4nKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAg
ICAgICAgICBsaW5lU3RhcnRJbmRleGVzLmFwcGVuZCh0ZXh0UnVucy5zaXplKCkpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwOworICAgICAgICAgICAgICAgICsrY3VycmVu
dExpbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGV4dCA9IGxpbmVzW2ld
OworICAgICAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBhdXRvIHRleHRSdW4gPSBUZXh0UnVuKHRleHQpOworICAgICAg
ICAgICAgZmxvYXQgdGV4dFdpZHRoID0gZm9udC53aWR0aCh0ZXh0UnVuKTsKKworICAgICAgICAg
ICAgaWYgKG1heGltdW1MaW5lV2lkdGggJiYgY3VycmVudExpbmVXaWR0aCArIHRleHRXaWR0aCAr
IChsYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1MaW5lV2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICB0ZXh0LmFwcGVuZChlbGxpcHNpcyk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRM
aW5lV2lkdGggKyB0ZXh0V2lkdGggKyAobGFiZWxQYWRkaW5nICogMikgPiBtYXhpbXVtTGluZVdp
ZHRoICYmIHRleHQubGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92
ZSB0aGUgc2Vjb25kIGZyb20gbGFzdCBjaGFyYWN0ZXIgKHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRo
ZSBlbGxpcHNpcykgYW5kIHJlbWVhc3VyZS4KKyAgICAgICAgICAgICAgICAgICAgdGV4dC5yZW1v
dmUodGV4dC5sZW5ndGgoKSAtIDIpOworICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuID0gVGV4
dFJ1bih0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aCh0
ZXh0UnVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHRSdW5zLmFwcGVuZChXVEZNb3ZlKHRleHRSdW4pKTsKKyAgICAgICAgICAgIHRleHRDb2xv
cnMuYXBwZW5kKGNvbnRlbnQudGV4dENvbG9yKTsKKyAgICAgICAgICAgIHRleHRXaWR0aHMuYXBw
ZW5kKHRleHRXaWR0aCk7CisKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gdGV4dFdp
ZHRoOworICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPiBsb25nZXN0TGluZVdpZHRo
KQorICAgICAgICAgICAgICAgIGxvbmdlc3RMaW5lV2lkdGggPSBjdXJyZW50TGluZVdpZHRoOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZmxvYXQgdG90YWxUZXh0SGVpZ2h0ID0gbGluZUhlaWdo
dCAqIChjdXJyZW50TGluZSArIDEpOworCisgICAgRmxvYXRQb2ludCB0ZXh0UG9zaXRpb247Cisg
ICAgc3dpdGNoIChtX2Fycm93LmRpcmVjdGlvbikgeworICAgIGNhc2UgQXJyb3c6OkRpcmVjdGlv
bjo6RG93bjoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVudCkgeworICAgICAgICBj
YXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24g
PSBGbG9hdFBvaW50KGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAt
IGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwg
bGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxpbmVEZXNjZW50IC0gbGFiZWxBcnJvd1Np
emUgLSBsYWJlbFBhZGRpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
b3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9h
dFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gdG90
YWxUZXh0SGVpZ2h0IC0gbGluZURlc2NlbnQgLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGlu
Zyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpO
b25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdu
bWVudCkgeworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAt
IGxpbmVEZXNjZW50ICsgbGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKGxvbmdlc3RMaW5lV2lkdGggLyAyKSwg
bGluZUhlaWdodCAtIGxpbmVEZXNjZW50ICsgbGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6VHJh
aWxpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGlu
ZVdpZHRoIC0gbGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gbGluZURlc2NlbnQgKyBsYWJlbEFy
cm93U2l6ZSArIGxhYmVsUGFkZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcnJvdzo6QWxpZ25tZW50OjpOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICAg
ICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVudCkgeworICAgICAgICBjYXNlIEFycm93OjpBbGln
bm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC1s
b25nZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUgLSBsYWJlbFBhZGRpbmcsIGxhYmVsUGFk
ZGluZyArIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6CisgICAgICAgICAgICB0ZXh0UG9z
aXRpb24gPSBGbG9hdFBvaW50KC1sb25nZXN0TGluZVdpZHRoIC0gbGFiZWxBcnJvd1NpemUgLSBs
YWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0IC8gMikgLSBsaW5lRGVz
Y2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50
OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLWxvbmdl
c3RMaW5lV2lkdGggLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAt
IHRvdGFsVGV4dEhlaWdodCAtIGxhYmVsUGFkZGluZyAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycm93OjpE
aXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHN3aXRjaCAobV9hcnJvdy5hbGlnbm1lbnQpIHsKKyAg
ICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nOgorICAgICAgICAgICAgdGV4dFBv
c2l0aW9uID0gRmxvYXRQb2ludChsYWJlbEFycm93U2l6ZSArIGxhYmVsUGFkZGluZywgbGFiZWxQ
YWRkaW5nICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHRleHRQ
b3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxBcnJvd1NpemUgKyBsYWJlbFBhZGRpbmcsIGxpbmVI
ZWlnaHQgLSAodG90YWxUZXh0SGVpZ2h0IC8gMikgLSBsaW5lRGVzY2VudCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAg
ICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxBcnJvd1NpemUgKyBsYWJlbFBh
ZGRpbmcsIGxpbmVIZWlnaHQgLSB0b3RhbFRleHRIZWlnaHQgLSBsYWJlbFBhZGRpbmcgLSBsaW5l
RGVzY2VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25t
ZW50OjpOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpOb25lOgorICAgICAgICB0ZXh0UG9zaXRpb24g
PSBGbG9hdFBvaW50KC0obG9uZ2VzdExpbmVXaWR0aCAvIDIpLCAtKHRvdGFsVGV4dEhlaWdodCAv
IDIpICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgUGF0aCBsYWJlbFBhdGggPSBiYWNrZ3JvdW5kUGF0aChsb25nZXN0TGluZVdpZHRoICsg
KGxhYmVsUGFkZGluZyAqIDIpLCB0b3RhbFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMiks
IG1fYXJyb3csIGxhYmVsQXJyb3dTaXplKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2F2ZXIoY29udGV4dCk7CisgICAgY29udGV4dC50cmFuc2xhdGUobV9sb2NhdGlvbik7CisK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX2JhY2tncm91bmRDb2xvcik7CisgICAgY29udGV4
dC5maWxsUGF0aChsYWJlbFBhdGgpOworICAgIGNvbnRleHQuc3Ryb2tlUGF0aChsYWJlbFBhdGgp
OworCisgICAgaW50IGxpbmUgPSAwOworICAgIGZsb2F0IHhPZmZzZXQgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdGV4dFJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxp
bmVTdGFydEluZGV4ZXMuY29udGFpbnMoaSkpIHsKKyAgICAgICAgICAgIHhPZmZzZXQgPSAwOwor
ICAgICAgICAgICAgKytsaW5lOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IodGV4dENvbG9yc1tpXSk7CisgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4
dFJ1bnNbaV0sIHRleHRQb3NpdGlvbiArIEZsb2F0UG9pbnQoeE9mZnNldCwgbGluZSAqIGxpbmVI
ZWlnaHQpKTsKKworICAgICAgICB4T2Zmc2V0ICs9IHRleHRXaWR0aHNbaV07CisgICAgfQorCisg
ICAgcmV0dXJuIGxhYmVsUGF0aDsKK30KKworRmxvYXRTaXplIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6ZXhwZWN0ZWRTaXplKGNvbnN0IFZlY3RvcjxDb250ZW50PiYgY29udGVudHMsIEFycm93OjpE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGF1dG8gZm9udCA9IHN5c3RlbUZvbnQoKTsKKyAg
ICBmbG9hdCBsaW5lSGVpZ2h0ID0gZm9udC5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmZsb2F0SGVp
Z2h0KCk7CisKKyAgICBmbG9hdCBsb25nZXN0TGluZVdpZHRoID0gMDsKKyAgICBpbnQgY3VycmVu
dExpbmUgPSAwOworCisgICAgZmxvYXQgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgZm9yIChh
dXRvIGNvbnRlbnQgOiBjb250ZW50cykgeworICAgICAgICBhdXRvIGxpbmVzID0gY29udGVudC50
ZXh0LnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKSB7Cisg
ICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgICAgICAgICAgICAgKytj
dXJyZW50TGluZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0ZXh0ID0gbGlu
ZXNbaV07CisgICAgICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZm9udC53aWR0aChU
ZXh0UnVuKHRleHQpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2Vz
dExpbmVXaWR0aCkKKyAgICAgICAgICAgICAgICBsb25nZXN0TGluZVdpZHRoID0gY3VycmVudExp
bmVXaWR0aDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0IHRvdGFsVGV4dEhlaWdodCA9
IGxpbmVIZWlnaHQgKiAoY3VycmVudExpbmUgKyAxKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAgIGNhc2UgQXJyb3c6OkRp
cmVjdGlvbjo6VXA6CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQ
YWRkaW5nICogMiksIHRvdGFsVGV4dEhlaWdodCArIChsYWJlbFBhZGRpbmcgKiAyKSArIGxhYmVs
QXJyb3dTaXplIH07CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICBjYXNl
IEFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lk
dGggKyAobGFiZWxQYWRkaW5nICogMikgKyBsYWJlbEFycm93U2l6ZSwgdG90YWxUZXh0SGVpZ2h0
ICsgKGxhYmVsUGFkZGluZyAqIDIpIH07CisgICAgY2FzZSBBcnJvdzo6RGlyZWN0aW9uOjpOb25l
OgorICAgICAgICByZXR1cm4geyBsb25nZXN0TGluZVdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIp
LCB0b3RhbFRleHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMikgfTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGbG9hdFNpemUgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpleHBlY3RlZFNpemUoY29uc3QgU3RyaW5nJiB0ZXh0LCBBcnJvdzo6RGlyZWN0
aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpleHBl
Y3RlZFNpemUoeyB7IHRleHQsIENvbG9yOjpibGFjayB9IH0sIGRpcmVjdGlvbik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5TGFiZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGFkOWMyYzBiMjI2MzM5ZDc3MzFlODRi
OTk1YzkyODkzOWVjOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNz
IFBhdGg7CisKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXlMYWJlbCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RydWN0IEFycm93IHsKKyAgICAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIGVudW0gY2xhc3MgRGlyZWN0aW9u
IDogdWludDhfdCB7CisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgRG93biwKKyAgICAg
ICAgICAgIFVwLAorICAgICAgICAgICAgTGVmdCwKKyAgICAgICAgICAgIFJpZ2h0LAorICAgICAg
ICB9OworCisgICAgICAgIGVudW0gY2xhc3MgQWxpZ25tZW50IDogdWludDhfdCB7CisgICAgICAg
ICAgICBOb25lLAorICAgICAgICAgICAgTGVhZGluZywgLy8gUG9zaXRpb25lZCBhdCB0aGUgbGVm
dC90b3Agc2lkZSBvZiBlZGdlLgorICAgICAgICAgICAgTWlkZGxlLCAvLyBQb3NpdGlvbmVkIGF0
IHRoZSBjZW50ZXIgb24gdGhlIGVkZ2UuCisgICAgICAgICAgICBUcmFpbGluZywgLy8gUG9zaXRp
b25lZCBhdCB0aGUgcmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCisgICAgICAgIH07CisK
KyAgICAgICAgRGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgQWxpZ25tZW50IGFsaWdubWVu
dDsKKworICAgICAgICBBcnJvdyhEaXJlY3Rpb24gZGlyZWN0aW9uLCBBbGlnbm1lbnQgYWxpZ25t
ZW50KQorICAgICAgICAgICAgOiBkaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAgICAgLCBh
bGlnbm1lbnQoYWxpZ25tZW50KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYWxpZ25t
ZW50ICE9IEFsaWdubWVudDo6Tm9uZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpOb25lKTsK
KyAgICAgICAgfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmCisgICAgfTsKKworICAgIHN0
cnVjdCBDb250ZW50IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
CisgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBDb2xvciB0ZXh0Q29sb3I7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudD4gZGVj
b2RlKERlY29kZXImKTsKKyNlbmRpZgorICAgIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnNw
ZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBjb25zdCBBcnJvdyYpOworICAgIEluc3BlY3Rv
ck92ZXJsYXlMYWJlbChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvciwgY29uc3QgQXJyb3cmKTsKKworICAgIFBhdGggZHJhdyhHcmFw
aGljc0NvbnRleHQmLCBmbG9hdCBtYXhpbXVtTGluZVdpZHRoID0gMCk7CisKKyAgICBzdGF0aWMg
RmxvYXRTaXplIGV4cGVjdGVkU2l6ZShjb25zdCBWZWN0b3I8Q29udGVudD4mLCBBcnJvdzo6RGly
ZWN0aW9uKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGV4cGVjdGVkU2l6ZShjb25zdCBTdHJpbmcm
LCBBcnJvdzo6RGlyZWN0aW9uKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJs
YXlMYWJlbD4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxDb250ZW50PiBtX2NvbnRlbnRzOworICAgIEZsb2F0UG9pbnQgbV9sb2NhdGlvbjsKKyAgICBD
b2xvciBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBBcnJvdyBtX2Fycm93OworfTsKKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fY29udGVudHM7CisgICAgZW5jb2RlciA8PCBtX2xvY2F0aW9uOworICAgIGVu
Y29kZXIgPDwgbV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgZW5jb2RlciA8PCBtX2Fycm93OworfQor
Cit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXlM
YWJlbD4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxDb250ZW50Pj4gY29udGVudHM7CisgICAgZGVjb2Rl
ciA+PiBjb250ZW50czsKKyAgICBpZiAoIWNvbnRlbnRzKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBsb2NhdGlvbjsKKyAgICBk
ZWNvZGVyID4+IGxvY2F0aW9uOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBiYWNrZ3JvdW5kQ29sb3I7
CisgICAgZGVjb2RlciA+PiBiYWNrZ3JvdW5kQ29sb3I7CisgICAgaWYgKCFiYWNrZ3JvdW5kQ29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEFy
cm93PiBhcnJvdzsKKyAgICBkZWNvZGVyID4+IGFycm93OworICAgIGlmICghYXJyb3cpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7CisgICAgICAgIFdURk1v
dmUoKmNvbnRlbnRzKSwKKyAgICAgICAgKmxvY2F0aW9uLAorICAgICAgICAqYmFja2dyb3VuZENv
bG9yLAorICAgICAgICAqYXJyb3cKKyAgICB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBkaXJlY3Rpb247CisgICAgZW5jb2RlciA8
PCBhbGlnbm1lbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdz4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxEaXJlY3Rp
b24+IGRpcmVjdGlvbjsKKyAgICBkZWNvZGVyID4+IGRpcmVjdGlvbjsKKyAgICBpZiAoIWRpcmVj
dGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
QWxpZ25tZW50PiBhbGlnbm1lbnQ7CisgICAgZGVjb2RlciA+PiBhbGlnbm1lbnQ7CisgICAgaWYg
KCFhbGlnbm1lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
eyB7ICpkaXJlY3Rpb24sICphbGlnbm1lbnQgfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0ZXh0OworICAgIGVuY29kZXIgPDwg
dGV4dENvbG9yOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPElu
c3BlY3Rvck92ZXJsYXlMYWJlbDo6Q29udGVudD4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250
ZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4gdGV4dDsKKyAgICBkZWNvZGVyID4+IHRleHQ7CisgICAgaWYgKCF0ZXh0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gdGV4dENvbG9y
OworICAgIGRlY29kZXIgPj4gdGV4dENvbG9yOworICAgIGlmICghdGV4dENvbG9yKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqdGV4dCwgKnRleHRDb2xv
ciB9IH07Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6
OkRpcmVjdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6RGlyZWN0aW9uOjpOb25lLAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd24sCisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6VXAsCisgICAgICAgIFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVmdCwKKyAgICAgICAgV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpSaWdodAorICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudD4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFs
aWdubWVudCwKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
QWxpZ25tZW50OjpOb25lLAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6
OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmcsCisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLAorICAgICAgICBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5nCisgICAgPjsK
K307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451911</attachid>
            <date>2022-02-14 09:13:48 -0800</date>
            <delta_ts>2022-02-14 15:00:28 -0800</delta_ts>
            <desc>[fast-cq] Patch v1.3 - Address additional feedback</desc>
            <filename>bug-235422-20220214091347.patch</filename>
            <type>text/plain</type>
            <size>73505</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzExYzEyMGNiMTFhM2Yz
NmE1MmNkNWQ0ZTVlNjVmYjk0ZmZmZDQ0Mi4uN2RjMDgzODQxNWIzZjhmZjkzYzI4NGUzNzJkMzk5
Yzg4MzhmMGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIyLTAyLTEyICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
bGVtZW50IHRvb2x0aXBzIGluIG92ZXJsYXlzIHNob3VsZCB1c2Ugc2FtZSBlbmNvZGFibGUvZGVj
b2RhYmxlIExhYmVsIHR5cGUgYXMgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGV2aW4gUm91c3NvLgorCisgICAgICAgIFRoZSB0b29sdGlwIGZvciBlbGVtZW50cyBwcmV2aW91
c2x5IHVzZWQgaXRzIG93biBzbGlnaHRseSBkaWZmZXJlbnQgbGFiZWxzIGZyb20gdGhvc2UgdXNl
ZCBmb3IgZ3JpZCBvdmVybGF5cywKKyAgICAgICAgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIHN1
Y2ggYSB3YXkgdG8gc3VwcG9ydCBiZWluZyBzZW50IHRvIHRoZSBVSSBwcm9jZXNzIGZvciBpT1Mg
b3ZlcmxheSBzdXBwb3J0LiBUaGlzIHBhdGNoCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3IgdGhl
IHNldHRpbmcgZGlmZmVyZW50IGNvbG9ycyBmb3IgZGlmZmVyZW50IHJ1bnMgb2YgdGV4dCBhbG9u
ZyB3aXRoIG11bHRpLWxpbmUgbGFiZWxzIHRvIGFsbG93CisgICAgICAgIHRoZSBzYW1lIGxhYmVs
IHRvIGJlIHVzZWQgZm9yIGJvdGggR3JpZCBvdmVybGF5cyBhcyB3ZWxsIGFzIGVsZW1lbnQgdG9v
bHRpcHMuCisKKyAgICAgICAgVGhlIGV4aXN0aW5nIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbGAgd2FzIG1vdmVkIHRvCisg
ICAgICAgIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWxgIGFzIGl0IGlzIG5vIGxvbmdl
ciBleGNsdXNpdmVseSB1c2VkIGZvciBncmlkcy4KKworICAgICAgICBXaXRoIHRoYXQgc3VwcG9y
dCwgd2UgY2FuIG5vdyB1c2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsIGZvciBlbGVtZW50IHRvb2x0
aXBzIHdpdGhvdXQgbmVlZGluZyBkdXBsaWNhdGVkIGxheW91dAorICAgICAgICBhbmQgZHJhd2lu
ZyBjb2RlLiBBZGRpdGlvbmFsbHksIHRoZSBmb250IHVzZWQgaW4gdGhlIHRvb2x0aXAgaXMgbm93
IGNvbnNpc3RlbnQgd2l0aCBncmlkIGxhYmVscywgd2hlcmUgYXMKKyAgICAgICAgcHJldmlvdXNs
eSB3ZSB1c2VkIGRpZmZlcmVudCBmb250IGZhbWlsaWVzIGZvciB0aGUgZ3JpZCBhbmQgZWxlbWVu
dCBsYWJlbHMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmJ1aWxkR3JpZE92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dEZvckxheW91dExhYmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBg
c3lzdGVtRm9udGAuCisgICAgICAgIChXZWJDb3JlOjpiYWNrZ3JvdW5kUGF0aEZvckxheW91dExh
YmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcCBhcyBgYmFja2dyb3VuZFBh
dGhgLgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRTaXplRm9yTGF5b3V0TGFiZWwpOiBNb3Zl
ZCB0byBJbnNwZWN0b3JPdmVybGF5TGFiZWwuY3BwIGFzIGBleHBlY3RlZFNpemVgLgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd0xheW91dExhYmVsKTogTW92ZWQgdG8gSW5zcGVjdG9yT3ZlcmxheUxh
YmVsLmNwcCBhcyBgZHJhd2AuCisgICAgICAgIChXZWJDb3JlOjpidWlsZExhYmVsKTogRGVsZXRl
ZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5
OjpMYWJlbDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsOjpkZWNv
ZGUpOiBEZWxldGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJl
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpJ
bnNwZWN0b3JPdmVybGF5TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpiYWNrZ3JvdW5kUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OmRyYXcpOgorICAgICAgICAtIFVwZGF0ZWQgbG9naWMgdG8gaGFu
ZGxlIG11bHRpcGxlIHN0cmluZ3MsIGluY2x1ZGluZyBzdHJpbmdzIGNvbnRhaW5pbmcgbmV3bGlu
ZXMuIFN0cmluZ3MgYXJlIG5vdyBlYWNoCisgICAgICAgIGNvbnZlcnRlZCB0byBhIFRleHRSdW4s
IG9yIG11bHRpcGxlIHRleHQgcnVucyBmb3IgbXVsdGktbGluZSB0ZXh0LCBlYWNoIG9mIHdoaWNo
IGlzIG1lYXN1cmVkIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgb3ZlcmFsbCBoZWlnaHQgYW5k
IHdpZHRoIG9mIHRoZSBsYWJlbCwgYXMgd2VsbCBhcyB0byBsYXRlciBpbiB0aGUgZHJhd2luZyBj
b2RlIGdpdmUgdXMgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeQorICAgICAgICB0byBhY3R1YWxs
eSBkcmF3IHRoZXNlIHN0cmluZ3MgaW4gdGhlIHByb3BlciBsb2NhdGlvbnMuCisgICAgICAgIC0g
VXNlIHRoZSB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIGZvciBkcmF3aW5nIHRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSBsYWJlbC4KKyAgICAgICAgLSBJdGVyYXRlIHRocm91Z2ggdGhlIGNvbXB1dGVk
IFRleHRSdW5zIGFuZCBkcmF3IHRoZSwsIG1vdmluZyB0byB0aGUgbmV4dCBsaW5lIGZvciBlYWNo
IGluZGV4IHRoYXQgd2UgaGFkCisgICAgICAgIHByZXZpb3VzbHkgY29tcHV0ZWQgdG8gYmUgdGhl
IHN0YXJ0IG9mIGEgbmV3IGxpbmUuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OmV4cGVjdGVkU2l6ZSk6CisgICAgICAgIC0gU2ltaWxhciB0byBgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpkcmF3YCB3ZSBuZWVkIHRvIHRha2UgaW4gdG8gYWNjb3VudCBtdWx0aS1saW5l
IHN0cmluZ3MsIGJ1dCBkbyBub3QgbmVlZCB0bworICAgICAgICBrZWVwIHRoZSBjb21wdXRlZCBU
ZXh0UnVucyBvciB0aGVpciB3aWR0aHMsIG9ubHkgdGhlIHdpZHRoIG9mIHRoZSBsb25nZXN0IGxp
bmUgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMsIHRvCisgICAgICAgIGNvbXB1dGUgdGhl
IGV4cGVjdGVkIHNpemUgb2YgdGhlIGNvbnRlbnRzIGluIGEgbGFiZWwuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QXJyb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OmRlY29kZSk6CisK
IDIwMjItMDItMTIgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBTaG93IGl0ZW0gYm91bmRzLCBnYXBzLCBhbmQgZnJl
ZSBzcGFjZSBpbiBmbGV4IG92ZXJsYXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhNGYxMzQ3ZWNm
NzUxZWZkN2E0MjVlZThjOGRhMDFjZGIwZjg5ZTRlLi40MmQ4NGJmMDYwZDU4YTk5MGU4YTgyNTRl
YTQ2NzNhMWIyMTg1YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTk1MSw2ICs5NTEsNyBAQCBz
ZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbldlYktpdC5oCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5TGFiZWwuaAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JXZWJBZ2VudEJhc2UuaAogICAgIGluc3BlY3Rvci9QYWdlRGVidWdnZXIuaAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDIwMTkwNTYyYzEzMzYxNjgzMjVhMzQ5OGU1YjMxZDQwODJkYjY3Y2IuLmZiNTcw
ZWZmODllYTdlZDgxYjdkNDc3YzI1ODU4ZWVmZjY1NTQ5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0x
NDg2LDYgKzE0ODYsNyBAQCBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGlj
LmNwcAogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbldlYktpdC5jcHAKIGluc3Bl
Y3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcAogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCitpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcAogaW5zcGVjdG9yL0luc3Bl
Y3RvclNoYWRlclByb2dyYW0uY3BwCiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAK
IGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYxZWU5NzEyNjVlZmFkNzM2
MWEyMTljYmNkY2Y4ZDI1NDJiMzdjNjAuLmEwYWU5OTQ1ZWNhNjViYmE2ZDRiMTAzNzA5ZDE3Y2U3
MmI2MGJkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTkyMSw2ICs5MjEsNyBAQAogCQkyRUNGN0FERDEwMTYyQjM4MDA0MjdE
RTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggKi87
IH07CiAJCTJFQ0Y3QUUyMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FERjEwMTYyQjU4MDA0
MjdERTcgLyogRXJyb3JFdmVudC5oICovOyB9OwogCQkyRUQ2MDlCRDExNDVCMDcxMDBDODY4NEUg
LyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5oICovOyB9Owor
CQkyRUREQUY0NDI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUREQUY0MzI3OTIw
RUI0MDA1RDE4RTQgLyogSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYxRjQxMjFCMEVGQzAwNzI2REIy
IC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFFRTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRURFRjFGNTEyMUIwRUZDMDA3
MjZEQjIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRURFRjFFRjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjcxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUYxMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iUmVnaXN0cnlJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgyMzEsNiArODIzMiw4IEBACiAJCTJFQ0Y3QUUwMTAxNjJCNTgwMDQy
N0RFNyAvKiBFcnJvckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJvckV2ZW50
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkExMTQ1QjA3MTAwQzg2
ODRFIC8qIERPTUZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERPTUZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5
QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFRERBRjQzMjc5MjBFQjQwMDVEMThFNCAvKiBJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJFRERBRjQ1Mjc5MjBFQzMwMDVEMThFNCAvKiBJbnNwZWN0b3JPdmVybGF5TGFi
ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUQxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERUYxRUUxMjFCMEVGQzAwNzI2
REIyIC8qIEJsb2JEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFREVGMUVGMTIxQjBFRkMwMDcy
NkRCMiAvKiBCbG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDM5Myw2ICsy
MDM5Niw4IEBACiAJCQkJNTA0QUFDQ0MxODM0NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVG
aW5kZXIuaCAqLywKIAkJCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zl
cmxheS5jcHAgKi8sCiAJCQkJN0M1MjJENEExNUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92
ZXJsYXkuaCAqLywKKwkJCQkyRUREQUY0NTI3OTIwRUMzMDA1RDE4RTQgLyogSW5zcGVjdG9yT3Zl
cmxheUxhYmVsLmNwcCAqLywKKwkJCQkyRUREQUY0MzI3OTIwRUI0MDA1RDE4RTQgLyogSW5zcGVj
dG9yT3ZlcmxheUxhYmVsLmggKi8sCiAJCQkJNkE3Mjc5ODkxRjE2QzI5QjAwM0YzOUI4IC8qIElu
c3BlY3RvclNoYWRlclByb2dyYW0uY3BwICovLAogCQkJCTZBNzI3OTg4MUYxNkMyOUIwMDNGMzlC
OCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggKi8sCiAJCQkJODJBQjE3NkYxMjVDODI2NzAw
QzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuY3BwICovLApAQCAtMzUwODcsNiArMzUwOTIs
NyBAQAogCQkJCUE1QjgxQ0IxMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUwNEFBQ0NFMTgzNDQ1NTkwMEUzRDlCQyAvKiBJbnNw
ZWN0b3JOb2RlRmluZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzQzA3NTE4ODQ4MDU1MDBB
NUY4Q0EgLyogSW5zcGVjdG9yT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVEREFGNDQy
NzkyMEVCNDAwNUQxOEU0IC8qIEluc3BlY3Rvck92ZXJsYXlMYWJlbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCODFDQjIxRkFBNDQ2MjAwMzdEMUU2IC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkE3Mjc5OEIxRjE2QzI5QzAwM0YzOUI4IC8qIEluc3BlY3RvclNo
YWRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5
RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCBlMzJlODJmM2NmNzU2Yzll
OTExMWJjZTgwMGJmZmMyN2U1ZDkyMzQ0Li4zZGMyYTc3N2NmMWUyZmMyZGY3MzA2NjZkYWM4ZjFh
Zjg1MTY5YjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuY3BwCkBAIC03OSwxMCArNzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVudERhdGFT
cGFjaW5nID0gMjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZWxlbWVudERhdGFBcnJvd1NpemUg
PSA3Owotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBlbGVtZW50RGF0YUJvcmRlclNpemUgPSAxOwot
CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IHJ1bGVyU2l6ZSA9IDE1Owogc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBydWxlckxhYmVsU2l6ZSA9IDEzOwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxl
clN0ZXBJbmNyZW1lbnQgPSA1MDsKQEAgLTkwLDkgKzg2LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBydWxlclN0ZXBMZW5ndGggPSA4Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclN1
YlN0ZXBJbmNyZW1lbnQgPSA1Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBydWxlclN1YlN0ZXBM
ZW5ndGggPSA1OwogCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91dExhYmVsUGFkZGluZyA9
IDQ7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGxheW91dExhYmVsQXJyb3dTaXplID0gNjsKLQog
c3RhdGljIGNvbnN0ZXhwciBVQ2hhciBidWxsZXQgPSAweDIwMjI7CiBzdGF0aWMgY29uc3RleHBy
IFVDaGFyIGVsbGlwc2lzID0gMHgyMDI2Owogc3RhdGljIGNvbnN0ZXhwciBVQ2hhciBtdWx0aXBs
aWNhdGlvblNpZ24gPSAweDAwRDc7CkBAIC0xMDg5LDE0MSArMTA4Miw4NSBAQCBQYXRoIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBO
b2RlJiBub2RlLCBjbwogICAgICAgICAgICAgZWxlbWVudFJvbGUgPSBheE9iamVjdC0+Y29tcHV0
ZWRSb2xlU3RyaW5nKCk7CiAgICAgfQogCi0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgIk1lbmxvIiwg
bV9wYWdlLnNldHRpbmdzKCkuZml4ZWRGb250RmFtaWx5KCkgfSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZSgxMSk7Ci0KLSAgICBGb250Q2FzY2FkZSBmb250KFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0cik7Ci0KLSAg
ICBpbnQgZm9udEhlaWdodCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5oZWlnaHQoKTsK
LQotICAgIGZsb2F0IGVsZW1lbnREYXRhV2lkdGg7Ci0gICAgZmxvYXQgZWxlbWVudERhdGFIZWln
aHQgPSBmb250SGVpZ2h0OwotICAgIGJvb2wgaGFzU2Vjb25kTGluZSA9ICFlbGVtZW50Um9sZS5p
c0VtcHR5KCk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lID0gbWFrZVN0cmluZyhl
bGVtZW50VGFnTmFtZSwgZWxlbWVudElEVmFsdWUsIGVsZW1lbnRDbGFzc1ZhbHVlLCBlbGVtZW50
UHNldWRvVHlwZSwgJyAnLCBlbGVtZW50V2lkdGgsICJweCIsICcgJywgbXVsdGlwbGljYXRpb25T
aWduLCAnICcsIGVsZW1lbnRIZWlnaHQsICJweCIpOwotICAgICAgICBhdXRvIHNlY29uZExpbmUg
PSBtYWtlU3RyaW5nKCJSb2xlICIsIGVsZW1lbnRSb2xlKTsKLQotICAgICAgICBmbG9hdCBmaXJz
dExpbmVXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihmaXJzdExpbmUpKTsKLSAgICAgICAgZmxv
YXQgc2Vjb25kTGluZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHNlY29uZExpbmUpKTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVUYWdDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsg
MTM2LCAxOCwgMTI4IH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAo
LnRhZykKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVBdHRyaWJ1dGVWYWx1ZUNvbG9y
ID0gU1JHQkE8dWludDhfdD4geyAyNiwgMjYsIDE2NiB9OyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgY29uc3RleHByIGF1dG8g
ZWxlbWVudFRpdGxlQXR0cmlidXRlTmFtZUNvbG9yID0gU1JHQkE8dWludDhfdD4geyAxNTMsIDY5
LCAwIH07IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0
ZS1uYW1lKQorICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZVJvbGVDb2xvciA9IFNSR0JB
PHVpbnQ4X3Q+IHsgMTcwLCAxMywgMTQ1IH07CisKKyAgICBWZWN0b3I8SW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpDb250ZW50PiBsYWJlbENvbnRlbnRzID0geworICAgICAgICB7IGVsZW1lbnRUYWdO
YW1lLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAgICAgICB7IGVsZW1lbnRJRFZhbHVlLCBl
bGVtZW50VGl0bGVBdHRyaWJ1dGVWYWx1ZUNvbG9yIH0sCisgICAgICAgIHsgZWxlbWVudENsYXNz
VmFsdWUsIGVsZW1lbnRUaXRsZUF0dHJpYnV0ZU5hbWVDb2xvciB9LAorICAgICAgICB7IGVsZW1l
bnRQc2V1ZG9UeXBlLCBlbGVtZW50VGl0bGVUYWdDb2xvciB9LAorICAgICAgICB7IG1ha2VTdHJp
bmcoZW1TcGFjZSwgZWxlbWVudFdpZHRoKSwgQ29sb3I6OmJsYWNrIH0sCisgICAgICAgIHsgbWFr
ZVN0cmluZygicHggIl9zLCBtdWx0aXBsaWNhdGlvblNpZ24sICIgIl9zKSwgQ29sb3I6OmRhcmtH
cmF5IH0sCisgICAgICAgIHsgZWxlbWVudEhlaWdodCwgQ29sb3I6OmJsYWNrIH0sCisgICAgICAg
IHsgInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkgfSwKKyAgICB9OwogCi0gICAgICAgIGVsZW1lbnRE
YXRhV2lkdGggPSBzdGQ6OmZtYXgoZmlyc3RMaW5lV2lkdGgsIHNlY29uZExpbmVXaWR0aCk7Ci0g
ICAgICAgIGlmIChoYXNTZWNvbmRMaW5lKQotICAgICAgICAgICAgZWxlbWVudERhdGFIZWlnaHQg
Kz0gZm9udEhlaWdodDsKKyAgICBpZiAoIWVsZW1lbnRSb2xlLmlzRW1wdHkoKSkgeworICAgICAg
ICBsYWJlbENvbnRlbnRzLmFwcGVuZCh7ICJcblJvbGUgIl9zLCBlbGVtZW50VGl0bGVSb2xlQ29s
b3IgfSk7CisgICAgICAgIGxhYmVsQ29udGVudHMuYXBwZW5kKHsgZWxlbWVudFJvbGUsIENvbG9y
OjpibGFjayB9KTsKICAgICB9CiAKICAgICBGcmFtZVZpZXcqIHBhZ2VWaWV3ID0gbV9wYWdlLm1h
aW5GcmFtZSgpLnZpZXcoKTsKIAogICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUgPSBwYWdlVmll
dy0+c2l6ZUZvclZpc2libGVDb250ZW50KCk7Ci0gICAgdmlld3BvcnRTaXplLmV4cGFuZCgtZWxl
bWVudERhdGFTcGFjaW5nLCAtZWxlbWVudERhdGFTcGFjaW5nKTsKLQogICAgIEZsb2F0U2l6ZSBj
b250ZW50SW5zZXQoMCwgcGFnZVZpZXctPnRvcENvbnRlbnRJbnNldChTY3JvbGxWaWV3OjpUb3BD
b250ZW50SW5zZXRUeXBlOjpXZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCkpOwotICAgIGNv
bnRlbnRJbnNldC5leHBhbmQoZWxlbWVudERhdGFTcGFjaW5nLCBlbGVtZW50RGF0YVNwYWNpbmcp
OwogICAgIGlmIChtX3Nob3dSdWxlcnMgfHwgbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVj
dGlvbikKICAgICAgICAgY29udGVudEluc2V0LmV4cGFuZChydWxlclNpemUsIHJ1bGVyU2l6ZSk7
CiAKKyAgICBhdXRvIGV4cGVjdGVkTGFiZWxTaXplID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpl
eHBlY3RlZFNpemUobGFiZWxDb250ZW50cywgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6
RGlyZWN0aW9uOjpVcCk7CisgICAgYXV0byBib3VuZHNDZW50ZXJYID0gYm91bmRzLmNlbnRlcigp
LngoKTsKKworICAgIGZsb2F0IGxhYmVsWDsKKyAgICBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjpBbGlnbm1lbnQgYXJyb3dBbGlnbm1lbnQ7CisgICAgaWYgKGJvdW5kc0NlbnRlclggKyAo
ZXhwZWN0ZWRMYWJlbFNpemUud2lkdGgoKSAvIDIpIDwgdmlld3BvcnRTaXplLndpZHRoKCkKKyAg
ICAgICAgJiYgYm91bmRzQ2VudGVyWCAtIChleHBlY3RlZExhYmVsU2l6ZS53aWR0aCgpIC8gMikg
PiBjb250ZW50SW5zZXQud2lkdGgoKSkgeworICAgICAgICBsYWJlbFggPSBib3VuZHMueCgpICsg
KGJvdW5kcy53aWR0aCgpIC8gMik7CisgICAgICAgIGFycm93QWxpZ25tZW50ID0gSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU7CisgICAgfSBlbHNlIGlmIChi
b3VuZHMueCgpIDwgY29udGVudEluc2V0LndpZHRoKCkpIHsKKyAgICAgICAgbGFiZWxYID0gZm1h
eChjb250ZW50SW5zZXQud2lkdGgoKSwgYm91bmRzQ2VudGVyWCk7CisgICAgICAgIGFycm93QWxp
Z25tZW50ID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5n
OworICAgIH0gZWxzZSBpZiAoYm91bmRzLm1heFgoKSA+IHZpZXdwb3J0U2l6ZS53aWR0aCgpKSB7
CisgICAgICAgIGxhYmVsWCA9IGZtaW4odmlld3BvcnRTaXplLndpZHRoKCksIGJvdW5kc0NlbnRl
clgpOworICAgICAgICBhcnJvd0FsaWdubWVudCA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudDo6VHJhaWxpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGFiZWxYID0g
Ym91bmRzQ2VudGVyWDsKKyAgICAgICAgYXJyb3dBbGlnbm1lbnQgPSBib3VuZHNDZW50ZXJYIDwg
KHZpZXdwb3J0U2l6ZS53aWR0aCgpIC8gMikgPyBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpBbGlnbm1lbnQ6OkxlYWRpbmcgOiBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGln
bm1lbnQ6OlRyYWlsaW5nOworICAgIH0KKwogICAgIGZsb2F0IGFuY2hvclRvcCA9IGJvdW5kcy55
KCk7CiAgICAgZmxvYXQgYW5jaG9yQm90dG9tID0gYm91bmRzLm1heFkoKTsKIAotICAgIGJvb2wg
cmVuZGVyQXJyb3dVcCA9IGZhbHNlOwotICAgIGJvb2wgcmVuZGVyQXJyb3dEb3duID0gZmFsc2U7
Ci0KLSAgICBmbG9hdCBib3hXaWR0aCA9IGVsZW1lbnREYXRhV2lkdGggKyAoZWxlbWVudERhdGFT
cGFjaW5nICogMik7Ci0gICAgZmxvYXQgYm94SGVpZ2h0ID0gZWxlbWVudERhdGFBcnJvd1NpemUg
KyBlbGVtZW50RGF0YUhlaWdodCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAyKTsKLQotICAgIGZs
b2F0IGJveFggPSBib3VuZHMueCgpOwotICAgIGlmIChib3hYIDwgY29udGVudEluc2V0LndpZHRo
KCkpCi0gICAgICAgIGJveFggPSBjb250ZW50SW5zZXQud2lkdGgoKTsKLSAgICBlbHNlIGlmIChi
b3hYID4gdmlld3BvcnRTaXplLndpZHRoKCkgLSBib3hXaWR0aCkKLSAgICAgICAgYm94WCA9IHZp
ZXdwb3J0U2l6ZS53aWR0aCgpIC0gYm94V2lkdGg7Ci0gICAgZWxzZQotICAgICAgICBib3hYICs9
IGVsZW1lbnREYXRhU3BhY2luZzsKLQotICAgIGZsb2F0IGJveFk7CisgICAgZmxvYXQgbGFiZWxZ
OworICAgIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbiBhcnJvd0RpcmVj
dGlvbjsKICAgICBpZiAoYW5jaG9yVG9wID4gdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0gICAg
ICAgIGJveFkgPSB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgLSBib3hIZWlnaHQ7Ci0gICAgICAgIHJl
bmRlckFycm93RG93biA9IHRydWU7CisgICAgICAgIGxhYmVsWSA9IHZpZXdwb3J0U2l6ZS5oZWln
aHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgfSBlbHNlIGlmIChhbmNob3JCb3R0b20gPCBjb250
ZW50SW5zZXQuaGVpZ2h0KCkpIHsKLSAgICAgICAgYm94WSA9IGNvbnRlbnRJbnNldC5oZWlnaHQo
KSArIGVsZW1lbnREYXRhQXJyb3dTaXplOwotICAgICAgICByZW5kZXJBcnJvd1VwID0gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKGFuY2hvclRvcCAtIGJveEhlaWdodCAtIGVsZW1lbnREYXRhU3BhY2lu
ZyA+IGNvbnRlbnRJbnNldC5oZWlnaHQoKSkgewotICAgICAgICBib3hZID0gYW5jaG9yVG9wIC0g
Ym94SGVpZ2h0IC0gZWxlbWVudERhdGFTcGFjaW5nOwotICAgICAgICByZW5kZXJBcnJvd0Rvd24g
PSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tICsgYm94SGVpZ2h0ICsgZWxlbWVu
dERhdGFTcGFjaW5nIDwgdmlld3BvcnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIGJveFkgPSBh
bmNob3JCb3R0b20gKyBlbGVtZW50RGF0YUFycm93U2l6ZSArIGVsZW1lbnREYXRhU3BhY2luZzsK
LSAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRydWU7CisgICAgICAgIGxhYmVsWSA9IGNvbnRlbnRJ
bnNldC5oZWlnaHQoKTsKKyAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVwOworICAgIH0gZWxzZSBpZiAoYW5jaG9yVG9wIC0g
ZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgPiBjb250ZW50SW5zZXQuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgbGFiZWxZID0gYW5jaG9yVG9wOworICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsKKyAgICB9IGVsc2UgaWYg
KGFuY2hvckJvdHRvbSArIGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpIDwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKSB7CisgICAgICAgIGxhYmVsWSA9IGFuY2hvckJvdHRvbTsKKyAgICAgICAgYXJy
b3dEaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlVw
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJveFkgPSBjb250ZW50SW5zZXQuaGVpZ2h0KCk7Ci0g
ICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7Ci0gICAgfQotCi0gICAgUGF0aCBwYXRoOwot
ICAgIHBhdGgubW92ZVRvKHsgYm94WCwgYm94WSB9KTsKLSAgICBpZiAocmVuZGVyQXJyb3dVcCkg
ewotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUg
KiAyKSwgYm94WSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnRE
YXRhQXJyb3dTaXplICogMyksIGJveFkgLSBlbGVtZW50RGF0YUFycm93U2l6ZSB9KTsKLSAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyBib3hYICsgKGVsZW1lbnREYXRhQXJyb3dTaXplICogNCksIGJv
eFkgfSk7CisgICAgICAgIGxhYmVsWSA9IGNvbnRlbnRJbnNldC5oZWlnaHQoKSArIGV4cGVjdGVk
TGFiZWxTaXplLmhlaWdodCgpOworICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IEluc3BlY3Rvck92
ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93bjsKICAgICB9Ci0gICAgcGF0aC5hZGRM
aW5lVG8oeyBib3hYICsgZWxlbWVudERhdGFXaWR0aCArIChlbGVtZW50RGF0YVNwYWNpbmcgKiAy
KSwgYm94WSB9KTsKLSAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyBlbGVtZW50RGF0YVdpZHRo
ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQgKyAo
ZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgaWYgKHJlbmRlckFycm93RG93bikgewot
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUgKiA0
KSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIpIH0p
OwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGJveFggKyAoZWxlbWVudERhdGFBcnJvd1NpemUg
KiAzKSwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAqIDIp
ICsgZWxlbWVudERhdGFBcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgYm94
WCArIChlbGVtZW50RGF0YUFycm93U2l6ZSAqIDIpLCBib3hZICsgZWxlbWVudERhdGFIZWlnaHQg
KyAoZWxlbWVudERhdGFTcGFjaW5nICogMikgfSk7Ci0gICAgfQotICAgIHBhdGguYWRkTGluZVRv
KHsgYm94WCwgYm94WSArIGVsZW1lbnREYXRhSGVpZ2h0ICsgKGVsZW1lbnREYXRhU3BhY2luZyAq
IDIpIH0pOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnRyYW5zbGF0ZShl
bGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBm
KTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvciA9IFNS
R0JBPHVpbnQ4X3Q+IHsgMjU1LCAyNTUsIDE5NCB9OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcik7Ci0KLSAgICBjb250ZXh0LmZpbGxQYXRoKHBh
dGgpOwotCi0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoZWxlbWVudERhdGFCb3JkZXJT
aXplKTsKLQogICAgIGNvbnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJvcmRlckNvbG9yID0gQ29s
b3I6OmRhcmtHcmF5OwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZWxlbWVudFRpdGxlQm9y
ZGVyQ29sb3IpOwotCi0gICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwotCi0gICAgRmxvYXRQ
b2ludCB0ZXh0UG9zaXRpb24oYm94WCArIGVsZW1lbnREYXRhU3BhY2luZywgYm94WSAtIChlbGVt
ZW50RGF0YVNwYWNpbmcgLyAyLjBmKSArIGZvbnRIZWlnaHQpOwotICAgIGNvbnN0IGF1dG8gZHJh
d1RleHQgPSBbJl0gKGNvbnN0IFN0cmluZyYgdGV4dCwgU1JHQkE8dWludDhfdD4gY29sb3IpIHsK
LSAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKLSAgICAgICAgdGV4dFBvc2l0aW9uICs9
IGNvbnRleHQuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgdGV4dFBvc2l0aW9uKTsKLSAg
ICB9OwogCi0gICAgZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIHsgMTM2LCAxOCwgMTI4IH0pOyAv
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1Rl
eHQoZWxlbWVudElEVmFsdWUsIHsgMjYsIDI2LCAxNjYgfSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5j
IHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVt
ZW50Q2xhc3NWYWx1ZSwgeyAxNTMsIDY5LCAwIH0pOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRo
IFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNl
dWRvVHlwZSwgeyAxMzYsIDE4LCAxMjggfSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKLSAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNrKTsKLSAg
ICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7Ci0gICAgZHJhd1RleHQoInB4
Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwotICAgIGRyYXdUZXh0KCIgIl9zLCBDb2xvcjo6ZGFya0dy
YXkpOwotICAgIGRyYXdUZXh0KG1ha2VTdHJpbmcobXVsdGlwbGljYXRpb25TaWduKSwgQ29sb3I6
OmRhcmtHcmF5KTsKLSAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmRhcmtHcmF5KTsKLSAgICBk
cmF3VGV4dChlbGVtZW50SGVpZ2h0LCBDb2xvcjo6YmxhY2spOwotICAgIGRyYXdUZXh0KCJweCJf
cywgQ29sb3I6OmRhcmtHcmF5KTsKLQotICAgIGlmIChoYXNTZWNvbmRMaW5lKSB7Ci0gICAgICAg
IHRleHRQb3NpdGlvbi5zZXRYKGJveFggKyBlbGVtZW50RGF0YVNwYWNpbmcpOwotICAgICAgICB0
ZXh0UG9zaXRpb24ubW92ZSgwLCBmb250SGVpZ2h0KTsKLSAgICAgICAgCi0gICAgICAgIGRyYXdU
ZXh0KCJSb2xlIl9zLCB7IDE3MCwgMTMsIDE0NSB9KTsKLSAgICAgICAgZHJhd1RleHQoIiAiX3Ms
IENvbG9yOjpibGFjayk7Ci0gICAgICAgIGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6Ymxh
Y2spOwotICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7CisgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihlbGVtZW50VGl0bGVCb3JkZXJDb2xvcik7CiAKLSAgICByZXR1cm4gcGF0
aDsKKyAgICBJbnNwZWN0b3JPdmVybGF5TGFiZWwgbGFiZWwgPSB7IFdURk1vdmUobGFiZWxDb250
ZW50cyksIHsgbGFiZWxYLCBsYWJlbFkgfSwgZWxlbWVudFRpdGxlQmFja2dyb3VuZENvbG9yLCB7
IGFycm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH07CisgICAgcmV0dXJuIGxhYmVsLmRy
YXcoY29udGV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBpbnQgaGF0Y2hTcGFjaW5n
LCBGbGlwIGZsaXApCkBAIC0xMjgzLDI2OCArMTIyMCw2IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwKICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZWZhdWx0TGF5b3V0SGF0
Y2hTcGFjaW5nLCBmbGlwKTsKIH0KIAotc3RhdGljIEZvbnRDYXNjYWRlIGZvbnRGb3JMYXlvdXRM
YWJlbCgpCi17Ci0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5c3RlbS11aSIgfSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUoNTAwKSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7Ci0KLSAgICBGb250Q2FzY2FkZSBmb250
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0
cik7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLXN0YXRpYyBQYXRoIGJhY2tncm91bmRQYXRoRm9y
TGF5b3V0TGFiZWwoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbiwgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0VkZ2VQb3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbiwgZmxvYXQgYXJyb3dTaXplKQot
ewotICAgIFBhdGggcGF0aDsKLSAgICBGbG9hdFNpemUgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRp
b247Ci0KLSAgICBzd2l0Y2ggKGFycm93RGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICBwYXRoLm1vdmVUbyh7
IC0od2lkdGggLyAyKSwgLWhlaWdodCAtIGFycm93U2l6ZX0pOwotICAgICAgICBwYXRoLmFkZExp
bmVUbyh7IC0od2lkdGggLyAyKSwgLWFycm93U2l6ZSB9KTsKLQotICAgICAgICBzd2l0Y2ggKGFy
cm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxB
cnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsg
LSh3aWR0aCAvIDIpLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRo
IC8gMikgKyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JB
cnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246
Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLWFycm93
U2l6ZSB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgMCB9KTsKLSAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQ
b3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAv
IDIpIC0gYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyAod2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBv
c2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGluZVRvKHsg
KHdpZHRoIC8gMiksIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgKHdp
ZHRoIC8gMiksIC1oZWlnaHQgLSBhcnJvd1NpemUgfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHBh
dGgubW92ZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgKyBhcnJvd1NpemUgfSk7Ci0gICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBhcnJvd1NpemUgfSk7Ci0KLSAgICAgICAg
c3dpdGNoIChhcnJvd0VkZ2VQb3NpdGlvbikgewotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc6Ci0gICAgICAgICAgICBwYXRoLmFk
ZExpbmVUbyh7IC0od2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgLSh3aWR0aCAvIDIpICsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBv
ZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6
ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwot
ICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246OlRyYWlsaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAo
d2lkdGggLyAyKSAtIGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgMCB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93
RWRnZVBvc2l0aW9uID0geyAtKHdpZHRoIC8gMiksIDAgfTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5v
bmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgKHdpZHRoIC8gMiksIGFycm93U2l6ZSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAod2lkdGggLyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0OgotICAg
ICAgICBwYXRoLm1vdmVUbyh7IC13aWR0aCAtIGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIH0pOwot
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC1hcnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKLQot
ICAgICAgICBzd2l0Y2ggKGFycm93RWRnZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAg
IHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSArIGFycm93U2l6ZSB9
KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgLShoZWlnaHQgLyAyKSB9KTsKLSAg
ICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAoaGVpZ2h0IC8gMikg
fTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6Okxh
YmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRv
KHsgLWFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtYXJy
b3dTaXplIH0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICBwYXRo
LmFkZExpbmVUbyh7IDAsIChoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgLWFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikgfTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJy
b3dFZGdlUG9zaXRpb246Ok5vbmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgLShoZWlnaHQgLyAyKSB9KTsKLSAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtd2lkdGggLSBhcnJvd1NpemUsIC0oaGVpZ2h0IC8gMikg
fSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0RpcmVjdGlvbjo6TGVmdDoKLSAgICAgICAgcGF0aC5tb3ZlVG8oeyB3aWR0aCArIGFycm93U2l6
ZSwgKGhlaWdodCAvIDIpIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwg
KGhlaWdodCAvIDIpIH0pOwotCi0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsK
LSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpM
ZWFkaW5nOgotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIC0oaGVpZ2h0
IC8gMikgKyBhcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IDAsIC0o
aGVpZ2h0IC8gMikgfSk7Ci0gICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9
IHsgMCwgKGhlaWdodCAvIDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGU6Ci0gICAgICAg
ICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOwotICAgICAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOwotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzoK
LSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwgKGhlaWdodCAvIDIpIH0pOwotICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIChoZWlnaHQgLyAyKSAtIGFycm93U2l6
ZSB9KTsKLSAgICAgICAgICAgIG9mZnNldEZvckFycm93RWRnZVBvc2l0aW9uID0geyAwLCAtKGhl
aWdodCAvIDIpIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgLShoZWln
aHQgLyAyKSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyB3aWR0aCArIGFycm93U2l6ZSwg
LShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgotICAgICAgICBwYXRoLm1vdmVUbyh7IC0o
d2lkdGggLyAyKSwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAt
KHdpZHRoIC8gMiksIGhlaWdodCAvIDIgfSk7Ci0gICAgICAgIHBhdGguYWRkTGluZVRvKHsgd2lk
dGggLyAyLCBoZWlnaHQgLyAyIH0pOwotICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRoIC8g
MiwgLShoZWlnaHQgLyAyKSB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGF0aC5j
bG9zZVN1YnBhdGgoKTsKLSAgICBwYXRoLnRyYW5zbGF0ZShvZmZzZXRGb3JBcnJvd0VkZ2VQb3Np
dGlvbik7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotc3RhdGljIEZsb2F0U2l6ZSBleHBlY3Rl
ZFNpemVGb3JMYXlvdXRMYWJlbChTdHJpbmcgbGFiZWwsIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVs
QXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKQotewotICAg
IGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwotCi0gICAgZmxvYXQgdGV4dEhlaWdo
dCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5mbG9hdEhlaWdodCgpOwotICAgIGZsb2F0
IHRleHRXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihsYWJlbCkpOwotICAgIGlmIChtYXhpbXVt
V2lkdGggJiYgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bVdp
ZHRoKQotICAgICAgICB0ZXh0V2lkdGggPSBtYXhpbXVtV2lkdGg7Ci0KLSAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgewotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlv
bjo6RG93bjoKLSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246
OlVwOgotICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5nICog
MiksIHRleHRIZWlnaHQgKyAobGF5b3V0TGFiZWxQYWRkaW5nICogMikgKyBsYXlvdXRMYWJlbEFy
cm93U2l6ZSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlv
bjo6UmlnaHQ6Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9u
OjpMZWZ0OgotICAgICAgICByZXR1cm4geyB0ZXh0V2lkdGggKyAobGF5b3V0TGFiZWxQYWRkaW5n
ICogMikgKyBsYXlvdXRMYWJlbEFycm93U2l6ZSwgdGV4dEhlaWdodCArIChsYXlvdXRMYWJlbFBh
ZGRpbmcgKiAyKSB9OwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVj
dGlvbjo6Tm9uZToKLSAgICAgICAgcmV0dXJuIHsgdGV4dFdpZHRoICsgKGxheW91dExhYmVsUGFk
ZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGluZyAqIDIpIH07Ci0gICAg
fQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIHZvaWQg
ZHJhd0xheW91dExhYmVsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU3RyaW5nIGxhYmVsLCBG
bG9hdFBvaW50IHBvaW50LCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGFy
cm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uIGFy
cm93RWRnZVBvc2l0aW9uLCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IsIGZsb2F0IG1heGltdW1XaWR0
aCA9IDApCi17Ci0gICAgQVNTRVJUKGFycm93RWRnZVBvc2l0aW9uICE9IEluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok5vbmUgfHwgYXJyb3dEaXJlY3Rpb24gPT0gSW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwotICAgIAotICAgIGNvbnRleHQudHJh
bnNsYXRlKHBvaW50KTsKLQotICAgIGF1dG8gZm9udCA9IGZvbnRGb3JMYXlvdXRMYWJlbCgpOwot
ICAgIGZsb2F0IHRleHRIZWlnaHQgPSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCkuZmxvYXRI
ZWlnaHQoKTsKLSAgICBmbG9hdCB0ZXh0RGVzY2VudCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZv
bnQoKS5mbG9hdERlc2NlbnQoKTsKLSAgICAKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250Lndp
ZHRoKFRleHRSdW4obGFiZWwpKTsKLSAgICBpZiAobWF4aW11bVdpZHRoICYmIHRleHRXaWR0aCAr
IChsYXlvdXRMYWJlbFBhZGRpbmcgKiAyKSA+IG1heGltdW1XaWR0aCkgewotICAgICAgICBsYWJl
bC5hcHBlbmQoIi4uLiJfcyk7Ci0gICAgICAgIHdoaWxlICh0ZXh0V2lkdGggKyAobGF5b3V0TGFi
ZWxQYWRkaW5nICogMikgPiBtYXhpbXVtV2lkdGggJiYgbGFiZWwubGVuZ3RoKCkgPj0gNCkgewot
ICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBmb3VydGggZnJvbSBsYXN0IGNoYXJhY3RlciAodGhl
IGNoYXJhY3RlciBiZWZvcmUgdGhlIGVsbGlwc2lzKSBhbmQgcmVtZWFzdXJlLgotICAgICAgICAg
ICAgbGFiZWwucmVtb3ZlKGxhYmVsLmxlbmd0aCgpIC0gNCk7Ci0gICAgICAgICAgICB0ZXh0V2lk
dGggPSBmb250LndpZHRoKFRleHRSdW4obGFiZWwpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IEZsb2F0UG9pbnQgdGV4dFBvc2l0aW9uOwotICAgIHN3aXRjaCAoYXJyb3dEaXJlY3Rpb24pIHsK
LSAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Ci0g
ICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAg
dGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRMYWJlbFBhZGRpbmcsIC10ZXh0RGVzY2Vu
dCAtIGxheW91dExhYmVsQXJyb3dTaXplIC0gbGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdl
UG9zaXRpb246Ok1pZGRsZToKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQo
LSh0ZXh0V2lkdGggLyAyKSwgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBs
YXlvdXRMYWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAg
ICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVs
UGFkZGluZywgLXRleHREZXNjZW50IC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJl
bFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFi
ZWxBcnJvd0RpcmVjdGlvbjo6VXA6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9zaXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9u
OjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYXlvdXRM
YWJlbFBhZGRpbmcsIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCArIGxheW91dExhYmVsQXJyb3dT
aXplICsgbGF5b3V0TGFiZWxQYWRkaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZToKLSAg
ICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLSh0ZXh0V2lkdGggLyAyKSwgdGV4
dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJl
bFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0
UG9zaXRpb24gPSBGbG9hdFBvaW50KC0odGV4dFdpZHRoKSAtIGxheW91dExhYmVsUGFkZGluZywg
dGV4dEhlaWdodCAtIHRleHREZXNjZW50ICsgbGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRM
YWJlbFBhZGRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
T3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgIHN3aXRjaCAoYXJyb3dFZGdlUG9z
aXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpMZWFkaW5nOgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgt
dGV4dFdpZHRoIC0gbGF5b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIGxh
eW91dExhYmVsUGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBv
c2l0aW9uOjpNaWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC10
ZXh0V2lkdGggLSBsYXlvdXRMYWJlbEFycm93U2l6ZSAtIGxheW91dExhYmVsUGFkZGluZywgKHRl
eHRIZWlnaHQgLyAyKSAtIHRleHREZXNjZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb246OlRyYWlsaW5n
OgotICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtdGV4dFdpZHRoIC0gbGF5
b3V0TGFiZWxBcnJvd1NpemUgLSBsYXlvdXRMYWJlbFBhZGRpbmcsIC1sYXlvdXRMYWJlbFBhZGRp
bmcgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpOb25lOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JPdmVy
bGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICBzd2l0Y2ggKGFycm93RWRn
ZVBvc2l0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0Vk
Z2VQb3NpdGlvbjo6TGVhZGluZzoKLSAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9p
bnQobGF5b3V0TGFiZWxBcnJvd1NpemUgKyBsYXlvdXRMYWJlbFBhZGRpbmcsIGxheW91dExhYmVs
UGFkZGluZyArIHRleHRIZWlnaHQgLSB0ZXh0RGVzY2VudCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpN
aWRkbGU6Ci0gICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVs
QXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRkaW5nLCAodGV4dEhlaWdodCAvIDIpIC0gdGV4dERl
c2NlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmc6Ci0gICAgICAgICAgICB0ZXh0UG9z
aXRpb24gPSBGbG9hdFBvaW50KGxheW91dExhYmVsQXJyb3dTaXplICsgbGF5b3V0TGFiZWxQYWRk
aW5nLCAtbGF5b3V0TGFiZWxQYWRkaW5nIC0gdGV4dERlc2NlbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0VkZ2VQb3NpdGlv
bjo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZToKLSAg
ICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludCgtKHRleHRXaWR0aCAvIDIpLCAodGV4dEhl
aWdodCAvIDIpIC0gdGV4dERlc2NlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQ
YXRoIGxhYmVsUGF0aCA9IGJhY2tncm91bmRQYXRoRm9yTGF5b3V0TGFiZWwodGV4dFdpZHRoICsg
KGxheW91dExhYmVsUGFkZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKGxheW91dExhYmVsUGFkZGlu
ZyAqIDIpLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9zaXRpb24sIGxheW91dExhYmVsQXJy
b3dTaXplKTsKLQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0g
ICAgY29udGV4dC5maWxsUGF0aChsYWJlbFBhdGgpOwotICAgIGNvbnRleHQuc3Ryb2tlUGF0aChs
YWJlbFBhdGgpOwotICAgIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7
Ci0gICAgY29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKGxhYmVsKSwgdGV4dFBvc2l0aW9u
KTsKLX0KLQogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRI
aWdobGlnaHRPdmVybGF5JiBncmlkT3ZlcmxheSkKIHsKICAgICBjb25zdGV4cHIgYXV0byB0cmFu
c2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yID0gQ29sb3I6OndoaXRlLmNvbG9yV2l0aEFscGhh
Qnl0ZSgyMzApOwpAQCAtMTU3MCwxMCArMTI0NSwxMCBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rv
cgogICAgIC8vIERyYXcgbGFiZWxzIG9uIHRvcCBvZiBhbGwgb3RoZXIgbGluZXMuCiAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAgZm9yIChhdXRvIGFyZWEgOiBncmlkT3Zl
cmxheS5hcmVhcykKLSAgICAgICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIGFyZWEubmFtZSwg
YXJlYS5xdWFkLmNlbnRlcigpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lLCBMYWJlbEFycm93
RWRnZVBvc2l0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcmVh
LnF1YWQuYm91bmRpbmdCb3goKS53aWR0aCgpKTsKKyAgICAgICAgSW5zcGVjdG9yT3ZlcmxheUxh
YmVsKGFyZWEubmFtZSwgYXJlYS5xdWFkLmNlbnRlcigpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dy
b3VuZENvbG9yLCB7IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6Tm9u
ZSwgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpOb25lIH0pLmRyYXco
Y29udGV4dCwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCkud2lkdGgoKSk7CiAKICAgICBmb3IgKGF1
dG8gbGFiZWwgOiBncmlkT3ZlcmxheS5sYWJlbHMpCi0gICAgICAgIGRyYXdMYXlvdXRMYWJlbChj
b250ZXh0LCBsYWJlbC50ZXh0LCBsYWJlbC5sb2NhdGlvbiwgbGFiZWwuYXJyb3dEaXJlY3Rpb24s
IGxhYmVsLmFycm93RWRnZVBvc2l0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICBsYWJlbC5kcmF3KGNvbnRleHQpOwogfQogCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYXV0aG9y
ZWRHcmlkVHJhY2tTaXplcyhOb2RlKiBub2RlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCB1bnNpZ25lZCBleHBlY3RlZFRyYWNrQ291bnQpCkBAIC0xNjc0LDE3ICsxMzQ5LDYg
QEAgc3RhdGljIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCBncmlkTGluZU5hbWVzKGNvbnN0IFJl
bmRlclN0eWxlKiByZW5kZXJTdHlsZSwgR3IKICAgICByZXR1cm4gY29tYmluZWRHcmlkTGluZU5h
bWVzOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxp
Z2h0T3ZlcmxheTo6TGFiZWwgYnVpbGRMYWJlbChTdHJpbmcgdGV4dCwgRmxvYXRQb2ludCBsb2Nh
dGlvbiwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93
RGlyZWN0aW9uIGFycm93RGlyZWN0aW9uLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RWRn
ZVBvc2l0aW9uIGFycm93RWRnZVBvc2l0aW9uKQotewotICAgIEluc3BlY3Rvck92ZXJsYXk6Okhp
Z2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVsOwotICAgIGxhYmVsLnRl
eHQgPSB0ZXh0OwotICAgIGxhYmVsLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgbGFiZWwuYmFj
a2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOwotICAgIGxhYmVsLmFycm93RGlyZWN0aW9u
ID0gYXJyb3dEaXJlY3Rpb247Ci0gICAgbGFiZWwuYXJyb3dFZGdlUG9zaXRpb24gPSBhcnJvd0Vk
Z2VQb3NpdGlvbjsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8SW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3Zl
cmxheTo6YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlk
T3ZlcmxheSwgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkKIHsKICAgICAvLyBJZiB0aGUgbm9k
ZSBXZWFrUHRyIGhhcyBiZWVuIGNsZWFyZWQsIHRoZW4gdGhlIG5vZGUgaXMgZ29uZSBhbmQgdGhl
cmUncyBub3RoaW5nIHRvIGRyYXcuCkBAIC0xNzcxLDQxICsxNDM1LDQxIEBAIHN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5z
cGVjdG9yT3ZlcmxhCiAgICAgICAgIH07CiAgICAgfTsKIAotICAgIGF1dG8gY29ycmVjdGVkQXJy
b3dEaXJlY3Rpb24gPSBbJl0oTGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IExhYmVsQXJyb3dEaXJlY3Rpb24g
eworICAgIGF1dG8gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24gPSBbJl0oSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIHNpemluZ0RpcmVjdGlvbikgLT4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGly
ZWN0aW9uIHsKICAgICAgICAgaWYgKChzaXppbmdEaXJlY3Rpb24gPT0gR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JDb2x1bW5zICYmIGlzV3JpdGluZ01vZGVGbGlwcGVkKSB8fCAoc2l6aW5n
RGlyZWN0aW9uID09IEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc0RpcmVj
dGlvbkZsaXBwZWQpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAg
ICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duOgotICAgICAgICAgICAgICAgIGRp
cmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd246CisgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpV
cDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0Rp
cmVjdGlvbjo6VXA6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVj
dGlvbjo6RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJv
dzo6RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAg
ICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ7CisgICAgICAg
ICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoK
KyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpEaXJlY3Rpb246OlJpZ2h0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAgICAgICBkaXJlY3Rp
b24gPSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OworICAgICAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICAgICAgICAg
IGRpcmVjdGlvbiA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6TGVm
dDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJvd0Rp
cmVjdGlvbjo6Tm9uZToKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpB
cnJvdzo6RGlyZWN0aW9uOjpOb25lOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSkg
ewogICAgICAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNhc2UgTGFi
ZWxBcnJvd0RpcmVjdGlvbjo6RG93bjoKLSAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBMYWJl
bEFycm93RGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAgICAgICAgICAgICAgIGRpcmVjdGlv
biA9IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6UmlnaHQ7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246
OlVwOgotICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246Okxl
ZnQ7CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVj
dGlvbjo6VXA6CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxh
YmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgICAg
IGRpcmVjdGlvbiA9IExhYmVsQXJyb3dEaXJlY3Rpb246OlVwOworICAgICAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgICAg
ICAgICAgZGlyZWN0aW9uID0gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
OjpVcDsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGFiZWxBcnJv
d0RpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gTGFiZWxBcnJv
d0RpcmVjdGlvbjo6RG93bjsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVs
OjpBcnJvdzo6RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkRvd247CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6
CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlv
bjo6Tm9uZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTgxMywxNSArMTQ3NywxNSBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAg
ICByZXR1cm4gZGlyZWN0aW9uOwogICAgIH07CiAKLSAgICBhdXRvIGNvcnJlY3RlZEFycm93RWRn
ZVBvc2l0aW9uID0gWyZdKExhYmVsQXJyb3dFZGdlUG9zaXRpb24gZWRnZVBvc2l0aW9uLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gc2l6aW5nRGlyZWN0aW9uKSAtPiBMYWJlbEFycm93RWRnZVBv
c2l0aW9uIHsKKyAgICBhdXRvIGNvcnJlY3RlZEFycm93QWxpZ25tZW50ID0gWyZdKEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudCBhbGlnbm1lbnQsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBzaXppbmdEaXJlY3Rpb24pIC0+IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJy
b3c6OkFsaWdubWVudCB7CiAgICAgICAgIGlmICgoc2l6aW5nRGlyZWN0aW9uID09IEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyAmJiBpc1dyaXRpbmdNb2RlRmxpcHBlZCkgfHwgKHNp
emluZ0RpcmVjdGlvbiA9PSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMgJiYg
aXNEaXJlY3Rpb25GbGlwcGVkKSkgewotICAgICAgICAgICAgaWYgKGVkZ2VQb3NpdGlvbiA9PSBM
YWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBM
YWJlbEFycm93RWRnZVBvc2l0aW9uOjpUcmFpbGluZzsKLSAgICAgICAgICAgIGlmIChlZGdlUG9z
aXRpb24gPT0gTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6VHJhaWxpbmcpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIExhYmVsQXJyb3dFZGdlUG9zaXRpb246OkxlYWRpbmc7CisgICAgICAgICAgICBp
ZiAoYWxpZ25tZW50ID09IEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6
TGVhZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpB
cnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzsKKyAgICAgICAgICAgIGlmIChhbGlnbm1lbnQgPT0g
SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50
OjpMZWFkaW5nOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVkZ2VQb3NpdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGFsaWdubWVudDsKICAgICB9OwogCiAgICAgSW5zcGVjdG9yT3ZlcmxheTo6
SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSBncmlkSGlnaGxpZ2h0T3ZlcmxheTsKQEAg
LTE4NjUsNyArMTUyOSw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBp
ZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dUcmFja1NpemVzKSB7CiAgICAgICAgICAgICAgICAg
YXV0byBhdXRob3JlZFRyYWNrU2l6ZSA9IGkgPCBhdXRob3JlZFRyYWNrQ29sdW1uU2l6ZXMuc2l6
ZSgpID8gYXV0aG9yZWRUcmFja0NvbHVtblNpemVzW2ldIDogImF1dG8iX3M7CiAgICAgICAgICAg
ICAgICAgRmxvYXRMaW5lIHRyYWNrVG9wTGluZSA9IHsgY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCks
IGNvbHVtbkVuZExpbmUuc3RhcnQoKSB9OwotICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRP
dmVybGF5LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbChhdXRob3JlZFRyYWNrU2l6ZSwgdHJhY2tU
b3BMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxCYWNr
Z3JvdW5kQ29sb3IsIGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJyb3dEaXJlY3Rpb246
OlVwLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpLCBMYWJlbEFycm93RWRn
ZVBvc2l0aW9uOjpNaWRkbGUpKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3Zlcmxh
eS5sYWJlbHMuYXBwZW5kKHsgYXV0aG9yZWRUcmFja1NpemUsIHRyYWNrVG9wTGluZS5wb2ludEF0
UmVsYXRpdmVEaXN0YW5jZSgwLjUpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCB7
IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRp
cmVjdGlvbjo6VXAsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyksIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlIH0gfSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRMaW5l
ID0gY29sdW1uU3RhcnRMaW5lOwpAQCAtMTg4NiwyMSArMTU1MCwyMSBAQCBzdGQ6Om9wdGlvbmFs
PEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3Bl
Y3Rvck92ZXJsYQogCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byB0ZXh0ID0gbGluZUxhYmVsLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhdXRv
IGFycm93RGlyZWN0aW9uID0gY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oTGFiZWxBcnJvd0RpcmVj
dGlvbjo6RG93biwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKLSAgICAg
ICAgICAgIGF1dG8gYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlv
bihMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpNaWRkbGUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
bjo6Rm9yQ29sdW1ucyk7CisgICAgICAgICAgICBhdXRvIGFycm93RGlyZWN0aW9uID0gY29ycmVj
dGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
OjpEb3duLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOworICAgICAgICAg
ICAgYXV0byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50KEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb246OkZvckNvbHVtbnMpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAg
ICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlvbihMYWJl
bEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZv
ckNvbHVtbnMpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJy
b3dBbGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFk
aW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNvbHVtbnMpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaSA9PSBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAg
ICBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJy
b3dFZGdlUG9zaXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNv
bHVtbnMpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dB
bGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGlu
ZywgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKIAotICAgICAgICAgICAg
YXV0byBleHBlY3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQs
IGFycm93RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7
CiAgICAgICAgICAgICBhdXRvIGdhcExhYmVsUG9zaXRpb24gPSBnYXBMYWJlbExpbmUuc3RhcnQo
KTsKIAogICAgICAgICAgICAgLy8gVGhlIGFyZWEgdW5kZXIgdGhlIHdpbmRvdydzIHRvb2xiYXIg
aXMgZHJhd2FibGUsIGJ1dCBub3QgbWVhbmluZ2Z1bGx5IHZpc2libGUsIHNvIHdlIG11c3QgYWNj
b3VudCBmb3IgdGhhdCBzcGFjZS4KICAgICAgICAgICAgIGF1dG8gdG9wRWRnZUluc2V0ID0gcGFn
ZVZpZXctPnRvcENvbnRlbnRJbnNldChTY3JvbGxWaWV3OjpUb3BDb250ZW50SW5zZXRUeXBlOjpX
ZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCk7CiAgICAgICAgICAgICBpZiAoZ2FwTGFiZWxM
aW5lLnN0YXJ0KCkueSgpIC0gZXhwZWN0ZWRMYWJlbFNpemUuaGVpZ2h0KCkgLSB0b3BFZGdlSW5z
ZXQgKyBzY3JvbGxQb3NpdGlvbi55KCkgLSB2aWV3cG9ydEJvdW5kcy55KCkgPCAwKSB7Ci0gICAg
ICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihMYWJl
bEFycm93RGlyZWN0aW9uOjpVcCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5z
KTsKKyAgICAgICAgICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0
aW9uKEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6VXAsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CiAKICAgICAgICAgICAgICAgICAvLyBTcGVj
aWFsIGNhc2UgZm9yIHRoZSBmaXJzdCBjb2x1bW4gdG8gbWFrZSBzdXJlIHRoZSBsYWJlbCB3aWxs
IGJlIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBmaXJzdCByb3cncyBsYWJlbC4KICAgICAgICAgICAg
ICAgICAvLyBUaGUgbGFiZWwgaGVpZ2h0cyB3aWxsIGJlIHRoZSBzYW1lLCBhcyB0aGV5IHVzZSB0
aGUgc2FtZSBmb250LCBzbyBtb3ZpbmcgZG93biBieSB0aGlzIGxhYmVsJ3Mgc2l6ZSB3aWxsCkBA
IC0xOTA5LDcgKzE1NzMsNyBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYQogICAgICAgICAgICAg
ICAgICAgICBnYXBMYWJlbFBvc2l0aW9uID0gZ2FwTGFiZWxMaW5lLnBvaW50QXRBYnNvbHV0ZURp
c3RhbmNlKGV4cGVjdGVkTGFiZWxTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKHRl
eHQsIGdhcExhYmVsUG9zaXRpb24sIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGFy
cm93RGlyZWN0aW9uLCBhcnJvd0VkZ2VQb3NpdGlvbikpOworICAgICAgICAgICAgZ3JpZEhpZ2hs
aWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZCh7IHRleHQsIGdhcExhYmVsUG9zaXRpb24sIHRyYW5z
bHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIHsgYXJyb3dEaXJlY3Rpb24sIGFycm93QWxpZ25t
ZW50IH0gfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5NDksNyArMTYxMyw3IEBAIHN0ZDo6
b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zlcmxh
eT4gSW5zcGVjdG9yT3ZlcmxhCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNo
b3dUcmFja1NpemVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhdXRob3JlZFRyYWNrU2l6ZSA9
IGkgPCBhdXRob3JlZFRyYWNrUm93U2l6ZXMuc2l6ZSgpID8gYXV0aG9yZWRUcmFja1Jvd1NpemVz
W2ldIDogImF1dG8iX3M7CiAgICAgICAgICAgICAgICAgRmxvYXRMaW5lIHRyYWNrTGVmdExpbmUg
PSB7IHJvd1N0YXJ0TGluZS5zdGFydCgpLCByb3dFbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAg
ICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwoYXV0
aG9yZWRUcmFja1NpemUsIHRyYWNrTGVmdExpbmUucG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41
KSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgY29ycmVjdGVkQXJyb3dEaXJlY3Rp
b24oTGFiZWxBcnJvd0RpcmVjdGlvbjo6TGVmdCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpG
b3JSb3dzKSwgTGFiZWxBcnJvd0VkZ2VQb3NpdGlvbjo6TWlkZGxlKSk7CisgICAgICAgICAgICAg
ICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZCh7IGF1dGhvcmVkVHJhY2tTaXpl
LCB0cmFja0xlZnRMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50
TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIHsgY29ycmVjdGVkQXJyb3dEaXJlY3Rpb24oSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpMZWZ0LCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb246OkZvclJvd3MpLCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6
Ok1pZGRsZSB9IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHByZXZpb3VzUm93RW5kTGluZSA9IHJvd1N0YXJ0TGluZTsKQEAgLTE5NzAsMTkgKzE2MzQsMTkg
QEAgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5PiBJbnNwZWN0b3JPdmVybGEKIAogICAgICAgICBpZiAoIWxpbmVMYWJlbC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dCA9IGxpbmVMYWJlbC50b1N0cmluZygpOwot
ICAgICAgICAgICAgYXV0byBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9u
KExhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZv
clJvd3MpOwotICAgICAgICAgICAgYXV0byBhcnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFy
cm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dFZGdlUG9zaXRpb246Ok1pZGRsZSwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICAgICAgICAgIGF1dG8gYXJyb3dEaXJlY3Rp
b24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93
OjpEaXJlY3Rpb246OlJpZ2h0LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwor
ICAgICAgICAgICAgYXV0byBhcnJvd0FsaWdubWVudCA9IGNvcnJlY3RlZEFycm93QWxpZ25tZW50
KEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogCiAgICAgICAgICAgICBpZiAoIWkpCi0gICAg
ICAgICAgICAgICAgYXJyb3dFZGdlUG9zaXRpb24gPSBjb3JyZWN0ZWRBcnJvd0VkZ2VQb3NpdGlv
bihMYWJlbEFycm93RWRnZVBvc2l0aW9uOjpMZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b246OkZvclJvd3MpOworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVk
QXJyb3dBbGlnbm1lbnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpM
ZWFkaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaSA9PSByb3dQb3NpdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBh
cnJvd0VkZ2VQb3NpdGlvbiA9IGNvcnJlY3RlZEFycm93RWRnZVBvc2l0aW9uKExhYmVsQXJyb3dF
ZGdlUG9zaXRpb246OlRyYWlsaW5nLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3Mp
OworICAgICAgICAgICAgICAgIGFycm93QWxpZ25tZW50ID0gY29ycmVjdGVkQXJyb3dBbGlnbm1l
bnQoSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZywgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKIAotICAgICAgICAgICAgYXV0byBleHBl
Y3RlZExhYmVsU2l6ZSA9IGV4cGVjdGVkU2l6ZUZvckxheW91dExhYmVsKHRleHQsIGFycm93RGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYWJlbFNpemUgPSBJbnNwZWN0b3JP
dmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZSh0ZXh0LCBhcnJvd0RpcmVjdGlvbik7CiAgICAgICAg
ICAgICBpZiAoZ2FwTGFiZWxQb3NpdGlvbi54KCkgLSBleHBlY3RlZExhYmVsU2l6ZS53aWR0aCgp
ICsgc2Nyb2xsUG9zaXRpb24ueCgpIC0gdmlld3BvcnRCb3VuZHMueCgpIDwgMCkKLSAgICAgICAg
ICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IGNvcnJlY3RlZEFycm93RGlyZWN0aW9uKExhYmVsQXJy
b3dEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7Cisg
ICAgICAgICAgICAgICAgYXJyb3dEaXJlY3Rpb24gPSBjb3JyZWN0ZWRBcnJvd0RpcmVjdGlvbihJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246OkxlZnQsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7CiAKLSAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVy
bGF5LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbCh0ZXh0LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFu
c2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcnJvd0RpcmVjdGlvbiwgYXJyb3dFZGdlUG9z
aXRpb24pKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQo
eyB0ZXh0LCBnYXBMYWJlbFBvc2l0aW9uLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9y
LCB7IGFycm93RGlyZWN0aW9uLCBhcnJvd0FsaWdubWVudCB9IH0pOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCA1
Mjk1M2ExODNmMGNjZTExMzRiMzc1Yzc0NzhmMTMwM2NkNGJhZTcwLi4yNzY3M2NhMDdlN2M5ZDc3
ODU3MmQ0NWI1NWFmZmU4MmJiOGRkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdExpbmUu
aCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTY2LDIxICs2Nyw2IEBAIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UmLCBJbnNwZWN0b3JDbGllbnQqKTsKICAg
ICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCi0gICAgZW51bSBjbGFzcyBMYWJlbEFycm93RGlyZWN0
aW9uIHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgICAg
IExlZnQsCi0gICAgICAgIFJpZ2h0LAotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIExhYmVsQXJy
b3dFZGdlUG9zaXRpb24gewotICAgICAgICBOb25lLAotICAgICAgICBMZWFkaW5nLCAvLyBQb3Np
dGlvbmVkIGF0IHRoZSBsZWZ0L3RvcCBzaWRlIG9mIGVkZ2UuCi0gICAgICAgIE1pZGRsZSwgLy8g
UG9zaXRpb25lZCBhdCB0aGUgY2VudGVyIG9uIHRoZSBlZGdlLgotICAgICAgICBUcmFpbGluZywg
Ly8gUG9zaXRpb25lZCBhdCB0aGUgcmlnaHQvYm90dG9tIHNpZGUgb2YgdGhlIGVkZ2UuCi0gICAg
fTsKLQogICAgIHN0cnVjdCBIaWdobGlnaHQgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CiAKQEAgLTEwNSwyMCArOTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0cnVj
dCBHcmlkSGlnaGxpZ2h0T3ZlcmxheSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CiAKLSAgICAgICAgICAgIHN0cnVjdCBMYWJlbCB7Ci0gICAgICAgICAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICAgICAgICAgIFN0cmlu
ZyB0ZXh0OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb247Ci0gICAgICAgICAg
ICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgIExhYmVsQXJyb3dE
aXJlY3Rpb24gYXJyb3dEaXJlY3Rpb247Ci0gICAgICAgICAgICAgICAgTGFiZWxBcnJvd0VkZ2VQ
b3NpdGlvbiBhcnJvd0VkZ2VQb3NpdGlvbjsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdo
dE92ZXJsYXk6OkxhYmVsPiBkZWNvZGUoRGVjb2RlciYpOwotI2VuZGlmCi0gICAgICAgICAgICB9
OwotCiAgICAgICAgICAgICBzdHJ1Y3QgQXJlYSB7CiAgICAgICAgICAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwpAQCAt
MTM0LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdExpbmU+IGdy
aWRMaW5lczsKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGdhcHM7CiAgICAgICAgICAg
ICBWZWN0b3I8QXJlYT4gYXJlYXM7Ci0gICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsK
KyAgICAgICAgICAgIFZlY3RvcjxJbnNwZWN0b3JPdmVybGF5TGFiZWw+IGxhYmVsczsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CkBAIC0zNjEsMzggKzMzMyw2IEBAIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0CiAgICAgcmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92ZXJsYXkgfTsK
IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpIaWdo
bGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCB0ZXh0OwotICAgIGVuY29kZXIgPDwgbG9jYXRp
b247Ci0gICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYXJyb3dEaXJlY3Rpb24pOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGFycm93RWRnZVBvc2l0aW9uKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRI
aWdobGlnaHRPdmVybGF5OjpMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlk
SGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVs
IGxhYmVsOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5iYWNrZ3JvdW5k
Q29sb3IpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdWludDMyX3QgYXJyb3dEaXJlY3Rp
b247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKLQotICAgIHVpbnQzMl90IGFycm93
RWRnZVBvc2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyb3dFZGdlUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGxhYmVsLmFycm93RWRnZVBvc2l0aW9uID0gKElu
c3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dFZGdlUG9zaXRpb24pYXJyb3dFZGdlUG9zaXRpb247
Ci0KLSAgICByZXR1cm4geyBsYWJlbCB9OwotfQotCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFy
ZWE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
TGFiZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJl
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2M2ZTE3YzNlYmFmZDE2MzdlOTE5YTIzNWU0M2Q5YjE2NGRhMzUw
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5TGFiZWwuY3BwCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JPdmVybGF5TGFiZWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsUGFkZGluZyA9IDQ7
CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGxhYmVsQXJyb3dTaXplID0gNjsKKworSW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpJbnNwZWN0b3JPdmVybGF5TGFiZWwoVmVjdG9yPENvbnRlbnQ+JiYgY29u
dGVudHMsIEZsb2F0UG9pbnQgbG9jYXRpb24sIENvbG9yIGJhY2tncm91bmRDb2xvciwgQXJyb3cg
YXJyb3cpCisgICAgOiBtX2NvbnRlbnRzKFdURk1vdmUoY29udGVudHMpKQorICAgICwgbV9sb2Nh
dGlvbihsb2NhdGlvbikKKyAgICAsIG1fYmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvcikK
KyAgICAsIG1fYXJyb3coYXJyb3cpCit7Cit9CisKK0luc3BlY3Rvck92ZXJsYXlMYWJlbDo6SW5z
cGVjdG9yT3ZlcmxheUxhYmVsKGNvbnN0IFN0cmluZyYgdGV4dCwgRmxvYXRQb2ludCBsb2NhdGlv
biwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBBcnJvdyBhcnJvdykKKyAgICA6IEluc3BlY3Rvck92
ZXJsYXlMYWJlbCh7IHsgdGV4dCwgQ29sb3I6OmJsYWNrIH0gfSwgbG9jYXRpb24sIGJhY2tncm91
bmRDb2xvciwgYXJyb3cpCit7Cit9CisKK3N0YXRpYyBGb250Q2FzY2FkZSBzeXN0ZW1Gb250KCkK
K3sKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoeyAic3lzdGVtLXVpIiB9KTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSg1MDApKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKDEyKTsKKworICAgIEZvbnRDYXNjYWRlIGZvbnQoV1RGTW92
ZShmb250RGVzY3JpcHRpb24pLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAg
ICByZXR1cm4gZm9udDsKK30KKworc3RhdGljIFBhdGggYmFja2dyb3VuZFBhdGgoZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdyBhcnJvdywgZmxv
YXQgYXJyb3dTaXplKQoreworICAgIFBhdGggcGF0aDsKKyAgICBGbG9hdFNpemUgb2Zmc2V0Rm9y
QXJyb3dFZGdlUG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGFycm93LmRpcmVjdGlvbikgeworICAg
IGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpEb3duOgorICAg
ICAgICBwYXRoLm1vdmVUbyh7IC0od2lkdGggLyAyKSwgLWhlaWdodCAtIGFycm93U2l6ZSB9KTsK
KyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtKHdpZHRoIC8gMiksIC1hcnJvd1NpemUgfSk7CisK
KyAgICAgICAgc3dpdGNoIChhcnJvdy5hbGlnbm1lbnQpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAgICBw
YXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSwgMCB9KTsKKyAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHsgLSh3aWR0aCAvIDIpICsgYXJyb3dTaXplLCAtYXJyb3dTaXplIH0pOworICAgICAg
ICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7ICh3aWR0aCAvIDIpLCAwIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFy
cm93U2l6ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgMCwg
MCB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtYXJyb3dTaXpl
IH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxh
YmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHBhdGguYWRkTGlu
ZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CisgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAwIH0pOworICAgICAgICAgICAgb2Zmc2V0
Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IC0od2lkdGggLyAyKSwgMCB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25t
ZW50OjpOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYXRo
LmFkZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAtYXJyb3dTaXplIH0pOworICAgICAgICBwYXRoLmFk
ZExpbmVUbyh7ICh3aWR0aCAvIDIpLCAtaGVpZ2h0IC0gYXJyb3dTaXplIH0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6
VXA6CisgICAgICAgIHBhdGgubW92ZVRvKHsgLSh3aWR0aCAvIDIpLCBoZWlnaHQgKyBhcnJvd1Np
emUgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpLCBhcnJvd1NpemUg
fSk7CisKKyAgICAgICAgc3dpdGNoIChhcnJvdy5hbGlnbm1lbnQpIHsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAg
ICAgICBwYXRoLmFkZExpbmVUbyh7IC0od2lkdGggLyAyKSwgMCB9KTsKKyAgICAgICAgICAgIHBh
dGguYWRkTGluZVRvKHsgLSh3aWR0aCAvIDIpICsgYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7Cisg
ICAgICAgICAgICBvZmZzZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgKHdpZHRoIC8gMiksIDAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAtYXJyb3dTaXplLCBhcnJvd1NpemUgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7
IDAsIDAgfSk7CisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgYXJyb3dT
aXplIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zlcmxh
eUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHsgKHdpZHRoIC8gMikgLSBhcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAg
ICAgIHBhdGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIDAgfSk7CisgICAgICAgICAgICBvZmZz
ZXRGb3JBcnJvd0VkZ2VQb3NpdGlvbiA9IHsgLSh3aWR0aCAvIDIpLCAwIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGln
bm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBh
dGguYWRkTGluZVRvKHsgKHdpZHRoIC8gMiksIGFycm93U2l6ZSB9KTsKKyAgICAgICAgcGF0aC5h
ZGRMaW5lVG8oeyAod2lkdGggLyAyKSwgaGVpZ2h0ICsgYXJyb3dTaXplIH0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6
UmlnaHQ6CisgICAgICAgIHBhdGgubW92ZVRvKHsgLXdpZHRoIC0gYXJyb3dTaXplLCAoaGVpZ2h0
IC8gMikgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6ZSwgKGhlaWdodCAv
IDIpIH0pOworCisgICAgICAgIHN3aXRjaCAoYXJyb3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpMZWFkaW5nOgorICAg
ICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpICsgYXJy
b3dTaXplIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAtKGhlaWdodCAvIDIp
IH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIChoZWln
aHQgLyAyKSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6CisgICAgICAgICAgICBwYXRoLmFk
ZExpbmVUbyh7IC1hcnJvd1NpemUsIGFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHsgMCwgMCB9KTsKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgLWFycm93U2l6
ZSwgLWFycm93U2l6ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3Bl
Y3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6VHJhaWxpbmc6CisgICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyh7IDAsIChoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKHsgLWFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dTaXplIH0pOworICAg
ICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0oaGVpZ2h0IC8gMikg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJl
bDo6QXJyb3c6OkFsaWdubWVudDo6Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAtYXJyb3dTaXplLCAtKGhlaWdodCAvIDIpIH0p
OworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IC13aWR0aCAtIGFycm93U2l6ZSwgLShoZWlnaHQg
LyAyKSB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6
OkFycm93OjpEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHBhdGgubW92ZVRvKHsgd2lkdGggKyBh
cnJvd1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJv
d1NpemUsIChoZWlnaHQgLyAyKSB9KTsKKworICAgICAgICBzd2l0Y2ggKGFycm93LmFsaWdubWVu
dCkgeworICAgICAgICBjYXNlIEluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVu
dDo6TGVhZGluZzoKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHsgYXJyb3dTaXplLCAtKGhl
aWdodCAvIDIpICsgYXJyb3dTaXplIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAw
LCAtKGhlaWdodCAvIDIpIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRp
b24gPSB7IDAsIChoZWlnaHQgLyAyKSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6CisgICAg
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgYXJyb3dTaXplIH0pOworICAgICAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAwIH0pOworICAgICAgICAgICAgcGF0aC5hZGRMaW5l
VG8oeyBhcnJvd1NpemUsIC1hcnJvd1NpemUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5n
OgorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyAwLCAoaGVpZ2h0IC8gMikgfSk7CisgICAg
ICAgICAgICBwYXRoLmFkZExpbmVUbyh7IGFycm93U2l6ZSwgKGhlaWdodCAvIDIpIC0gYXJyb3dT
aXplIH0pOworICAgICAgICAgICAgb2Zmc2V0Rm9yQXJyb3dFZGdlUG9zaXRpb24gPSB7IDAsIC0o
aGVpZ2h0IC8gMikgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6Tm9uZToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oeyBhcnJvd1NpemUsIC0oaGVp
Z2h0IC8gMikgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsgd2lkdGggKyBhcnJvd1NpemUs
IC0oaGVpZ2h0IC8gMikgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpOb25lOgorICAgICAgICBwYXRoLm1vdmVUbyh7
IC0od2lkdGggLyAyKSwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8o
eyAtKHdpZHRoIC8gMiksIGhlaWdodCAvIDIgfSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHsg
d2lkdGggLyAyLCBoZWlnaHQgLyAyIH0pOworICAgICAgICBwYXRoLmFkZExpbmVUbyh7IHdpZHRo
IC8gMiwgLShoZWlnaHQgLyAyKSB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcGF0
aC5jbG9zZVN1YnBhdGgoKTsKKyAgICBwYXRoLnRyYW5zbGF0ZShvZmZzZXRGb3JBcnJvd0VkZ2VQ
b3NpdGlvbik7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKworUGF0aCBJbnNwZWN0b3JPdmVybGF5
TGFiZWw6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBtYXhpbXVtTGluZVdp
ZHRoKQoreworICAgIGNvbnN0ZXhwciBVQ2hhciBlbGxpcHNpcyA9IDB4MjAyNjsKKworICAgIGF1
dG8gZm9udCA9IHN5c3RlbUZvbnQoKTsKKyAgICBmbG9hdCBsaW5lSGVpZ2h0ID0gZm9udC5tZXRy
aWNzT2ZQcmltYXJ5Rm9udCgpLmZsb2F0SGVpZ2h0KCk7CisgICAgZmxvYXQgbGluZURlc2NlbnQg
PSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCkuZmxvYXREZXNjZW50KCk7CisKKyAgICBWZWN0
b3I8VGV4dFJ1bj4gdGV4dFJ1bnM7CisgICAgVmVjdG9yPENvbG9yPiB0ZXh0Q29sb3JzOworICAg
IFZlY3RvcjxmbG9hdD4gdGV4dFdpZHRoczsKKyAgICBWZWN0b3I8c2l6ZV90PiBsaW5lU3RhcnRJ
bmRleGVzOworICAgIGZsb2F0IGxvbmdlc3RMaW5lV2lkdGggPSAwOworICAgIGludCBjdXJyZW50
TGluZSA9IDA7CisKKyAgICBmbG9hdCBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICBmb3IgKGF1
dG8gY29udGVudCA6IG1fY29udGVudHMpIHsKKyAgICAgICAgYXV0byBsaW5lcyA9IGNvbnRlbnQu
dGV4dC5zcGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCdcbicpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkgewor
ICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4ZXMuYXBwZW5kKHRleHRSdW5zLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCA9IDA7CisgICAgICAgICAgICAgICAg
KytjdXJyZW50TGluZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0ZXh0ID0g
bGluZXNbaV07CisgICAgICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gdGV4dFJ1biA9IFRleHRSdW4odGV4dCk7
CisgICAgICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOworCisg
ICAgICAgICAgICBpZiAobWF4aW11bUxpbmVXaWR0aCAmJiBjdXJyZW50TGluZVdpZHRoICsgdGV4
dFdpZHRoICsgKGxhYmVsUGFkZGluZyAqIDIpID4gbWF4aW11bUxpbmVXaWR0aCkgeworICAgICAg
ICAgICAgICAgIHRleHQuYXBwZW5kKGVsbGlwc2lzKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
Y3VycmVudExpbmVXaWR0aCArIHRleHRXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSA+IG1heGlt
dW1MaW5lV2lkdGggJiYgdGV4dC5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVtb3ZlIHRoZSBzZWNvbmQgZnJvbSBsYXN0IGNoYXJhY3RlciAodGhlIGNoYXJhY3RlciBi
ZWZvcmUgdGhlIGVsbGlwc2lzKSBhbmQgcmVtZWFzdXJlLgorICAgICAgICAgICAgICAgICAgICB0
ZXh0LnJlbW92ZSh0ZXh0Lmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgICAgIHRleHRS
dW4gPSBUZXh0UnVuKHRleHQpOworICAgICAgICAgICAgICAgICAgICB0ZXh0V2lkdGggPSBmb250
LndpZHRoKHRleHRSdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGV4dFJ1bnMuYXBwZW5kKFdURk1vdmUodGV4dFJ1bikpOworICAgICAgICAgICAg
dGV4dENvbG9ycy5hcHBlbmQoY29udGVudC50ZXh0Q29sb3IpOworICAgICAgICAgICAgdGV4dFdp
ZHRocy5hcHBlbmQodGV4dFdpZHRoKTsKKworICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCAr
PSB0ZXh0V2lkdGg7CisgICAgICAgICAgICBpZiAoY3VycmVudExpbmVXaWR0aCA+IGxvbmdlc3RM
aW5lV2lkdGgpCisgICAgICAgICAgICAgICAgbG9uZ2VzdExpbmVXaWR0aCA9IGN1cnJlbnRMaW5l
V2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbG9hdCB0b3RhbFRleHRIZWlnaHQgPSBs
aW5lSGVpZ2h0ICogKGN1cnJlbnRMaW5lICsgMSk7CisKKyAgICBGbG9hdFBvaW50IHRleHRQb3Np
dGlvbjsKKyAgICBzd2l0Y2ggKG1fYXJyb3cuZGlyZWN0aW9uKSB7CisgICAgY2FzZSBBcnJvdzo6
RGlyZWN0aW9uOjpEb3duOgorICAgICAgICBzd2l0Y2ggKG1fYXJyb3cuYWxpZ25tZW50KSB7Cisg
ICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TGVhZGluZzoKKyAgICAgICAgICAgIHRleHRQ
b3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxQYWRkaW5nLCBsaW5lSGVpZ2h0IC0gdG90YWxUZXh0
SGVpZ2h0IC0gbGluZURlc2NlbnQgLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGluZyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6
CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0obG9uZ2VzdExpbmVXaWR0
aCAvIDIpLCBsaW5lSGVpZ2h0IC0gdG90YWxUZXh0SGVpZ2h0IC0gbGluZURlc2NlbnQgLSBsYWJl
bEFycm93U2l6ZSAtIGxhYmVsUGFkZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJvdzo6QWxpZ25tZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlv
biA9IEZsb2F0UG9pbnQoLWxvbmdlc3RMaW5lV2lkdGggLSBsYWJlbFBhZGRpbmcsIGxpbmVIZWln
aHQgLSB0b3RhbFRleHRIZWlnaHQgLSBsaW5lRGVzY2VudCAtIGxhYmVsQXJyb3dTaXplIC0gbGFi
ZWxQYWRkaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93OjpBbGln
bm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OlVwOgorICAgICAgICBzd2l0Y2ggKG1fYXJy
b3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TGVhZGluZzoK
KyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQobGFiZWxQYWRkaW5nLCBsaW5l
SGVpZ2h0IC0gbGluZURlc2NlbnQgKyBsYWJlbEFycm93U2l6ZSArIGxhYmVsUGFkZGluZyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25tZW50OjpNaWRkbGU6
CisgICAgICAgICAgICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KC0obG9uZ2VzdExpbmVXaWR0
aCAvIDIpLCBsaW5lSGVpZ2h0IC0gbGluZURlc2NlbnQgKyBsYWJlbEFycm93U2l6ZSArIGxhYmVs
UGFkZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJvdzo6QWxpZ25t
ZW50OjpUcmFpbGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLWxv
bmdlc3RMaW5lV2lkdGggLSBsYWJlbFBhZGRpbmcsIGxpbmVIZWlnaHQgLSBsaW5lRGVzY2VudCAr
IGxhYmVsQXJyb3dTaXplICsgbGFiZWxQYWRkaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OlJpZ2h0
OgorICAgICAgICBzd2l0Y2ggKG1fYXJyb3cuYWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgQXJy
b3c6OkFsaWdubWVudDo6TGVhZGluZzoKKyAgICAgICAgICAgIHRleHRQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoLWxvbmdlc3RMaW5lV2lkdGggLSBsYWJlbEFycm93U2l6ZSAtIGxhYmVsUGFkZGluZywg
bGFiZWxQYWRkaW5nICsgbGluZUhlaWdodCAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6Ok1pZGRsZToKKyAgICAgICAgICAg
IHRleHRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLWxvbmdlc3RMaW5lV2lkdGggLSBsYWJlbEFycm93
U2l6ZSAtIGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtICh0b3RhbFRleHRIZWlnaHQgLyAyKSAt
IGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93OjpB
bGlnbm1lbnQ6OlRyYWlsaW5nOgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2lu
dCgtbG9uZ2VzdExpbmVXaWR0aCAtIGxhYmVsQXJyb3dTaXplIC0gbGFiZWxQYWRkaW5nLCBsaW5l
SGVpZ2h0IC0gdG90YWxUZXh0SGVpZ2h0IC0gbGFiZWxQYWRkaW5nIC0gbGluZURlc2NlbnQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6Tm9uZToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgc3dpdGNoIChtX2Fycm93LmFsaWdubWVu
dCkgeworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OkxlYWRpbmc6CisgICAgICAgICAg
ICB0ZXh0UG9zaXRpb24gPSBGbG9hdFBvaW50KGxhYmVsQXJyb3dTaXplICsgbGFiZWxQYWRkaW5n
LCBsYWJlbFBhZGRpbmcgKyBsaW5lSGVpZ2h0IC0gbGluZURlc2NlbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyb3c6OkFsaWdubWVudDo6TWlkZGxlOgorICAgICAgICAg
ICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJlbEFycm93U2l6ZSArIGxhYmVsUGFkZGlu
ZywgbGluZUhlaWdodCAtICh0b3RhbFRleHRIZWlnaHQgLyAyKSAtIGxpbmVEZXNjZW50KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93OjpBbGlnbm1lbnQ6OlRyYWlsaW5n
OgorICAgICAgICAgICAgdGV4dFBvc2l0aW9uID0gRmxvYXRQb2ludChsYWJlbEFycm93U2l6ZSAr
IGxhYmVsUGFkZGluZywgbGluZUhlaWdodCAtIHRvdGFsVGV4dEhlaWdodCAtIGxhYmVsUGFkZGlu
ZyAtIGxpbmVEZXNjZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycm93
OjpBbGlnbm1lbnQ6Ok5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246Ok5vbmU6CisgICAgICAgIHRleHRQ
b3NpdGlvbiA9IEZsb2F0UG9pbnQoLShsb25nZXN0TGluZVdpZHRoIC8gMiksIC0odG90YWxUZXh0
SGVpZ2h0IC8gMikgKyBsaW5lSGVpZ2h0IC0gbGluZURlc2NlbnQpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBQYXRoIGxhYmVsUGF0aCA9IGJhY2tncm91bmRQYXRoKGxvbmdlc3RMaW5l
V2lkdGggKyAobGFiZWxQYWRkaW5nICogMiksIHRvdGFsVGV4dEhlaWdodCArIChsYWJlbFBhZGRp
bmcgKiAyKSwgbV9hcnJvdywgbGFiZWxBcnJvd1NpemUpOworCisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX2xvY2F0
aW9uKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fYmFja2dyb3VuZENvbG9yKTsKKyAg
ICBjb250ZXh0LmZpbGxQYXRoKGxhYmVsUGF0aCk7CisgICAgY29udGV4dC5zdHJva2VQYXRoKGxh
YmVsUGF0aCk7CisKKyAgICBpbnQgbGluZSA9IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0UnVucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobGluZVN0YXJ0SW5kZXhlcy5jb250YWlucyhpKSkgeworICAgICAgICAgICAgeE9mZnNl
dCA9IDA7CisgICAgICAgICAgICArK2xpbmU7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcih0ZXh0Q29sb3JzW2ldKTsKKyAgICAgICAgY29udGV4dC5kcmF3VGV4dChm
b250LCB0ZXh0UnVuc1tpXSwgdGV4dFBvc2l0aW9uICsgRmxvYXRQb2ludCh4T2Zmc2V0LCBsaW5l
ICogbGluZUhlaWdodCkpOworCisgICAgICAgIHhPZmZzZXQgKz0gdGV4dFdpZHRoc1tpXTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbGFiZWxQYXRoOworfQorCitGbG9hdFNpemUgSW5zcGVjdG9yT3Zl
cmxheUxhYmVsOjpleHBlY3RlZFNpemUoY29uc3QgVmVjdG9yPENvbnRlbnQ+JiBjb250ZW50cywg
QXJyb3c6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgYXV0byBmb250ID0gc3lzdGVtRm9u
dCgpOworICAgIGZsb2F0IGxpbmVIZWlnaHQgPSBmb250Lm1ldHJpY3NPZlByaW1hcnlGb250KCku
ZmxvYXRIZWlnaHQoKTsKKworICAgIGZsb2F0IGxvbmdlc3RMaW5lV2lkdGggPSAwOworICAgIGlu
dCBjdXJyZW50TGluZSA9IDA7CisKKyAgICBmbG9hdCBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAg
ICBmb3IgKGF1dG8gY29udGVudCA6IGNvbnRlbnRzKSB7CisgICAgICAgIGF1dG8gbGluZXMgPSBj
b250ZW50LnRleHQuc3BsaXRBbGxvd2luZ0VtcHR5RW50cmllcygnXG4nKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYg
KGkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMDsKKyAgICAgICAgICAg
ICAgICArK2N1cnJlbnRMaW5lOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRl
eHQgPSBsaW5lc1tpXTsKKyAgICAgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCArPSBmb250
LndpZHRoKFRleHRSdW4odGV4dCkpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGgg
PiBsb25nZXN0TGluZVdpZHRoKQorICAgICAgICAgICAgICAgIGxvbmdlc3RMaW5lV2lkdGggPSBj
dXJyZW50TGluZVdpZHRoOworICAgICAgICB9CisgICAgfQorCisgICAgZmxvYXQgdG90YWxUZXh0
SGVpZ2h0ID0gbGluZUhlaWdodCAqIChjdXJyZW50TGluZSArIDEpOworCisgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OkRvd246CisgICAgY2FzZSBB
cnJvdzo6RGlyZWN0aW9uOjpVcDoKKyAgICAgICAgcmV0dXJuIHsgbG9uZ2VzdExpbmVXaWR0aCAr
IChsYWJlbFBhZGRpbmcgKiAyKSwgdG90YWxUZXh0SGVpZ2h0ICsgKGxhYmVsUGFkZGluZyAqIDIp
ICsgbGFiZWxBcnJvd1NpemUgfTsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rpb246OlJpZ2h0Ogor
ICAgIGNhc2UgQXJyb3c6OkRpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIHsgbG9uZ2Vz
dExpbmVXaWR0aCArIChsYWJlbFBhZGRpbmcgKiAyKSArIGxhYmVsQXJyb3dTaXplLCB0b3RhbFRl
eHRIZWlnaHQgKyAobGFiZWxQYWRkaW5nICogMikgfTsKKyAgICBjYXNlIEFycm93OjpEaXJlY3Rp
b246Ok5vbmU6CisgICAgICAgIHJldHVybiB7IGxvbmdlc3RMaW5lV2lkdGggKyAobGFiZWxQYWRk
aW5nICogMiksIHRvdGFsVGV4dEhlaWdodCArIChsYWJlbFBhZGRpbmcgKiAyKSB9OworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0Zsb2F0U2l6ZSBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OmV4cGVjdGVkU2l6ZShjb25zdCBTdHJpbmcmIHRleHQsIEFycm93
OjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBJbnNwZWN0b3JPdmVybGF5TGFi
ZWw6OmV4cGVjdGVkU2l6ZSh7IHsgdGV4dCwgQ29sb3I6OmJsYWNrIH0gfSwgZGlyZWN0aW9uKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXlMYWJlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZjMzNjU3ZDdmZWMwYzQ5
MWFmY2Q1YzUzNTliYmRhNDY5NzM4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheUxhYmVsLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworY2xhc3MgUGF0aDsKKworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheUxhYmVsIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQXJyb3cgeworICAgICAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBE
aXJlY3Rpb24gOiB1aW50OF90IHsKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBEb3du
LAorICAgICAgICAgICAgVXAsCisgICAgICAgICAgICBMZWZ0LAorICAgICAgICAgICAgUmlnaHQs
CisgICAgICAgIH07CisKKyAgICAgICAgZW51bSBjbGFzcyBBbGlnbm1lbnQgOiB1aW50OF90IHsK
KyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBMZWFkaW5nLCAvLyBQb3NpdGlvbmVkIGF0
IHRoZSBsZWZ0L3RvcCBzaWRlIG9mIGVkZ2UuCisgICAgICAgICAgICBNaWRkbGUsIC8vIFBvc2l0
aW9uZWQgYXQgdGhlIGNlbnRlciBvbiB0aGUgZWRnZS4KKyAgICAgICAgICAgIFRyYWlsaW5nLCAv
LyBQb3NpdGlvbmVkIGF0IHRoZSByaWdodC9ib3R0b20gc2lkZSBvZiB0aGUgZWRnZS4KKyAgICAg
ICAgfTsKKworICAgICAgICBEaXJlY3Rpb24gZGlyZWN0aW9uOworICAgICAgICBBbGlnbm1lbnQg
YWxpZ25tZW50OworCisgICAgICAgIEFycm93KERpcmVjdGlvbiBkaXJlY3Rpb24sIEFsaWdubWVu
dCBhbGlnbm1lbnQpCisgICAgICAgICAgICA6IGRpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAg
ICAgICAsIGFsaWdubWVudChhbGlnbm1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChhbGlnbm1lbnQgIT0gQWxpZ25tZW50OjpOb25lIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
Ok5vbmUpOworICAgICAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rv
ck92ZXJsYXlMYWJlbDo6QXJyb3c+IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYKKyAgICB9Owor
CisgICAgc3RydWN0IENvbnRlbnQgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7CisKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIENvbG9yIHRleHRDb2xvcjsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250
ZW50PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmCisgICAgfTsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIEluc3BlY3Rvck92ZXJsYXlMYWJlbChWZWN0b3I8Q29udGVudD4mJiwgRmxvYXRQb2ludCwg
Q29sb3IgYmFja2dyb3VuZENvbG9yLCBBcnJvdyk7CisgICAgSW5zcGVjdG9yT3ZlcmxheUxhYmVs
KGNvbnN0IFN0cmluZyYsIEZsb2F0UG9pbnQsIENvbG9yIGJhY2tncm91bmRDb2xvciwgQXJyb3cp
OworCisgICAgUGF0aCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGZsb2F0IG1heGltdW1MaW5lV2lk
dGggPSAwKTsKKworICAgIHN0YXRpYyBGbG9hdFNpemUgZXhwZWN0ZWRTaXplKGNvbnN0IFZlY3Rv
cjxDb250ZW50PiYsIEFycm93OjpEaXJlY3Rpb24pOworICAgIHN0YXRpYyBGbG9hdFNpemUgZXhw
ZWN0ZWRTaXplKGNvbnN0IFN0cmluZyYsIEFycm93OjpEaXJlY3Rpb24pOworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheUxhYmVsPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENvbnRlbnQ+IG1fY29udGVudHM7CisgICAgRmxvYXRQ
b2ludCBtX2xvY2F0aW9uOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIEFycm93
IG1fYXJyb3c7Cit9OworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb250ZW50czsKKyAgICBlbmNvZGVy
IDw8IG1fbG9jYXRpb247CisgICAgZW5jb2RlciA8PCBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBl
bmNvZGVyIDw8IG1fYXJyb3c7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0
aW9uYWw8SW5zcGVjdG9yT3ZlcmxheUxhYmVsPiBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPENvbnRlbnQ+
PiBjb250ZW50czsKKyAgICBkZWNvZGVyID4+IGNvbnRlbnRzOworICAgIGlmICghY29udGVudHMp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UG9pbnQ+IGxvY2F0aW9uOworICAgIGRlY29kZXIgPj4gbG9jYXRpb247CisgICAgaWYgKCFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
Q29sb3I+IGJhY2tncm91bmRDb2xvcjsKKyAgICBkZWNvZGVyID4+IGJhY2tncm91bmRDb2xvcjsK
KyAgICBpZiAoIWJhY2tncm91bmRDb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8QXJyb3c+IGFycm93OworICAgIGRlY29kZXIgPj4gYXJyb3c7
CisgICAgaWYgKCFhcnJvdykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJl
dHVybiB7IHsKKyAgICAgICAgV1RGTW92ZSgqY29udGVudHMpLAorICAgICAgICAqbG9jYXRpb24s
CisgICAgICAgICpiYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICphcnJvdworICAgIH0gfTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFy
cm93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRp
cmVjdGlvbjsKKyAgICBlbmNvZGVyIDw8IGFsaWdubWVudDsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93PiBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPERpcmVjdGlvbj4gZGlyZWN0aW9uOworICAgIGRlY29kZXIgPj4gZGly
ZWN0aW9uOworICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxBbGlnbm1lbnQ+IGFsaWdubWVudDsKKyAgICBkZWNvZGVy
ID4+IGFsaWdubWVudDsKKyAgICBpZiAoIWFsaWdubWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKmRpcmVjdGlvbiwgKmFsaWdubWVudCB9IH07Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpD
b250ZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHRleHQ7CisgICAgZW5jb2RlciA8PCB0ZXh0Q29sb3I7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpDb250ZW50PiBJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkNvbnRlbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiB0ZXh0OworICAgIGRlY29kZXIgPj4gdGV4dDsKKyAg
ICBpZiAoIXRleHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiB0ZXh0Q29sb3I7CisgICAgZGVjb2RlciA+PiB0ZXh0Q29sb3I7CisgICAg
aWYgKCF0ZXh0Q29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4geyB7ICp0ZXh0LCAqdGV4dENvbG9yIH0gfTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uLAorICAgICAgICBXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpEaXJlY3Rpb246Ok5vbmUsCisgICAgICAgIFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkRpcmVjdGlvbjo6RG93biwKKyAgICAg
ICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9uOjpVcCwK
KyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6RGlyZWN0aW9u
OjpMZWZ0LAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5TGFiZWw6OkFycm93OjpE
aXJlY3Rpb246OlJpZ2h0CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50PiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50LAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0
b3JPdmVybGF5TGFiZWw6OkFycm93OjpBbGlnbm1lbnQ6Ok5vbmUsCisgICAgICAgIFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdubWVudDo6TGVhZGluZywKKyAgICAg
ICAgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheUxhYmVsOjpBcnJvdzo6QWxpZ25tZW50OjpNaWRk
bGUsCisgICAgICAgIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXlMYWJlbDo6QXJyb3c6OkFsaWdu
bWVudDo6VHJhaWxpbmcKKyAgICA+OworfTsKKworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>