<?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>153768</bug_id>
          
          <creation_ts>2016-02-01 14:46:04 -0800</creation_ts>
          <short_desc>Factor style sharing code out of StyleResolver</short_desc>
          <delta_ts>2016-02-02 14:41:22 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1161046</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 14:46:04 -0800</bug_when>
    <thetext>Better factoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161050</commentid>
    <comment_count>1</comment_count>
      <attachid>270431</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 15:04:11 -0800</bug_when>
    <thetext>Created attachment 270431
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161052</commentid>
    <comment_count>2</comment_count>
      <attachid>270432</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 15:09:17 -0800</bug_when>
    <thetext>Created attachment 270432
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161062</commentid>
    <comment_count>3</comment_count>
      <attachid>270435</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 15:23:32 -0800</bug_when>
    <thetext>Created attachment 270435
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161168</commentid>
    <comment_count>4</comment_count>
      <attachid>270435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-01 18:18:26 -0800</bug_when>
    <thetext>Comment on attachment 270435
patch

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

&gt; Source/WebCore/style/StyleSharingResolver.cpp:65
&gt; +static inline bool elementHasDirectionAuto(const Element&amp; element)

Could take StyledElement&amp; here, not that it would make things any faster.

&gt; Source/WebCore/style/StyleTreeResolver.cpp:100
&gt; +static RenderStyle* placeholderStyle;

Why is it OK if this is global, given that ensurePlaceholderStyle takes a document?

Also, extra blank line before this.

&gt; Source/WebCore/style/StyleTreeResolver.cpp:976
&gt; +bool isPlaceholderStyle(const RenderStyle&amp; style)

Extra blank line before this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161169</commentid>
    <comment_count>5</comment_count>
      <attachid>270435</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-02-01 18:33:18 -0800</bug_when>
    <thetext>Comment on attachment 270435
patch

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

&gt; Source/WebCore/style/StyleSharingResolver.cpp:50
&gt; +    EInsideLink elementLinkState;

Should we lazily compute this value to avoid looking up the hash table proactively?

&gt; Source/WebCore/style/StyleSharingResolver.cpp:77
&gt; +    if (!element.parentElement())
&gt; +        return nullptr;

You no longer check the existence of parent style.  Is that expected?

