<?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>69838</bug_id>
          
          <creation_ts>2011-10-11 07:12:32 -0700</creation_ts>
          <short_desc>Resolve regular and visited link style in a single pass</short_desc>
          <delta_ts>2011-10-14 12:45:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>kbalazs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481616</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-11 07:12:32 -0700</bug_when>
    <thetext>We can simplify and speed up selector matching by removing the recursive matching done to generate the style for :visited pseudo selector. Both regular and visited link style can be generated in a single pass though the style selector.

Recursive visited style mathing is ~20% of the total time spent under styleForElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481754</commentid>
    <comment_count>1</comment_count>
      <attachid>110545</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-11 11:24:21 -0700</bug_when>
    <thetext>Created attachment 110545
patch

The next step would be to get rid of the separate RenderStyle object for the visited style alltogether. The few fields used can be part of the regular RenderStyle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482079</commentid>
    <comment_count>2</comment_count>
      <attachid>110545</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-11 17:33:47 -0700</bug_when>
    <thetext>Comment on attachment 110545
patch

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

I read over this and did not spot any mistakes.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:210
&gt; -    unsigned m_position : 28;
&gt; +    unsigned m_position : 26;

How many bits do we really need for this? Can it be even less than 26? How do we handle overflow?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1292
&gt; +        // pseudo element styles will continue to work for pseudo elements inside :visited
&gt; +        // links.

I’d put that last word on the previous line.

&gt; Source/WebCore/css/SelectorChecker.h:90
&gt; +    enum LinkMatchMask {  MatchLink = 1, MatchVisited = 2, MatchAll = MatchLink | MatchVisited };

Extra space here before MatchLink.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:260
&gt; +    ASSERT(pseudo-&gt;styleType() &gt; NOPSEUDO);

Might be worth a “why this is a good assertion” comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482277</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-12 00:50:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 110545 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110545&amp;action=review
&gt; 
&gt; I read over this and did not spot any mistakes.
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:210
&gt; &gt; -    unsigned m_position : 28;
&gt; &gt; +    unsigned m_position : 26;
&gt; 
&gt; How many bits do we really need for this? Can it be even less than 26? How do we handle overflow?

We need enough bits to hold the total count of all (author) style rules that may apply to a document. In practice we can do with way less bits than this still. Overflow is not handled. It is not particularly dangerous (just messes up the style resolution) and we are going to be in trouble with millions of rules well before that anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482312</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-12 02:20:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97248</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482432</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-10-12 08:46:02 -0700</bug_when>
    <thetext>Our Qt-Debug-32bit bot has a css related assertion fail and I find this patch as the most likely reason. Could you take a look to the crash log in #69933? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482996</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-12 21:51:50 -0700</bug_when>
    <thetext>svg/hixie/cascade/002.xml started failing on GTK after this patch:
http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20webkit.org&amp;tests=svg%2Fhixie%2Fcascade%2F002.xml</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484116</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 11:36:39 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; svg/hixie/cascade/002.xml started failing on GTK after this patch:
&gt; http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20webkit.org&amp;tests=svg%2Fhixie%2Fcascade%2F002.xml

Filed https://bugs.webkit.org/show_bug.cgi?id=70122 for this. Seems like our visited link test coverage is actually really bad as drt doesn&apos;t support them properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484140</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 11:50:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; svg/hixie/cascade/002.xml started failing on GTK after this patch:
&gt; &gt; http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20webkit.org&amp;tests=svg%2Fhixie%2Fcascade%2F002.xml
&gt; 
&gt; Filed https://bugs.webkit.org/show_bug.cgi?id=70122 for this. Seems like our visited link test coverage is actually really bad as drt doesn&apos;t support them properly.

Thanks! Is it possible to add some internals method to improve the test coverage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484198</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 12:45:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Thanks! Is it possible to add some internals method to improve the test coverage?

It just requires some simple fixes to make &lt;a href=&quot;&quot;&gt; work correctly in DRT. That is always considered visited so it can be used for testing. Some tests use it already but end up with incorrect DRT results due to some easy bugs.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110545</attachid>
            <date>2011-10-11 11:24:21 -0700</date>
            <delta_ts>2011-10-11 17:33:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-single-pass-10.patch</filename>
            <type>text/plain</type>
            <size>47457</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMTAtMTEgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlc29sdmUgcmVndWxhciBhbmQg
dmlzaXRlZCBsaW5rIHN0eWxlIGluIGEgc2luZ2xlIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXZSBjYW4gc2ltcGxpZnkgYW5kIHNw
ZWVkIHVwIHNlbGVjdG9yIG1hdGNoaW5nIGJ5IHJlbW92aW5nIHRoZSByZWN1cnNpdmUgbWF0Y2hp
bmcgZG9uZQorICAgICAgICB0byBnZW5lcmF0ZSB0aGUgc3R5bGUgZm9yIHRoZSA6dmlzaXRlZCBw
c2V1ZG8gc2VsZWN0b3IuIEJvdGggcmVndWxhciBhbmQgdmlzaXRlZCBsaW5rIHN0eWxlCisgICAg
ICAgIGNhbiBiZSBnZW5lcmF0ZWQgaW4gYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZSBzdHlsZSBz
ZWxlY3Rvci4KKyAgICAgICAgCisgICAgICAgIC0gTWFrZSBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IgdG8gcmV0dXJuIGJvdGggOnZpc2l0ZWQgYW5kIDpsaW5rIG1hdGNoZXMgZm9yIGFs
bCBsaW5rcy4KKyAgICAgICAgLSBGb3IgZWFjaCBzZWxlY3RvciBzdGF0aWNhbGx5IGRldGVybWlu
ZSBhbmQgY2FjaGUgdGhlIGxpbmsgc3RhdGVzIGl0IG1heSBtYXRjaC4KKyAgICAgICAgLSBXaGVu
IGFwcGx5aW5nIHRoZSBtYXRjaGVkIHN0eWxlIGRlY2xhcmF0aW9ucywgYXBwbHkgdGhlbSB0byB0
aGUgcmlnaHQgUmVuZGVyU3R5bGUKKyAgICAgICAgICAocmVndWxhciwgdmlzaXRlZCwgb3IgYm90
aCkuCisKKyAgICAgICAgU3RhdGljYWxseSBkZXRlcm1pbmluZyB3aGljaCBsaW5rIHN0YXRlIHdp
bGwgYmUgbWF0Y2hlZCB3b3JrcyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgOnZpc2l0ZWQgbWF0Y2hp
bmcKKyAgICAgICAgYmFzZWQgb24gdGhlIGN1cnJlbnQgZWxlbWVudCBzdGF0ZSAobm90IGFuY2Vz
dG9ycyBvciBzaWJsaW5ncykuCisgICAgICAgIAorICAgICAgICBBIGxhdGVyIHBhdGNoIHdpbGwg
ZWxpbWluYXRlIHRoZSBzZXBhcmF0ZSBSZW5kZXJTdHlsZSBmb3IgdmlzaXRlZCBzdHlsZSBjb21w
bGV0ZWx5IGFuZCBpbmNsdWRlIHRoZQorICAgICAgICBmZXcgYWxsb3dlZCBwcm9wZXJ0aWVzIHRv
IHRoZSByZWd1bGFyIFJlbmRlclN0eWxlLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtNYXRjaFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVkb0NsYXNzUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OnNocmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Ok1hdGNoZWRT
dHlsZURlY2xhcmF0aW9uOjpNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICogY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hl
Y2tSaWdodG1vc3RTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OmZhc3RDaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZSk6CisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgor
CiAyMDExLTEwLTExICBDbGF1ZGlvIFNhYXZlZHJhICA8Y3NhYXZlZHJhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6IHVzZSBHdGtHcmlkIGluc3Rl
YWQgb2YgR3RrVGFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDk3MTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3LDcgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSBjb25z
dCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoOyB9CiAgICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQogICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQorICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7
IH0KICAgICAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhl
cmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBl
cmZvcm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNv
dW50ID0gNDsKQEAgLTIwNiwxMSArMjA3LDEyIEBAIHByaXZhdGU6ICAgIAogICAgIENTU1N0eWxl
UnVsZSogbV9ydWxlOwogICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwogICAgIHVuc2lnbmVk
IG1fc3BlY2lmaWNpdHk7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6IDI4OworICAgIHVuc2ln
bmVkIG1fcG9zaXRpb24gOiAyNjsKICAgICBib29sIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9y
IDogMTsKICAgICBib29sIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwogICAgIGJvb2wgbV9o
YXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCA6IDE7CiAgICAg
Ym9vbCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CisgICAgdW5zaWdu
ZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFz
awogICAgIC8vIFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXpl
IG1lbW9yeSBvdmVyaGVhZC4KICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50
aWZpZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwpAQCAtMjQwLDcgKzI0Miw2
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB0YWdSdWxlcyhBdG9taWNT
dHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KICAg
ICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoQXRvbWlj
U3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGxpbmtQc2V1ZG9DbGFz
c1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fbGlua1BzZXVkb0NsYXNzUnVsZXM7IH0KLSAgICBj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiB2aXNpdGVkUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsg
cmV0dXJuICZtX3Zpc2l0ZWRQc2V1ZG9DbGFzc1J1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2Fs
UnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQogICAgIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3BhZ2VSdWxlczsg
fQpAQCAtMjUxLDcgKzI1Miw2IEBAIHB1YmxpYzoKICAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVz
OwogICAgIEF0b21SdWxlTWFwIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzOwogICAgIFZlY3Rv
cjxSdWxlRGF0YT4gbV9saW5rUHNldWRvQ2xhc3NSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+
IG1fdmlzaXRlZFBzZXVkb0NsYXNzUnVsZXM7CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2ZvY3Vz
UHNldWRvQ2xhc3NSdWxlczsKICAgICBWZWN0b3I8UnVsZURhdGE+IG1fdW5pdmVyc2FsUnVsZXM7
CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3BhZ2VSdWxlczsKQEAgLTUyNiw5ICs1MjYsOSBAQCBz
dGF0aWMgdm9pZCBsb2FkVmlld1NvdXJjZVN0eWxlKCkKICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVT
aGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1h
dGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCwgdW5zaWdu
ZWQgbGlua01hdGNoVHlwZSkKIHsKLSAgICBtX21hdGNoZWREZWNscy5hcHBlbmQoZGVjbCk7Cisg
ICAgbV9tYXRjaGVkRGVjbHMuYXBwZW5kKE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uKGRlY2wsIGxp
bmtNYXRjaFR5cGUpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1
bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCkBAIC01NTQsMTIgKzU1NCw4IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2UKICAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVu
dCk7CiAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9Ci0gICAgaWYgKG1fZWxlbWVudC0+aXNMaW5rKCkpIHsK
LSAgICAgICAgaWYgKG1fY2hlY2tlci5saW5rTWF0Y2hlc1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtX2Vs
ZW1lbnQpKQotICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnZpc2l0ZWRQc2V1
ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1
bGVzLT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIH0KKyAgICBpZiAobV9lbGVtZW50LT5pc0xpbmso
KSkKKyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmxpbmtQc2V1ZG9DbGFzc1J1bGVz
KCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAg
ICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQogICAg
ICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
QEAgLTU3NCwxMCArNTcwLDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhS
dWxlU2UKICAgICAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVz
IG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCiAgICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0
aW5nUnVsZXNPbmx5KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNw
ZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYu
CisgICAgICAgIGJvb2wgc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZvcmNlUHNldWRvU3RhdGUobV9lbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlz
aXRlZCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5z
aXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNb
aV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9ycygpOwotICAg
ICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkt
PmRlY2xhcmF0aW9uKCkpOworICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1f
bWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCk7CisgICAgICAgICAgICBpZiAoc3dhcFZp
c2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCisgICAgICAgICAgICAgICAgbGlua01hdGNoVHlwZSA9IChs
aW5rTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSA/IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hMaW5rIDogU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAg
ICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+
ZGVjbGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBp
KyspIHsKQEAgLTEwNTgsNyArMTA1OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93
Qm91bmRhcnkoRWwKIC8vIElmIHJlc29sdmVGb3JSb290RGVmYXVsdCBpcyB0cnVlLCBzdHlsZSBi
YXNlZCBvbiB1c2VyIGFnZW50IHN0eWxlIHNoZWV0IG9ubHkuIFRoaXMgaXMgdXNlZCBpbiBtZWRp
YSBxdWVyaWVzLCB3aGVyZQogLy8gcmVsYXRpdmUgdW5pdHMgYXJlIGludGVycHJldGVkIGFjY29y
ZGluZyB0byBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIHN0eWxlZCBvbmx5IHdpdGggVUEg
c3R5bGVzaGVldAogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJv
b2wgYWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCwgYm9vbCBtYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcykKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVu
dCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0KQogewogICAg
IC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSByZW5kZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ry
b3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgcmVuZGVyZXIKICAgICAvLyB3aWxsIHZhbmlzaCBp
ZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5zIGR1cmluZyBsb2FkaW5nLgpAQCAtMTA4MiwyOCArMTA4
MywyNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgICAg
ICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CiAgICAgfQogCi0gICAgLy8gQ29tcHV0ZSBvdXIgc3R5
bGUgYWxsb3dpbmcgOnZpc2l0ZWQgdG8gbWF0Y2ggZmlyc3QuCi0gICAgUmVmUHRyPFJlbmRlclN0
eWxlPiB2aXNpdGVkU3R5bGU7Ci0gICAgaWYgKCFtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyAmJiBt
X3BhcmVudFN0eWxlICYmIChtX3BhcmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgfHwgZS0+aXNMaW5r
KCkpICYmIGUtPmRvY3VtZW50KCktPnVzZXNMaW5rUnVsZXMoKSkgewotICAgICAgICAvLyBGZXRj
aCBvdXIgcGFyZW50IHN0eWxlLgotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBt
X3BhcmVudFN0eWxlOwotICAgICAgICBpZiAoIWUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAv
LyBVc2UgdGhlIHBhcmVudCdzIHZpc2l0ZWQgc3R5bGUgaWYgb25lIGV4aXN0cy4KLSAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRWaXNpdGVkU3R5bGUgPSBtX3BhcmVudFN0eWxlLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVEX0xJTkspOwotICAgICAgICAgICAgaWYgKHBhcmVudFZp
c2l0ZWRTdHlsZSkKLSAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZSA9IHBhcmVudFZpc2l0ZWRT
dHlsZTsKLSAgICAgICAgfQotICAgICAgICB2aXNpdGVkU3R5bGUgPSBzdHlsZUZvckVsZW1lbnQo
ZSwgcGFyZW50U3R5bGUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7Ci0gICAgfQotCi0gICAgbV9jaGVja2VyLnNldE1h
dGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzKTsKLQogICAg
IG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKLSAgICBpZiAobV9wYXJlbnRTdHls
ZSkKKyAgICBpZiAobV9wYXJlbnRTdHlsZSkgewogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJv
bShtX3BhcmVudFN0eWxlKTsKLSAgICBlbHNlIHsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBs
aW5rcyBhbmQgZWxlbWVudHMgaW5zaWRlIGxpbmtzIHdlIGNvbXB1dGUgYm90aCB0aGUgcmVndWxh
ciBhbmQgdmlzaXRlZCBzdHlsZS4KKyAgICAgICAgLy8gRklYTUU6IFZpc2l0ZWQgbGluayBzdHls
ZSBkb2Vzbid0IG5lZWQgYSBzZXBhcmF0ZSBSZW5kZXJTdHlsZS4gVGhlIGZldyBwcm9wZXJ0aWVz
IGFsbG93ZWQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJlZ3VsYXIgUmVuZGVyU3R5bGUgaW5zdGVh
ZC4KKyAgICAgICAgaWYgKGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICBtX3Zpc2l0ZWRMaW5r
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobV9zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBt
X3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlOworICAgICAgICB9IGVsc2Ug
aWYgKG1fcGFyZW50U3R5bGUtPmluc2lkZUxpbmsoKSkgeworICAgICAgICAgICAgbV92aXNpdGVk
TGlua1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoVklT
SVRFRF9MSU5LKTsKKyAgICAgICAgICAgIGlmICghbV92aXNpdGVkTGlua1BhcmVudFN0eWxlKQor
ICAgICAgICAgICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGU7
CisgICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUtPmluaGVyaXRGcm9tKG1fdmlzaXRlZExp
bmtQYXJlbnRTdHlsZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgICBtX3BhcmVu
dFN0eWxlID0gc3R5bGUoKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5p
dGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4K
ICAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKQEAgLTExMTcsMjAgKzExMTQsNiBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgICAgIG1fc3R5
bGUtPnNldElzTGluayh0cnVlKTsKICAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhtX2Vs
ZW1lbnRMaW5rU3RhdGUpOwogICAgIH0KLSAgICAKLSAgICBpZiAodmlzaXRlZFN0eWxlKSB7Ci0g
ICAgICAgIC8vIENvcHkgYW55IHBzZXVkbyBiaXRzIHRoYXQgdGhlIHZpc2l0ZWQgc3R5bGUgaGFz
IHRvIHRoZSBwcmltYXJ5IHN0eWxlIHNvIHRoYXQKLSAgICAgICAgLy8gcHNldWRvIGVsZW1lbnQg
c3R5bGVzIHdpbGwgY29udGludWUgdG8gd29yayBmb3IgcHNldWRvIGVsZW1lbnRzIGluc2lkZSA6
dmlzaXRlZAotICAgICAgICAvLyBsaW5rcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBwc2V1ZG8g
PSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7IHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lE
OyArK3BzZXVkbykgewotICAgICAgICAgICAgaWYgKHZpc2l0ZWRTdHlsZS0+aGFzUHNldWRvU3R5
bGUoc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkbykpKQotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldEhhc1BzZXVkb1N0eWxlKHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8pKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlID09IEluc2lkZVVudmlzaXRl
ZExpbmspCi0gICAgICAgICAgICB2aXNpdGVkU3R5bGUgPSAwOyAgLy8gV2UgbWFkZSB0aGUgc3R5
bGUgdG8gYXZvaWQgdGltaW5nIGF0dGFja3MuIEp1c3QgdGhyb3cgaXQgYXdheSBub3cgdGhhdCB3
ZSBkaWQgdGhhdCwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdC4KLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmlzaXRlZFN0eWxlLT5zZXRTdHlsZVR5cGUoVklTSVRFRF9MSU5LKTsKLSAgICB9CiAK
ICAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVE
ZWZhdWx0U3R5bGUoZSkpIHsKICAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKQEAgLTEy
NTQsOSArMTIzNyw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YWx1
ZSBiYWNrIGJlZm9yZSBhcHBseWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0IC13ZWJraXQtbGluayBr
bm93cyB3aGF0IGNvbG9yIHRvIHVzZS4KLSAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVk
UHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogICAgIAogICAgIC8vIE5vdyB3
ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIu
ICBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKICAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRp
ZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRl
cGVuZCBvbi4KQEAgLTEzMDYsMTMgKzEyODYsMjUgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3RvcgogICAgIGlmIChtX3N0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9M
RVRURVIpKQogICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKIAotICAgIGlmICh2aXNpdGVk
U3R5bGUpIHsKLSAgICAgICAgLy8gQWRkIHRoZSB2aXNpdGVkIHN0eWxlIG9mZiB0aGUgbWFpbiBz
dHlsZS4KLSAgICAgICAgbV9zdHlsZS0+YWRkQ2FjaGVkUHNldWRvU3R5bGUodmlzaXRlZFN0eWxl
LnJlbGVhc2UoKSk7CisgICAgaWYgKG1fdmlzaXRlZExpbmtTdHlsZSkgeworICAgICAgICAvLyBD
b3B5IGFueSBwc2V1ZG8gYml0cyB0aGF0IHRoZSB2aXNpdGVkIHN0eWxlIGhhcyB0byB0aGUgcHJp
bWFyeSBzdHlsZSBzbyB0aGF0CisgICAgICAgIC8vIHBzZXVkbyBlbGVtZW50IHN0eWxlcyB3aWxs
IGNvbnRpbnVlIHRvIHdvcmsgZm9yIHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgOnZpc2l0ZWQKKyAg
ICAgICAgLy8gbGlua3MuCisgICAgICAgIGZvciAodW5zaWduZWQgcHNldWRvID0gRklSU1RfUFVC
TElDX1BTRVVET0lEOyBwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRDsgKytwc2V1ZG8p
IHsKKyAgICAgICAgICAgIGlmIChtX3Zpc2l0ZWRMaW5rU3R5bGUtPmhhc1BzZXVkb1N0eWxlKHN0
YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8pKSkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNQc2V1ZG9TdHlsZShzdGF0aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSA9PSBJbnNpZGVVbnZpc2l0ZWRMaW5r
KQorICAgICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlID0gMDsgLy8gV2UgbWFkZSB0aGUgc3R5
bGUgdG8gYXZvaWQgdGltaW5nIGF0dGFja3MuIEp1c3QgdGhyb3cgaXQgYXdheSBub3cgdGhhdCB3
ZSBkaWQgdGhhdCwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdC4KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBBZGQgdGhlIHZpc2l0ZWQgc3R5bGUgb2ZmIHRoZSBtYWluIHN0eWxlLgorICAg
ICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlLT5zZXRTdHlsZVR5cGUoVklTSVRFRF9MSU5LKTsK
KyAgICAgICAgICAgIG1fc3R5bGUtPmFkZENhY2hlZFBzZXVkb1N0eWxlKG1fdmlzaXRlZExpbmtT
dHlsZS5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRT
dHlsZSA9IDA7CiAgICAgfQogCi0gICAgaWYgKCFtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcykKLSAg
ICAgICAgaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4K
KyAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgog
CiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFz
ZSgpOwpAQCAtMTQyMywzMCArMTQxNSwyOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZy
YW1lU3R5bGVzRm9yCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50
KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xh
c3MpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGluaXRF
bGVtZW50KGUpOwogCi0gICAgLy8gQ29tcHV0ZSBvdXIgOnZpc2l0ZWQgc3R5bGUgZmlyc3QsIHNv
IHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB3ZSdsbCBuZWVkIHRvIGNyZWF0ZSBhIG5vcm1h
bCBzdHlsZSBqdXN0IHRvIGhhbmcgaXQKLSAgICAvLyBvZmYgb2YuCi0gICAgUmVmUHRyPFJlbmRl
clN0eWxlPiB2aXNpdGVkU3R5bGU7Ci0gICAgaWYgKCFtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyAm
JiBwYXJlbnRTdHlsZSAmJiBwYXJlbnRTdHlsZS0+aW5zaWRlTGluaygpKSB7Ci0gICAgICAgIC8v
IEZldGNoIG91ciBwYXJlbnQgc3R5bGUgd2l0aCA6dmlzaXRlZCBpbiBlZmZlY3QuCi0gICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRWaXNpdGVkU3R5bGUgPSBwYXJlbnRTdHlsZS0+Z2V0Q2FjaGVk
UHNldWRvU3R5bGUoVklTSVRFRF9MSU5LKTsKLSAgICAgICAgdmlzaXRlZFN0eWxlID0gcHNldWRv
U3R5bGVGb3JFbGVtZW50KHBzZXVkbywgZSwgcGFyZW50VmlzaXRlZFN0eWxlID8gcGFyZW50Vmlz
aXRlZFN0eWxlIDogcGFyZW50U3R5bGUsIHRydWUpOwotICAgICAgICBpZiAodmlzaXRlZFN0eWxl
KQotICAgICAgICAgICAgdmlzaXRlZFN0eWxlLT5zZXRTdHlsZVR5cGUoVklTSVRFRF9MSU5LKTsK
LSAgICB9Ci0KICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8p
OwogICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgaWYgKHBhcmVudFN0
eWxlKQotICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRTdHlsZSk7Ci0KLSAgICBt
X2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRv
Q2xhc3MpOworICAgIAorICAgIGlmIChtX3BhcmVudFN0eWxlKSB7CisgICAgICAgIG1fc3R5bGUt
PmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOworICAgICAgICAKKyAgICAgICAgLy8gRm9yIGxp
bmtzIGFuZCBlbGVtZW50cyBpbnNpZGUgbGlua3Mgd2UgY29tcHV0ZSBib3RoIHRoZSByZWd1bGFy
IGFuZCB2aXNpdGVkIHN0eWxlLgorICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aW5zaWRlTGlu
aygpKSB7CisgICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0
eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVEX0xJTkspOworICAgICAgICAgICAgaWYg
KCFtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgbV92aXNpdGVkTGlu
a1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZTsKKyAgICAgICAgICAgIG1fdmlzaXRlZExpbmtT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIG1fdmlzaXRlZExpbmtT
dHlsZS0+aW5oZXJpdEZyb20obV92aXNpdGVkTGlua1BhcmVudFN0eWxlKTsKKyAgICAgICAgfQor
ICAgIH0KIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55
IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdh
bGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KQEAgLTE0NjAsMTUgKzE0NTAsMTIgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgICAgICBtYXRjaFJ1bGVzKG1f
YXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNl
KTsKICAgICB9CiAKLSAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpICYmICF2aXNpdGVk
U3R5bGUpCisgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKICAgICAKICAgICBtX2xp
bmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgCi0gICAgLy8gUmVzZXQgdGhlIHZhbHVlIGJhY2sgYmVm
b3JlIGFwcGx5aW5nIHByb3BlcnRpZXMsIHNvIHRoYXQgLXdlYmtpdC1saW5rIGtub3dzIHdoYXQg
Y29sb3IgdG8gdXNlLgotICAgIG1fY2hlY2tlci5zZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFz
cyhtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyk7CiAKICAgICAvLyBIaWdoLXByaW9yaXR5IHByb3Bl
cnRpZXMuCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERl
Y2xzLnNpemUoKSAtIDEpOwpAQCAtMTUwNSw4ICsxNDkyLDExIEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwogCiAgICAg
Ly8gSGFuZyBvdXIgdmlzaXRlZCBzdHlsZSBvZmYgbV9zdHlsZS4KLSAgICBpZiAodmlzaXRlZFN0
eWxlKQotICAgICAgICBtX3N0eWxlLT5hZGRDYWNoZWRQc2V1ZG9TdHlsZSh2aXNpdGVkU3R5bGUu
cmVsZWFzZSgpKTsKKyAgICBpZiAobV92aXNpdGVkTGlua1N0eWxlKSB7CisgICAgICAgIG1fdmlz
aXRlZExpbmtTdHlsZS0+c2V0U3R5bGVUeXBlKFZJU0lURURfTElOSyk7CisgICAgICAgIG1fc3R5
bGUtPmFkZENhY2hlZFBzZXVkb1N0eWxlKG1fdmlzaXRlZExpbmtTdHlsZS5yZWxlYXNlKCkpOwor
ICAgICAgICBtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUgPSAwOworICAgIH0KICAgICAgICAgCiAg
ICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgp
OwpAQCAtMTc1Nyw2ICsxNzQ3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnVwZGF0ZUZvbnQoKQogeworICAgIEFT
U0VSVChtX3N0eWxlICE9IG1fdmlzaXRlZExpbmtTdHlsZSk7CiAgICAgaWYgKCFtX2ZvbnREaXJ0
eSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODQyLDcgKzE4MzMsNyBAQCBpbmxpbmUgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjCiAgICAgfQogCiAgICAgLy8gU2xvdyBwYXRoLgot
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVj
a1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgbV9keW5hbWljUHNldWRv
LCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVu
ZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRj
aCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVu
dCwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkLCBzdHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxl
KCkgOiAwKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNo
ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxl
KCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNl
dWRvKQpAQCAtMTkxNSw2ICsxOTA2LDcgQEAgUnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVs
ZSogcnVsZSwgQwogICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3RvcihzZWxlY3Rvci0+dGFnSGlz
dG9yeSgpKQogICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25S
dWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKSkK
ICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgLCBtX2xpbmtNYXRj
aFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9yKSkK
IHsKICAgICBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVudGlmaWVySGFzaGVzKG1fc2VsZWN0
b3IsIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcywgbWF4aW11bUlkZW50aWZp
ZXJDb3VudCk7CiB9CkBAIC0xOTY0LDE1ICsxOTU2LDkgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxl
KENTU1N0eWxlUnVsZSogcnVsZQogICAgICAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWws
IG1fcnVsZUNvdW50KyspOwogICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgICAgICAgICBtX2xpbmtQ
c2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgICAgICBtX3Zp
c2l0ZWRQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAg
ICAvLyA6bGluayBhbmQgOnZpc2l0ZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gOmFueS1saW5r
IHdpbGwgYXBwbHkgaWYgYW5kIG9ubHkgaWYgb25lIG9mIHRoZW0gYXBwbGllcy4KICAgICAgICAg
ICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAg
IG1fdmlzaXRlZFBzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6CiAgICAgICAg
ICAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwpAQCAtMjEyOSw3
ICsyMTE1LDYgQEAgdm9pZCBSdWxlU2V0Ojpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZQogICAg
IGZvciAoQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tTGlzdChmZWF0dXJlcywgKml0LT5zZWNvbmQpOwogICAgIGNvbGxlY3RGZWF0dXJlc0Zy
b21MaXN0KGZlYXR1cmVzLCBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzKTsKLSAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tTGlzdChmZWF0dXJlcywgbV92aXNpdGVkUHNldWRvQ2xhc3NSdWxlcyk7CiAgICAg
Y29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVz
KTsKICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgbV91bml2ZXJzYWxSdWxl
cyk7CiB9CkBAIC0yMTQ4LDcgKzIxMzMsNiBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkK
ICAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV90YWdSdWxlcyk7CiAgICAgc2hyaW5rTWFwVmVj
dG9yc1RvRml0KG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsKICAgICBtX2xpbmtQc2V1ZG9D
bGFzc1J1bGVzLnNocmlua1RvRml0KCk7Ci0gICAgbV92aXNpdGVkUHNldWRvQ2xhc3NSdWxlcy5z
aHJpbmtUb0ZpdCgpOwogICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7
CiAgICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0ZpdCgpOwogICAgIG1fcGFnZVJ1bGVzLnNo
cmlua1RvRml0KCk7CkBAIC0yMTk3LDYgKzIxODEsNDEgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0
VG9GbG9hdExlbmd0aChDU1NQcgogewogICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGgocHJpbWl0
aXZlVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHRydWUsIG11bHRpcGxpZXIsIG9rKTsKIH0KKyAg
ICAKK3RlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRp
b24sIGJvb2wgaXNJbXBvcnRhbnQpCit7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlRGVjbGFyYXRpb24tPmVuZCgpOworICAgIGZvciAo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGVEZWNs
YXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IENTU1By
b3BlcnR5JiBjdXJyZW50ID0gKml0OworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW1wb3J0YW50
ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgaW50IHByb3BlcnR5ID0gY3VycmVudC5pZCgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGFwcGx5Rmlyc3QpIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0Q1NT
UHJvcGVydHkgPT0gQ1NTUHJvcGVydHlDb2xvciwgQ1NTX2NvbG9yX2lzX2ZpcnN0X3Byb3BlcnR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5Wm9vbSA9PSBDU1NQcm9w
ZXJ0eUNvbG9yICsgMTYsIENTU196b29tX2lzX2VuZF9vZl9maXJzdF9wcm9wX3JhbmdlKTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5TGluZUhlaWdodCA9PSBDU1NQcm9w
ZXJ0eVpvb20gKyAxLCBDU1NfbGluZV9oZWlnaHRfaXNfYWZ0ZXJfem9vbSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29s
b3IgcHJvcGVydGllcywgZXRjCisgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyB3
ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgorICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENT
U1Byb3BlcnR5TGluZUhlaWdodCkgeworICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlID09IG1f
dmlzaXRlZExpbmtTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OworICAgIH0KK30KIAogdGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5k
ZXgsIGludCBlbmRJbmRleCkKQEAgLTIyMDUsMzIgKzIyMjQsMjEgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseURlY2xhcmF0aW9ucwogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGlu
dCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7Ci0gICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gbV9tYXRjaGVkRGVjbHNbaV07Ci0gICAgICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkZWNsLT5lbmQo
KTsKLSAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBkZWNsLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gKml0OwotICAgICAgICAgICAgaWYgKGlzSW1wb3J0
YW50ID09IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBwcm9w
ZXJ0eSA9IGN1cnJlbnQuaWQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChhcHBseUZpcnN0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0Q1NTUHJvcGVydHkgPT0g
Q1NTUHJvcGVydHlDb2xvciwgQ1NTX2NvbG9yX2lzX2ZpcnN0X3Byb3BlcnR5KTsKLSAgICAgICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENTU1Byb3BlcnR5
Q29sb3IgKyAxNiwgQ1NTX3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2UpOwotICAgICAg
ICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQgPT0gQ1NT
UHJvcGVydHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lzX2FmdGVyX3pvb20pOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29s
b3IgcHJvcGVydGllcywgZXRjCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA8PSBD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFw
cGx5IGxpbmUtaGVpZ2h0IGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOyAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShj
dXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkg
PiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CisgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZURlY2xhcmF0aW9uID0gbV9tYXRjaGVkRGVjbHNbaV0uc3R5bGVEZWNsYXJhdGlvbjsKKyAgICAg
ICAgaWYgKG1fdmlzaXRlZExpbmtTdHlsZSAmJiBtX21hdGNoZWREZWNsc1tpXS5saW5rTWF0Y2hU
eXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBTdHlsZSBzaG91bGQgYmUgcGFzc2VkIHRvIGFwcGx5UHJvcGVydHkgYXMgYW4gYXJndW1l
bnQsIG5vdCBhcyBhIG1lbWJlci4KKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc2F2
ZWRTdHlsZSA9IG1fc3R5bGUucmVsZWFzZSgpOworICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHNh
dmVkUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlOworICAgICAgICAgICAgbV9zdHlsZSA9IG1f
dmlzaXRlZExpbmtTdHlsZTsKKyAgICAgICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3Zpc2l0ZWRM
aW5rUGFyZW50U3R5bGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGx5RGVjbGFyYXRp
b248YXBwbHlGaXJzdD4oc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRhbnQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX3N0eWxlID0gc2F2ZWRTdHlsZS5yZWxlYXNlKCk7CisgICAgICAg
ICAgICBtX3BhcmVudFN0eWxlID0gc2F2ZWRQYXJlbnRTdHlsZTsKICAgICAgICAgfQorICAgICAg
ICBpZiAobV9tYXRjaGVkRGVjbHNbaV0ubGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rKQorICAgICAgICAgICAgYXBwbHlEZWNsYXJhdGlvbjxhcHBseUZpcnN0PihzdHls
ZURlY2xhcmF0aW9uLCBpc0ltcG9ydGFudCk7ICAgICAgICAKICAgICB9CiB9CiAKQEAgLTI0MTYs
NyArMjQyNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAg
ICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZVR5cGUgPT0gQ1NTVmFsdWU6
OkNTU19JTkhFUklUOwogICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWVUeXBlID09IENTU1ZhbHVl
OjpDU1NfSU5JVElBTCB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZVR5cGUgPT0gQ1NTVmFsdWU6
OkNTU19JTkhFUklUKTsKIAotICAgIGlmIChtX2NoZWNrZXIuaXNNYXRjaGluZ1Zpc2l0ZWRQc2V1
ZG9DbGFzcygpICYmICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpIHsKKyAgICBpZiAo
bV9zdHlsZSA9PSBtX3Zpc2l0ZWRMaW5rU3R5bGUgJiYgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3Bl
cnR5KGlkKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBh
cHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQ5NjcsNyArNDk3NSw3IEBAIENvbG9yIENTU1N0eWxlU2VsZWN0b3I6
OmdldENvbG9yRnJvbVByaW0KICAgICAgICAgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0VGV4
dCkKICAgICAgICAgICAgIGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7
CiAgICAgICAgIGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0TGluaykKLSAgICAgICAg
ICAgIGNvbCA9IG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9jaGVja2VyLmlzTWF0Y2hpbmdWaXNp
dGVkUHNldWRvQ2xhc3MoKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xv
cigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgICAgIGNv
bCA9IG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9zdHlsZSA9PSBtX3Zpc2l0ZWRMaW5rU3R5bGUg
PyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgICAgIGVsc2UgaWYgKGlkZW50ID09IENTU1Zh
bHVlV2Via2l0QWN0aXZlbGluaykKICAgICAgICAgICAgIGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgICAgIGVsc2UgaWYgKGlkZW50ID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgJKHJldmlzaW9uIDk3MTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wdXNoUGFyZW50
KHBhcmVudCk7IH0KICAgICB2b2lkIHBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpIHsgbV9jaGVj
a2VyLnBvcFBhcmVudChwYXJlbnQpOyB9CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJv
b2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxz
ZSwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlKTsKKyAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9v
dERlZmF1bHQgPSBmYWxzZSk7CiAgICAgCiAgICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1h
dGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIAotICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCwg
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgbWF0Y2hWaXNpdGVk
UHNldWRvQ2xhc3MgPSBmYWxzZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRv
U3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gMCk7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50
IHBhZ2VJbmRleCk7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRq
dXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgRWxlbWVudCopOwogCiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBS
dWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLSAgICB2b2lk
IGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
dW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpOwogCiAg
ICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CkBAIC0yMzIsNiArMjMy
LDggQEAgcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KICAgICB2b2lk
IGFwcGx5RGVjbGFyYXRpb25zKGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVu
ZEluZGV4KTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CisgICAgdm9pZCBhcHBseURl
Y2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBpc0ltcG9ydGFudCk7
CiAKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIHZvaWQgbWF0Y2hQ
YWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBib29sIGlzTGVmdFBhZ2Us
IGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwpAQCAtMzA5LDcgKzMx
MSwxMiBAQCBwcml2YXRlOgogICAgIC8vIHNldCBvZiBtYXRjaGVkIGRlY2xzIGZvdXIgdGltZXMs
IG9uY2UgZm9yIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlcnMgZGVwZW5kIG9uIChsaWtlIGZv
bnQtc2l6ZSksCiAgICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3IgYWxsIHRoZSByZW1h
aW5pbmcgcHJvcGVydGllcy4gV2UgdGhlbiBkbyB0aGUgc2FtZSB0d28gcGFzc2VzCiAgICAgLy8g
Zm9yIGFueSAhaW1wb3J0YW50IHJ1bGVzLgotICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiosIDY0PiBtX21hdGNoZWREZWNsczsKKyAgICBzdHJ1Y3QgTWF0Y2hlZFN0eWxlRGVj
bGFyYXRpb24geworICAgICAgICBNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogZGVjbCwgdW5zaWduZWQgdHlwZSkgOiBzdHlsZURlY2xhcmF0aW9uKGRl
Y2wpLCBsaW5rTWF0Y2hUeXBlKHR5cGUpIHsgfQorICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlw
ZTsKKyAgICB9OworICAgIFZlY3RvcjxNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiwgNjQ+IG1fbWF0
Y2hlZERlY2xzOwogCiAgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZv
cgogICAgIC8vIG1lcmdlIHNvcnRpbmcuCkBAIC0zMjcsNyArMzM0LDkgQEAgcHJpdmF0ZToKICAg
ICBTZWxlY3RvckNoZWNrZXIgbV9jaGVja2VyOwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBt
X3N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV92aXNpdGVkTGlua1N0eWxlOwogICAg
IFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgIFJlbmRlclN0eWxlKiBtX3Zpc2l0ZWRM
aW5rUGFyZW50U3R5bGU7CiAgICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKICAg
ICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDk3
MTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDYgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIo
RG9jdW1lbgogICAgICwgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkoZmFsc2UpCiAgICAgLCBtX3Bz
ZXVkb1N0eWxlKE5PUFNFVURPKQogICAgICwgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMoZmFs
c2UpCi0gICAgLCBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MoZmFsc2UpCiB7CiB9CiAK
QEAgLTI1NCwxMSArMjUzLDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9y
KENTU1MKIHsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgaWYg
KGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewot
ICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxlbWVudCkpCisg
ICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBWaXNp
dGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQpOwogICAgIH0KLSAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkg
PT0gU2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVu
dCwgZHluYW1pY1BzZXVkbywgZmFsc2UsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSA9PSBTZWxlY3Rv
ck1hdGNoZXM7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0zMjEsNyArMzIwLDcgQEAgaW5saW5lIGJv
b2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KgogICAgIAogfQogCi1pbmxpbmUgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2lubGluZSBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBl
IHZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKHNlbGVjdG9yKSk7CiAKQEAgLTMzOCw3ICszMzcsNyBAQCBpbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmZhc3RDaGVja1JpCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgogICAg
ICAgICByZXR1cm4gY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKSwgc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzczoKLSAgICAgICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0
b3JNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbW1vblBzZXVk
b0NsYXNzU2VsZWN0b3JNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBl
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBA
IC0zNDcsNyArMzQ2LDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tS
aQogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIEFT
U0VSVChmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCkpOworICAg
IEFTU0VSVChmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCwgVmlz
aXRlZE1hdGNoRW5hYmxlZCkpOwogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JT
dWJzZWxlY3RvciA9IDA7CiAgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9y
TWF0Y2hFbGVtZW50ID0gMDsKQEAgLTQyNSw3ICs0MjQsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6aXNGYXN0Q2hlY2thYmxlU2VsCiAvLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhl
IHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxs
eSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxp
bmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRl
cmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQ
YXJlbnRTdHlsZSkgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlw
ZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHls
ZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAogewogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8g
U3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIChjb25jZXB0dWFs
bHkpIGNsb25lZCBET00gdHJlZQpAQCAtNDM1LDcgKzQzNCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JNYXRjaCBTZWxlY3RvckMKICNlbmRpZgogCiAgICAgLy8gZmlyc3Qgc2VsZWN0b3Ig
aGFzIHRvIG1hdGNoCi0gICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1Bz
ZXVkbywgaXNTdWJTZWxlY3RvciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1l
bnRQYXJlbnRTdHlsZSkpCisgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1p
Y1BzZXVkbywgaXNTdWJTZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBl
bGVtZW50UGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7
CiAgICAgCiAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKQEAg
LTQ0NiwyMCArNDQ1LDE0IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3Rv
ckMKICAgICBpZiAoIXNlbCkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKICAgICAK
LSAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgIGlmIChy
ZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAgLy8gQmFpbC1v
dXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKICAg
ICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBk
eW5hbWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OwogICAgIAotICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCi0gICAgaWYgKG1faXNNYXRj
aGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgewotICAgICAgICBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+
cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUt
Pmluc2lkZUxpbmsoKSAmJiBlLT5pc0xpbmsoKSkgewotICAgICAgICAgICAgaWYgKGVuY291bnRl
cmVkTGluaykKLSAgICAgICAgICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlzIG5vdCByZWxldmFudCB0byB0aGUgc3R5bGUgYmVpbmcg
cmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0Y2hpbmcuCi0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW5jb3VudGVyZWRMaW5rID0gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICAvLyBE
aXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIGFmdGVyIHdlIG1vdmUgdG8gc2VsZWN0b3IgY29tcG9u
ZW50cyB0aGF0IHdvdWxkIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiB0aGUgY3VycmVudCBlbGVt
ZW50LgorICAgICAgICBpZiAoIWlzU3ViU2VsZWN0b3IpCisgICAgICAgICAgICB2aXNpdGVkTWF0
Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CiAgICAgfQogICAgIAogICAgIHN3aXRjaCAo
cmVsYXRpb24pIHsKQEAgLTQ2OSw3ICs0NjIsNyBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2ggU2VsZWN0b3JDCiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAgICAg
ICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgU2VsZWN0
b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxz
ZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBj
aGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5
cGUpOwogICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQogICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgfQpAQCAtNDgwLDcgKzQ3Myw3IEBA
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckMKICAgICAgICAgICAgIGlm
ICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQ
c2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICAgICAgcmV0dXJuIGNoZWNr
U2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7
CiAgICAgICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKICAgICAg
ICAgewpAQCAtNDk1LDggKzQ4OCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBT
ZWxlY3RvckMKICAgICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOwotICAgICAgICAgICAgbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7
Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0
b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CiAgICAg
ICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBp
ZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJl
bnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewpAQCAtNTExLDggKzUwMyw3IEBAIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckMKICAgICAgICAgICAgIGlmICghbikKICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgICAgICBl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgbV9pc01hdGNoaW5nVmlz
aXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNo
ID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJl
ZExpbmspOworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Io
c2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CiAgICAgICAg
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoOwogICAgICAgICB9OwpAQCAtNTI0LDE0ICs1MTUsMTQgQEAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQwogICAgICAgICBpZiAoKGVsZW1lbnRTdHls
ZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVE
TyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgogICAgICAgICAgICAgICYmICEoKFJlbmRl
clNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9
PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNl
bCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBl
bGVtZW50UGFyZW50U3R5bGUpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRh
bnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gZSB8
fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KHNoYWRvd0hvc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAg
ICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNl
LCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTY4Myw3ICs2
NzQsNyBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKE5hbWVkTm9kCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1l
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQq
IGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRN
YXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZSk7CiAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZSwgc2VsKSkKQEAgLTcxNyw4ICs3
MDgsMTAgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQwogICAgICAg
ICAgICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9u
b3IgaXQuCiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMg
bmV2ZXIgb2NjdXJzCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgp
ICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRy
dWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQor
ICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3
aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHll
dC4KKyAgICAgICAgICAgICAgICBpZiAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YlNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9MaW5rICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
Y2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRN
YXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAo
ZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJG
b3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwg
ZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSkgewpAQCAtMTAxOSwyNCArMTAxMiwyMyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgZm9yIChD
U1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzZWxl
Y3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFtaWNQc2V1ZG8s
IHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUp
ID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3Rvcihz
ZWxlY3RvciwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVu
dFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKLSAgICAgICAgICAg
IGlmIChlICYmIGUtPmlzTGluaygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxs
OgogICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTGluazoKLSAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmsoKSAmJiAhbGlu
a01hdGNoZXNWaXNpdGVkUHNldWRvQ2xhc3MoZSk7CisgICAgICAgICAgICAvLyA6dmlzaXRlZCBh
bmQgOmxpbmsgbWF0Y2hlcyBhcmUgc2VwYXJhdGVkIGxhdGVyIHdoZW4gYXBwbHlpbmcgdGhlIHN0
eWxlLiBIZXJlIGJvdGggY2xhc3NlcyBtYXRjaCBhbGwgbGlua3MuLi4KKyAgICAgICAgICAgIHJl
dHVybiBlLT5pc0xpbmsoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZDoKLSAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmsoKSAmJiBsaW5rTWF0Y2hlc1Zpc2l0ZWRQ
c2V1ZG9DbGFzcyhlKTsKKyAgICAgICAgICAgIC8vIC4uLmV4Y2VwdCBpZiA6dmlzaXRlZCBtYXRj
aGluZyBpcyBkaXNhYmxlZCBmb3IgYW5jZXN0b3Ivc2libGluZyBtYXRjaGluZy4KKyAgICAgICAg
ICAgIHJldHVybiBlLT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRj
aEVuYWJsZWQ7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudFN0eWxlKQogICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0
QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKQEAgLTEzMTQsMTYgKzEzMDYsMTUgQEAgdm9pZCBT
ZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZQogICAgIH0KIH0KIAotYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNDb21tb25Qc2V1ZG9D
bGFzc1NlbGVjdG9yKHNlbGVjdG9yKSk7CiAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlw
ZSgpKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKLSAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmlzTGluaygpICYmICFsaW5rTWF0Y2hlc1Zpc2l0ZWRQc2V1ZG9DbGFzcyhlbGVt
ZW50KTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICByZXR1
cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgbGlua01hdGNoZXNWaXNpdGVkUHNldWRvQ2xhc3MoZWxl
bWVudCk7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKICAgICAgICAgcmV0
dXJuIGVsZW1lbnQtPmlzTGluaygpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0
ZWQ6CisgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0Y2hUeXBl
ID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9j
dXM6CiAgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KTsKICAg
ICBkZWZhdWx0OgpAQCAtMTMzMiw2ICsxMzIzLDQxIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
b21tb25Qc2V1ZG9DbGFzc1MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordW5zaWduZWQgU2VsZWN0
b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKK3sKKyAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gTWF0Y2hBbGw7CisgICAgCisg
ICAgLy8gU3RhdGljYWxseSBkZXRlcm1pbmUgaWYgdGhpcyBzZWxlY3RvciB3aWxsIG1hdGNoIGEg
bGluayBpbiB2aXNpdGVkLCB1bnZpc2l0ZWQgb3IgYW55IHN0YXRlLCBvciBuZXZlci4KKyAgICAv
LyA6dmlzaXRlZCBuZXZlciBtYXRjaGVzIG90aGVyIGVsZW1lbnRzIHRoYW4gdGhlIGN1cnJlbnQu
CisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkp
IHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdDoKKyAgICAgICAgICAgIC8vIDpub3QoOnZpc2l0ZWQp
IGlzIGVxdWl2YWxlbnQgdG8gOmxpbmsuIFBhcnNlciBlbmZvcmNlcyB0aGF0IDpub3QgY2FuJ3Qg
bmVzdC4KKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0
b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBz
dWJTZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5cGUgc3ViVHlwZSA9IHN1YlNlbGVjdG9yLT5wc2V1ZG9UeXBlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHN1YlR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpCisgICAg
ICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hW
aXNpdGVkOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YlR5cGUgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0xpbmspCisgICAgICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CisgICAgICAgICAgICBsaW5r
TWF0Y2hUeXBlICY9IH5TZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAg
ICAgICAgbGlua01hdGNoVHlwZSAmPSB+U2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgOmxpbmsgYW5kIDp2aXNpdGVkIGluc2lkZSA6LXdlYmtpdC1hbnkuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkg
IT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIGxpbmtNYXRj
aFR5cGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBsaW5r
TWF0Y2hUeXBlOworfQorCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGcmFtZUZvY3VzZWQoY29u
c3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNG
b2N1c2VkQW5kQWN0aXZlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
CShyZXZpc2lvbiA5NzE2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQCBwdWJsaWM6CiAgICAgU2VsZWN0b3JD
aGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJzaW5nKTsKIAogICAgIGVudW0gU2VsZWN0
b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5IH07Ci0KKyAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVk
TWF0Y2hEaXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwogICAgIGJvb2wgY2hlY2tTZWxl
Y3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9y
ID0gZmFsc2UpIGNvbnN0OwotICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVj
dG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUq
IGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywg
Ym9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogPSAwLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CiAgICAgc3RhdGljIGJv
b2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29s
IGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNv
bnN0OwogCkBAIC03MywxMCArNzMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0NvbGxl
Y3RpbmdSdWxlc09ubHkoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGVjdGluZ1J1bGVzT25seTsg
fQogICAgIHZvaWQgc2V0Q29sbGVjdGluZ1J1bGVzT25seShib29sIGIpIHsgbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHkgPSBiOyB9Ci0gICAgCi0gICAgYm9vbCBpc01hdGNoaW5nVmlzaXRlZFBzZXVk
b0NsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzOyB9
Ci0gICAgdm9pZCBzZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhib29sIGIpIHsgbV9pc01h
dGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gYjsgfQotICAgIAorCiAgICAgUHNldWRvSWQgcHNl
dWRvU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0eWxlOyB9CiAgICAgdm9pZCBzZXRQ
c2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCkgeyBtX3BzZXVkb1N0eWxlID0gcHNldWRvSWQ7
IH0KIApAQCAtODYsMTggKzgzLDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0YWdNYXRj
aGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0YXRpYyBib29s
IGF0dHJpYnV0ZU5hbWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICBzdGF0aWMgYm9vbCBpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVz
KGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwotICAgIGJvb2wgbGlu
a01hdGNoZXNWaXNpdGVkUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIGJv
b2wgbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHN0
YXRpYyBib29sIGZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IEVsZW1l
bnQqLCBjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0YXRpYyBib29sIGNoZWNrRXhhY3RBdHRy
aWJ1dGUoY29uc3QgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0cmli
dXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpOworICAgIAorICAgIGVudW0g
TGlua01hdGNoTWFzayB7ICBNYXRjaExpbmsgPSAxLCBNYXRjaFZpc2l0ZWQgPSAyLCBNYXRjaEFs
bCA9IE1hdGNoTGluayB8IE1hdGNoVmlzaXRlZCB9OworICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRl
cm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBk
eW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OworICAg
IGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYg
ZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OwogICAgIGJv
b2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5h
bWljUHNldWRvKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBF
bGVtZW50Kik7CiAgICAgCi0gICAgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGZhc3RDaGVj
a1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCosIFZp
c2l0ZWRNYXRjaFR5cGUpIGNvbnN0OworICAgIGJvb2wgY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rv
ck1hdGNoZXMoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKiwgVmlzaXRlZE1hdGNo
VHlwZSkgY29uc3Q7CiAKICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2Fz
ZShFbGVtZW50KikgY29uc3Q7CiAKQEAgLTExMCw3ICsxMDksNiBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHk7CiAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsK
ICAgICBtdXRhYmxlIGJvb2wgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHM7Ci0gICAgbXV0YWJs
ZSBib29sIG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzczsKICAgICBtdXRhYmxlIEhhc2hT
ZXQ8TGlua0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7
CiAKICAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7CkBAIC0xNTUsMTIgKzE1Myw2IEBAIGlu
bGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2UKICAgICAgICAgfHwgcHNldWRv
VHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM7CiB9CiAKLWlubGluZSBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6bGlua01hdGNoZXNWaXNpdGVkUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNMaW5rKCkpOwotICAgIHJl
dHVybiBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgfHwgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7Ci19Ci0KIGlubGluZSBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29u
c3QKIHsKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRl
KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXMp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCShyZXZpc2lvbiA5NzE2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsOSBAQCBSZW5kZXJT
dHlsZSogUmVuZGVyU3R5bGU6OmFkZENhY2hlZFBzZXVkCiB7CiAgICAgaWYgKCFwc2V1ZG8pCiAg
ICAgICAgIHJldHVybiAwOwotICAgIAorCisgICAgQVNTRVJUKHBzZXVkby0+c3R5bGVUeXBlKCkg
PiBOT1BTRVVETyk7CisKICAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gcHNldWRvLmdldCgpOwog
CiAgICAgaWYgKCFtX2NhY2hlZFBzZXVkb1N0eWxlcykK
</data>
<flag name="review"
          id="108083"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>