&gt; Source/WebCore/style/StyleSharingResolver.cpp:362
&gt; +    for (unsigned i = 0; i &lt; classNames.size(); ++i) {

Should we store classNames.size() in a local variable instead?

&gt; Source/WebCore/style/StyleSharingResolver.h:46
&gt; +    const Element* searchSimilar(const Element&amp;) const;

I got confused by this name because it sounded as if we need to do further verification to make sure we can share a style with it.
How about &quot;findStyleSharableElement&quot; or &quot;findElementToShareStyle&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161180</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 19:31:52 -0800</bug_when>
    <thetext>&gt; Why is it OK if this is global, given that ensurePlaceholderStyle takes a
&gt; document?

This object is not really used, it just needs to be minimally initialized. This is what the old code did but it is clearly ugly. There is probably a way to avoid the font initialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161181</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-01 19:44:11 -0800</bug_when>
    <thetext>&gt; Should we lazily compute this value to avoid looking up the hash table
&gt; proactively?

Probably though I&apos;m not sure if it makes much difference in practice.

&gt; &gt; Source/WebCore/style/StyleSharingResolver.cpp:77
&gt; &gt; +    if (!element.parentElement())
&gt; &gt; +        return nullptr;
&gt; 
&gt; You no longer check the existence of parent style.  Is that expected?

I&apos;ll put the check back. I&apos;m not sure if it ever matters but can&apos;t really prove it.

&gt; &gt; Source/WebCore/style/StyleSharingResolver.cpp:362
&gt; &gt; +    for (unsigned i = 0; i &lt; classNames.size(); ++i) {
&gt; 
&gt; Should we store classNames.size() in a local variable instead?

Or rather use range-for.

&gt; I got confused by this name because it sounded as if we need to do further
&gt; verification to make sure we can share a style with it.
&gt; How about &quot;findStyleSharableElement&quot; or &quot;findElementToShareStyle&quot;?

The class name is Style::SharingResolver so I feel &quot;style&quot; and &quot;share&quot; are redundant in the function name. I sort of like &quot;similar&quot; since it communicates why we can share style with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161263</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-02-02 07:28:48 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt;
&gt; &gt; I got confused by this name because it sounded as if we need to do further
&gt; &gt; verification to make sure we can share a style with it.
&gt; &gt; How about &quot;findStyleSharableElement&quot; or &quot;findElementToShareStyle&quot;?
&gt; 
&gt; The class name is Style::SharingResolver so I feel &quot;style&quot; and &quot;share&quot; are
&gt; redundant in the function name. I sort of like &quot;similar&quot; since it
&gt; communicates why we can share style with it.

How about `findShared` or simply `resolve`?  I find the adjective `similar` to be more confusing because it sounds as if two elements share something but not identical in style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161405</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-02 14:41:22 -0800</bug_when>
    <thetext>https://trac.webkit.org/r196031</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270431</attachid>
            <date>2016-02-01 15:04:11 -0800</date>
            <delta_ts>2016-02-01 15:09:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-sharing-resolver.patch</filename>
            <type>text/plain</type>
            <size>61783</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxNi0wMi0wMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIHN0eWxlIHNoYXJp
bmcgY29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgY29kZSB0byBhIG5ldyBjbGFzcywgU3R5bGU6
OlNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICBXaGVuIHJlc29sdmluZyBkb2N1bWVudCBzdHls
ZSB3ZSBxdWVyeSB0aGUgc2hhcmluZyByZXNvbHZlciBmaXJzdCBiZWZvcmUgdXNpbmcgdGhlIHJl
Z3VsYXIgc3R5bGUgcmVzb2x2ZXIuCisgICAgICAgIE90aGVyIHBhdGhzIHRoYXQgY2FsbCBzdHls
ZSByZXNvbHZlciB3ZXJlIG1vc3RseSBhbHJlYWR5IGRpc2FibGluZyBpdCB3aXRoIERpc2FsbG93
U3R5bGVTaGFyaW5nIGZsYWcuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGNoUmVxdWVzdDo6TWF0Y2hSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKToKKworICAgICAg
ICAgICAgTW9yZSBjb25zdC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldFJlZ2lvbkZvclN0
eWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldE1lZGl1
bSk6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpwcmVwYXJlRXZhbHVhdG9yKToKKyAgICAgICAgKiBjc3Mv
U3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZU1lZGlhOjptYXRjaE1lZGl1
bSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
QXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRIYXNEaXJlY3Rpb25BdXRv
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKTogRGVsZXRlZC4KKworICAgICAgICAgICAgU3R5bGUgc2hhcmlu
ZyBjb2RlIG1vdmVzIHRvIFNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptZWRpYVF1ZXJ5RXZh
bHVhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdpb25G
b3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVt
ZW50TGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpz
ZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZU5vdFlldEF2YWlsYWJsZSk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFBsYWNl
aG9sZGVyIGNvZGUgbW92ZXMgdG8gVHJlZVJlc29sdmVyLgorCisgICAgICAgICogZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5r
cyk6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayk6CisgICAgICAg
IChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6
CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZSk6CisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9T
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJ
blJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpoYXNVbmlxdWVQc2V1ZG9TdHlsZSk6CisgICAgICAgICog
c3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OlNoYXJpbmdSZXNvbHZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6cGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6c2VhcmNoU2ltaWxhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpmaW5kU2libGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6CisgICAgICAgICogc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIu
aDogQWRkZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmVuc3VyZVBsYWNlaG9sZGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAg
IFRyeSB0byB1c2UgU2hhcmluZ1Jlc29sdmVyIGZpcnN0LgorICAgICAgICAgICAgQWxzbyBtb3Zl
IHBsYWNlaG9sZGVyIHN0eWxlIGhhbmRsaW5nIGhlcmUsIGl0IGlzIG9ubHkgcmVsZXZhbnQgd2hl
biByZXNvbHZpbmcgZG9jdW1lbnQgc3R5bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpw
b3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6aXNQbGFjZWhvbGRlclN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdF
bGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6
b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKwogMjAxNi0wMi0wMSAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNvbWUgU1BJIGRlY2xhcmF0aW9u
cyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBTUEkgaGVhZGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU4MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTY1NzYsNiArNjU3Niw4IEBACiAJCUU0NzEyN0NCMTYzNDM4QUUwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oICovOyB9OwogCQlFNDc3OEI3RjExNUE1ODFBMDBCNUQz
NzIgLyogSlNDdXN0b21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5j
cHAgKi87IH07CiAJCUU0Nzc4QjgwMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDc3OEI3RTEx
NUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5oICovOyB9OworCQlFNDdBM0FDMzFDNUVB
QkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8q
IFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLzsgfTsKKwkJRTQ3QTNBQzYxQzVFQUM5RDAwQ0NC
RkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBM0FDNDFDNUVBQzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFy
aW5nUmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hl
ZFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdC
NEJFOTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAw
MDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyog
RXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTQ1MjQsNiArMTQ1MjYsOCBAQAogCQlFNDZBMkIxRDE3Q0E3NkIx
MDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRWxlbWVudENoaWxkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ3NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21FdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBK
U0N1c3RvbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9t
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzIxQzVFQUJCRTAw
Q0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzQxQzVFQUM3OTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jl
c29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hhcmluZ1Jl
c29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0E5N0NFMTYzMDU5RkMw
MDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMyOTYsNiArMjMzMDAsOCBAQAogCQkJCUU0
RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAog
CQkJCUU0REVBQTE1MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5jcHAgKi8s
CiAJCQkJRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlVHJlZVJlc29sdmVyLmggKi8s
CisJCQkJRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cCAqLywKKwkJCQlFNDdBM0FDNDFDNUVBQzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3R5bGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMjY4NDYsNiArMjY4NTIsNyBAQAogCQkJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIz
QiAvKiBNYXRoTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RTAxMkRBMjVFMTdC
QUY4MEEyIC8qIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkE2NTRBNkMxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFNDdBM0FDNjFDNUVBQzlEMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzcwRUY4
NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCQzhEQUQxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRM
aW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDM5LDYgKzMwMDQ2LDcgQEAKIAkJCQlBODBFN0U5
QTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0NDhBMjlDMDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0Ez
QUMzMUM1RUFCQkUwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0QUQwMTczQzEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyogSlNI
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBBMUNF
OTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lv
biAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHJpZ2h0VG9MZWYKIAogY2xhc3MgTWF0Y2hSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBN
YXRjaFJlcXVlc3QoUnVsZVNldCogcnVsZVNldCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyA9IGZh
bHNlKQorICAgIE1hdGNoUmVxdWVzdChjb25zdCBSdWxlU2V0KiBydWxlU2V0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzID0gZmFsc2UpCiAgICAgICAgIDogcnVsZVNldChydWxlU2V0KQogICAgICAg
ICAsIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgIHsKQEAgLTUyOSw3
ICs1MjksNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzCiAgICAg
fQogfQogCi1ib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKFJ1
bGVTZXQqIHJ1bGVTZXQpCitib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGlu
Z1J1bGVzKGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgY2xlYXJNYXRjaGVkUnVsZXMo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJl
dmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFJlZ2lvbkZvclN0eWxpbmcoY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKSB7
IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7IH0KICAgICB2b2lkIHNldE1l
ZGl1bShjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBtZWRpdW0pIHsgbV9pc1ByaW50U3R5bGUg
PSBtZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50Iik7IH0KIAotICAgIGJvb2wg
aGFzQW55TWF0Y2hpbmdSdWxlcyhSdWxlU2V0Kik7CisgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1
bGVzKGNvbnN0IFJ1bGVTZXQqKTsKIAogICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBt
YXRjaGVkUmVzdWx0KCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0
Y2hlZFJ1bGVMaXN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eU1hdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
TWF0Y2hlci5jcHAJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5TWF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IE1lZAogICAgIGlmICghZG9jdW1lbnRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxl
bWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBEaXNhbGxv
d1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0
eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgp
LCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwg
cm9vdFN0eWxlLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAJKHJl
dmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBib29sIFN0eWxlTWVkaWE6Om1hdGNoTWVkaXVt
KGNvbnN0IFN0cmluCiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gZG9jdW1lbnQtPmVu
c3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgZG9j
dW1lbnQtPnJlbmRlclN0eWxlKCksIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlVc2Vy
QWdlbnRSdWxlcyk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwogCiAg
ICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCk7
CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsOCArMTc2LDYgQEAgc3RhdGlj
IGNvbnN0IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQcmlvcgogCiBzdGF0aWMgdm9pZCBleHRyYWN0
RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaFJlc3VsdCYsIFRleHREaXJlY3Rpb24mLCBXcml0aW5nTW9kZSYpOwogCi1S
ZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQogaW5s
aW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgp
CiB7CiAgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CkBA
IC0yNjQsNyArMjYyLDcgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYg
ZAogICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRv
cj4oImFsbCIpOwogCiAgICAgaWYgKHJvb3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9
IHN0eWxlRm9yRWxlbWVudCgqcm9vdCwgbV9kb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBEaXNhbGxv
d1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgICAgICBtX3Jvb3RE
ZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQucmVuZGVyU3R5
bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwogCiAgICAgaWYgKG1fcm9vdERlZmF1bHRT
dHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFR
dWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCksICZ2aWV3LT5mcmFtZSgpLCBtX3Jvb3RE
ZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAtMzMyLDE1ICszMzAsNiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpCiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRk
aXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNz
TmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcykg
Y29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVz
LmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpT
dGF0ZShFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVj
dG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQogICAgICwgbV9wYXJlbnRTdHls
ZShwYXJlbnRTdHlsZSkKQEAgLTM2OSwzMDUgKzM1OCw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRTdHkKICAgICBtX3N0eWxlID0gV1RGTW92ZShzdHlsZSk7CiAgICAg
dXBkYXRlQ29udmVyc2lvbkRhdGEoKTsKIH0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHls
ZVNlYXJjaFRocmVzaG9sZCA9IDEwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJj
aExldmVsVGhyZXNob2xkID0gMTA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKGNvbnN0IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCi17Ci0gICAgaWYg
KCFwYXJlbnRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhcmVu
dEVsZW1lbnQtPmhhc0ZsYWdzU2V0RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsKLX0KLQotTm9k
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2ln
bmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAotewotICAgIGlmICh2aXNpdGVkTm9kZUNvdW50
ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KHBhcmVu
dCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZFBh
cmVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KHBhcmVudCk7Ci0gICAgaWYgKHN0eWxlZFBh
cmVudC0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlz
PFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJlbnQpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpzdHls
ZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoc3R5bGVkUGFyZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVh
dHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0eWxlZFBhcmVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlZFBhcmVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICB1bnNp
Z25lZCBzdWJjb3VudCA9IDA7Ci0gICAgTm9kZSogdGhpc0NvdXNpbiA9IHN0eWxlZFBhcmVudDsK
LSAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHN0eWxlZFBhcmVudC0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3Rp
dmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIgZ28g
ZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJz
aW9uLgotICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwotICAg
IHdoaWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAg
ICAgICAgICAgKytzdWJjb3VudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVy
U3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkKLSAgICAg
ICAgICAgICAgICAmJiBpczxFbGVtZW50PigqY3VycmVudE5vZGUpICYmICFwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKGRvd25jYXN0PEVsZW1lbnQ+KGN1cnJlbnROb2RlKSkKLSAgICAgICAg
ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZl
ZCB0cmllcy4KLSAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJj
aFRocmVzaG9sZCAtIHN1YmNvdW50OwotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9k
ZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3ViY291bnQg
Pj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRo
aXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgICAgIHRo
aXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNl
dChSdWxlU2V0KiBydWxlU2V0KQotewotICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKCptX3N0YXRlLmVs
ZW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmls
dGVyKCkpOwotICAgIHJldHVybiBjb2xsZWN0b3IuaGFzQW55TWF0Y2hpbmdSdWxlcyhydWxlU2V0
KTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCYgZWxlbWVudCkgY29uc3QKLXsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkgfHwgIWlzPEhU
TUxJbnB1dEVsZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiB0aGlzSW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oZWxlbWVudCk7Ci0gICAgYXV0byYgb3RoZXJJbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKTsKLQotICAgIGlmICh0aGlzSW5wdXRFbGVt
ZW50LmlzQXV0b0ZpbGxlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LmlzQXV0b0ZpbGxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuc2hvdWxkQXBw
ZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRl
dGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxl
bWVudC5pc1JlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC5pc0Rpc2FibGVkRm9ybUNvbnRy
b2woKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3Jt
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LmlzSW5SYW5nZSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+aXNJblJhbmdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChl
bGVtZW50LmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCYgZWxlbWVudCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBsaW5lIGlzIHN1cnByaXNpbmdseSBob3QsIHdlIG1heSB3aXNo
IHRvIGlubGluZSBoYXNEaXJlY3Rpb25BdXRvIGludG8gU3R5bGVSZXNvbHZlci4KLSAgICByZXR1
cm4gaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVt
ZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVt
ZW50JiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAotewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSA9PSBzaGFy
aW5nQ2FuZGlkYXRlLmVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRB
dHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RhdGUuZWxlbWVu
dEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsKLSAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUu
aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUu
Y2xhc3NOYW1lcygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYg
KHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSkgewotICAgICAgICAvLyBTVkcgZWxlbWVudHMg
cmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNz
IiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAoc3RhdGUu
ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkg
IT0gc2hhcmluZ0NhbmRpZGF0ZS5jbGFzc05hbWVzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKS5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUucHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUu
c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50JiBlbGVtZW50KSBjb25zdAotewotICAg
IGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5kZXJTdHlsZSgpOwotICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChzdHlsZS0+aGFzVW5pcXVlUHNldWRvU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50LnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudCgpLT50YWdRTmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQuaW5saW5lU3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgp
ICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkg
IT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmhvdmVyZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmFjdGl2ZSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+YWN0aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1l
bnQoKS0+c2hhZG93UHNldWRvSWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgm
ZWxlbWVudCA9PSBlbGVtZW50LmRvY3VtZW50KCkuY3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVj
dGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZWxlbWVudC5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBkb3duY2Fz
dDxTdHlsZWRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKS5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50
LmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpIHx8IGVsZW1lbnQuc3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGVsZW1lbnQuaGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250
YWlucyhlbGVtZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PihlbGVtZW50KTsKLQotICAgIGlmIChpc0NvbnRyb2wgIT0gaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0
eWxlLT5hbmltYXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFR1cm4g
b2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciBy
ZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KLSAgICAvLyBTZWUgY29tbWVudHMg
aW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgotICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFz
VGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNhbnZhc1Rh
ZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9u
QXV0byhlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQu
aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5r
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LmVsZW1lbnREYXRh
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmIChlbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZh
c3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50LmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0
dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVs
ZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNo
ZXNWYWxpZFBzZXVkb0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChl
bGVtZW50Lm1hdGNoZXNJbnZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1h
dGNoZXNWYWxpZFBzZXVkb0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVO
QUJMRShWSURFT19UUkFDSykKLSAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2Vi
VlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChpczxXZWJWVFRFbGVtZW50Pigqc3Rh
dGUuZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKCZlbGVtZW50ID09IGVsZW1lbnQuZG9jdW1lbnQo
KS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50KCkgPT0g
c3RhdGUuZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBT
dHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhO
b2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0Ci17Ci0gICAgZm9yICg7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWlzPFN0eWxlZEVs
ZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNo
b2xkKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBkb3du
Y2FzdDxTdHlsZWRFbGVtZW50Pihub2RlKTsKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2
ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKLXsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwot
ICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oc3RhdGUuZWxlbWVudCgpKSB8fCAhc3RhdGUucGFy
ZW50U3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgc3R5bGVkRWxl
bWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpOwotCi0gICAg
Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUu
Ci0gICAgaWYgKHN0eWxlZEVsZW1lbnQuaW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKHN0eWxlZEVsZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8
U1ZHRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcg
aWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAoc3R5bGVkRWxlbWVu
dC5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0
eWxlZEVsZW1lbnQuaWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdHlsZWRF
bGVtZW50LnBhcmVudEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKCpzdGF0
ZS5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhY2hlIHdo
ZXRoZXIgc3RhdGUuZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0
b3JzLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4g
VGhlIHN0eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNv
bHZlci4KLSAgICBzdGF0ZS5zZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoc3RhdGUuZWxl
bWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQoKS0+Y2xhc3NOYW1lcygpKSk7Ci0KLSAgICAvLyBDaGVj
ayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KLSAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7Ci0gICAgU3R5bGVkRWxl
bWVudCogc2hhcmVFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3R5
bGVkRWxlbWVudC5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3aGlsZSAoY291c2luTGlzdCkgewot
ICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5M
aXN0LCBjb3VudCk7Ci0gICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFy
ZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBo
YXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1ZGdldCBvciBvdXIgY291c2lucy4KLSAgICBpZiAoIXNo
YXJlRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBp
dCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9uQXR0
cmlidXRlKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBUcmFja2luZyBjaGls
ZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0
IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKHN0eWxlZEVsZW1lbnQucGFyZW50RWxlbWVudCgpKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVudCkKQEAgLTY3NiwzMyArMzY2LDEzIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFy
ZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlLAotICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNoYXJpbmdC
ZWhhdmlvciwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29uc3QgUmVu
ZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0
b3JGaWx0ZXIpCitSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGlu
Z0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCi0gICAgLy8gT25jZSBhbiBl
bGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ug
b3RoZXJ3aXNlIHRoZSByZW5kZXJlcgotICAgIC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVj
YWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCi0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBB
bGxvd1N0eWxlU2hhcmluZyAmJiAhbV9kb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAm
JiAhZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmICghc19zdHlsZU5vdFlldEF2YWls
YWJsZSkgewotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHls
ZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJs
ZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUt
PmZvbnRDYXNjYWRlKCkudXBkYXRlKCZtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUo
KTsKLSAgICAgICAgcmV0dXJuICpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotICAgIH0KLQogICAg
IG1fc3RhdGUgPSBTdGF0ZShlbGVtZW50LCBwYXJlbnRTdHlsZSwgcmVnaW9uRm9yU3R5bGluZywg
c2VsZWN0b3JGaWx0ZXIpOwogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAo
c2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nKSB7Ci0gICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpKSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuICpzaGFyZWRTdHlsZTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0
YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeSgm
ZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpO
b3RBdFNoYWRvd0JvdW5kYXJ5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
cmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMsMTEgKzkzLDYgQEAgY2xhc3MgVmlld3BvcnRTdHlsZVJlc29s
dmVyOwogY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zOwogCi1lbnVtIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHsKLSAgICBBbGxvd1N0eWxlU2hh
cmluZywKLSAgICBEaXNhbGxvd1N0eWxlU2hhcmluZywKLX07Ci0KIC8vIE1hdGNoT25seVVzZXJB
Z2VudFJ1bGVzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywgd2hlcmUgcmVsYXRpdmUgdW5pdHMK
IC8vIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVu
dCBzdHlsZSwgYW5kIHN0eWxlZCBvbmx5CiAvLyBmcm9tIHRoZSBVc2VyIEFnZW50IFN0eWxlc2hl
ZXQgcnVsZXMuCkBAIC0xMzUsOCArMTMwLDcgQEAgcHVibGljOgogICAgIFN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQmKTsKICAgICB+U3R5bGVSZXNvbHZlcigpOwogCi0gICAgUmVmPFJlbmRlclN0eWxl
PiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgU3R5
bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKLSAgICAgICAgUnVsZU1hdGNo
aW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZv
clN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAg
ICBSZWY8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0
IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9y
RmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlv
bihFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIApAQCAtMTYw
LDEyICsxNTQsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVk
aWFRdWVyeUV2YWx1YXRvcigpIGNvbnN0IHsgcmV0dXJuICptX21lZGl1bTsgfQogCiBwcml2YXRl
OgotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAgIGJvb2wgc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwotICAgIE5vZGUqIGxvY2F0
ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkg
Y29uc3Q7Ci0gICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9k
ZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCYpIGNvbnN0OwotCiAgICAgUmVmPFJlbmRlclN0eWxlPiBzdHls
ZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtl
eWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgpAQCAtMzc4LDggKzM2Niw2IEBAIHB1YmxpYzoKIAog
ICAgICAgICBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lvbkZvclN0eWxpbmc7IH0KICAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExp
bmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQotICAgICAgICB2
b2lkIHNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhib29sIGlzQWZmZWN0ZWQpIHsgbV9l
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBpc0FmZmVjdGVkOyB9Ci0gICAgICAgIGJvb2wg
ZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50QWZm
ZWN0ZWRCeUNsYXNzUnVsZXM7IH0KIAogICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUg
PSBpc0FwcGx5OyB9CiAgICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0g
aXNBcHBseTsgfQpAQCAtNDM1LDcgKzQyMSw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZSB7IE5vdEluc2lkZUxpbmsgfTsKIAotICAg
ICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzIHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKICAgICAgICAg
Ym9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9OwogICAgICAg
ICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKQEAgLTQ1OSw4ICs0NDQsNiBAQCBwdWJsaWM6
CiAKICAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAKLSAgICBzdGF0aWMg
UmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFll
dEF2YWlsYWJsZTsgfQotCiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSYpOwogICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKQEAgLTQ4OCwxMiArNDcxLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0
T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9u
KTsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsKLQogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICBi
b29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50JikgY29uc3Q7Ci0KICAg
ICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBTZWxlY3RvckNo
ZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCwgY29u
c3QgTWF0Y2hSZXN1bHQqID0gbnVsbHB0cik7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXNvbHZl
ZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZSYpOwogCkBAIC01MjAsOSArNDk5LDYgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgbGFzdCBy
ZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAg
ICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKIAotICAgIGJvb2wgY2xhc3NO
YW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAg
Ym9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVz
KFN0eWxlZEVsZW1lbnQmKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkLCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbT4gTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9u
IDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
KiBsaW5rQXR0cmlidXRlKEVsZW1lbnQmIGVsZW1lbnQpCitpbmxpbmUgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAg
IGlmICghZWxlbWVudC5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02Nyw3ICs2Nyw3
IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICB9CiB9CiAK
LWlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hG
b3JFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwpA
QCAtODYsNyArODYsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZv
CiAgICAgfQogfQogCi1FSW5zaWRlTGluayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5r
U3RhdGVTbG93Q2FzZShFbGVtZW50JiBlbGVtZW50KQorRUluc2lkZUxpbmsgVmlzaXRlZExpbmtT
dGF0ZTo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICBBU1NFUlQoZWxlbWVudC5pc0xpbmsoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9WaXNpdGVkTGlua1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1Zpc2l0ZWRMaW5rU3RhdGUuaAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTYgKzQ1LDE2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKICAgICB2
b2lkIGludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gpOwotICAgIEVJbnNpZGVMaW5rIGRl
dGVybWluZUxpbmtTdGF0ZShFbGVtZW50Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlu
a1N0YXRlKGNvbnN0IEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBFSW5zaWRlTGluayBkZXRl
cm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJt
aW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYpOwogCiAgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiAgICAgSGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZTsKIH07CiAKLWlubGluZSBFSW5zaWRlTGluayBWaXNpdGVkTGlu
a1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBFSW5z
aWRlTGluayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQuaXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBOb3RJbnNpZGVMaW5rOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC0xNjgsNyArMTY5LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHNob3J0IHRhYklu
ZGV4KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxlbWVu
dCogdmlydHVhbEZvcm0oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZWZh
dWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpIGNvbnN0OwogCiAgICAgYm9vbCBjb21wdXRlSXNEaXNhYmxlZEJ5Rmll
bGRzZXRBbmNlc3RvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkwLDcgKzE1OTAs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50OjpnCiAgICAgYXV0byYg
c3R5bGVSZXNvbHZlciA9IGVsZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwogCiAgICAgaWYgKHBz
ZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkgewotICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGVGb3JF
bGVtZW50KCplbGVtZW50KCksIHBhcmVudFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZyk7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0ID0gc3R5bGVSZXNvbHZlci5zdHlsZUZv
ckVsZW1lbnQoKmVsZW1lbnQoKSwgcGFyZW50U3R5bGUpOwogICAgICAgICByZXN1bHQtPnNldFN0
eWxlVHlwZShGSVJTVF9MSU5FX0lOSEVSSVRFRCk7CiAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck5h
bWVkRmxvd0YKICAgICBBU1NFUlQoIXJlbmRlcmVyLmlzQW5vbnltb3VzKCkpOwogCiAgICAgLy8g
RklYTUU6IFJlZ2lvbiBzdHlsaW5nIGZhaWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0
aGUgcmVuZGVyZXJzIGRvbid0IGhhdmUgYSBub2RlLgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUgPSByZW5kZXJlci5lbGVtZW50KCktPnN0eWxlUmVzb2x2
ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnJlbmRlcmVyLmVsZW1lbnQoKSwgJnBhcmVudFN0eWxlLCBE
aXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hBbGxSdWxlcywgdGhpcyk7CisgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiByZW5kZXJPYmplY3RSZWdpb25TdHlsZSA9IHJlbmRlcmVyLmVsZW1lbnQoKS0+
c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqcmVuZGVyZXIuZWxlbWVudCgpLCAmcGFy
ZW50U3R5bGUsIE1hdGNoQWxsUnVsZXMsIHRoaXMpOwogCiAgICAgcmV0dXJuIHJlbmRlck9iamVj
dFJlZ2lvblN0eWxlLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJT
dHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKICNpbmNsdWRlICJTdHlsZVNlbGZBbGlnbm1lbnREYXRh
LmgiCisjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdl
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50
ZXJDb21wYXJpc29uLmg+CkBAIC0yOTMsNyArMjk0LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6b3Bl
cmF0b3I9PShjb25zdCBSZW5kZQogCiBib29sIFJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpcyAhPSBTdHlsZVJlc29sdmVyOjpzdHlsZU5vdFll
dEF2YWlsYWJsZSgpOworICAgIHJldHVybiAhU3R5bGU6OmlzUGxhY2Vob2xkZXJTdHlsZSgqdGhp
cyk7CiB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6Omhhc1VuaXF1ZVBzZXVkb1N0eWxlKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMu
aCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgorI2luY2x1ZGUgIldlYlZUVEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJYTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgU3R5bGUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xk
ID0gMTA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQg
PSAxMDsKKworc3RydWN0IFNoYXJpbmdSZXNvbHZlcjo6Q29udGV4dCB7CisgICAgY29uc3QgU3R5
bGVkRWxlbWVudCYgZWxlbWVudDsKKyAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxl
czsKKyAgICBFSW5zaWRlTGluayBlbGVtZW50TGlua1N0YXRlOworfTsKKworU2hhcmluZ1Jlc29s
dmVyOjpTaGFyaW5nUmVzb2x2ZXIoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBEb2N1
bWVudFJ1bGVTZXRzJiBydWxlU2V0cywgY29uc3QgU2VsZWN0b3JGaWx0ZXImIHNlbGVjdG9yRmls
dGVyKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcnVsZVNldHMocnVsZVNl
dHMpCisgICAgLCBtX3NlbGVjdG9yRmlsdGVyKHNlbGVjdG9yRmlsdGVyKQoreworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50
JiBwYXJlbnRFbGVtZW50KQoreworICAgIHJldHVybiBwYXJlbnRFbGVtZW50Lmhhc0ZsYWdzU2V0
RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGVsZW1l
bnRIYXNEaXJlY3Rpb25BdXRvKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgbGluZSBpcyBzdXJwcmlzaW5nbHkgaG90LCB3ZSBtYXkgd2lzaCB0byBpbmxpbmUg
aGFzRGlyZWN0aW9uQXV0byBpbnRvIFN0eWxlUmVzb2x2ZXIuCisgICAgcmV0dXJuIGlzPEhUTUxF
bGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkuaGFzRGly
ZWN0aW9uQXV0bygpOworfQorCitjb25zdCBFbGVtZW50KiBTaGFyaW5nUmVzb2x2ZXI6OnNlYXJj
aFNpbWlsYXIoY29uc3QgRWxlbWVudCYgc2VhcmNoRWxlbWVudCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzPFN0eWxlZEVsZW1lbnQ+KHNlYXJjaEVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oc2VhcmNoRWxl
bWVudCk7CisgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byYgcGFyZW50RWxlbWVudCA9ICplbGVtZW50LnBhcmVudEVsZW1l
bnQoKTsKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2Jh
Ymx5IHVuaXF1ZS4KKyAgICBpZiAoZWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoZWxlbWVudC5pc1NWR0VsZW1lbnQoKSAmJiBkb3duY2FzdDxT
VkdFbGVtZW50PihlbGVtZW50KS5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5
IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgorICAgIGlmIChlbGVtZW50Lmhhc0lEKCkgJiYg
bV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHBhcmVudEVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoJmVsZW1lbnQgPT0gbV9kb2N1bWVudC5jc3NUYXJnZXQo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25B
dXRvKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENvbnRleHQgY29u
dGV4dCB7CisgICAgICAgIGVsZW1lbnQsCisgICAgICAgIGVsZW1lbnQuaGFzQ2xhc3MoKSAmJiBj
bGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGVsZW1lbnQuY2xhc3NOYW1lcygpKSwKKyAgICAgICAg
bV9kb2N1bWVudC52aXNpdGVkTGlua1N0YXRlKCkuZGV0ZXJtaW5lTGlua1N0YXRlKGVsZW1lbnQp
CisgICAgfTsKKworICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3Vz
aW5zLgorICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNv
dW50ID0gMDsKKyAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSBudWxscHRyOworICAg
IE5vZGUqIGNvdXNpbkxpc3QgPSBlbGVtZW50LnByZXZpb3VzU2libGluZygpOworICAgIHdoaWxl
IChjb3VzaW5MaXN0KSB7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nKGNvbnRl
eHQsIGNvdXNpbkxpc3QsIGNvdW50KTsKKyAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3Vz
aW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOworICAgIH0KKworICAg
IC8vIElmIHdlIGhhdmUgZXhoYXVzdGVkIGFsbCBvdXIgYnVkZ2V0IG9yIG91ciBjb3VzaW5zLgor
ICAgIGlmICghc2hhcmVFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0
aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4KKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc1J1bGVTZXQoZWxlbWVudCwgbV9ydWxlU2V0cy5zaWJsaW5nKCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVs
ZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KGVs
ZW1lbnQsIG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHls
ZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0
Y2ggYWJvdmUuCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcocGFyZW50RWxl
bWVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHNoYXJlRWxlbWVu
dDsKK30KKworU3R5bGVkRWxlbWVudCogU2hhcmluZ1Jlc29sdmVyOjpmaW5kU2libGluZyhjb25z
dCBDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0Cit7
CisgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnRleHQsIGRvd25jYXN0
PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIHJldHVybiBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihub2RlKTsK
K30KKworTm9kZSogU2hhcmluZ1Jlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBh
cmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0Cit7CisgICAgaWYgKHZpc2l0
ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxlU2VhcmNoTGV2ZWxU
aHJlc2hvbGQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaXM8U3R5bGVkRWxl
bWVudD4ocGFyZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgc3R5bGVk
UGFyZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKnBhcmVudCk7CisgICAgaWYgKHN0eWxl
ZFBhcmVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAo
aXM8U1ZHRWxlbWVudD4oc3R5bGVkUGFyZW50KSAmJiBkb3duY2FzdDxTVkdFbGVtZW50PihzdHls
ZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAoc3R5bGVkUGFyZW50Lmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3R5bGVkUGFyZW50LmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBzdHlsZWRQYXJlbnQucmVuZGVyU3R5bGUoKTsKKyAgICB1bnNpZ25l
ZCBzdWJjb3VudCA9IDA7CisgICAgTm9kZSogdGhpc0NvdXNpbiA9ICZzdHlsZWRQYXJlbnQ7Cisg
ICAgTm9kZSogY3VycmVudE5vZGUgPSBzdHlsZWRQYXJlbnQucHJldmlvdXNTaWJsaW5nKCk7CisK
KyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVs
eSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQorICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVl
cGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9u
LgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOworICAgIHdo
aWxlICh0aGlzQ291c2luKSB7CisgICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZTsgY3VycmVudE5v
ZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICgr
K3N1YmNvdW50ID4gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50PigqY3VycmVudE5vZGUpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgY3VycmVudEVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50PigqY3VycmVudE5vZGUpOworICAgICAgICAgICAgaWYgKGN1
cnJlbnRFbGVtZW50LnJlbmRlclN0eWxlKCkgIT0gcGFyZW50U3R5bGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRFbGVtZW50Lmxhc3RDaGlsZCgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKGN1cnJlbnRFbGVtZW50KSkgeworICAgICAgICAgICAgICAgIC8v
IEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgorICAgICAgICAgICAgICAgIHZpc2l0
ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291bnQ7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0Nv
dXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKKyAgICAgICAgdGhpc0Nv
dXNpbiA9IGN1cnJlbnROb2RlOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitz
dGF0aWMgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woY29uc3QgSFRNTEZvcm1Db250cm9s
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgZm9ybUVsZW1l
bnQpCit7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtRWxlbWVudCkgfHwgIWlz
PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiB0aGlzSW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZm9y
bUVsZW1lbnQpOworICAgIGF1dG8mIG90aGVySW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oZWxlbWVudCk7CisKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5pc0F1dG9G
aWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQo
KSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRBcHBlYXJDaGVja2VkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVy
bWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuaXNSZXF1
aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LmlzUmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGZvcm1FbGVtZW50LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9
IGVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChmb3JtRWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gZWxlbWVu
dC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChmb3JtRWxlbWVudC5pc0luUmFuZ2UoKSAhPSBlbGVtZW50LmlzSW5SYW5nZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZm9ybUVsZW1lbnQuaXNPdXRPZlJhbmdlKCkg
IT0gZWxlbWVudC5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoY29uc3QgQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3R5bGVkRWxlbWVudCYgY2Fu
ZGlkYXRlRWxlbWVudCkgY29uc3QKK3sKKyAgICBhdXRvJiBlbGVtZW50ID0gY29udGV4dC5lbGVt
ZW50OworICAgIGF1dG8qIHN0eWxlID0gY2FuZGlkYXRlRWxlbWVudC5yZW5kZXJTdHlsZSgpOwor
ICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPnVu
aXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5oYXNVbmlxdWVQ
c2V1ZG9TdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVs
ZW1lbnQudGFnUU5hbWUoKSAhPSBlbGVtZW50LnRhZ1FOYW1lKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQubmVlZHNTdHlsZVJlY2FsYygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaXNTVkdF
bGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oY2FuZGlkYXRlRWxlbWVudCkuYW5pbWF0
ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
Y2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAhPSBlbGVtZW50LmlzTGluaygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaG92ZXJlZCgpICE9IGVsZW1l
bnQuaG92ZXJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVs
ZW1lbnQuYWN0aXZlKCkgIT0gZWxlbWVudC5hY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LmZvY3VzZWQoKSAhPSBlbGVtZW50LmZvY3VzZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LnNoYWRv
d1BzZXVkb0lkKCkgIT0gZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCZjYW5kaWRhdGVFbGVtZW50ID09IG1fZG9jdW1lbnQuY3NzVGFyZ2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJ
ZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29udGV4dCwgY2FuZGlkYXRlRWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY29uc3RfY2FzdDxTdHlsZWRFbGVt
ZW50Jj4oY2FuZGlkYXRlRWxlbWVudCkuYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkgIT0gY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCkuYWRkaXRpb25hbFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoY2FuZGlkYXRlRWxlbWVudC5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSB8fCBj
YW5kaWRhdGVFbGVtZW50LnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50Lmhhc0lEKCkgJiYg
bV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2FuZGlkYXRlRWxlbWVu
dC5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgaXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oY2FuZGlk
YXRlRWxlbWVudCk7CisKKyAgICBpZiAoaXNDb250cm9sICE9IGlzPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaXNDb250
cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZG93bmNhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oZWxlbWVudCksIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGNhbmRp
ZGF0ZUVsZW1lbnQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0eWxlLT50
cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2Fu
IGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAg
ICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChj
YW5kaWRhdGVFbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGNhbmRp
ZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmVtYmVkVGFnKSB8fCBjYW5kaWRhdGVFbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpv
YmplY3RUYWcpIHx8IGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxl
dFRhZykgfHwgY2FuZGlkYXRlRWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FudmFzVGFn
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25B
dXRvKGNhbmRpZGF0ZUVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
Y2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAmJiBjb250ZXh0LmVsZW1lbnRMaW5rU3RhdGUgIT0g
c3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNh
bmRpZGF0ZUVsZW1lbnQuZWxlbWVudERhdGEoKSAhPSBlbGVtZW50LmVsZW1lbnREYXRhKCkpIHsK
KyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OnJlYWRvbmx5QXR0cikgIT0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cmVh
ZG9ubHlBdHRyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVF
bGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSAhPSBlbGVtZW50LmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5m
YXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpICE9IGVsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5tYXRjaGVz
VmFsaWRQc2V1ZG9DbGFzcygpICE9IGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQubWF0Y2hlc0ludmFsaWRQ
c2V1ZG9DbGFzcygpICE9IGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIC8vIERlbnkg
c2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMuCisgICAg
aWYgKGlzPFdlYlZUVEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoJmVsZW1lbnQgPT0g
bV9kb2N1bWVudC53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCAmZWxlbWVudCA9
PSBtX2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTaGFyaW5n
UmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KGNvbnN0IFN0eWxl
ZEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpIGNvbnN0Cit7CisgICAg
aWYgKCFydWxlU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50UnVsZUNv
bGxlY3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG51
bGxwdHIsIG1fcnVsZVNldHMsICZtX3NlbGVjdG9yRmlsdGVyKTsKKyAgICByZXR1cm4gY29sbGVj
dG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVsZVNldCk7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29s
dmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVz
KGNvbnN0IENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0eWxlZEVsZW1lbnQmIHNoYXJpbmdDYW5k
aWRhdGUpIGNvbnN0Cit7CisgICAgYXV0byYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKKyAg
ICBpZiAoZWxlbWVudC5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUuZWxlbWVudERh
dGEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5n
Q2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb250ZXh0LmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NS
dWxlcykgeworICAgICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVpcmUgYSAo
c2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNlICJjbGFzcyIgaXMgYW4gYW5p
bWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KKyAgICAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpj
bGFzc0F0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlk
YXRlLmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCY+KGVs
ZW1lbnQpLnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gY29uc3RfY2FzdDxTdHlsZWRF
bGVtZW50Jj4oc2hhcmluZ0NhbmRpZGF0ZSkucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1M
TmFtZXM6OnByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoZWxlbWVudC5zaG91bGRBcHBlYXJJ
bmRldGVybWluYXRlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS5zaG91bGRBcHBlYXJJbmRldGVybWlu
YXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVz
KGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0Cit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFzc05hbWVz
W2ldLmltcGwoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hh
cmluZ1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
aGFyaW5nUmVzb2x2ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2hhcmluZ1Jlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVT
aGFyaW5nUmVzb2x2ZXJfaAorI2RlZmluZSBTdHlsZVNoYXJpbmdSZXNvbHZlcl9oCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEb2N1bWVudFJ1bGVTZXRz
OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU2Vs
ZWN0b3JGaWx0ZXI7CitjbGFzcyBTcGFjZVNwbGl0U3RyaW5nOworY2xhc3MgU3R5bGVkRWxlbWVu
dDsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworY2xhc3MgU2hhcmluZ1Jlc29sdmVyIHsKK3B1Ymxp
YzoKKyAgICBTaGFyaW5nUmVzb2x2ZXIoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBEb2N1bWVudFJ1
bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0ZXImKTsKKworICAgIGNvbnN0IEVsZW1lbnQqIHNl
YXJjaFNpbWlsYXIoY29uc3QgRWxlbWVudCYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0cnVj
dCBDb250ZXh0OworCisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmcoY29uc3QgQ29udGV4
dCYsIE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIE5vZGUqIGxvY2F0ZUNvdXNp
bkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7
CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgQ29udGV4dCYsIGNvbnN0
IFN0eWxlZEVsZW1lbnQmIGNhbmRpZGF0ZUVsZW1lbnQpIGNvbnN0OworICAgIGJvb2wgc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoY29uc3QgU3R5bGVkRWxlbWVudCYsIGNvbnN0
IFJ1bGVTZXQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgQ29udGV4dCYsIGNvbnN0IFN0eWxlZEVsZW1l
bnQmIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0OworICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVk
QnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKSBjb25zdDsKKworICAg
IGNvbnN0IERvY3VtZW50JiBtX2RvY3VtZW50OworICAgIGNvbnN0IERvY3VtZW50UnVsZVNldHMm
IG1fcnVsZVNldHM7CisgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXImIG1fc2VsZWN0b3JGaWx0ZXI7
Cit9OworCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVU
cmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMCArOTYsMjQg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkUHVzaCB7IGZhbHNlIH07CiB9OwogCisKK3N0YXRp
YyBSZW5kZXJTdHlsZSogcGxhY2Vob2xkZXJTdHlsZTsKKworc3RhdGljIHZvaWQgZW5zdXJlUGxh
Y2Vob2xkZXJTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKHBsYWNlaG9sZGVy
U3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBwbGFjZWhvbGRlclN0eWxlID0gJlJlbmRlclN0
eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgcGxhY2Vob2xkZXJTdHlsZS0+c2V0RGlzcGxh
eShOT05FKTsKKyAgICBwbGFjZWhvbGRlclN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9j
dW1lbnQuZm9udFNlbGVjdG9yKCkpOworfQorCiBUcmVlUmVzb2x2ZXI6OlRyZWVSZXNvbHZlcihE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9z
dHlsZVJlc29sdmVyKGRvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKSkKKyAgICAsIG1fc2hh
cmluZ1Jlc29sdmVyKGRvY3VtZW50LCBtX3N0eWxlUmVzb2x2ZXIucnVsZVNldHMoKSwgbV9zZWxl
Y3RvckZpbHRlcikKIHsKKyAgICBlbnN1cmVQbGFjZWhvbGRlclN0eWxlKGRvY3VtZW50KTsKIH0K
IAogVHJlZVJlc29sdmVyOjpUcmVlUmVzb2x2ZXIoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgVHJl
ZVJlc29sdmVyJiBzaGFkb3dIb3N0VHJlZVJlc29sdmVyKQpAQCAtMTA3LDYgKzEyMSw3IEBAIFRy
ZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKFNoYWRvd1Jvb3QmIHMKICAgICAsIG1fc3R5bGVSZXNv
bHZlcihzaGFkb3dSb290LnN0eWxlUmVzb2x2ZXIoKSkKICAgICAsIG1fc2hhZG93Um9vdCgmc2hh
ZG93Um9vdCkKICAgICAsIG1fc2hhZG93SG9zdFRyZWVSZXNvbHZlcigmc2hhZG93SG9zdFRyZWVS
ZXNvbHZlcikKKyAgICAsIG1fc2hhcmluZ1Jlc29sdmVyKG1fZG9jdW1lbnQsIG1fc3R5bGVSZXNv
bHZlci5ydWxlU2V0cygpLCBtX3NlbGVjdG9yRmlsdGVyKQogewogfQogCkBAIC0xMjMsMTEgKzEz
OCwyMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBFCiAKIFJlZjxS
ZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVu
dCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQogeworICAgIGlmICghbV9kb2N1bWVudC5o
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7CisgICAgICAg
IG1fZG9jdW1lbnQuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOworICAgICAgICBy
ZXR1cm4gKnBsYWNlaG9sZGVyU3R5bGU7CisgICAgfQorCiAgICAgaWYgKGVsZW1lbnQuaGFzQ3Vz
dG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGUgPSBlbGVtZW50LmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoaW5oZXJpdGVkU3R5
bGUpKQogICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgfQot
ICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsICZpbmhl
cml0ZWRTdHlsZSwgQWxsb3dTdHlsZVNoYXJpbmcsIE1hdGNoQWxsUnVsZXMsIG51bGxwdHIsICZt
X3NlbGVjdG9yRmlsdGVyKTsKKworICAgIGlmIChhdXRvKiBzaW1pbGFyRWxlbWVudCA9IG1fc2hh
cmluZ1Jlc29sdmVyLnNlYXJjaFNpbWlsYXIoZWxlbWVudCkpCisgICAgICAgIHJldHVybiAqc2lt
aWxhckVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVy
LnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAmaW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxsUnVsZXMs
IG51bGxwdHIsICZtX3NlbGVjdG9yRmlsdGVyKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfUkVHSU9O
UykKQEAgLTk0OCw1ICs5NzIsMTEgQEAgYm9vbCBwb3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1
c3BlbmRlZAogICAgIHJldHVybiByZXNvbHV0aW9uTmVzdGluZ0RlcHRoOwogfQogCisKK2Jvb2wg
aXNQbGFjZWhvbGRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICByZXR1
cm4gJnN0eWxlID09IHBsYWNlaG9sZGVyU3R5bGU7Cit9CisKIH0KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTk1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVk
ZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNoYW5nZS5oIgorI2luY2x1ZGUg
IlN0eWxlU2hhcmluZ1Jlc29sdmVyLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTg1LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBUcmVlUmVz
b2x2ZXIqIG1fc2hhZG93SG9zdFRyZWVSZXNvbHZlciB7IG51bGxwdHIgfTsKIAogICAgIFNlbGVj
dG9yRmlsdGVyIG1fc2VsZWN0b3JGaWx0ZXI7CisgICAgU2hhcmluZ1Jlc29sdmVyIG1fc2hhcmlu
Z1Jlc29sdmVyOwogfTsKIAogdm9pZCBkZXRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmKTsKQEAgLTk1
LDYgKzk3LDggQEAgdm9pZCB1cGRhdGVUZXh0UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZwogdm9p
ZCBxdWV1ZVBvc3RSZXNvbHV0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkICgpPik7CiBi
b29sIHBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tzQXJlU3VzcGVuZGVkKCk7CiAKK2Jvb2wgaXNQbGFj
ZWhvbGRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CisKIGNsYXNzIFBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUG9zdFJlc29sdXRpb25D
YWxsYmFja0Rpc2FibGVyKERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw3ICs3OTMsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+
IFNWR0VsZW1lbnQ6OmN1c3RvbVN0CiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW4gYSA8
dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVlLgogICAg
IGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVt
ZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRTdHlsZSwgRGlzYWxsb3dTdHlsZVNoYXJpbmcpOwor
ICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVt
ZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKICAgICByZXR1cm4gcmVzb2x2ZVN0
eWxlKCZwYXJlbnRTdHlsZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRS
YXJlRGF0YS5oCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVkU3R5
bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAgICAg
Ly8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJh
bnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0
ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1vZGVs
LgotICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVz
b2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIERpc2FsbG93U3R5
bGVTaGFyaW5nLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CisgICAgICAgICAgICBtX292
ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxl
bWVudChlbGVtZW50LCBwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwog
ICAgICAgICAgICAgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270432</attachid>
            <date>2016-02-01 15:09:17 -0800</date>
            <delta_ts>2016-02-01 15:23:32 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-sharing-resolver-2.patch</filename>
            <type>text/plain</type>
            <size>61813</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxNi0wMi0wMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIHN0eWxlIHNoYXJp
bmcgY29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgY29kZSB0byBhIG5ldyBjbGFzcywgU3R5bGU6
OlNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICBXaGVuIHJlc29sdmluZyBkb2N1bWVudCBzdHls
ZSB3ZSBxdWVyeSB0aGUgc2hhcmluZyByZXNvbHZlciBmaXJzdCBiZWZvcmUgdXNpbmcgdGhlIHJl
Z3VsYXIgc3R5bGUgcmVzb2x2ZXIuCisgICAgICAgIE90aGVyIHBhdGhzIHRoYXQgY2FsbCBzdHls
ZSByZXNvbHZlciB3ZXJlIG1vc3RseSBhbHJlYWR5IGRpc2FibGluZyBpdCB3aXRoIERpc2FsbG93
U3R5bGVTaGFyaW5nIGZsYWcuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGNoUmVxdWVzdDo6TWF0Y2hSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKToKKworICAgICAg
ICAgICAgTW9yZSBjb25zdC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldFJlZ2lvbkZvclN0
eWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldE1lZGl1
bSk6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpwcmVwYXJlRXZhbHVhdG9yKToKKyAgICAgICAgKiBjc3Mv
U3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZU1lZGlhOjptYXRjaE1lZGl1
bSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
QXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRIYXNEaXJlY3Rpb25BdXRv
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKTogRGVsZXRlZC4KKworICAgICAgICAgICAgU3R5bGUgc2hhcmlu
ZyBjb2RlIG1vdmVzIHRvIFNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptZWRpYVF1ZXJ5RXZh
bHVhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdpb25G
b3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVt
ZW50TGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpz
ZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZU5vdFlldEF2YWlsYWJsZSk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFBsYWNl
aG9sZGVyIGNvZGUgbW92ZXMgdG8gVHJlZVJlc29sdmVyLgorCisgICAgICAgICogZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5r
cyk6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayk6CisgICAgICAg
IChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6
CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZSk6CisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9T
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJ
blJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpoYXNVbmlxdWVQc2V1ZG9TdHlsZSk6CisgICAgICAgICog
c3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OlNoYXJpbmdSZXNvbHZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6cGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6c2VhcmNoU2ltaWxhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpmaW5kU2libGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6CisgICAgICAgICogc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIu
aDogQWRkZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmVuc3VyZVBsYWNlaG9sZGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAg
IFRyeSB0byB1c2UgU2hhcmluZ1Jlc29sdmVyIGZpcnN0LgorICAgICAgICAgICAgQWxzbyBtb3Zl
IHBsYWNlaG9sZGVyIHN0eWxlIGhhbmRsaW5nIGhlcmUsIGl0IGlzIG9ubHkgcmVsZXZhbnQgd2hl
biByZXNvbHZpbmcgZG9jdW1lbnQgc3R5bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpw
b3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6aXNQbGFjZWhvbGRlclN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdF
bGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6
b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKwogMjAxNi0wMi0wMSAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNvbWUgU1BJIGRlY2xhcmF0aW9u
cyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBTUEkgaGVhZGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU4MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTY1NzYsNiArNjU3Niw4IEBACiAJCUU0NzEyN0NCMTYzNDM4QUUwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oICovOyB9OwogCQlFNDc3OEI3RjExNUE1ODFBMDBCNUQz
NzIgLyogSlNDdXN0b21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5j
cHAgKi87IH07CiAJCUU0Nzc4QjgwMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDc3OEI3RTEx
NUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5oICovOyB9OworCQlFNDdBM0FDMzFDNUVB
QkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8q
IFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLzsgfTsKKwkJRTQ3QTNBQzYxQzVFQUM5RDAwQ0NC
RkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdBM0FDNDFDNUVBQzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFy
aW5nUmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hl
ZFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdC
NEJFOTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAw
MDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyog
RXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTQ1MjQsNiArMTQ1MjYsOCBAQAogCQlFNDZBMkIxRDE3Q0E3NkIx
MDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRWxlbWVudENoaWxkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ3NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21FdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBK
U0N1c3RvbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9t
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzIxQzVFQUJCRTAw
Q0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzQxQzVFQUM3OTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jl
c29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hhcmluZ1Jl
c29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0E5N0NFMTYzMDU5RkMw
MDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMyOTYsNiArMjMzMDAsOCBAQAogCQkJCUU0
RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAog
CQkJCUU0REVBQTE1MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5jcHAgKi8s
CiAJCQkJRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlVHJlZVJlc29sdmVyLmggKi8s
CisJCQkJRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cCAqLywKKwkJCQlFNDdBM0FDNDFDNUVBQzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3R5bGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMjY4NDYsNiArMjY4NTIsNyBAQAogCQkJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIz
QiAvKiBNYXRoTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RTAxMkRBMjVFMTdC
QUY4MEEyIC8qIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkE2NTRBNkMxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFNDdBM0FDNjFDNUVBQzlEMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzcwRUY4
NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCQzhEQUQxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRM
aW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDM5LDYgKzMwMDQ2LDcgQEAKIAkJCQlBODBFN0U5
QTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0NDhBMjlDMDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0Ez
QUMzMUM1RUFCQkUwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0QUQwMTczQzEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyogSlNI
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBBMUNF
OTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lv
biAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHJpZ2h0VG9MZWYKIAogY2xhc3MgTWF0Y2hSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBN
YXRjaFJlcXVlc3QoUnVsZVNldCogcnVsZVNldCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyA9IGZh
bHNlKQorICAgIE1hdGNoUmVxdWVzdChjb25zdCBSdWxlU2V0KiBydWxlU2V0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzID0gZmFsc2UpCiAgICAgICAgIDogcnVsZVNldChydWxlU2V0KQogICAgICAg
ICAsIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgIHsKQEAgLTUyOSw3
ICs1MjksNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzCiAgICAg
fQogfQogCi1ib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKFJ1
bGVTZXQqIHJ1bGVTZXQpCitib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGlu
Z1J1bGVzKGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgY2xlYXJNYXRjaGVkUnVsZXMo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJl
dmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFJlZ2lvbkZvclN0eWxpbmcoY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKSB7
IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7IH0KICAgICB2b2lkIHNldE1l
ZGl1bShjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBtZWRpdW0pIHsgbV9pc1ByaW50U3R5bGUg
PSBtZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50Iik7IH0KIAotICAgIGJvb2wg
aGFzQW55TWF0Y2hpbmdSdWxlcyhSdWxlU2V0Kik7CisgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1
bGVzKGNvbnN0IFJ1bGVTZXQqKTsKIAogICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBt
YXRjaGVkUmVzdWx0KCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0
Y2hlZFJ1bGVMaXN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eU1hdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
TWF0Y2hlci5jcHAJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5TWF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IE1lZAogICAgIGlmICghZG9jdW1lbnRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxl
bWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBEaXNhbGxv
d1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0
eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgp
LCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwg
cm9vdFN0eWxlLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAJKHJl
dmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBib29sIFN0eWxlTWVkaWE6Om1hdGNoTWVkaXVt
KGNvbnN0IFN0cmluCiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gZG9jdW1lbnQtPmVu
c3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgZG9j
dW1lbnQtPnJlbmRlclN0eWxlKCksIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlVc2Vy
QWdlbnRSdWxlcyk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwogCiAg
ICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCk7
CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsOCArMTc2LDYgQEAgc3RhdGlj
IGNvbnN0IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQcmlvcgogCiBzdGF0aWMgdm9pZCBleHRyYWN0
RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaFJlc3VsdCYsIFRleHREaXJlY3Rpb24mLCBXcml0aW5nTW9kZSYpOwogCi1S
ZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQogaW5s
aW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgp
CiB7CiAgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CkBA
IC0yNjQsNyArMjYyLDcgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYg
ZAogICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRv
cj4oImFsbCIpOwogCiAgICAgaWYgKHJvb3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9
IHN0eWxlRm9yRWxlbWVudCgqcm9vdCwgbV9kb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBEaXNhbGxv
d1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgICAgICBtX3Jvb3RE
ZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQucmVuZGVyU3R5
bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwogCiAgICAgaWYgKG1fcm9vdERlZmF1bHRT
dHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFR
dWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCksICZ2aWV3LT5mcmFtZSgpLCBtX3Jvb3RE
ZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAtMzMyLDE1ICszMzAsNiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpCiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRk
aXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNz
TmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcykg
Y29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVz
LmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpT
dGF0ZShFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVj
dG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQogICAgICwgbV9wYXJlbnRTdHls
ZShwYXJlbnRTdHlsZSkKQEAgLTM2OSwzMDUgKzM1OCw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRTdHkKICAgICBtX3N0eWxlID0gV1RGTW92ZShzdHlsZSk7CiAgICAg
dXBkYXRlQ29udmVyc2lvbkRhdGEoKTsKIH0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHls
ZVNlYXJjaFRocmVzaG9sZCA9IDEwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJj
aExldmVsVGhyZXNob2xkID0gMTA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKGNvbnN0IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCi17Ci0gICAgaWYg
KCFwYXJlbnRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhcmVu
dEVsZW1lbnQtPmhhc0ZsYWdzU2V0RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsKLX0KLQotTm9k
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2ln
bmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAotewotICAgIGlmICh2aXNpdGVkTm9kZUNvdW50
ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KHBhcmVu
dCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZFBh
cmVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KHBhcmVudCk7Ci0gICAgaWYgKHN0eWxlZFBh
cmVudC0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlz
PFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJlbnQpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpzdHls
ZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoc3R5bGVkUGFyZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVh
dHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0eWxlZFBhcmVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlZFBhcmVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICB1bnNp
Z25lZCBzdWJjb3VudCA9IDA7Ci0gICAgTm9kZSogdGhpc0NvdXNpbiA9IHN0eWxlZFBhcmVudDsK
LSAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHN0eWxlZFBhcmVudC0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3Rp
dmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIgZ28g
ZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJz
aW9uLgotICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwotICAg
IHdoaWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAg
ICAgICAgICAgKytzdWJjb3VudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVy
U3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkKLSAgICAg
ICAgICAgICAgICAmJiBpczxFbGVtZW50PigqY3VycmVudE5vZGUpICYmICFwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKGRvd25jYXN0PEVsZW1lbnQ+KGN1cnJlbnROb2RlKSkKLSAgICAgICAg
ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZl
ZCB0cmllcy4KLSAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJj
aFRocmVzaG9sZCAtIHN1YmNvdW50OwotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9k
ZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3ViY291bnQg
Pj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRo
aXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgICAgIHRo
aXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNl
dChSdWxlU2V0KiBydWxlU2V0KQotewotICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKCptX3N0YXRlLmVs
ZW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmls
dGVyKCkpOwotICAgIHJldHVybiBjb2xsZWN0b3IuaGFzQW55TWF0Y2hpbmdSdWxlcyhydWxlU2V0
KTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCYgZWxlbWVudCkgY29uc3QKLXsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkgfHwgIWlzPEhU
TUxJbnB1dEVsZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiB0aGlzSW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oZWxlbWVudCk7Ci0gICAgYXV0byYgb3RoZXJJbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKTsKLQotICAgIGlmICh0aGlzSW5wdXRFbGVt
ZW50LmlzQXV0b0ZpbGxlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LmlzQXV0b0ZpbGxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuc2hvdWxkQXBw
ZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRl
dGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxl
bWVudC5pc1JlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC5pc0Rpc2FibGVkRm9ybUNvbnRy
b2woKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3Jt
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LmlzSW5SYW5nZSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+aXNJblJhbmdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChl
bGVtZW50LmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCYgZWxlbWVudCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBsaW5lIGlzIHN1cnByaXNpbmdseSBob3QsIHdlIG1heSB3aXNo
IHRvIGlubGluZSBoYXNEaXJlY3Rpb25BdXRvIGludG8gU3R5bGVSZXNvbHZlci4KLSAgICByZXR1
cm4gaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVt
ZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVt
ZW50JiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAotewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSA9PSBzaGFy
aW5nQ2FuZGlkYXRlLmVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRB
dHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RhdGUuZWxlbWVu
dEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsKLSAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUu
aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUu
Y2xhc3NOYW1lcygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYg
KHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSkgewotICAgICAgICAvLyBTVkcgZWxlbWVudHMg
cmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNz
IiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAoc3RhdGUu
ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkg
IT0gc2hhcmluZ0NhbmRpZGF0ZS5jbGFzc05hbWVzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKS5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUucHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUu
c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50JiBlbGVtZW50KSBjb25zdAotewotICAg
IGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5kZXJTdHlsZSgpOwotICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChzdHlsZS0+aGFzVW5pcXVlUHNldWRvU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50LnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudCgpLT50YWdRTmFtZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQuaW5saW5lU3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgp
ICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkg
IT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmhvdmVyZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmFjdGl2ZSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+YWN0aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1l
bnQoKS0+c2hhZG93UHNldWRvSWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgm
ZWxlbWVudCA9PSBlbGVtZW50LmRvY3VtZW50KCkuY3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVj
dGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZWxlbWVudC5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBkb3duY2Fz
dDxTdHlsZWRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKS5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50
LmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpIHx8IGVsZW1lbnQuc3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGVsZW1lbnQuaGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250
YWlucyhlbGVtZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PihlbGVtZW50KTsKLQotICAgIGlmIChpc0NvbnRyb2wgIT0gaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0
eWxlLT5hbmltYXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFR1cm4g
b2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciBy
ZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KLSAgICAvLyBTZWUgY29tbWVudHMg
aW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgotICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFz
VGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNhbnZhc1Rh
ZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9u
QXV0byhlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQu
aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5r
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LmVsZW1lbnREYXRh
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmIChlbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZh
c3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50LmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRy
aWJ1dGUodHlwZUF0dHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0
dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVs
ZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNo
ZXNWYWxpZFBzZXVkb0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChl
bGVtZW50Lm1hdGNoZXNJbnZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1h
dGNoZXNWYWxpZFBzZXVkb0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVO
QUJMRShWSURFT19UUkFDSykKLSAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2Vi
VlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChpczxXZWJWVFRFbGVtZW50Pigqc3Rh
dGUuZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKCZlbGVtZW50ID09IGVsZW1lbnQuZG9jdW1lbnQo
KS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50KCkgPT0g
c3RhdGUuZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBT
dHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhO
b2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0Ci17Ci0gICAgZm9yICg7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWlzPFN0eWxlZEVs
ZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNo
b2xkKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBkb3du
Y2FzdDxTdHlsZWRFbGVtZW50Pihub2RlKTsKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2
ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKLXsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwot
ICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oc3RhdGUuZWxlbWVudCgpKSB8fCAhc3RhdGUucGFy
ZW50U3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgc3R5bGVkRWxl
bWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpOwotCi0gICAg
Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUu
Ci0gICAgaWYgKHN0eWxlZEVsZW1lbnQuaW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKHN0eWxlZEVsZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8
U1ZHRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcg
aWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAoc3R5bGVkRWxlbWVu
dC5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0
eWxlZEVsZW1lbnQuaWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdHlsZWRF
bGVtZW50LnBhcmVudEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKCpzdGF0
ZS5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhY2hlIHdo
ZXRoZXIgc3RhdGUuZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0
b3JzLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4g
VGhlIHN0eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNv
bHZlci4KLSAgICBzdGF0ZS5zZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoc3RhdGUuZWxl
bWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQoKS0+Y2xhc3NOYW1lcygpKSk7Ci0KLSAgICAvLyBDaGVj
ayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KLSAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7Ci0gICAgU3R5bGVkRWxl
bWVudCogc2hhcmVFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3R5
bGVkRWxlbWVudC5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3aGlsZSAoY291c2luTGlzdCkgewot
ICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5M
aXN0LCBjb3VudCk7Ci0gICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFy
ZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBo
YXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1ZGdldCBvciBvdXIgY291c2lucy4KLSAgICBpZiAoIXNo
YXJlRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBp
dCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9uQXR0
cmlidXRlKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBUcmFja2luZyBjaGls
ZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0
IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKHN0eWxlZEVsZW1lbnQucGFyZW50RWxlbWVudCgpKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVudCkKQEAgLTY3NiwzMyArMzY2LDEzIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFy
ZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlLAotICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNoYXJpbmdC
ZWhhdmlvciwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29uc3QgUmVu
ZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0
b3JGaWx0ZXIpCitSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGlu
Z0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCi0gICAgLy8gT25jZSBhbiBl
bGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ug
b3RoZXJ3aXNlIHRoZSByZW5kZXJlcgotICAgIC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVj
YWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCi0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBB
bGxvd1N0eWxlU2hhcmluZyAmJiAhbV9kb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAm
JiAhZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmICghc19zdHlsZU5vdFlldEF2YWls
YWJsZSkgewotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHls
ZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJs
ZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUt
PmZvbnRDYXNjYWRlKCkudXBkYXRlKCZtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUo
KTsKLSAgICAgICAgcmV0dXJuICpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotICAgIH0KLQogICAg
IG1fc3RhdGUgPSBTdGF0ZShlbGVtZW50LCBwYXJlbnRTdHlsZSwgcmVnaW9uRm9yU3R5bGluZywg
c2VsZWN0b3JGaWx0ZXIpOwogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAo
c2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nKSB7Ci0gICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpKSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuICpzaGFyZWRTdHlsZTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0
YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeSgm
ZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpO
b3RBdFNoYWRvd0JvdW5kYXJ5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
cmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMsMTEgKzkzLDYgQEAgY2xhc3MgVmlld3BvcnRTdHlsZVJlc29s
dmVyOwogY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zOwogCi1lbnVtIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHsKLSAgICBBbGxvd1N0eWxlU2hh
cmluZywKLSAgICBEaXNhbGxvd1N0eWxlU2hhcmluZywKLX07Ci0KIC8vIE1hdGNoT25seVVzZXJB
Z2VudFJ1bGVzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywgd2hlcmUgcmVsYXRpdmUgdW5pdHMK
IC8vIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVu
dCBzdHlsZSwgYW5kIHN0eWxlZCBvbmx5CiAvLyBmcm9tIHRoZSBVc2VyIEFnZW50IFN0eWxlc2hl
ZXQgcnVsZXMuCkBAIC0xMzUsOCArMTMwLDcgQEAgcHVibGljOgogICAgIFN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQmKTsKICAgICB+U3R5bGVSZXNvbHZlcigpOwogCi0gICAgUmVmPFJlbmRlclN0eWxl
PiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgU3R5
bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKLSAgICAgICAgUnVsZU1hdGNo
aW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZv
clN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAg
ICBSZWY8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0
IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9y
RmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlv
bihFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIApAQCAtMTYw
LDEyICsxNTQsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVk
aWFRdWVyeUV2YWx1YXRvcigpIGNvbnN0IHsgcmV0dXJuICptX21lZGl1bTsgfQogCiBwcml2YXRl
OgotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAgIGJvb2wgc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwotICAgIE5vZGUqIGxvY2F0
ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkg
Y29uc3Q7Ci0gICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9k
ZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCYpIGNvbnN0OwotCiAgICAgUmVmPFJlbmRlclN0eWxlPiBzdHls
ZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtl
eWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgpAQCAtMzc4LDggKzM2Niw2IEBAIHB1YmxpYzoKIAog
ICAgICAgICBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lvbkZvclN0eWxpbmc7IH0KICAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExp
bmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQotICAgICAgICB2
b2lkIHNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhib29sIGlzQWZmZWN0ZWQpIHsgbV9l
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBpc0FmZmVjdGVkOyB9Ci0gICAgICAgIGJvb2wg
ZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50QWZm
ZWN0ZWRCeUNsYXNzUnVsZXM7IH0KIAogICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUg
PSBpc0FwcGx5OyB9CiAgICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0g
aXNBcHBseTsgfQpAQCAtNDM1LDcgKzQyMSw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZSB7IE5vdEluc2lkZUxpbmsgfTsKIAotICAg
ICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzIHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKICAgICAgICAg
Ym9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9OwogICAgICAg
ICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKQEAgLTQ1OSw4ICs0NDQsNiBAQCBwdWJsaWM6
CiAKICAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAKLSAgICBzdGF0aWMg
UmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFll
dEF2YWlsYWJsZTsgfQotCiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSYpOwogICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKQEAgLTQ4OCwxMiArNDcxLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0
T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9u
KTsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsKLQogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICBi
b29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50JikgY29uc3Q7Ci0KICAg
ICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBTZWxlY3RvckNo
ZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCwgY29u
c3QgTWF0Y2hSZXN1bHQqID0gbnVsbHB0cik7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXNvbHZl
ZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZSYpOwogCkBAIC01MjAsOSArNDk5LDYgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgbGFzdCBy
ZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAg
ICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKIAotICAgIGJvb2wgY2xhc3NO
YW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAg
Ym9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVz
KFN0eWxlZEVsZW1lbnQmKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkLCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbT4gTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9u
IDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
KiBsaW5rQXR0cmlidXRlKEVsZW1lbnQmIGVsZW1lbnQpCitpbmxpbmUgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAg
IGlmICghZWxlbWVudC5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02Nyw3ICs2Nyw3
IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICB9CiB9CiAK
LWlubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hG
b3JFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwpA
QCAtODYsNyArODYsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZv
CiAgICAgfQogfQogCi1FSW5zaWRlTGluayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5r
U3RhdGVTbG93Q2FzZShFbGVtZW50JiBlbGVtZW50KQorRUluc2lkZUxpbmsgVmlzaXRlZExpbmtT
dGF0ZTo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICBBU1NFUlQoZWxlbWVudC5pc0xpbmsoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9WaXNpdGVkTGlua1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1Zpc2l0ZWRMaW5rU3RhdGUuaAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTYgKzQ1LDE2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKICAgICB2
b2lkIGludmFsaWRhdGVTdHlsZUZvckxpbmsoTGlua0hhc2gpOwotICAgIEVJbnNpZGVMaW5rIGRl
dGVybWluZUxpbmtTdGF0ZShFbGVtZW50Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlu
a1N0YXRlKGNvbnN0IEVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBFSW5zaWRlTGluayBkZXRl
cm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJt
aW5lTGlua1N0YXRlU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYpOwogCiAgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiAgICAgSGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZTsKIH07CiAKLWlubGluZSBFSW5zaWRlTGluayBWaXNpdGVkTGlu
a1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBFSW5z
aWRlTGluayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQuaXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBOb3RJbnNpZGVMaW5rOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC0xNjgsNyArMTY5LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHNob3J0IHRhYklu
ZGV4KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxlbWVu
dCogdmlydHVhbEZvcm0oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZWZh
dWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpIGNvbnN0OwogCiAgICAgYm9vbCBjb21wdXRlSXNEaXNhYmxlZEJ5Rmll
bGRzZXRBbmNlc3RvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkwLDcgKzE1OTAs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50OjpnCiAgICAgYXV0byYg
c3R5bGVSZXNvbHZlciA9IGVsZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwogCiAgICAgaWYgKHBz
ZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkgewotICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGVGb3JF
bGVtZW50KCplbGVtZW50KCksIHBhcmVudFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZyk7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0ID0gc3R5bGVSZXNvbHZlci5zdHlsZUZv
ckVsZW1lbnQoKmVsZW1lbnQoKSwgcGFyZW50U3R5bGUpOwogICAgICAgICByZXN1bHQtPnNldFN0
eWxlVHlwZShGSVJTVF9MSU5FX0lOSEVSSVRFRCk7CiAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck5h
bWVkRmxvd0YKICAgICBBU1NFUlQoIXJlbmRlcmVyLmlzQW5vbnltb3VzKCkpOwogCiAgICAgLy8g
RklYTUU6IFJlZ2lvbiBzdHlsaW5nIGZhaWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0
aGUgcmVuZGVyZXJzIGRvbid0IGhhdmUgYSBub2RlLgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUgPSByZW5kZXJlci5lbGVtZW50KCktPnN0eWxlUmVzb2x2
ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnJlbmRlcmVyLmVsZW1lbnQoKSwgJnBhcmVudFN0eWxlLCBE
aXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hBbGxSdWxlcywgdGhpcyk7CisgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiByZW5kZXJPYmplY3RSZWdpb25TdHlsZSA9IHJlbmRlcmVyLmVsZW1lbnQoKS0+
c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqcmVuZGVyZXIuZWxlbWVudCgpLCAmcGFy
ZW50U3R5bGUsIE1hdGNoQWxsUnVsZXMsIHRoaXMpOwogCiAgICAgcmV0dXJuIHJlbmRlck9iamVj
dFJlZ2lvblN0eWxlLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJT
dHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKICNpbmNsdWRlICJTdHlsZVNlbGZBbGlnbm1lbnREYXRh
LmgiCisjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdl
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50
ZXJDb21wYXJpc29uLmg+CkBAIC0yOTMsNyArMjk0LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6b3Bl
cmF0b3I9PShjb25zdCBSZW5kZQogCiBib29sIFJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpcyAhPSBTdHlsZVJlc29sdmVyOjpzdHlsZU5vdFll
dEF2YWlsYWJsZSgpOworICAgIHJldHVybiAhU3R5bGU6OmlzUGxhY2Vob2xkZXJTdHlsZSgqdGhp
cyk7CiB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6Omhhc1VuaXF1ZVBzZXVkb1N0eWxlKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMu
aCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0
ZS5oIgorI2luY2x1ZGUgIldlYlZUVEVsZW1lbnQuaCIKKyNpbmNsdWRlICJYTUxOYW1lcy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKKworc3RydWN0IFNoYXJpbmdSZXNv
bHZlcjo6Q29udGV4dCB7CisgICAgY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudDsKKyAgICBi
b29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKKyAgICBFSW5zaWRlTGluayBlbGVtZW50
TGlua1N0YXRlOworfTsKKworU2hhcmluZ1Jlc29sdmVyOjpTaGFyaW5nUmVzb2x2ZXIoY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cywgY29u
c3QgU2VsZWN0b3JGaWx0ZXImIHNlbGVjdG9yRmlsdGVyKQorICAgIDogbV9kb2N1bWVudChkb2N1
bWVudCkKKyAgICAsIG1fcnVsZVNldHMocnVsZVNldHMpCisgICAgLCBtX3NlbGVjdG9yRmlsdGVy
KHNlbGVjdG9yRmlsdGVyKQoreworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50RWxlbWVu
dFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50JiBwYXJlbnRFbGVtZW50KQoreworICAgIHJl
dHVybiBwYXJlbnRFbGVtZW50Lmhhc0ZsYWdzU2V0RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgbGluZSBpcyBzdXJwcmlzaW5n
bHkgaG90LCB3ZSBtYXkgd2lzaCB0byBpbmxpbmUgaGFzRGlyZWN0aW9uQXV0byBpbnRvIFN0eWxl
UmVzb2x2ZXIuCisgICAgcmV0dXJuIGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MRWxlbWVudD4oZWxlbWVudCkuaGFzRGlyZWN0aW9uQXV0bygpOworfQorCitjb25zdCBF
bGVtZW50KiBTaGFyaW5nUmVzb2x2ZXI6OnNlYXJjaFNpbWlsYXIoY29uc3QgRWxlbWVudCYgc2Vh
cmNoRWxlbWVudCkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KHNlYXJjaEVs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiBlbGVtZW50ID0gZG93
bmNhc3Q8U3R5bGVkRWxlbWVudD4oc2VhcmNoRWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50LnBh
cmVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgcGFyZW50
RWxlbWVudCA9ICplbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKKyAgICAvLyBJZiB0aGUgZWxlbWVu
dCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KKyAgICBpZiAoZWxlbWVu
dC5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoZWxlbWVu
dC5pc1NWR0VsZW1lbnQoKSAmJiBkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KS5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8g
SWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRz
LgorICAgIGlmIChlbGVtZW50Lmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0lu
UnVsZXMuY29udGFpbnMoZWxlbWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFy
aW5nKHBhcmVudEVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoJmVs
ZW1lbnQgPT0gbV9kb2N1bWVudC5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGVsZW1lbnQpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIENvbnRleHQgY29udGV4dCB7CisgICAgICAgIGVsZW1lbnQsCisg
ICAgICAgIGVsZW1lbnQuaGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGVs
ZW1lbnQuY2xhc3NOYW1lcygpKSwKKyAgICAgICAgbV9kb2N1bWVudC52aXNpdGVkTGlua1N0YXRl
KCkuZGV0ZXJtaW5lTGlua1N0YXRlKGVsZW1lbnQpCisgICAgfTsKKworICAgIC8vIENoZWNrIHBy
ZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgorICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKKyAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKKyAgICBTdHlsZWRFbGVtZW50
KiBzaGFyZUVsZW1lbnQgPSBudWxscHRyOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBlbGVtZW50
LnByZXZpb3VzU2libGluZygpOworICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CisgICAgICAgIHNo
YXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nKGNvbnRleHQsIGNvdXNpbkxpc3QsIGNvdW50KTsKKyAg
ICAgICAgaWYgKHNoYXJlRWxlbWVudCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb3Vz
aW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZp
c2l0ZWROb2RlQ291bnQpOworICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgZXhoYXVzdGVkIGFs
bCBvdXIgYnVkZ2V0IG9yIG91ciBjb3VzaW5zLgorICAgIGlmICghc2hhcmVFbGVtZW50KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVs
ZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkg
ZmFpbC4KKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoZWxlbWVu
dCwgbV9ydWxlU2V0cy5zaWJsaW5nKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAv
LyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KGVsZW1lbnQsIG1fcnVsZVNldHMudW5jb21tb25B
dHRyaWJ1dGUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIFRyYWNraW5nIGNo
aWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBn
ZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCisgICAgaWYgKHBhcmVudEVs
ZW1lbnRQcmV2ZW50c1NoYXJpbmcocGFyZW50RWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIHNoYXJlRWxlbWVudDsKK30KKworU3R5bGVkRWxlbWVudCogU2hh
cmluZ1Jlc29sdmVyOjpmaW5kU2libGluZyhjb25zdCBDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBu
b2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0Cit7CisgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+
KCpub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KGNvbnRleHQsIGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBk
b3duY2FzdDxTdHlsZWRFbGVtZW50Pihub2RlKTsKK30KKworTm9kZSogU2hhcmluZ1Jlc29sdmVy
Ojpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2Rl
Q291bnQpIGNvbnN0Cit7CisgICAgaWYgKHZpc2l0ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkICogY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4ocGFyZW50KSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgYXV0byYgc3R5bGVkUGFyZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxl
bWVudD4oKnBhcmVudCk7CisgICAgaWYgKHN0eWxlZFBhcmVudC5pbmxpbmVTdHlsZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8U1ZHRWxlbWVudD4oc3R5bGVkUGFyZW50
KSAmJiBkb3duY2FzdDxTVkdFbGVtZW50PihzdHlsZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoc3R5bGVkUGFy
ZW50Lmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMo
c3R5bGVkUGFyZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZWRQYXJl
bnQucmVuZGVyU3R5bGUoKTsKKyAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7CisgICAgTm9kZSog
dGhpc0NvdXNpbiA9ICZzdHlsZWRQYXJlbnQ7CisgICAgTm9kZSogY3VycmVudE5vZGUgPSBzdHls
ZWRQYXJlbnQucHJldmlvdXNTaWJsaW5nKCk7CisKKyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBm
b3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29y
aXRobQorICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxU
aHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0g
Y1N0eWxlU2VhcmNoVGhyZXNob2xkOworICAgIHdoaWxlICh0aGlzQ291c2luKSB7CisgICAgICAg
IGZvciAoOyBjdXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICgrK3N1YmNvdW50ID4gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgaWYg
KCFpczxFbGVtZW50PigqY3VycmVudE5vZGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgYXV0byYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY3Vy
cmVudE5vZGUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnJlbmRlclN0eWxlKCkg
IT0gcGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnRFbGVtZW50Lmxhc3RDaGlsZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKGN1cnJlbnRF
bGVtZW50KSkgeworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVk
IHRyaWVzLgorICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkIC0gc3ViY291bnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2Rl
LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjdXJyZW50
Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNp
dGVkTm9kZUNvdW50KTsKKyAgICAgICAgdGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOworICAgIH0K
KworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgYm9vbCBjYW5TaGFyZVN0eWxlV2l0
aENvbnRyb2woY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSFRN
TEZvcm1Db250cm9sRWxlbWVudCYgZm9ybUVsZW1lbnQpCit7CisgICAgaWYgKCFpczxIVE1MSW5w
dXRFbGVtZW50Pihmb3JtRWxlbWVudCkgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiB0aGlzSW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZm9ybUVsZW1lbnQpOworICAgIGF1dG8mIG90aGVy
SW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCk7CisKKyAg
ICBpZiAodGhpc0lucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVu
dC5pc0F1dG9GaWxsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5w
dXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91
bGRBcHBlYXJDaGVja2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lu
cHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1l
bnQuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50
LmlzUmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZvcm1FbGVt
ZW50LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9IGVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250
cm9sKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmb3JtRWxlbWVudC5pc0Rl
ZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmb3JtRWxlbWVudC5pc0luUmFuZ2Uo
KSAhPSBlbGVtZW50LmlzSW5SYW5nZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZm9ybUVsZW1lbnQuaXNPdXRPZlJhbmdlKCkgIT0gZWxlbWVudC5pc091dE9mUmFuZ2UoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2hh
cmluZ1Jlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgU3R5bGVkRWxlbWVudCYgY2FuZGlkYXRlRWxlbWVudCkgY29uc3QKK3sKKyAg
ICBhdXRvJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OworICAgIGF1dG8qIHN0eWxlID0gY2Fu
ZGlkYXRlRWxlbWVudC5yZW5kZXJTdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHN0eWxlLT5oYXNVbmlxdWVQc2V1ZG9TdHlsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQudGFnUU5hbWUoKSAhPSBlbGVtZW50
LnRhZ1FOYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY2FuZGlkYXRlRWxl
bWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQubmVlZHNTdHlsZVJlY2FsYygpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxl
bWVudD4oY2FuZGlkYXRlRWxlbWVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAh
PSBlbGVtZW50LmlzTGluaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQuaG92ZXJlZCgpICE9IGVsZW1lbnQuaG92ZXJlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuYWN0aXZlKCkgIT0gZWxlbWVudC5h
Y3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50
LmZvY3VzZWQoKSAhPSBlbGVtZW50LmZvY3VzZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gZWxlbWVudC5zaGFk
b3dQc2V1ZG9JZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCZjYW5kaWRhdGVF
bGVtZW50ID09IG1fZG9jdW1lbnQuY3NzVGFyZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJp
YnV0ZXMoY29udGV4dCwgY2FuZGlkYXRlRWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oY2FuZGlkYXRlRWxlbWVudCkuYWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gY29uc3RfY2FzdDxTdHlsZWRF
bGVtZW50Jj4oZWxlbWVudCkuYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5hZmZlY3Rz
TmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSB8fCBjYW5kaWRhdGVFbGVtZW50LnN0eWxlSXNBZmZl
Y3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChjYW5kaWRhdGVFbGVtZW50Lmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0lu
UnVsZXMuY29udGFpbnMoY2FuZGlkYXRlRWxlbWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNDb250cm9sID0gaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oY2FuZGlkYXRlRWxlbWVudCk7CisKKyAgICBpZiAoaXND
b250cm9sICE9IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENv
bnRyb2woZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCksIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGNhbmRpZGF0ZUVsZW1lbnQpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmlt
YXRpb25zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFR1cm4gb2ZmIHN0eWxl
IHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91
dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChjYW5kaWRhdGVFbGVtZW50Lmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZyYW1lVGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBjYW5kaWRhdGVF
bGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpIHx8IGNhbmRpZGF0ZUVsZW1l
bnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldFRhZykgfHwgY2FuZGlkYXRlRWxlbWVudC5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FudmFzVGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGNhbmRpZGF0ZUVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAm
JiBjb250ZXh0LmVsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuZWxlbWVudERhdGEo
KSAhPSBlbGVtZW50LmVsZW1lbnREYXRhKCkpIHsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1l
bnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnJlYWRvbmx5QXR0cikgIT0gZWxlbWVudC5m
YXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cmVhZG9ubHlBdHRyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaXNTVkdFbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnR5cGVBdHRyKSAhPSBlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRy
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
dHlwZUF0dHIpICE9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRy
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoY2FuZGlkYXRlRWxlbWVudC5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IGVsZW1l
bnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGVsZW1lbnQubWF0Y2hlc0ludmFsaWRQc2V1ZG9DbGFzcygpICE9IGVsZW1lbnQubWF0
Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIC8vIERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJW
VFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMuCisgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+KGVsZW1l
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICBpZiAoJmVsZW1lbnQgPT0gbV9kb2N1bWVudC53ZWJraXRDdXJyZW50RnVs
bFNjcmVlbkVsZW1lbnQoKSB8fCAmZWxlbWVudCA9PSBtX2RvY3VtZW50LndlYmtpdEN1cnJlbnRG
dWxsU2NyZWVuRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KGNvbnN0IFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJ1
bGVTZXQqIHJ1bGVTZXQpIGNvbnN0Cit7CisgICAgaWYgKCFydWxlU2V0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoY29uc3RfY2Fz
dDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG51bGxwdHIsIG1fcnVsZVNldHMsICZtX3NlbGVj
dG9yRmlsdGVyKTsKKyAgICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVs
ZVNldCk7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGNvbnN0IENvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFN0eWxlZEVsZW1lbnQmIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0Cit7CisgICAgYXV0byYg
ZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKKyAgICBpZiAoZWxlbWVudC5lbGVtZW50RGF0YSgp
ID09IHNoYXJpbmdDYW5kaWRhdGUuZWxlbWVudERhdGEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9
IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChj
b250ZXh0LmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykgeworICAgICAgICBpZiAoIXNoYXJp
bmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJp
c2lvbiBiZWNhdXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4K
KyAgICAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRp
ZGF0ZS5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpjbGFzc0F0dHIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLmNsYXNzTmFtZXMoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdD
YW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdD
YW5kaWRhdGUuY2xhc3NOYW1lcygpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCY+KGVsZW1lbnQpLnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkgIT0gY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oc2hhcmluZ0NhbmRpZGF0ZSku
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnByb2dyZXNzVGFnKSkgeworICAg
ICAgICBpZiAoZWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29s
dmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXMpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFt
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFz
c2VzSW5SdWxlcy5jb250YWlucyhjbGFzc05hbWVzW2ldLmltcGwoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK30KK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVTaGFyaW5nUmVzb2x2ZXJfaAorI2RlZmluZSBT
dHlsZVNoYXJpbmdSZXNvbHZlcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBEb2N1bWVudFJ1bGVTZXRzOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5v
ZGU7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU2VsZWN0b3JGaWx0ZXI7CitjbGFzcyBTcGFjZVNw
bGl0U3RyaW5nOworY2xhc3MgU3R5bGVkRWxlbWVudDsKKworbmFtZXNwYWNlIFN0eWxlIHsKKwor
Y2xhc3MgU2hhcmluZ1Jlc29sdmVyIHsKK3B1YmxpYzoKKyAgICBTaGFyaW5nUmVzb2x2ZXIoY29u
c3QgRG9jdW1lbnQmLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0
ZXImKTsKKworICAgIGNvbnN0IEVsZW1lbnQqIHNlYXJjaFNpbWlsYXIoY29uc3QgRWxlbWVudCYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHN0cnVjdCBDb250ZXh0OworCisgICAgU3R5bGVkRWxl
bWVudCogZmluZFNpYmxpbmcoY29uc3QgQ29udGV4dCYsIE5vZGUqLCB1bnNpZ25lZCYgY291bnQp
IGNvbnN0OworICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNp
Z25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoY29uc3QgQ29udGV4dCYsIGNvbnN0IFN0eWxlZEVsZW1lbnQmIGNhbmRpZGF0ZUVs
ZW1lbnQpIGNvbnN0OworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoY29uc3QgU3R5bGVkRWxlbWVudCYsIGNvbnN0IFJ1bGVTZXQqKSBjb25zdDsKKyAgICBib29s
IHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29u
c3QgQ29udGV4dCYsIGNvbnN0IFN0eWxlZEVsZW1lbnQmIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0
OworICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBjbGFzc05hbWVzKSBjb25zdDsKKworICAgIGNvbnN0IERvY3VtZW50JiBtX2RvY3VtZW50
OworICAgIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIG1fcnVsZVNldHM7CisgICAgY29uc3QgU2Vs
ZWN0b3JGaWx0ZXImIG1fc2VsZWN0b3JGaWx0ZXI7Cit9OworCit9Cit9CisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NiwxMCArOTYsMjQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlk
UHVzaCB7IGZhbHNlIH07CiB9OwogCisKK3N0YXRpYyBSZW5kZXJTdHlsZSogcGxhY2Vob2xkZXJT
dHlsZTsKKworc3RhdGljIHZvaWQgZW5zdXJlUGxhY2Vob2xkZXJTdHlsZShEb2N1bWVudCYgZG9j
dW1lbnQpCit7CisgICAgaWYgKHBsYWNlaG9sZGVyU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBwbGFjZWhvbGRlclN0eWxlID0gJlJlbmRlclN0eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7Cisg
ICAgcGxhY2Vob2xkZXJTdHlsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICBwbGFjZWhvbGRlclN0
eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworfQor
CiBUcmVlUmVzb2x2ZXI6OlRyZWVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBt
X2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9zdHlsZVJlc29sdmVyKGRvY3VtZW50LmVuc3Vy
ZVN0eWxlUmVzb2x2ZXIoKSkKKyAgICAsIG1fc2hhcmluZ1Jlc29sdmVyKGRvY3VtZW50LCBtX3N0
eWxlUmVzb2x2ZXIucnVsZVNldHMoKSwgbV9zZWxlY3RvckZpbHRlcikKIHsKKyAgICBlbnN1cmVQ
bGFjZWhvbGRlclN0eWxlKGRvY3VtZW50KTsKIH0KIAogVHJlZVJlc29sdmVyOjpUcmVlUmVzb2x2
ZXIoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgVHJlZVJlc29sdmVyJiBzaGFkb3dIb3N0VHJlZVJl
c29sdmVyKQpAQCAtMTA3LDYgKzEyMSw3IEBAIFRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKFNo
YWRvd1Jvb3QmIHMKICAgICAsIG1fc3R5bGVSZXNvbHZlcihzaGFkb3dSb290LnN0eWxlUmVzb2x2
ZXIoKSkKICAgICAsIG1fc2hhZG93Um9vdCgmc2hhZG93Um9vdCkKICAgICAsIG1fc2hhZG93SG9z
dFRyZWVSZXNvbHZlcigmc2hhZG93SG9zdFRyZWVSZXNvbHZlcikKKyAgICAsIG1fc2hhcmluZ1Jl
c29sdmVyKG1fZG9jdW1lbnQsIG1fc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLCBtX3NlbGVjdG9y
RmlsdGVyKQogewogfQogCkBAIC0xMjMsMTEgKzEzOCwyMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRD
cmVhdGVSZW5kZXJlcihjb25zdCBFCiAKIFJlZjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0
eWxlKQogeworICAgIGlmICghbV9kb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAh
ZWxlbWVudC5yZW5kZXJlcigpKSB7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0SGFzTm9kZXNXaXRo
UGxhY2Vob2xkZXJTdHlsZSgpOworICAgICAgICByZXR1cm4gKnBsYWNlaG9sZGVyU3R5bGU7Cisg
ICAgfQorCiAgICAgaWYgKGVsZW1lbnQuaGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBlbGVtZW50LmN1c3Rv
bVN0eWxlRm9yUmVuZGVyZXIoaW5oZXJpdGVkU3R5bGUpKQogICAgICAgICAgICAgcmV0dXJuIHN0
eWxlLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgfQotICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIu
c3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsICZpbmhlcml0ZWRTdHlsZSwgQWxsb3dTdHlsZVNoYXJp
bmcsIE1hdGNoQWxsUnVsZXMsIG51bGxwdHIsICZtX3NlbGVjdG9yRmlsdGVyKTsKKworICAgIGlm
IChhdXRvKiBzaW1pbGFyRWxlbWVudCA9IG1fc2hhcmluZ1Jlc29sdmVyLnNlYXJjaFNpbWlsYXIo
ZWxlbWVudCkpCisgICAgICAgIHJldHVybiAqc2ltaWxhckVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CisKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAm
aW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxsUnVsZXMsIG51bGxwdHIsICZtX3NlbGVjdG9yRmlsdGVy
KTsKIH0KIAogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKQEAgLTk0OCw1ICs5NzIsMTEgQEAgYm9v
bCBwb3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZAogICAgIHJldHVybiByZXNvbHV0
aW9uTmVzdGluZ0RlcHRoOwogfQogCisKK2Jvb2wgaXNQbGFjZWhvbGRlclN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICByZXR1cm4gJnN0eWxlID09IHBsYWNlaG9sZGVyU3R5
bGU7Cit9CisKIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2
ZXIuaAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNs
dWRlICJTdHlsZUNoYW5nZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hhcmluZ1Jlc29sdmVyLmgiCiAj
aW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTg1LDYg
Kzg2LDcgQEAgcHJpdmF0ZToKICAgICBUcmVlUmVzb2x2ZXIqIG1fc2hhZG93SG9zdFRyZWVSZXNv
bHZlciB7IG51bGxwdHIgfTsKIAogICAgIFNlbGVjdG9yRmlsdGVyIG1fc2VsZWN0b3JGaWx0ZXI7
CisgICAgU2hhcmluZ1Jlc29sdmVyIG1fc2hhcmluZ1Jlc29sdmVyOwogfTsKIAogdm9pZCBkZXRh
Y2hSZW5kZXJUcmVlKEVsZW1lbnQmKTsKQEAgLTk1LDYgKzk3LDggQEAgdm9pZCB1cGRhdGVUZXh0
UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZwogdm9pZCBxdWV1ZVBvc3RSZXNvbHV0aW9uQ2FsbGJh
Y2soc3RkOjpmdW5jdGlvbjx2b2lkICgpPik7CiBib29sIHBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tz
QXJlU3VzcGVuZGVkKCk7CiAKK2Jvb2wgaXNQbGFjZWhvbGRlclN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJik7CisKIGNsYXNzIFBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlciB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyKERvY3VtZW50Jik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTU4MzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw3
ICs3OTMsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNWR0VsZW1lbnQ6OmN1c3RvbVN0CiB7CiAg
ICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW4gYSA8dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUg
ZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVlLgogICAgIGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0
aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50
LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRT
dHlsZSwgRGlzYWxsb3dTdHlsZVNoYXJpbmcpOworICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50
LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRT
dHlsZSk7CiAKICAgICByZXR1cm4gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxOTU4MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0
ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAgICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUg
Y29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1
bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUg
U01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1vZGVsLgotICAgICAgICAgICAgbV9vdmVycmlkZUNv
bXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxl
bWVudCwgcGFyZW50U3R5bGUsIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaEFsbFJ1bGVzRXhj
bHVkaW5nU01JTCk7CisgICAgICAgICAgICBtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9IGVsZW1l
bnQuc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRTdHlsZSwg
TWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwogICAgICAgICAgICAgbV9uZWVkc092ZXJyaWRl
Q29tcHV0ZWRTdHlsZVVwZGF0ZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVCht
X292ZXJyaWRlQ29tcHV0ZWRTdHlsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270435</attachid>
            <date>2016-02-01 15:23:32 -0800</date>
            <delta_ts>2016-02-01 18:18:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-sharing-resolver-3.patch</filename>
            <type>text/plain</type>
            <size>63385</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxNi0wMi0wMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIHN0eWxlIHNoYXJp
bmcgY29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgY29kZSB0byBhIG5ldyBjbGFzcywgU3R5bGU6
OlNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICBXaGVuIHJlc29sdmluZyBkb2N1bWVudCBzdHls
ZSB3ZSBxdWVyeSB0aGUgc2hhcmluZyByZXNvbHZlciBmaXJzdCBiZWZvcmUgdXNpbmcgdGhlIHJl
Z3VsYXIgc3R5bGUgcmVzb2x2ZXIuCisgICAgICAgIE90aGVyIHBhdGhzIHRoYXQgY2FsbCBzdHls
ZSByZXNvbHZlciB3ZXJlIG1vc3RseSBhbHJlYWR5IGRpc2FibGluZyBpdCB3aXRoIERpc2FsbG93
U3R5bGVTaGFyaW5nIGZsYWcuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGNoUmVxdWVzdDo6TWF0Y2hSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKToKKworICAgICAg
ICAgICAgTW9yZSBjb25zdC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldFJlZ2lvbkZvclN0
eWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnNldE1lZGl1
bSk6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpwcmVwYXJlRXZhbHVhdG9yKToKKyAgICAgICAgKiBjc3Mv
U3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZU1lZGlhOjptYXRjaE1lZGl1
bSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
QXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRIYXNEaXJlY3Rpb25BdXRv
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKTogRGVsZXRlZC4KKworICAgICAgICAgICAgU3R5bGUgc2hhcmlu
ZyBjb2RlIG1vdmVzIHRvIFNoYXJpbmdSZXNvbHZlci4KKworICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptZWRpYVF1ZXJ5RXZh
bHVhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdpb25G
b3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVt
ZW50TGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpz
ZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZU5vdFlldEF2YWlsYWJsZSk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFBsYWNl
aG9sZGVyIGNvZGUgbW92ZXMgdG8gVHJlZVJlc29sdmVyLgorCisgICAgICAgICogZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5r
cyk6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayk6CisgICAgICAg
IChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6
CisgICAgICAgICogZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZSk6CisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9T
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJ
blJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpoYXNVbmlxdWVQc2V1ZG9TdHlsZSk6CisgICAgICAgICog
c3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OlNoYXJpbmdSZXNvbHZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6cGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6c2VhcmNoU2ltaWxhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpmaW5kU2libGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyk6CisgICAgICAgICogc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIu
aDogQWRkZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmVuc3VyZVBsYWNlaG9sZGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAg
IFRyeSB0byB1c2UgU2hhcmluZ1Jlc29sdmVyIGZpcnN0LgorICAgICAgICAgICAgQWxzbyBtb3Zl
IHBsYWNlaG9sZGVyIHN0eWxlIGhhbmRsaW5nIGhlcmUsIGl0IGlzIG9ubHkgcmVsZXZhbnQgd2hl
biByZXNvbHZpbmcgZG9jdW1lbnQgc3R5bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpw
b3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6aXNQbGFjZWhvbGRlclN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdF
bGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6
b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKwogMjAxNi0wMi0wMSAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNvbWUgU1BJIGRlY2xhcmF0aW9u
cyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBTUEkgaGVhZGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTI2MzIsNiArMjYzMiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKICAgICBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25z
LmNwcAogICAgIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAorICAgIHN0eWxlL1N0
eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAog
CiAgICAgc3ZnL1NWR0FFbGVtZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxOTU4MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTI0NCw2ICsxOTI0NCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdHlsZVxT
dHlsZUNoYW5nZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHls
ZUZvbnRTaXplRnVuY3Rpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0
eWxlXFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHN0eWxlXFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlVHJlZVJlc29sdmVyLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJyaWRnZVxqc2NcQnJpZGdlSlNDLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJyaWRnZVxjXGNfY2xhc3MuY3BwIiAvPgpAQCAtMjI4MTAsNiArMjI4
MTEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3R5bGVcU3R5bGVDaGFuZ2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlRm9udFNpemVGdW5jdGlv
bnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHlsZVNo
YXJpbmdSZXNvbHZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3R5bGVcU3R5
bGVUcmVlUmVzb2x2ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJyaWRnZVxC
cmlkZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJyaWRnZVxqc2NcQnJpZGdl
SlNDLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY1NzYsNiAr
NjU3Niw4IEBACiAJCUU0NzEyN0NCMTYzNDM4QUUwMEVENkY1QSAvKiBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5o
ICovOyB9OwogCQlFNDc3OEI3RjExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDc3OEI3RDEx
NUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0b21FdmVudC5jcHAgKi87IH07CiAJCUU0Nzc4QjgwMTE1
QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDc3OEI3RTExNUE1ODFBMDBCNUQzNzIgLyogSlNDdXN0
b21FdmVudC5oICovOyB9OworCQlFNDdBM0FDMzFDNUVBQkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFy
aW5nUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cCAqLzsgfTsKKwkJRTQ3QTNBQzYxQzVFQUM5RDAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29s
dmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdB
M0FDNDFDNUVBQzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaCAqLzsgfTsKIAkJ
RTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNjBFNzEyNDE2
MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdCNEJFOTBFNzEyNDE2MDAwMzg4NTQgLyog
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNl
SGFuZGxlLmNwcCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lv
blN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ1MjQs
NiArMTQ1MjYsOCBAQAogCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxk
SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudENoaWxk
SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3NzhCN0QxMTVBNTgx
QTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDdXN0b21FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9tRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jl
c29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hh
cmluZ1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTNBQzQx
QzVFQUM3OTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hhcmluZ1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0I0QkU2MEU3MTI0MTYwMDAz
ODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMyOTYsNiArMjMzMDAsOCBAQAogCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENBOCAv
KiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAogCQkJCUU0REVBQTE1MTdBOTNEQzMwMDBF
MDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5jcHAgKi8sCiAJCQkJRTRERUFBMTYxN0E5M0RDMzAw
MEUwNDMwIC8qIFN0eWxlVHJlZVJlc29sdmVyLmggKi8sCisJCQkJRTQ3QTNBQzIxQzVFQUJCRTAw
Q0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLywKKwkJCQlFNDdBM0FDNDFDNUVB
Qzc5MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gc3R5bGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjY4NDYsNiArMjY4NTIs
NyBAQAogCQkJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM5MDQ2RTAxMkRBMjVFMTdCQUY4MEEyIC8qIE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkE2NTRBNkMxMTA4QUJFRDAwMjYxNUUw
IC8qIE1hdGhNTFRleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDdBM0FDNjFDNUVB
QzlEMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCQzhEQUQxQUFBMzAyMjAw
RTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKQEAg
LTMwMDM5LDYgKzMwMDQ2LDcgQEAKIAkJCQlBODBFN0U5QTBBMUE4M0UzMDA3RkI4QzUgLyogSlNI
VE1MT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDhBMjlDMDBBNDZEOUNC
MDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0N0EzQUMzMUM1RUFCQkUwMENDQkZBNyAvKiBT
dHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QUQwMTczQzEyN0U4
Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MUGFy
YW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3
ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHJpZ2h0VG9MZWYKIAogY2xh
c3MgTWF0Y2hSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBNYXRjaFJlcXVlc3QoUnVsZVNldCogcnVs
ZVNldCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyA9IGZhbHNlKQorICAgIE1hdGNoUmVxdWVzdChj
b25zdCBSdWxlU2V0KiBydWxlU2V0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzID0gZmFsc2UpCiAg
ICAgICAgIDogcnVsZVNldChydWxlU2V0KQogICAgICAgICAsIGluY2x1ZGVFbXB0eVJ1bGVzKGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogICAgIHsKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzCiAgICAgfQogfQogCi1ib29sIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVTZXQpCitib29sIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVzKGNvbnN0IFJ1bGVTZXQqIHJ1
bGVTZXQpCiB7CiAgICAgY2xlYXJNYXRjaGVkUnVsZXMoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmcoY29uc3Qg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKSB7IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJl
Z2lvbkZvclN0eWxpbmc7IH0KICAgICB2b2lkIHNldE1lZGl1bShjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yKiBtZWRpdW0pIHsgbV9pc1ByaW50U3R5bGUgPSBtZWRpdW0tPm1lZGlhVHlwZU1hdGNo
U3BlY2lmaWMoInByaW50Iik7IH0KIAotICAgIGJvb2wgaGFzQW55TWF0Y2hpbmdSdWxlcyhSdWxl
U2V0Kik7CisgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1bGVzKGNvbnN0IFJ1bGVTZXQqKTsKIAog
ICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVkUmVzdWx0KCk7CiAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVMaXN0KCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHJldmlzaW9uIDE5
NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFdmFs
dWF0b3I+IE1lZAogICAgIGlmICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBt
X2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5
VXNlckFnZW50UnVsZXMpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gbV9k
b2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRF
bGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxl
cyk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPiht
ZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwgcm9vdFN0eWxlLmdldCgpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBib29sIFN0eWxlTWVkaWE6Om1hdGNoTWVkaXVtKGNvbnN0IFN0cmluCiAgICAgaWYgKCFk
b2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcm9vdFN0eWxlID0gZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQtPnJlbmRlclN0eWxlKCksIERp
c2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBkb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigp
LnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUo
KSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+
IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2Uo
cXVlcnkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYsOCArMTc2LDYgQEAgc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgZmly
c3RMb3dQcmlvcgogCiBzdGF0aWMgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYsIFRl
eHREaXJlY3Rpb24mLCBXcml0aW5nTW9kZSYpOwogCi1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZl
cjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6
U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCiB7CiAgICAgbV9oYXNVQUFwcGVhcmFu
Y2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CkBAIC0yNjQsNyArMjYyLDcgQEAgU3R5bGVS
ZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZAogICAgICAgICBtX21lZGl1bSA9IHN0
ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4oImFsbCIpOwogCiAgICAgaWYgKHJv
b3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgqcm9vdCwg
bV9kb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5
VXNlckFnZW50UnVsZXMpOworICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVs
ZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpOwogCiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBt
X21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4odmlldy0+bWVk
aWFUeXBlKCksICZ2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAt
MzMyLDE1ICszMzAsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRp
CiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPSAw
OwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29u
c3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcykgY29uc3QKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9y
dWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0u
aW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShFbGVtZW50JiBlbGVtZW50LCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDogbV9lbGVt
ZW50KCZlbGVtZW50KQogICAgICwgbV9wYXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKQEAgLTM2OSwz
MDUgKzM1OCw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHkKICAg
ICBtX3N0eWxlID0gV1RGTW92ZShzdHlsZSk7CiAgICAgdXBkYXRlQ29udmVyc2lvbkRhdGEoKTsK
IH0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKGNvbnN0IEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQpCi17Ci0gICAgaWYgKCFwYXJlbnRFbGVtZW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhcmVudEVsZW1lbnQtPmhhc0ZsYWdzU2V0RHVy
aW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsKLX0KLQotTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRl
Q291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBj
b25zdAotewotICAgIGlmICh2aXNpdGVkTm9kZUNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9s
ZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KHBhcmVudCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZFBhcmVudCA9IGRvd25jYXN0PFN0eWxlZEVs
ZW1lbnQ+KHBhcmVudCk7Ci0gICAgaWYgKHN0eWxlZFBhcmVudC0+aW5saW5lU3R5bGUoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJl
bnQpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoc3R5bGVk
UGFyZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRh
aW5zKHN0eWxlZFBhcmVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxl
ZFBhcmVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7Ci0gICAg
Tm9kZSogdGhpc0NvdXNpbiA9IHN0eWxlZFBhcmVudDsKLSAgICBOb2RlKiBjdXJyZW50Tm9kZSA9
IHN0eWxlZFBhcmVudC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSB0
cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhl
IGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNo
TGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgotICAgIHZpc2l0ZWROb2RlQ291
bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwotICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0g
ICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAgICAgICAgICAgKytzdWJjb3VudDsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAm
JiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkKLSAgICAgICAgICAgICAgICAmJiBpczxFbGVtZW50
PigqY3VycmVudE5vZGUpICYmICFwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKGRvd25jYXN0
PEVsZW1lbnQ+KGN1cnJlbnROb2RlKSkKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAg
ICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KLSAgICAgICAgICAgICAg
ICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50Owot
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xk
KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgY3VycmVudE5v
ZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQo
KSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQotewot
ICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRWxlbWVudFJ1
bGVDb2xsZWN0b3IgY29sbGVjdG9yKCptX3N0YXRlLmVsZW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgp
LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmlsdGVyKCkpOwotICAgIHJldHVybiBjb2xs
ZWN0b3IuaGFzQW55TWF0Y2hpbmdSdWxlcyhydWxlU2V0KTsKLX0KLQotYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKLXsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmICghaXM8SFRN
TElucHV0RWxlbWVudD4oZWxlbWVudCkgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpzdGF0ZS5l
bGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiB0aGlzSW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCk7Ci0gICAgYXV0byYg
b3RoZXJJbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqc3RhdGUuZWxl
bWVudCgpKTsKLQotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LmlzQXV0b0ZpbGxlZCgpICE9IG90
aGVySW5wdXRFbGVtZW50LmlzQXV0b0ZpbGxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuc2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5w
dXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBv
dGhlcklucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxlbWVudC5pc1JlcXVpcmVkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoZWxlbWVudC5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5p
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChlbGVtZW50LmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LmlzT3V0T2ZSYW5nZSgpICE9
IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0Rp
cmVjdGlvbkF1dG8oRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBsaW5l
IGlzIHN1cnByaXNpbmdseSBob3QsIHdlIG1heSB3aXNoIHRvIGlubGluZSBoYXNEaXJlY3Rpb25B
dXRvIGludG8gU3R5bGVSZXNvbHZlci4KLSAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KGVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7
Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50JiBzaGFyaW5nQ2FuZGlkYXRlKSBj
b25zdAotewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRl
LmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLmVsZW1lbnREYXRh
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RH
ZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RH
ZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkp
IHsKLSAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVz
QWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xh
c3MoKSkgewotICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0
cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJp
YnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQo
KSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS5jbGFz
c05hbWVzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChkb3duY2FzdDxTdHlsZWRF
bGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKS5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9
IHNoYXJpbmdDYW5kaWRhdGUucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9n
cmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5k
ZXRlcm1pbmF0ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHls
ZWRFbGVtZW50JiBlbGVtZW50KSBjb25zdAotewotICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudC5y
ZW5kZXJTdHlsZSgpOwotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBp
ZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+aGFzVW5pcXVlUHNldWRv
U3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LnRhZ1FOYW1l
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT50YWdRTmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQuaW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+
KGVsZW1lbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xp
bmsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmhvdmVyZWQoKSAh
PSBzdGF0ZS5lbGVtZW50KCktPmhvdmVyZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+YWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC5mb2N1c2VkKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+c2hhZG93UHNldWRvSWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgmZWxlbWVudCA9PSBlbGVtZW50LmRvY3Vt
ZW50KCkuY3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXNoYXJp
bmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC5hZGRpdGlvbmFsUHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigqc3RhdGUu
ZWxlbWVudCgpKS5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmFmZmVjdHNOZXh0U2libGluZ0VsZW1l
bnRTdHlsZSgpIHx8IGVsZW1lbnQuc3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQuaGFzSUQoKSAmJiBtX3J1
bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBp
c0NvbnRyb2wgPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KTsKLQotICAgIGlm
IChpc0NvbnRyb2wgIT0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKnN0YXRlLmVsZW1lbnQo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVs
ZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0
eWxlIHN5c3RlbS4KLSAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHls
ZSgpLgotICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGFwcGxldFRh
ZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVu
dExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChlbGVtZW50LmVsZW1lbnREYXRhKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5l
bGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUocmVh
ZG9ubHlBdHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlB
dHRyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGVsZW1lbnQuaXNT
VkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSh0eXBl
QXR0cikgIT0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRv
Q2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNoZXNWYWxpZFBzZXVkb0NsYXNzKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50Lm1hdGNoZXNJbnZhbGlkUHNl
dWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNoZXNWYWxpZFBzZXVkb0NsYXNzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAv
LyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVz
LgotICAgIGlmIChpczxXZWJWVFRFbGVtZW50Pigqc3RhdGUuZWxlbWVudCgpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAg
aWYgKCZlbGVtZW50ID09IGVsZW1lbnQuZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS53ZWJraXRD
dXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29s
dmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291
bnQpIGNvbnN0Ci17Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxp
bmcoKSkgewotICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGRvd25j
YXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihub2Rl
KTsKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
LXsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmICghaXM8U3R5bGVkRWxlbWVu
dD4oc3RhdGUuZWxlbWVudCgpKSB8fCAhc3RhdGUucGFyZW50U3R5bGUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVs
ZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpOwotCi0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlu
bGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKHN0eWxlZEVsZW1lbnQu
aW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKHN0eWxlZEVs
ZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oc3R5bGVkRWxlbWVu
dCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBz
dHlsZXNoZWV0cy4KLSAgICBpZiAoc3R5bGVkRWxlbWVudC5oYXNJRCgpICYmIG1fcnVsZVNldHMu
ZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0eWxlZEVsZW1lbnQuaWRGb3JTdHlsZVJl
c29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAocGFy
ZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdHlsZWRFbGVtZW50LnBhcmVudEVsZW1lbnQoKSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgPT0gc3Rh
dGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
aWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKCpzdGF0ZS5lbGVtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhY2hlIHdoZXRoZXIgc3RhdGUuZWxlbWVudCBpcyBh
ZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4gVGhlIHN0eWxlIHNoYXJpbmcgY29kZSBj
b3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNvbHZlci4KLSAgICBzdGF0ZS5zZXRFbGVt
ZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQo
KS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQo
KS0+Y2xhc3NOYW1lcygpKSk7Ci0KLSAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQg
dGhlaXIgY291c2lucy4KLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgdmlz
aXRlZE5vZGVDb3VudCA9IDA7Ci0gICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gbnVs
bHB0cjsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3R5bGVkRWxlbWVudC5wcmV2aW91c1NpYmxp
bmcoKTsKLSAgICB3aGlsZSAoY291c2luTGlzdCkgewotICAgICAgICBzaGFyZUVsZW1lbnQgPSBm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7Ci0gICAgICAgIGlm
IChzaGFyZUVsZW1lbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY291c2luTGlzdCA9
IGxvY2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9k
ZUNvdW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1
ZGdldCBvciBvdXIgY291c2lucy4KLSAgICBpZiAoIXNoYXJlRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5
LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0g
ICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2li
bGluZygpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYg
YXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9uQXR0cmlidXRlKCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUg
c3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxl
IG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0eWxl
ZEVsZW1lbnQucGFyZW50RWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLX0KLQogc3RhdGljIGlubGluZSBi
b29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlm
ICghZWxlbWVudCkKQEAgLTY3NiwzMyArMzY2LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0
U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5p
c1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLAot
ICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNoYXJpbmdCZWhhdmlvciwgUnVsZU1hdGNoaW5nQmVo
YXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHls
aW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZp
b3IsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luTG9hZFBl
bmRpbmdJbWFnZXMpOwogCi0gICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3
ZSBkb24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgot
ICAgIC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRp
bmcuCi0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhbV9k
b2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7
Ci0gICAgICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewotICAgICAgICAgICAgc19z
dHlsZU5vdFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwot
ICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAg
ICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZt
X2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLSAgICAgICAgfQotICAgICAgICBtX2RvY3VtZW50
LnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuICpzX3N0
eWxlTm90WWV0QXZhaWxhYmxlOwotICAgIH0KLQogICAgIG1fc3RhdGUgPSBTdGF0ZShlbGVtZW50
LCBwYXJlbnRTdHlsZSwgcmVnaW9uRm9yU3R5bGluZywgc2VsZWN0b3JGaWx0ZXIpOwogICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93
U3R5bGVTaGFyaW5nKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBs
b2NhdGVTaGFyZWRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBzdGF0ZS5jbGVhcigpOwotICAgICAg
ICAgICAgcmV0dXJuICpzaGFyZWRTdHlsZTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChz
dGF0ZS5wYXJlbnRTdHlsZSgpKSB7CiAgICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxl
OjpjcmVhdGUoKSk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBh
cmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeSgmZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6
QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTk1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTEg
KzkzLDYgQEAgY2xhc3MgVmlld3BvcnRTdHlsZVJlc29sdmVyOwogY2xhc3MgV2ViS2l0Q1NTRmls
dGVyVmFsdWU7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCi1lbnVtIFN0eWxlU2hh
cmluZ0JlaGF2aW9yIHsKLSAgICBBbGxvd1N0eWxlU2hhcmluZywKLSAgICBEaXNhbGxvd1N0eWxl
U2hhcmluZywKLX07Ci0KIC8vIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzIGlzIHVzZWQgaW4gbWVk
aWEgcXVlcmllcywgd2hlcmUgcmVsYXRpdmUgdW5pdHMKIC8vIGFyZSBpbnRlcnByZXRlZCBhY2Nv
cmRpbmcgdG8gdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudCBzdHlsZSwgYW5kIHN0eWxlZCBvbmx5
CiAvLyBmcm9tIHRoZSBVc2VyIEFnZW50IFN0eWxlc2hlZXQgcnVsZXMuCkBAIC0xMzUsOCArMTMw
LDcgQEAgcHVibGljOgogICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmKTsKICAgICB+U3R5bGVS
ZXNvbHZlcigpOwogCi0gICAgUmVmPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxv
d1N0eWxlU2hhcmluZywKLSAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1
bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICBSZWY8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hp
bmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAg
ICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIApAQCAtMTYwLDEyICsxNTQsNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRvcigpIGNvbnN0
IHsgcmV0dXJuICptX21lZGl1bTsgfQogCiBwcml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBsb2Nh
dGVTaGFyZWRTdHlsZSgpOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1
bGVTZXQoUnVsZVNldCopOwotICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFy
ZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7Ci0gICAgU3R5bGVkRWxlbWVu
dCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29u
c3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCYpIGNv
bnN0OwotCiAgICAgUmVmPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAogcHVibGlj
OgpAQCAtMzc4LDggKzM2Niw2IEBAIHB1YmxpYzoKIAogICAgICAgICBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbkZvclN0eWxpbmc7
IH0KICAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudExpbmtTdGF0ZTsgfQotICAgICAgICB2b2lkIHNldEVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcyhib29sIGlzQWZmZWN0ZWQpIHsgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVs
ZXMgPSBpc0FmZmVjdGVkOyB9Ci0gICAgICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KIAog
ICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShib29sIGlzQXBwbHkp
IHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0FwcGx5OyB9CiAgICAgICAgIHZv
aWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShib29sIGlzQXBwbHkpIHsgbV9h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBseTsgfQpAQCAtNDM1LDcgKzQy
MSw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExp
bmtTdGF0ZSB7IE5vdEluc2lkZUxpbmsgfTsKIAotICAgICAgICBib29sIG1fZWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKICAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9OwogICAgICAgICBib29sIG1fZm9udERpcnR5IHsgZmFs
c2UgfTsKQEAgLTQ1OSw4ICs0NDQsNiBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZSYgc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlOyB9CiAKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0
QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQotCiAgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7
CiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSYpOwogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUmKTsKQEAgLTQ4OCwxMiArNDcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4
dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5z
ZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogCiBwcml2YXRlOgotICAgIHN0
YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQogICAgIHZvaWQgY2Fj
aGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50JikgY29uc3Q7Ci0KICAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCwgY29uc3QgTWF0Y2hSZXN1bHQqID0gbnVsbHB0
cik7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYpOwogCkBAIC01MjAsOSArNDk5
LDYgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNs
YXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUoKTsKIAotICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQmKSBjb25zdDsK
LQogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFz
dFN3ZWVwOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbT4gTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9uIDE5NTgzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LWlubGluZSBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKEVsZW1lbnQm
IGVsZW1lbnQpCitpbmxpbmUgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0
ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVudC5pc0xpbmsoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0
ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgTGlua0hhc2gg
bGlua0hhc2hGb3JFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYgZWxlbWVudCkK
K2lubGluZSBzdGF0aWMgTGlua0hhc2ggbGlua0hhc2hGb3JFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXM8SFRNTEFuY2hvckVs
ZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1l
bnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwpAQCAtODYsNyArODYsNyBAQCB2b2lkIFZp
c2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAgICAgfQogfQogCi1FSW5zaWRlTGlu
ayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50JiBl
bGVtZW50KQorRUluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0ZXJtaW5lTGlua1N0YXRl
U2xvd0Nhc2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudC5p
c0xpbmsoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaAkocmV2
aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTYgKzQ1LDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52
YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKICAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvckxp
bmsoTGlua0hhc2gpOwotICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50
Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKGNvbnN0IEVsZW1lbnQmKTsK
IAogcHJpdmF0ZToKLSAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShF
bGVtZW50Jik7CisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoY29u
c3QgRWxlbWVudCYpOwogCiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgSGFzaFNldDxM
aW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZTsKIH07
CiAKLWlubGluZSBFSW5zaWRlTGluayBWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3Rh
dGUoRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBFSW5zaWRlTGluayBWaXNpdGVkTGlua1N0YXRl
OjpkZXRlcm1pbmVMaW5rU3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAo
IWVsZW1lbnQuaXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9u
IDE5NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3Bh
dGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzRGVmYXVs
dEJ1dHRvbkZvckZvcm0oKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
Y3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNjgsNyArMTY5LDYgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWw7CiAKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxlbWVudCogdmlydHVhbEZvcm0oKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0Owog
CiAgICAgYm9vbCBjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRzZXRBbmNlc3RvcigpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNp
b24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTkwLDcgKzE1OTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBSZW5kZXJFbGVtZW50OjpnCiAgICAgYXV0byYgc3R5bGVSZXNvbHZlciA9IGVsZW1lbnQo
KS0+c3R5bGVSZXNvbHZlcigpOwogCiAgICAgaWYgKHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9J
ZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkgewotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHJlc3VsdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KCplbGVtZW50KCksIHBhcmVu
dFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZyk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gcmVzdWx0ID0gc3R5bGVSZXNvbHZlci5zdHlsZUZvckVsZW1lbnQoKmVsZW1lbnQoKSwgcGFy
ZW50U3R5bGUpOwogICAgICAgICByZXN1bHQtPnNldFN0eWxlVHlwZShGSVJTVF9MSU5FX0lOSEVS
SVRFRCk7CiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0YKICAgICBBU1NFUlQoIXJl
bmRlcmVyLmlzQW5vbnltb3VzKCkpOwogCiAgICAgLy8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGZh
aWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0aGUgcmVuZGVyZXJzIGRvbid0IGhhdmUg
YSBub2RlLgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUg
PSByZW5kZXJlci5lbGVtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnJl
bmRlcmVyLmVsZW1lbnQoKSwgJnBhcmVudFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0
Y2hBbGxSdWxlcywgdGhpcyk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJPYmplY3RS
ZWdpb25TdHlsZSA9IHJlbmRlcmVyLmVsZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9y
RWxlbWVudCgqcmVuZGVyZXIuZWxlbWVudCgpLCAmcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXMs
IHRoaXMpOwogCiAgICAgcmV0dXJuIHJlbmRlck9iamVjdFJlZ2lvblN0eWxlLnJlbGVhc2UoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIK
ICNpbmNsdWRlICJTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVUcmVl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CkBAIC0yOTMs
NyArMjk0LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6b3BlcmF0b3I9PShjb25zdCBSZW5kZQogCiBi
b29sIFJlbmRlclN0eWxlOjppc1N0eWxlQXZhaWxhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
dGhpcyAhPSBTdHlsZVJlc29sdmVyOjpzdHlsZU5vdFlldEF2YWlsYWJsZSgpOworICAgIHJldHVy
biAhU3R5bGU6OmlzUGxhY2Vob2xkZXJTdHlsZSgqdGhpcyk7CiB9CiAKIGJvb2wgUmVuZGVyU3R5
bGU6Omhhc1VuaXF1ZVBzZXVkb1N0eWxlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVTaGFyaW5nUmVzb2x2ZXIu
aCIKKworI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVs
ZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgorI2luY2x1ZGUgIldlYlZUVEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJYTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgU3R5bGUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhy
ZXNob2xkID0gMTA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJl
c2hvbGQgPSAxMDsKKworc3RydWN0IFNoYXJpbmdSZXNvbHZlcjo6Q29udGV4dCB7CisgICAgY29u
c3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudDsKKyAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlczsKKyAgICBFSW5zaWRlTGluayBlbGVtZW50TGlua1N0YXRlOworfTsKKworU2hhcmlu
Z1Jlc29sdmVyOjpTaGFyaW5nUmVzb2x2ZXIoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cywgY29uc3QgU2VsZWN0b3JGaWx0ZXImIHNlbGVj
dG9yRmlsdGVyKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcnVsZVNldHMo
cnVsZVNldHMpCisgICAgLCBtX3NlbGVjdG9yRmlsdGVyKHNlbGVjdG9yRmlsdGVyKQoreworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBF
bGVtZW50JiBwYXJlbnRFbGVtZW50KQoreworICAgIHJldHVybiBwYXJlbnRFbGVtZW50Lmhhc0Zs
YWdzU2V0RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgbGluZSBpcyBzdXJwcmlzaW5nbHkgaG90LCB3ZSBtYXkgd2lzaCB0byBp
bmxpbmUgaGFzRGlyZWN0aW9uQXV0byBpbnRvIFN0eWxlUmVzb2x2ZXIuCisgICAgcmV0dXJuIGlz
PEhUTUxFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCku
aGFzRGlyZWN0aW9uQXV0bygpOworfQorCitjb25zdCBFbGVtZW50KiBTaGFyaW5nUmVzb2x2ZXI6
OnNlYXJjaFNpbWlsYXIoY29uc3QgRWxlbWVudCYgc2VhcmNoRWxlbWVudCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KHNlYXJjaEVsZW1lbnQpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oc2Vh
cmNoRWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgcGFyZW50RWxlbWVudCA9ICplbGVtZW50LnBhcmVu
dEVsZW1lbnQoKTsKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlz
IHByb2JhYmx5IHVuaXF1ZS4KKyAgICBpZiAoZWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoZWxlbWVudC5pc1NWR0VsZW1lbnQoKSAmJiBkb3du
Y2FzdDxTVkdFbGVtZW50PihlbGVtZW50KS5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBp
ZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgorICAgIGlmIChlbGVtZW50Lmhhc0lE
KCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHBhcmVudEVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoJmVsZW1lbnQgPT0gbV9kb2N1bWVudC5jc3NU
YXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGVsZW1lbnRIYXNEaXJl
Y3Rpb25BdXRvKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENvbnRl
eHQgY29udGV4dCB7CisgICAgICAgIGVsZW1lbnQsCisgICAgICAgIGVsZW1lbnQuaGFzQ2xhc3Mo
KSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGVsZW1lbnQuY2xhc3NOYW1lcygpKSwKKyAg
ICAgICAgbV9kb2N1bWVudC52aXNpdGVkTGlua1N0YXRlKCkuZGV0ZXJtaW5lTGlua1N0YXRlKGVs
ZW1lbnQpCisgICAgfTsKKworICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVp
ciBjb3VzaW5zLgorICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCB2aXNpdGVk
Tm9kZUNvdW50ID0gMDsKKyAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSBudWxscHRy
OworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBlbGVtZW50LnByZXZpb3VzU2libGluZygpOworICAg
IHdoaWxlIChjb3VzaW5MaXN0KSB7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5n
KGNvbnRleHQsIGNvdXNpbkxpc3QsIGNvdW50KTsKKyAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlz
dChjb3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOworICAgIH0K
KworICAgIC8vIElmIHdlIGhhdmUgZXhoYXVzdGVkIGFsbCBvdXIgYnVkZ2V0IG9yIG91ciBjb3Vz
aW5zLgorICAgIGlmICghc2hhcmVFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tl
ZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4KKyAgICBpZiAoc3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoZWxlbWVudCwgbV9ydWxlU2V0cy5zaWJsaW5nKCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1
dGUgcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxl
U2V0KGVsZW1lbnQsIG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1
ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1
bGUgbWF0Y2ggYWJvdmUuCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcocGFy
ZW50RWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHNoYXJl
RWxlbWVudDsKK30KKworU3R5bGVkRWxlbWVudCogU2hhcmluZ1Jlc29sdmVyOjpmaW5kU2libGlu
Zyhjb25zdCBDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNv
bnN0Cit7CisgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkg
eworICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnRleHQsIGRv
d25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihu
b2RlKTsKK30KKworTm9kZSogU2hhcmluZ1Jlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1l
bnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0Cit7CisgICAgaWYg
KHZpc2l0ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxlU2VhcmNo
TGV2ZWxUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaXM8U3R5
bGVkRWxlbWVudD4ocGFyZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYg
c3R5bGVkUGFyZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKnBhcmVudCk7CisgICAgaWYg
KHN0eWxlZFBhcmVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoaXM8U1ZHRWxlbWVudD4oc3R5bGVkUGFyZW50KSAmJiBkb3duY2FzdDxTVkdFbGVtZW50
PihzdHlsZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoc3R5bGVkUGFyZW50Lmhhc0lEKCkgJiYgbV9ydWxlU2V0
cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3R5bGVkUGFyZW50LmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZWRQYXJlbnQucmVuZGVyU3R5bGUoKTsKKyAgICB1
bnNpZ25lZCBzdWJjb3VudCA9IDA7CisgICAgTm9kZSogdGhpc0NvdXNpbiA9ICZzdHlsZWRQYXJl
bnQ7CisgICAgTm9kZSogY3VycmVudE5vZGUgPSBzdHlsZWRQYXJlbnQucHJldmlvdXNTaWJsaW5n
KCk7CisKKyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZl
Y3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQorICAgIC8vIHdpbGwgbmV2ZXIg
Z28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVj
dXJzaW9uLgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwor
ICAgIHdoaWxlICh0aGlzQ291c2luKSB7CisgICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZTsgY3Vy
cmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAg
IGlmICgrK3N1YmNvdW50ID4gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50PigqY3VycmVudE5v
ZGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgY3VycmVu
dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY3VycmVudE5vZGUpOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRFbGVtZW50LnJlbmRlclN0eWxlKCkgIT0gcGFyZW50U3R5bGUpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRFbGVtZW50Lmxhc3RD
aGlsZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFwYXJl
bnRFbGVtZW50UHJldmVudHNTaGFyaW5nKGN1cnJlbnRFbGVtZW50KSkgeworICAgICAgICAgICAg
ICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgorICAgICAgICAgICAgICAg
IHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291bnQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3Qo
dGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKKyAgICAgICAg
dGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOwor
fQorCitzdGF0aWMgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woY29uc3QgSFRNTEZvcm1D
b250cm9sRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgZm9y
bUVsZW1lbnQpCit7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtRWxlbWVudCkg
fHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvJiB0aGlzSW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oZm9ybUVsZW1lbnQpOworICAgIGF1dG8mIG90aGVySW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCk7CisKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5p
c0F1dG9GaWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNo
ZWNrZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRBcHBlYXJDaGVja2VkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJ
bmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuc2hvdWxkQXBwZWFySW5kZXRlcm1p
bmF0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQu
aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LmlzUmVxdWlyZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZvcm1FbGVtZW50LmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpICE9IGVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChmb3JtRWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0g
ZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChmb3JtRWxlbWVudC5pc0luUmFuZ2UoKSAhPSBlbGVtZW50LmlzSW5SYW5nZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZm9ybUVsZW1lbnQuaXNPdXRPZlJh
bmdlKCkgIT0gZWxlbWVudC5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29sdmVyOjpjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoY29uc3QgQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3R5bGVkRWxlbWVu
dCYgY2FuZGlkYXRlRWxlbWVudCkgY29uc3QKK3sKKyAgICBhdXRvJiBlbGVtZW50ID0gY29udGV4
dC5lbGVtZW50OworICAgIGF1dG8qIHN0eWxlID0gY2FuZGlkYXRlRWxlbWVudC5yZW5kZXJTdHls
ZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5
bGUtPnVuaXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5oYXNV
bmlxdWVQc2V1ZG9TdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQudGFnUU5hbWUoKSAhPSBlbGVtZW50LnRhZ1FOYW1lKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQubmVlZHNTdHlsZVJl
Y2FsYygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQu
aXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oY2FuZGlkYXRlRWxlbWVudCku
YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAhPSBlbGVtZW50LmlzTGluaygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaG92ZXJlZCgpICE9
IGVsZW1lbnQuaG92ZXJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNhbmRp
ZGF0ZUVsZW1lbnQuYWN0aXZlKCkgIT0gZWxlbWVudC5hY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LmZvY3VzZWQoKSAhPSBlbGVtZW50LmZv
Y3VzZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50
LnNoYWRvd1BzZXVkb0lkKCkgIT0gZWxlbWVudC5zaGFkb3dQc2V1ZG9JZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCZjYW5kaWRhdGVFbGVtZW50ID09IG1fZG9jdW1lbnQuY3Nz
VGFyZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29udGV4dCwgY2FuZGlkYXRl
RWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY29uc3RfY2FzdDxTdHls
ZWRFbGVtZW50Jj4oY2FuZGlkYXRlRWxlbWVudCkuYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkgIT0gY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCkuYWRkaXRp
b25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KSB8fCBjYW5kaWRhdGVFbGVtZW50LnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjYW5kaWRhdGVFbGVtZW50Lmhhc0lE
KCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2FuZGlkYXRl
RWxlbWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgaXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
Y2FuZGlkYXRlRWxlbWVudCk7CisKKyAgICBpZiAoaXNDb250cm9sICE9IGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
aXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZG93bmNhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oZWxlbWVudCksIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KGNhbmRpZGF0ZUVsZW1lbnQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0
eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRo
YXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3Rl
bS4KKyAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgorICAg
IGlmIChjYW5kaWRhdGVFbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8
IGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBjYW5kaWRhdGVFbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvYmplY3RUYWcpIHx8IGNhbmRpZGF0ZUVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OmFwcGxldFRhZykgfHwgY2FuZGlkYXRlRWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2Fu
dmFzVGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRIYXNEaXJl
Y3Rpb25BdXRvKGNhbmRpZGF0ZUVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY2FuZGlkYXRlRWxlbWVudC5pc0xpbmsoKSAmJiBjb250ZXh0LmVsZW1lbnRMaW5rU3Rh
dGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGNhbmRpZGF0ZUVsZW1lbnQuZWxlbWVudERhdGEoKSAhPSBlbGVtZW50LmVsZW1lbnREYXRh
KCkpIHsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnJlYWRvbmx5QXR0cikgIT0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6cmVhZG9ubHlBdHRyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGNhbmRpZGF0ZUVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChjYW5k
aWRhdGVFbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSAhPSBlbGVtZW50
LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlRWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpICE9IGVsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FuZGlkYXRlRWxlbWVudC5t
YXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xh
c3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQubWF0Y2hlc0lu
dmFsaWRQc2V1ZG9DbGFzcygpICE9IGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIC8v
IERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMu
CisgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoJmVsZW1l
bnQgPT0gbV9kb2N1bWVudC53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCAmZWxl
bWVudCA9PSBtX2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
aGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KGNvbnN0
IFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpIGNvbnN0Cit7
CisgICAgaWYgKCFydWxlU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50
UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVu
dCksIG51bGxwdHIsIG1fcnVsZVNldHMsICZtX3NlbGVjdG9yRmlsdGVyKTsKKyAgICByZXR1cm4g
Y29sbGVjdG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVsZVNldCk7Cit9CisKK2Jvb2wgU2hhcmlu
Z1Jlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRy
aWJ1dGVzKGNvbnN0IENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0eWxlZEVsZW1lbnQmIHNoYXJp
bmdDYW5kaWRhdGUpIGNvbnN0Cit7CisgICAgYXV0byYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVu
dDsKKyAgICBpZiAoZWxlbWVudC5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUuZWxl
bWVudERhdGEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGVsZW1lbnQuZmFzdEdl
dEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdl
dEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBz
aGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpsYW5nQXR0cikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb250ZXh0LmVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcykgeworICAgICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVp
cmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNlICJjbGFzcyIgaXMg
YW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KKyAgICAgICAgaWYgKGVsZW1lbnQuaXNT
VkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjpjbGFzc0F0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5n
Q2FuZGlkYXRlLmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBj
bGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVu
dCY+KGVsZW1lbnQpLnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gY29uc3RfY2FzdDxT
dHlsZWRFbGVtZW50Jj4oc2hhcmluZ0NhbmRpZGF0ZSkucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoZWxlbWVudC5zaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS5zaG91bGRBcHBlYXJJbmRl
dGVybWluYXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU2hhcmluZ1Jlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRC
eVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0Cit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjbGFz
c05hbWVzW2ldLmltcGwoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2hhcmluZ1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTaGFyaW5nUmVzb2x2ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U3R5bGVTaGFyaW5nUmVzb2x2ZXJfaAorI2RlZmluZSBTdHlsZVNoYXJpbmdSZXNvbHZlcl9oCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEb2N1bWVudFJ1
bGVTZXRzOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBSdWxlU2V0OworY2xh
c3MgU2VsZWN0b3JGaWx0ZXI7CitjbGFzcyBTcGFjZVNwbGl0U3RyaW5nOworY2xhc3MgU3R5bGVk
RWxlbWVudDsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworY2xhc3MgU2hhcmluZ1Jlc29sdmVyIHsK
K3B1YmxpYzoKKyAgICBTaGFyaW5nUmVzb2x2ZXIoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBEb2N1
bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0ZXImKTsKKworICAgIGNvbnN0IEVsZW1l
bnQqIHNlYXJjaFNpbWlsYXIoY29uc3QgRWxlbWVudCYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IHN0cnVjdCBDb250ZXh0OworCisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmcoY29uc3Qg
Q29udGV4dCYsIE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIE5vZGUqIGxvY2F0
ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkg
Y29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgQ29udGV4dCYs
IGNvbnN0IFN0eWxlZEVsZW1lbnQmIGNhbmRpZGF0ZUVsZW1lbnQpIGNvbnN0OworICAgIGJvb2wg
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoY29uc3QgU3R5bGVkRWxlbWVudCYs
IGNvbnN0IFJ1bGVTZXQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVu
dGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgQ29udGV4dCYsIGNvbnN0IFN0eWxl
ZEVsZW1lbnQmIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0OworICAgIGJvb2wgY2xhc3NOYW1lc0Fm
ZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKSBjb25zdDsK
KworICAgIGNvbnN0IERvY3VtZW50JiBtX2RvY3VtZW50OworICAgIGNvbnN0IERvY3VtZW50UnVs
ZVNldHMmIG1fcnVsZVNldHM7CisgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXImIG1fc2VsZWN0b3JG
aWx0ZXI7Cit9OworCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTk1ODM0KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMCAr
OTYsMjQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkUHVzaCB7IGZhbHNlIH07CiB9OwogCisK
K3N0YXRpYyBSZW5kZXJTdHlsZSogcGxhY2Vob2xkZXJTdHlsZTsKKworc3RhdGljIHZvaWQgZW5z
dXJlUGxhY2Vob2xkZXJTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKHBsYWNl
aG9sZGVyU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBwbGFjZWhvbGRlclN0eWxlID0gJlJl
bmRlclN0eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgcGxhY2Vob2xkZXJTdHlsZS0+c2V0
RGlzcGxheShOT05FKTsKKyAgICBwbGFjZWhvbGRlclN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0
ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworfQorCiBUcmVlUmVzb2x2ZXI6OlRyZWVSZXNv
bHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9zdHlsZVJlc29sdmVyKGRvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKSkKKyAgICAs
IG1fc2hhcmluZ1Jlc29sdmVyKGRvY3VtZW50LCBtX3N0eWxlUmVzb2x2ZXIucnVsZVNldHMoKSwg
bV9zZWxlY3RvckZpbHRlcikKIHsKKyAgICBlbnN1cmVQbGFjZWhvbGRlclN0eWxlKGRvY3VtZW50
KTsKIH0KIAogVHJlZVJlc29sdmVyOjpUcmVlUmVzb2x2ZXIoU2hhZG93Um9vdCYgc2hhZG93Um9v
dCwgVHJlZVJlc29sdmVyJiBzaGFkb3dIb3N0VHJlZVJlc29sdmVyKQpAQCAtMTA3LDYgKzEyMSw3
IEBAIFRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKFNoYWRvd1Jvb3QmIHMKICAgICAsIG1fc3R5
bGVSZXNvbHZlcihzaGFkb3dSb290LnN0eWxlUmVzb2x2ZXIoKSkKICAgICAsIG1fc2hhZG93Um9v
dCgmc2hhZG93Um9vdCkKICAgICAsIG1fc2hhZG93SG9zdFRyZWVSZXNvbHZlcigmc2hhZG93SG9z
dFRyZWVSZXNvbHZlcikKKyAgICAsIG1fc2hhcmluZ1Jlc29sdmVyKG1fZG9jdW1lbnQsIG1fc3R5
bGVSZXNvbHZlci5ydWxlU2V0cygpLCBtX3NlbGVjdG9yRmlsdGVyKQogewogfQogCkBAIC0xMjMs
MTEgKzEzOCwyMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBFCiAK
IFJlZjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYg
ZWxlbWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQogeworICAgIGlmICghbV9kb2N1
bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7Cisg
ICAgICAgIG1fZG9jdW1lbnQuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOworICAg
ICAgICByZXR1cm4gKnBsYWNlaG9sZGVyU3R5bGU7CisgICAgfQorCiAgICAgaWYgKGVsZW1lbnQu
aGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSBlbGVtZW50LmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoaW5oZXJp
dGVkU3R5bGUpKQogICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2VOb25OdWxsKCk7CiAg
ICAgfQotICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQs
ICZpbmhlcml0ZWRTdHlsZSwgQWxsb3dTdHlsZVNoYXJpbmcsIE1hdGNoQWxsUnVsZXMsIG51bGxw
dHIsICZtX3NlbGVjdG9yRmlsdGVyKTsKKworICAgIGlmIChhdXRvKiBzaW1pbGFyRWxlbWVudCA9
IG1fc2hhcmluZ1Jlc29sdmVyLnNlYXJjaFNpbWlsYXIoZWxlbWVudCkpCisgICAgICAgIHJldHVy
biAqc2ltaWxhckVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisKKyAgICByZXR1cm4gbV9zdHlsZVJl
c29sdmVyLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAmaW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxs
UnVsZXMsIG51bGxwdHIsICZtX3NlbGVjdG9yRmlsdGVyKTsKIH0KIAogI2lmIEVOQUJMRShDU1Nf
UkVHSU9OUykKQEAgLTk0OCw1ICs5NzIsMTEgQEAgYm9vbCBwb3N0UmVzb2x1dGlvbkNhbGxiYWNr
c0FyZVN1c3BlbmRlZAogICAgIHJldHVybiByZXNvbHV0aW9uTmVzdGluZ0RlcHRoOwogfQogCisK
K2Jvb2wgaXNQbGFjZWhvbGRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAg
ICByZXR1cm4gJnN0eWxlID09IHBsYWNlaG9sZGVyU3R5bGU7Cit9CisKIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTk1ODM0KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAj
aW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNoYW5nZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hhcmluZ1Jlc29sdmVyLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTg1LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBU
cmVlUmVzb2x2ZXIqIG1fc2hhZG93SG9zdFRyZWVSZXNvbHZlciB7IG51bGxwdHIgfTsKIAogICAg
IFNlbGVjdG9yRmlsdGVyIG1fc2VsZWN0b3JGaWx0ZXI7CisgICAgU2hhcmluZ1Jlc29sdmVyIG1f
c2hhcmluZ1Jlc29sdmVyOwogfTsKIAogdm9pZCBkZXRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmKTsK
QEAgLTk1LDYgKzk3LDggQEAgdm9pZCB1cGRhdGVUZXh0UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFu
Zwogdm9pZCBxdWV1ZVBvc3RSZXNvbHV0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkICgp
Pik7CiBib29sIHBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tzQXJlU3VzcGVuZGVkKCk7CiAKK2Jvb2wg
aXNQbGFjZWhvbGRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CisKIGNsYXNzIFBvc3RSZXNv
bHV0aW9uQ2FsbGJhY2tEaXNhYmxlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUG9zdFJlc29s
dXRpb25DYWxsYmFja0Rpc2FibGVyKERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw3ICs3OTMsNyBAQCBSZWZQdHI8UmVuZGVy
U3R5bGU+IFNWR0VsZW1lbnQ6OmN1c3RvbVN0CiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMg
aW4gYSA8dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVl
LgogICAgIGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVG
b3JFbGVtZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRTdHlsZSwgRGlzYWxsb3dTdHlsZVNoYXJp
bmcpOworICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVG
b3JFbGVtZW50KCpzdHlsZUVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKICAgICByZXR1cm4gcmVz
b2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxOTU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1
dGVkU3R5bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAg
ICAgICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlv
bnMvVHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8g
Y29tcHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNo
IG1vZGVsLgotICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0
eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIERpc2Fs
bG93U3R5bGVTaGFyaW5nLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CisgICAgICAgICAg
ICBtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnN0eWxl
Rm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NN
SUwpOwogICAgICAgICAgICAgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSA9IGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSk7
Cg==
</data>
<flag name="review"
          id="295264"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>