<?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>137845</bug_id>
          
          <creation_ts>2014-10-17 21:07:22 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for all remaining RenderObject subclasses</short_desc>
          <delta_ts>2014-10-19 20:42:09 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>mihnea</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042558</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-17 21:07:22 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for all remaining RenderObject subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042559</commentid>
    <comment_count>1</comment_count>
      <attachid>240058</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-17 21:23:48 -0700</bug_when>
    <thetext>Created attachment 240058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042614</commentid>
    <comment_count>2</comment_count>
      <attachid>240066</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 10:51:26 -0700</bug_when>
    <thetext>Created attachment 240066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042623</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-18 11:41:18 -0700</bug_when>
    <thetext>Finally, all the RenderObjects are ported. Getting really close to killing TYPE_CASTS_BASE() macro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042709</commentid>
    <comment_count>4</comment_count>
      <attachid>240066</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-19 19:45:34 -0700</bug_when>
    <thetext>Comment on attachment 240066
Patch

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

&gt; Source/WebCore/html/HTMLEmbedElement.cpp:63
&gt; +        do {
&gt;              n = n-&gt;parentNode();
&gt; -        while (n &amp;&amp; !n-&gt;hasTagName(objectTag));
&gt; +        } while (n &amp;&amp; !is&lt;HTMLObjectElement&gt;(*n));

Why did you add the braces? Also surprised you didn’t rename the “n” variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042712</commentid>
    <comment_count>5</comment_count>
      <attachid>240066</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 19:47:45 -0700</bug_when>
    <thetext>Comment on attachment 240066
Patch

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

&gt;&gt; Source/WebCore/html/HTMLEmbedElement.cpp:63
&gt;&gt; +        } while (n &amp;&amp; !is&lt;HTMLObjectElement&gt;(*n));
&gt; 
&gt; Why did you add the braces? Also surprised you didn’t rename the “n” variable.

The style checker complained. Was the style script wrong? Are we supposed to omit them in this case?

I&apos;ll rename the variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042714</commentid>
    <comment_count>6</comment_count>
      <attachid>240094</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 19:54:05 -0700</bug_when>
    <thetext>Created attachment 240094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042715</commentid>
    <comment_count>7</comment_count>
      <attachid>240066</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-19 19:55:39 -0700</bug_when>
    <thetext>Comment on attachment 240066
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLEmbedElement.cpp:63
&gt;&gt;&gt; +        } while (n &amp;&amp; !is&lt;HTMLObjectElement&gt;(*n));
&gt;&gt; 
&gt;&gt; Why did you add the braces? Also surprised you didn’t rename the “n” variable.
&gt; 
&gt; The style checker complained. Was the style script wrong? Are we supposed to omit them in this case?
&gt; 
&gt; I&apos;ll rename the variable.

I’m not sure. The coding style document doesn’t say one way or another. I am kind of annoyed at the style script making rules that we didn’t write down first, but I suppose there’s a lot of that.

Since I personally prefer braces even for one line if statements, I suppose it would be good to have our strange if rule be only for if statements, and not for looping constructs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042716</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 19:56:56 -0700</bug_when>
    <thetext>Attachment 240094 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLEmbedElement.cpp:63:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042717</commentid>
    <comment_count>9</comment_count>
      <attachid>240095</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 19:57:37 -0700</bug_when>
    <thetext>Created attachment 240095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042718</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 19:58:33 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 240066 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240066&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/HTMLEmbedElement.cpp:63
&gt; &gt;&gt;&gt; +        } while (n &amp;&amp; !is&lt;HTMLObjectElement&gt;(*n));
&gt; &gt;&gt; 
&gt; &gt;&gt; Why did you add the braces? Also surprised you didn’t rename the “n” variable.
&gt; &gt; 
&gt; &gt; The style checker complained. Was the style script wrong? Are we supposed to omit them in this case?
&gt; &gt; 
&gt; &gt; I&apos;ll rename the variable.
&gt; 
&gt; I’m not sure. The coding style document doesn’t say one way or another. I am
&gt; kind of annoyed at the style script making rules that we didn’t write down
&gt; first, but I suppose there’s a lot of that.
&gt; 
&gt; Since I personally prefer braces even for one line if statements, I suppose
&gt; it would be good to have our strange if rule be only for if statements, and
&gt; not for looping constructs.

Ok, I also prefer the braces in this particular case. I left the braces in but renamed the n variable to node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042726</commentid>
    <comment_count>11</comment_count>
      <attachid>240095</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 20:42:03 -0700</bug_when>
    <thetext>Comment on attachment 240095
Patch

Clearing flags on attachment: 240095

Committed r174875: &lt;http://trac.webkit.org/changeset/174875&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042727</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-19 20:42:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240058</attachid>
            <date>2014-10-17 21:23:48 -0700</date>
            <delta_ts>2014-10-18 10:51:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137845-20141017212353.patch</filename>
            <type>text/plain</type>
            <size>158038</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTdkMThhNzg5Mzc4MzBh
ZTc1NTQ2MGZjMzE4NWUzMWI2MWY0YTM0ZS4uOTQ5MjhmYjYwMGVmZTE1ODdhMzY1ZmZkYjI2MmE4
YWRiNTNkNjU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNC0xMC0xNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5k
CisgICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjptZXRlckVsZW1lbnQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZXRGb3JB
dHRhY2htZW50Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Q
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5k
T2Zmc2V0KToKKyAgICAgICAgKiBkb20vV2ViS2l0TmFtZWRGbG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYktpdE5hbWVkRmxvdzo6b3ZlcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXROYW1lZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0TmFtZWRGbG93OjpnZXRSZWdpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVFbGVtZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdpZGdl
dFJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlcldp
ZGdldCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVu
dDo6cmVuZGVyTWV0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVh
dGVQbHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpyZW5kZXJQcm9ncmVzcyk6CisgICAg
ICAgICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
b2N1bWVudDo6cGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAg
ICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om93bmVyUmVu
ZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRU
b1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2
ZW50VG9TdWJmcmFtZSk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRU
b1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2
ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JFdmVudFRhcmdldCk6
CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFRvVXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElz
QWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRT
dGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0RmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNh
bEhlaWdodENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVE
aXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmFkanVzdFN0
eWxlRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphZGRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6Om1vdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxl
bWVudDo6c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6dmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
Omhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpyZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lv
bnNDb21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRGaWx0
ZXJCYWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5z
cGFyZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZU9mZnNldFRvd2Fy
ZHNBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5
ZXJzVW5kZXJSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdl
dFJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWluZXJDb21wb3NpdGluZ0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Omxhc3RNdWx0
aUNvbHVtblNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmFkZFJlZ2lvblRvVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRSZWxhdGl2ZVdp
bGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp1cGRhdGVNaW5pbXVtUGFnZUhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJl
Z2lvblJhbmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dU
b1JlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6bmV4dFNpYmxpbmdNdWx0aUNvbHVt
blNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cHJldmlvdXNT
aWJsaW5nTXVsdGlDb2x1bW5TZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tS
ZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
bmFtZWRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6dXBkYXRlV3JpdGluZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRkRnJhZ21lbnRUb0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21S
ZW5kZXJCb3hBc1JlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d1RocmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVy
T2JqZWN0Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNjaGVkdWxlUmVsYXlvdXRGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludFVz
aW5nQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9u
Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNob3VsZFVzZVRyYW5zZm9y
bUZyb21Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUcmFu
c2Zvcm1Gcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNS
b290ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpsYXN0UnVieVJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpydWJ5
UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclJ1YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFy
aS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclJlZ2lvbkxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWRlby5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpz
a2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGlj
YXRvck9ic2N1cmVkKToKKwogMjAxNC0xMC0xNiAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBw
bGUuY29tPgogCiAgICAgICAgIENhbGxpbmcgZ2xSZWFkUGl4ZWxzIHdpdGggQkdSQSBmb3JtYXQg
b24gYW4gTlZJRElBIG1hY2hpbmUgd2l0aCBhbiBvcGFxdWUgY29udGV4dCByZXR1cm5zIHRoZSB3
cm9uZyBhbHBoYSB2YWx1ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZTdmYTExNjVjODBjZjlhODkz
MGIyZDQ5YmZhNTY0ZTE5MGQ5NGYyNC4uYmVhMGU2NTQyOTY5ODhhYTM2Mzg5Zjc0ZjFiODE2ZDQ0
NjY1NTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE0LTEwLTE3ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRv
d25jYXN0PD4oKSBmb3IgYWxsIHJlbWFpbmluZyBSZW5kZXJPYmplY3Qgc3ViY2xhc3NlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODQ1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgYWxsIHJlbWFpbmluZyBSZW5kZXJPYmplY3Qgc3ViY2xhc3NlcyBh
bmQgCisgICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAo
LVtXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgcGx1Z2luSG9zdERpZWRdKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgX3dpbmRvd0NsaXBSZWN0XSk6CisgICAgICAgICgtW1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgYWN0dWFsVmlzaWJsZVJlY3RJbldpbmRvd10pOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisKIDIwMTQtMTAtMTcgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciAz
Mi1iaXQgWW9zZW1pdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyNDU4M2YzOGM1OTAyMTM4YWMyYjE0MTYwNGJm
MDZmNzhmMmM3MDUwLi42ZWMxMjA3N2M0ODEwODk2MmRlY2I2ZTdkZTI0MzJiYjU5ZmJmOTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMTQtMTAtMTcgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBh
bGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZv
ciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2VzIGFuZCAKKyAgICAgICAgY2xl
YW4gdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblBy
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBsdWdpbik6CisKKzIwMTQtMTAtMTcg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzgwNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAK
aW5kZXggYjUyYmY3ODU5MmJlNDZkNDNiNWJiODU1Y2ZiODc5OTZiNDgxMzgxYS4uYWFmYTdmMzk1
MDEyZmE4MGIwYjRkNTYxNjY2YmExZTJiOWRhZTQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNh
dG9yLmNwcApAQCAtMTIyLDE5ICsxMjIsMTkgQEAgZmxvYXQgQWNjZXNzaWJpbGl0eVByb2dyZXNz
SW5kaWNhdG9yOjptaW5WYWx1ZUZvclJhbmdlKCkgY29uc3QKIAogSFRNTFByb2dyZXNzRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQoKSBjb25z
dAogewotICAgIGlmICghbV9yZW5kZXJlci0+aXNQcm9ncmVzcygpKQorICAgIGlmICghaXM8UmVu
ZGVyUHJvZ3Jlc3M+KCptX3JlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ci0gICAgcmV0dXJuIHRvUmVuZGVyUHJvZ3Jlc3MobV9yZW5kZXJlciktPnByb2dyZXNzRWxlbWVu
dCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4oKm1fcmVuZGVyZXIpLnBy
b2dyZXNzRWxlbWVudCgpOwogfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiBIVE1MTWV0
ZXJFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6Om1ldGVyRWxlbWVudCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyLT5pc01ldGVyKCkpCisgICAgaWYgKCFpczxS
ZW5kZXJNZXRlcj4oKm1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiB0b1JlbmRlck1ldGVyKG1fcmVuZGVyZXIpLT5tZXRlckVsZW1lbnQoKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KCptX3JlbmRlcmVyKS5tZXRlckVsZW1lbnQoKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3NjlhNTYyZDJiMDEwZDZhZGE0
YTcyYjY5N2E2YjA2OTRmNDA5NWZjLi5jYTIyZWNjNjI0MGNiNDMzY2IxYTg1NzI1MTlkOWVmNDIy
MGM4MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTEzODcsOSArMTM4Nyw5IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojplc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBj
b25zdAogICAgIAogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxheW91dENvdW50KCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQorICAgIGlmICgh
aXM8UmVuZGVyVmlldz4oKm1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gdG9SZW5kZXJWaWV3KCptX3JlbmRlcmVyKS5mcmFtZVZpZXcoKS5sYXlvdXRDb3VudCgpOwor
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJWaWV3PigqbV9yZW5kZXJlcikuZnJhbWVWaWV3KCku
bGF5b3V0Q291bnQoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRl
eHQoKSBjb25zdApAQCAtMTc2Myw3ICsxNzYzLDcgQEAgV2lkZ2V0KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojp3aWRnZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0CiB7CiAgICAgaWYgKCFp
c0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRvUmVu
ZGVyV2lkZ2V0KG1fcmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PigqbV9yZW5kZXJlcikud2lkZ2V0KCk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24g
aXMgbGlrZSBhIGNyb3NzLXBsYXRmb3JtIHZlcnNpb24gb2YgLSAoV2ViQ29yZVRleHRNYXJrZXJS
YW5nZSopdGV4dE1hcmtlclJhbmdlLiBJdCByZXR1cm5zCkBAIC0xOTk2LDExICsxOTk2LDExIEBA
IFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChjb25zdCBJbnRQb2luCiAgICAgICAgIHBvaW50UmVzdWx0ID0gcmVzdWx0Lmxv
Y2FsUG9pbnQoKTsKIAogICAgICAgICAvLyBkb25lIGlmIGhpdCBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIHdpZGdldAotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICBp
ZiAoIWlzPFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIC8vIGRlc2NlbmQgaW50byB3aWRnZXQgKEZSQU1FLCBJRlJBTUUsIE9CSkVDVC4uLikK
LSAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdl
dCgpOworICAgICAgICBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJl
bmRlcmVyKS53aWRnZXQoKTsKICAgICAgICAgaWYgKCFpczxGcmFtZVZpZXc+KHdpZGdldCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgRnJhbWUmIGZyYW1lID0gZG93bmNhc3Q8RnJhbWVW
aWV3Pigqd2lkZ2V0KS5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOGY2NzZm
MDYxZTUwNzdhYTA3YmMwOGQwNmZkNTk5YzQ2Y2RmYTZkMi4uMGFlNDg3Njk4MWIyYjJkNDJkNGQx
NGJiMmNhYmQ3NzA1NmJkZGZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zMjcsMTAg
KzMyNywxMCBAQCBzdGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50KQogewogICAgIGlmICghZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGF1dG8gcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKKyAgICBhdXRvKiBy
ZW5kZXJlciA9IGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVy
V2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiB0
b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7CiB9CiAKIHN0YXRpYyBib29sIGFjY2Vw
dHNFZGl0aW5nRm9jdXMoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDgw
NTYxMmUyZDE3ZjM1ODdlYzgzMTgxZTMyM2ZhNDRjM2JjOTRkMDIuLjljYzk1NzZiZDZhZGFkMDE2
YzE3OThiNGE2MTgxMjc2YzdmZDVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTE1
Niw3ICsxMTU2LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKIAogICAgIGlmIChyZW5k
ZXJlci0+aXNCUigpKQotICAgICAgICBpbmxpbmVCb3ggPSAhY2FyZXRPZmZzZXQgPyB0b1JlbmRl
ckxpbmVCcmVhayhyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSA6IG51bGxwdHI7CisgICAg
ICAgIGlubGluZUJveCA9ICFjYXJldE9mZnNldCA/IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4o
KnJlbmRlcmVyKS5pbmxpbmVCb3hXcmFwcGVyKCkgOiBudWxscHRyOwogICAgIGVsc2UgaWYgKGlz
PFJlbmRlclRleHQ+KCpyZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgdGV4dFJlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKTsKICAgICAgICAgdGV4dFJlbmRlcmVyLmVu
c3VyZUxpbmVCb3hlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5h
bWVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAppbmRl
eCAzOTVjODg5NDc1ZGE2NTVmN2FkMjlmMGE2NDM5NWYyOGQ0Mzk5ZmU5Li41MWRmYzBiOWM4ODFl
NzJmMTFjOGQ4MWVjMTE1MzA5ZmVkY2JjNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0TmFtZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFt
ZWRGbG93LmNwcApAQCAtNzIsOCArNzIsOCBAQCBib29sIFdlYktpdE5hbWVkRmxvdzo6b3ZlcnNl
dCgpIGNvbnN0CiAgICAgaWYgKCFtX3BhcmVudEZsb3dUaHJlYWQgfHwgIW1fcGFyZW50Rmxvd1Ro
cmVhZC0+aGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQobV9wYXJlbnRGbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkpOwotICAgIHJldHVy
biBuYW1lZEZsb3dGcmFnbWVudC0+cmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9uT3ZlcnNl
dDsKKyAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50PigqbV9wYXJlbnRGbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkpOworICAg
IHJldHVybiBuYW1lZEZsb3dGcmFnbWVudC5yZWdpb25PdmVyc2V0U3RhdGUoKSA9PSBSZWdpb25P
dmVyc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaW5GbG93VGhyZWFkKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCkKQEAgLTEwNCwx
NCArMTA0LDE0IEBAIGludCBXZWJLaXROYW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCgp
IGNvbnN0CiAKICAgICBpbnQgY291bnROb25Qc2V1ZG9SZWdpb25zID0gLTE7CiAgICAgZm9yIChj
b25zdCBhdXRvJiByZW5kZXJSZWdpb24gOiByZWdpb25MaXN0KSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKTsKKyAgICAgICAgY29uc3QgYXV0byYgbmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lv
bik7CiAgICAgICAgIC8vIEZJWE1FOiBQc2V1ZG8tZWxlbWVudHMgYXJlIG5vdCBpbmNsdWRlZCBp
biB0aGUgbGlzdC4KICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGluY2x1ZGVkIHdoZW4gd2Ugd2ls
bCBwcm9wZXJseSBzdXBwb3J0IHRoZSBSZWdpb24gaW50ZXJmYWNlCiAgICAgICAgIC8vIGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVnaW9uLWludGVyZmFjZQotICAg
ICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQtPmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQorICAg
ICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQuaXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY291bnROb25Qc2V1ZG9SZWdpb25zKys7Ci0gICAg
ICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC0+cmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9u
RW1wdHkpCisgICAgICAgICsrY291bnROb25Qc2V1ZG9SZWdpb25zOworICAgICAgICBpZiAobmFt
ZWRGbG93RnJhZ21lbnQucmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9uRW1wdHkpCiAgICAg
ICAgICAgICByZXR1cm4gY291bnROb25Qc2V1ZG9SZWdpb25zOwogICAgIH0KICAgICByZXR1cm4g
LTE7CkBAIC0xMzUsMTUgKzEzNSwxNSBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBXZWJLaXROYW1l
ZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQoTm9kZSogY29udGVudE5vZGUpCiAgICAgaWYgKGlu
Rmxvd1RocmVhZChjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSwgbV9wYXJlbnRGbG93VGhyZWFkKSkg
ewogICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0ID0gbV9wYXJlbnRG
bG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYg
cmVuZGVyUmVnaW9uIDogcmVnaW9uTGlzdCkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudChyZW5kZXJSZWdpb24pOworICAgICAgICAgICAgY29uc3QgYXV0byYgbmFtZWRGbG93RnJh
Z21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lvbik7
CiAgICAgICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1lbnRzIGFyZSBub3QgaW5jbHVkZWQg
aW4gdGhlIGxpc3QuCiAgICAgICAgICAgICAvLyBUaGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiB3
ZSB3aWxsIHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRlcmZhY2UKICAgICAgICAgICAg
IC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVnaW9uLWludGVy
ZmFjZQotICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1BzZXVkb0VsZW1lbnRS
ZWdpb24oKSkKKyAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1BzZXVkb0VsZW1l
bnRSZWdpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICht
X3BhcmVudEZsb3dUaHJlYWQtPm9iamVjdEluRmxvd1JlZ2lvbihjb250ZW50Tm9kZS0+cmVuZGVy
ZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5hbWVk
Rmxvd0ZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICByZWdp
b25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0ZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgp
KTsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudEZsb3dUaHJlYWQtPm9iamVjdEluRmxvd1JlZ2lv
bihjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSwgJm5hbWVkRmxvd0ZyYWdtZW50KSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC5nZW5lcmF0aW5nRWxlbWVudCgpKTsK
KyAgICAgICAgICAgICAgICByZWdpb25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0ZyYWdtZW50
LmdlbmVyYXRpbmdFbGVtZW50KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTY1LDE0ICsxNjUsMTQgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gV2ViS2l0TmFtZWRGbG93
OjpnZXRSZWdpb25zKCkKIAogICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3Qg
PSBtX3BhcmVudEZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHJlbmRlclJlZ2lvbiA6IHJlZ2lvbkxpc3QpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZW5kZXJSZWdpb24pOworICAgICAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFn
bWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsK
ICAgICAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhcmUgbm90IGluY2x1ZGVkIGluIHRo
ZSBsaXN0LgogICAgICAgICAvLyBUaGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxsIHBy
b3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRlcmZhY2UKICAgICAgICAgLy8gaHR0cDovL2Rl
di53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMvI3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudC0+aXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkpCisgICAgICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1BzZXVkb0VsZW1lbnRSZWdpb24oKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRp
bmdFbGVtZW50KCkpOwotICAgICAgICByZWdpb25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0Zy
YWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsKKyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0Zy
YWdtZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICByZWdpb25FbGVtZW50cy5hcHBl
bmQoKm5hbWVkRmxvd0ZyYWdtZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOwogICAgIH0KIAogICAg
IHJldHVybiBTdGF0aWNFbGVtZW50TGlzdDo6YWRvcHQocmVnaW9uRWxlbWVudHMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA5ZjkzYTg0NmMyNDlkZmEy
MzFjMTUwOTRhYmUzMzFiMGZjOTQ1Nzg3Li44MGEwNmY5MDNmZTMzMzFlZjMzODBiYjA5MmY1OWZk
YWU1M2EzMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMTkxMiw5ICsxOTEyLDkgQEAgc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9k
ZSogbikKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdl
dChyZW5kZXJlciktPndpZGdldCgpOworICAgIFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgIHJldHVybiB3aWRnZXQgJiYgd2lk
Z2V0LT5pc0ZyYW1lVmlldygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAppbmRleCAzNDU0MmFkYjQwYjgwOTdmZjRhYjNhOGU3ZjZlOWM2OTNiOTQwZTEwLi42
MWQ5OGUxMDdmZmU1YzBkZTIyYTIxMWRjYmMyOTI3MzQ5ZWFkZDk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTU3LDE1ICs1NywxNiBAQCBQYXNzUmVmUHRy
PEhUTUxFbWJlZEVsZW1lbnQ+IEhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYQogCiBzdGF0aWMgaW5saW5lIFJlbmRlcldpZGdldCogZmluZFdpZGdldFJl
bmRlcmVyKGNvbnN0IE5vZGUqIG4pIAogewotICAgIGlmICghbi0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgZG8KKyAgICBpZiAoIW4tPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgZG8gewogICAgICAgICAg
ICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmhhc1RhZ05h
bWUob2JqZWN0VGFnKSk7CisgICAgICAgIH0gd2hpbGUgKG4gJiYgIWlzPEhUTUxPYmplY3RFbGVt
ZW50PigqbikpOworICAgIH0KIAotICAgIGlmIChuICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVu
ZGVyZXIoKS0+aXNXaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG4tPnJl
bmRlcmVyKCkpOworICAgIGlmIChuICYmIGlzPFJlbmRlcldpZGdldD4obi0+cmVuZGVyZXIoKSkp
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KG4tPnJlbmRlcmVyKCkpOwog
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJlbmRlcldpZGdldCog
SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyV2lkZ2V0TG9hZGluZ1BsdWdpbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggNTIwNDcy
NjQ5NDM1YThmNWJhNzNlNmM2YTNlYTA2MTZkZWFiYTYwMi4uYTg1ZTc5ZGQwZDYyMDdhMThmOTY5
YjU2NjA5OTVlNGMzY2Y2MmI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9jb250ZW50RnJhbWUoMCkKKyAgICAsIG1fY29u
dGVudEZyYW1lKG51bGxwdHIpCiAgICAgLCBtX3NhbmRib3hGbGFncyhTYW5kYm94Tm9uZSkKIHsK
IH0KQEAgLTQzLDkgKzQzLDkgQEAgUmVuZGVyV2lkZ2V0KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnJlbmRlcldpZGdldCgpIGNvbnN0CiB7CiAgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhU
TUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzCiAgICAgLy8gd2hl
biB1c2luZyBmYWxsYmFjayBjb250ZW50LgotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVy
ZXIoKS0+aXNXaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKCkpOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigp
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldp
ZGdldD4ocmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzZXRD
b250ZW50RnJhbWUoRnJhbWUqIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggMWZhOTBlYjMyOTk4YWQyZGNmYmEwNjdkOTkzZGViYTI2ZTI2MWE3Mi4u
MWRhYWIxOGI5M2M4ZDUxOTg0NzkzYjI2OWVhYTk1Njg4MDViNzBhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC00MjQ1LDggKzQyNDUsOCBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2l6ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRl
ZChNZWRpYVBsYXllciopCiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNW
aWRlbygpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dmlldygpLmNvbXBvc2l0b3IoKS5j
YW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcodG9SZW5kZXJWaWRlbygqcmVuZGVyZXIoKSkpOwor
ICAgIGlmIChpczxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiByZW5k
ZXJlcigpLT52aWV3KCkuY29tcG9zaXRvcigpLmNhbkFjY2VsZXJhdGVWaWRlb1JlbmRlcmluZyhk
b3duY2FzdDxSZW5kZXJWaWRlbz4oKnJlbmRlcmVyKCkpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCmluZGV4IGYyYWFjMWM0
NmM0NDVkNGM2ZWY5MTA0NzlkMTBkOTZlMzVlOTIxZjUuLjk0NTIxMGVlNGY4ZTU0MzkyYWMwYWZk
OTE1ZjU0NDU4NmJjOWRiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmNwcApAQCAtMjIwLDkgKzIyMCw5IEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkRWxlbWVu
dFN0YXRlQ2hhbmdlKCkKIAogUmVuZGVyTWV0ZXIqIEhUTUxNZXRlckVsZW1lbnQ6OnJlbmRlck1l
dGVyKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01ldGVy
KCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlck1ldGVyKHJlbmRlcmVyKCkpOwotICAgIHJldHVy
biB0b1JlbmRlck1ldGVyKGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFk
b3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVyKCkpOworICAgIGlmIChpczxSZW5kZXJNZXRlcj4o
cmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNZXRlcj4ocmVuZGVy
ZXIoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1ldGVyPihkZXNjZW5kYW50c09mVHlw
ZTxFbGVtZW50PigqdXNlckFnZW50U2hhZG93Um9vdCgpKS5maXJzdCgpLT5yZW5kZXJlcigpKTsK
IH0KIAogdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QqIHJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3Bw
CmluZGV4IDNhODE5ZGIyMTEwY2JhNDYxNGViMDYzMzI0Y2U0ZTQ0NjFiNDc3NWEuLjJkMTdlN2I5
ODIyODQ5NGJkOWNiOTk1M2YwZGNiZWRiYjllYTUzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0yNzUsOSArMjc1LDkgQEAgYm9vbCBIVE1MUGx1Z0lu
RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh1
c2VGYWxsYmFja0NvbnRlbnQoKSB8fCAhcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNFbWJl
ZGRlZE9iamVjdCgpKQorICAgIGlmICh1c2VGYWxsYmFja0NvbnRlbnQoKSB8fCAhaXM8UmVuZGVy
RW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuICF0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKCkpLT5pc1BsdWdpblVuYXZh
aWxhYmxlKCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKnJl
bmRlcmVyKCkpLmlzUGx1Z2luVW5hdmFpbGFibGUoKTsKIH0KIAogI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAKaW5kZXggYzFlYzI1NzE3MThiOGZjZmE4NmZjMjk5MDc4ZGM1ODUyMTlkOWY2ZC4u
YjYwMDg1ZGY5ZTUyMmRlZjIzMWU5Y2NjYjA5NTZlYWU2YTQ3Mjc0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC0xNDUsOSArMTQ1LDcg
QEAgUmVuZGVyRW1iZWRkZWRPYmplY3QqIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRlckVt
YmVkZGVkT2JqZWN0KCkgY29uc3QKIHsKICAgICAvLyBIVE1MT2JqZWN0RWxlbWVudCBhbmQgSFRN
TEVtYmVkRWxlbWVudCBtYXkgcmV0dXJuIGFyYml0cmFyeSByZW5kZXJlcnMKICAgICAvLyB3aGVu
IHVzaW5nIGZhbGxiYWNrIGNvbnRlbnQuCi0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJl
cigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBpczxSZW5kZXJF
bWJlZGRlZE9iamVjdD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVj
dD4ocmVuZGVyZXIoKSkgOiBudWxscHRyOwogfQogCiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmlzSW1hZ2VUeXBlKCkKQEAgLTY5Myw3ICs2OTEsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbihjb25zdCBVUkwmIHVybCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvJiByZW5kZXJlciA9IHRvUmVu
ZGVyRW1iZWRkZWRPYmplY3QoKnRoaXMtPnJlbmRlcmVyKCkpOworICAgIGF1dG8mIHJlbmRlcmVy
ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCp0aGlzLT5yZW5kZXJlcigpKTsKICAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRSZWN0ID0gcmVuZGVyZXIuY29udGVudEJveFJlY3QoKTsKICAg
ICBpbnQgY29udGVudFdpZHRoID0gY29udGVudFJlY3Qud2lkdGgoKTsKICAgICBpbnQgY29udGVu
dEhlaWdodCA9IGNvbnRlbnRSZWN0LmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOTgzNzEyNDY5ZTJmZTMwOTcxY2Q4ZTJiZWJlZWJk
MDI3NTY0NDg1ZS4uZjUwZmZjMGNkMjhhOWVkZGQxYzM1MzBlMTA3MzQyM2Y2MGYxYjVkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC03Miw5ICs3
Miw5IEBAIGJvb2wgSFRNTFByb2dyZXNzRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJl
cihjb25zdCBOb2RlJiBjaGlsZCkgY29uc3QKIAogUmVuZGVyUHJvZ3Jlc3MqIEhUTUxQcm9ncmVz
c0VsZW1lbnQ6OnJlbmRlclByb2dyZXNzKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlclByb2dy
ZXNzKHJlbmRlcmVyKCkpOwotICAgIHJldHVybiB0b1JlbmRlclByb2dyZXNzKGRlc2NlbmRhbnRz
T2ZUeXBlPEVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFkb3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVy
KCkpOworICAgIGlmIChpczxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlclByb2dyZXNzPihkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PigqdXNlckFn
ZW50U2hhZG93Um9vdCgpKS5maXJzdCgpLT5yZW5kZXJlcigpKTsKIH0KIAogdm9pZCBIVE1MUHJv
Z3Jlc3NFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9QbHVnaW5Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50
LmNwcAppbmRleCBiMjIwODdiNGMwODA5MzE3ZmMwYWZlNDlhNDc5ZDY3Nzk5MTUyZTIyLi5lZDBm
NjIyMmI0OWIyNTMwMWU2YWQ0ZmFmMzYzOTBmYjQ0ZTc3ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1BsdWdpbkRvY3VtZW50LmNwcApAQCAtMTU1LDExICsxNTUsOSBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50UGFyc2VyPiBQbHVnaW5Eb2N1bWVudDo6Y3JlYXRlUGFyc2VyKCkKIAogV2lkZ2V0KiBQbHVn
aW5Eb2N1bWVudDo6cGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAobV9wbHVnaW5FbGVtZW50ICYm
IG1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBBU1NFUlQobV9wbHVnaW5F
bGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOwotICAgICAgICByZXR1cm4g
dG9SZW5kZXJFbWJlZGRlZE9iamVjdChtX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpLT53aWRn
ZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKG1fcGx1Z2luRWxlbWVudCAmJiBt
X3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJFbWJlZGRlZE9iamVjdD4oKm1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkud2lkZ2V0KCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUGx1Z2luRG9jdW1lbnQ6OnNldFBsdWdp
bkVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRl
eCAyNzFmMDZhMzQ1OWRlMjMwNTgzMWQxOGU0MDhkOTk3M2RhMzdkYzIzLi40YzdiZDc1YTMzZGY3
Zjk1ZmJjOTcxOGJkZTU2NzI0ODhlMDBkMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC04NzIsOCArODcyLDggQEAg
dm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2
ZW50ICYmIHRpbWUgIT0gbWVkaWFDb250cm9sbGVyKCktPmN1cnJlbnRUaW1lKCkpCiAgICAgICAg
IG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZSh0aW1lKTsKIAotICAgIFJlbmRlclNs
aWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSk7Ci0gICAgaWYgKHNsaWRl
ciAmJiBzbGlkZXItPmluRHJhZ01vZGUoKSkKKyAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRv
d25jYXN0PFJlbmRlclNsaWRlcj4oKnJlbmRlcmVyKCkpOworICAgIGlmIChzbGlkZXIuaW5EcmFn
TW9kZSgpKQogICAgICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsK
IH0KIApAQCAtMTMzNyw5ICsxMzM3LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcyhib29sIGZvcmNlVXBkYXRlKQogICAgIGlmIChtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQogICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24tPmJvdW5kcygpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIW1lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKSB8fCAhbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5pc1ZpZGVvKCkp
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZpZGVvQm94ID0gdG9SZW5kZXJWaWRlbygq
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOworICAgICAgICB2aWRlb0JveCA9
IGRvd25jYXN0PFJlbmRlclZpZGVvPigqbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0Jv
eCgpOwogICAgIH0KIAogICAgIGlmICghZm9yY2VVcGRhdGUgJiYgbV92aWRlb0Rpc3BsYXlTaXpl
ID09IHZpZGVvQm94KQpAQCAtMTM2MywxNCArMTM2MywxNCBAQCBQYXNzUmVmUHRyPEltYWdlPiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXBy
ZXNlbgogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIAotICAgIGF1dG8gcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghcmVuZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHJlbmRlcmVy
KS0+bGF5ZXIoKTsKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CiAKICAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDE7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQu
Y3BwCmluZGV4IGU5ODNmMDdlMWVkYjAyNjllNmJiNjc3OWJhMmUzNjAwNTMyMDc5MjcuLmYwY2Vm
NDBkYjVlMGVmNWU2NzNiN2Y4ZjRiZjI3NjRhMTQxMGU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApAQCAtMTI5LDcg
KzEyOSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiB2b2lkIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
IGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXItPmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgdG9SZW5kZXJM
YXllck1vZGVsT2JqZWN0KHJlbmRlcmVyKS0+bGF5ZXIoKSwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKaW5kZXggODRkNDkyMjEwNTMyN2I5NmRhOTQ0ZDhkYjBkMzM5MWYyMTU3
MmM5Mi4uZTE0ZDFmYTcwMWZhMTFiNTEwYzQ0Y2VkZTJhMDRkNTBhZWRmNTI2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNzIyLDkgKzcy
Miw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JF
bGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgIH0KIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNv
bnRhaW5pbmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKLSAgICBpZiAoY29udGFpbmluZ0Zsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Zsb3dUaHJlYWQt
PmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPihjb250YWluaW5nRmxvd1RocmVhZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY29udGVudEZsb3dJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgY29udGVudEZsb3dJbmZvLT5zZXRTdHJpbmcoIm5hbWUiLCB0b1JlbmRlck5hbWVkRmxv
d1RocmVhZChjb250YWluaW5nRmxvd1RocmVhZCktPmZsb3dUaHJlYWROYW1lKCkpOworICAgICAg
ICBjb250ZW50Rmxvd0luZm8tPnNldFN0cmluZygibmFtZSIsIGRvd25jYXN0PFJlbmRlck5hbWVk
Rmxvd1RocmVhZD4oKmNvbnRhaW5pbmdGbG93VGhyZWFkKS5mbG93VGhyZWFkTmFtZSgpKTsKICAg
ICAgICAgZWxlbWVudEluZm8tPnNldE9iamVjdCgiY29udGVudEZsb3dJbmZvIiwgY29udGVudEZs
b3dJbmZvLnJlbGVhc2UoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcAppbmRleCA4YTE2MTQyYTQ0MDg1ZmJiMzQzNjIyNzc3N2NhYTYzZDI4YmRjOTRi
Li41YzM3Nzg5MWI2NDI2ZDViYjVlN2U5NDNmNDYxODg4ZjZiOWExMTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTMyOCwxMCArMzI4LDEwIEBAIEZyYW1l
KiBTdWJmcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCYgb3du
ZXJFbGVtZW50LCBjb25zdCBVCiAgICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBlbnRp
cmVseT8gbV9pc0NvbXBsZXRlIG5vcm1hbGx5IGdldHMgc2V0IHRvIGZhbHNlIHdoZW4gYSBsb2Fk
IGlzIGNvbW1pdHRlZC4KICAgICBmcmFtZS0+bG9hZGVyKCkuc3RhcnRlZCgpOwogICAgCi0gICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC5yZW5kZXJlcigpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gb3duZXJFbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgRnJhbWVWaWV3KiB2
aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzV2lk
Z2V0KCkgJiYgdmlldykKLSAgICAgICAgdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT5zZXRXaWRn
ZXQodmlldyk7CisgICAgaWYgKGlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpICYmIHZpZXcpCisg
ICAgICAgIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKS5zZXRXaWRnZXQodmlldyk7
CiAgICAgCiAgICAgbV9mcmFtZS5sb2FkZXIoKS5jaGVja0NhbGxJbXBsaWNpdENsb3NlKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDhiOGY2M2NiZjU3Mzc2OTk1YWQxZjUzZjQ3YjRh
MWU5MTg0ZWMyM2MuLjVkZGNhNDIyYmE0ZDY1OTExNzVlMzFmNTE3ODVkZDIzM2Q4YzNiYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC03MzUsMTcgKzczNSwxNyBAQCBSZW5kZXJXaWRnZXQqIEZy
YW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50OwogICAgIGlmICghb3duZXJFbGVtZW50KQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIG9iamVjdCA9IG93bmVyRWxlbWVudC0+cmVuZGVy
ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byogb2JqZWN0ID0gb3duZXJF
bGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IElmIDxvYmplY3Q+IGlzIGV2
ZXIgZml4ZWQgdG8gZGlzYXNzb2NpYXRlIGl0c2VsZiBmcm9tIGZyYW1lcwogICAgIC8vIHRoYXQg
aXQgaGFzIHN0YXJ0ZWQgYnV0IGNhbmNlbGVkLCB0aGVuIHRoaXMgY2FuIHR1cm4gaW50byBhbiBB
U1NFUlQKICAgICAvLyBzaW5jZSBtX293bmVyRWxlbWVudCB3b3VsZCBiZSAwIHdoZW4gdGhlIGxv
YWQgaXMgY2FuY2VsZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTg1Ci0gICAgaWYgKCFvYmplY3QtPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiB0b1JlbmRlcldpZGdldChvYmplY3QpOworICAgIGlmICghaXM8UmVu
ZGVyV2lkZ2V0Pigqb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlcldpZGdldD4ob2JqZWN0KTsKIH0KIAogRnJhbWUqIEZyYW1lOjpmcmFt
ZUZvcldpZGdldChjb25zdCBXaWRnZXQqIHdpZGdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmNzg5MGQ0NWMyOThjOGYzYWQ0NjRjNmRmZjNmOTQ4OGJkM2ZlZmNlLi4zMzAyNWEw
NTZjMzRiZTU2Yzk2YWE2MGY0MzUwOWU5MGRkZjVmNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0xMjM3LDcgKzEyMzcsNyBAQCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wg
YWxsb3dTdWJ0cmVlKQogCiAgICAgICAgIGF1dG9TaXplSWZFbmFibGVkKCk7CiAKLSAgICAgICAg
bV9uZWVkc0Z1bGxSZXBhaW50ID0gIXN1YnRyZWUgJiYgKG1fZmlyc3RMYXlvdXQgfHwgdG9SZW5k
ZXJWaWV3KCpyb290KS5wcmludGluZygpKTsKKyAgICAgICAgbV9uZWVkc0Z1bGxSZXBhaW50ID0g
IXN1YnRyZWUgJiYgKG1fZmlyc3RMYXlvdXQgfHwgZG93bmNhc3Q8UmVuZGVyVmlldz4oKnJvb3Qp
LnByaW50aW5nKCkpOwogCiAgICAgICAgIGlmICghc3VidHJlZSkgewogICAgICAgICAgICAgU2Ny
b2xsYmFyTW9kZSBoTW9kZTsKQEAgLTEzMjUsNyArMTMyNSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojps
YXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAgICAgICAgIGlmIChzdWJ0cmVlKQogICAgICAgICAg
ICAgcm9vdC0+dmlldygpLnBvcExheW91dFN0YXRlKCpyb290KTsKIAotICAgICAgICBtX2xheW91
dFJvb3QgPSAwOworICAgICAgICBtX2xheW91dFJvb3QgPSBudWxscHRyOwogCiAgICAgICAgIC8v
IENsb3NlIGJsb2NrIGhlcmUgdG8gZW5kIHRoZSBzY29wZSBvZiBjaGFuZ2VTY2hlZHVsaW5nRW5h
YmxlZCBhbmQgbGF5b3V0U3RhdGVEaXNhYmxlci4KICAgICB9CkBAIC0xMzM0LDcgKzEzMzQsNyBA
QCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlKQogCiAgICAgYm9vbCBu
ZWVkZWRGdWxsUmVwYWludCA9IG1fbmVlZHNGdWxsUmVwYWludDsKIAotICAgIGlmICghc3VidHJl
ZSAmJiAhdG9SZW5kZXJWaWV3KCpyb290KS5wcmludGluZygpKQorICAgIGlmICghc3VidHJlZSAm
JiAhZG93bmNhc3Q8UmVuZGVyVmlldz4oKnJvb3QpLnByaW50aW5nKCkpCiAgICAgICAgIGFkanVz
dFZpZXdTaXplKCk7CiAKICAgICBtX2xheW91dFBoYXNlID0gSW5Qb3N0TGF5b3V0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggOTQ4M2Y5M2IzN2Vi
OWQwMDVjM2E4YzliY2FlNmNkY2QxOGRlZWMxNy4uNzUwYjg4YTE1NTQyZDdmNzdhNWZmYzRhOTE1
MmM0ZGNkYWY2YWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJH
dGsuY3BwCkBAIC02MSwxMCArNjEsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1l
bnRWaWV3KCkKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAv
LyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVy
T2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCkt
PnJlbmRlcmVyKCkgOiAwOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkp
CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50
YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlmICghaXM8UmVuZGVyV2lk
Z2V0Pih0YXJnZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKKyAg
ICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0
PigqdGFyZ2V0KS53aWRnZXQoKSk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0
TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQppbmRleCA4MzdhN2E5MjQ4Yzcw
MjgxZTE5ZTg0MzY1YTgwOWU4ZmU4MGY0MDFiLi4wMmYwOTViNDEwYmYyZTA4Y2FkNWQ5ZDZkMjM2
NTJkMWVhZGEyOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhh
bmRsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9T
Lm1tCkBAIC0xNjksMTUgKzE2OSwxNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBhdXRvIHRh
cmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAg
ICBhdXRvKiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCkt
PnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEb3VibGUtY2xpY2sgZXZlbnRzIGRv
bid0IGV4aXN0IGluIENvY29hLiBTaW5jZSBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dCgpIHdpbGwKICAgICAvLyBqdXN0IHBhc3MgY3VycmVudEV2ZW50IGRvd24gdG8gdGhlIHdpZGdl
dCwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIGl0IGZvciBldmVudHMgdGhhdAogICAgIC8vIGRvbid0
IGNvcnJlc3BvbmQgdG8gQ29jb2EgZXZlbnRzLiBUaGUgbW91c2Vkb3duL3VwcyB3aWxsIGhhdmUg
YWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBhcwogICAgIC8vIHBhcnQgb2YgdGhlIHByZXNzZWQvcmVs
ZWFzZWQgaGFuZGxpbmcuCi0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRv
UmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKSk7
CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKQEAgLTM2MywxMyArMzYzLDEzIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0
Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCisgICAgICAg
ICAgICBhdXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAo
IWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIp
LT53aWRnZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UmVuZGVy
V2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgICAgICAgICAgaWYgKCF3aWRnZXQgfHwg
IXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKSkpCisgICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25F
dmVudFRvV2lkZ2V0KGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBtX21vdXNlRG93bldhc0luU3ViZnJh
bWUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNDJhYmMzODg1YTMwZWY1Yjk0MDgzMTdjYjdm
NzA0ZTEyMTk3ODhhZi4uOGJlOWYyMmFjOTkxYWFkOTczNjY4NWM2NTYxZGIwMGJmZTRlZjZlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtMTQzLDE1
ICsxNDMsMTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgYXV0byB0YXJnZXQgPSBldmVudC50
YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiBudWxscHRyOwot
ICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgYXV0byogdGFyZ2V0
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDog
bnVsbHB0cjsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRG91YmxlLWNsaWNrIGV2ZW50cyBkb24ndCBleGlzdCBpbiBD
b2NvYS4gU2luY2UgcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoKSB3aWxsCiAgICAg
Ly8ganVzdCBwYXNzIGN1cnJlbnRFdmVudCBkb3duIHRvIHRoZSB3aWRnZXQsIHdlIGRvbid0IHdh
bnQgdG8gY2FsbCBpdCBmb3IgZXZlbnRzIHRoYXQKICAgICAvLyBkb24ndCBjb3JyZXNwb25kIHRv
IENvY29hIGV2ZW50cy4gVGhlIG1vdXNlZG93bi91cHMgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBw
YXNzZWQgb24gYXMKICAgICAvLyBwYXJ0IG9mIHRoZSBwcmVzc2VkL3JlbGVhc2VkIGhhbmRsaW5n
LgotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0
YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0
KGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkud2lkZ2V0KCkpOwogfQogCiBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0
KiByZW5kZXJXaWRnZXQpCkBAIC0zNjEsMTMgKzM2MSwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IGV2ZQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICAg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICAgICAgYXV0byogcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJXaWRn
ZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Cisg
ICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRl
cmVyKS53aWRnZXQoKTsKICAgICAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzRnJh
bWVWaWV3KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldChyZW5kZXJl
cikpKQorICAgICAgICAgICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChk
b3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgbV9tb3VzZURvd25XYXNJblN1YmZyYW1lID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzg1LDExICs3ODUsMTEgQEAgc3RhdGljIFdpZGdl
dCogd2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCiAgICAgaWYgKCFl
dmVudFRhcmdldCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyRWxl
bWVudCogdGFyZ2V0ID0gZXZlbnRUYXJnZXQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCF0YXJnZXQg
fHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICBhdXRvKiB0YXJnZXQgPSBldmVudFRhcmdldC0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHRhcmdldCkt
PndpZGdldCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndp
ZGdldCgpOwogfQogCiBzdGF0aWMgU2Nyb2xsVmlldyogc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0
KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5jcHAKaW5kZXggZGJlNGQwMTExNDkzODE4MzMyNTlkNTJlYTk2NGFlN2M5
ZjllNjc0OC4uOWZlNjdkMjJmZDkyZTI2Zjc1Mzg3YmIyYTQ5MjQ3MTU5NmNkMzg5MSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCkBAIC0zMDEs
MTEgKzMwMSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVTdGF0ZUZyb21Gb3Jt
KEV2YXNfT2JqZWN0KiBvYmplY3QsIGNvbnN0IENvbnRyb2xTdAogdm9pZCBSZW5kZXJUaGVtZUVm
bDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlm
ICh0eXBlID09IFNsaWRlclZlcnRpY2FsIHx8IHR5cGUgPT0gU2xpZGVySG9yaXpvbnRhbCkgewot
ICAgICAgICBpZiAoIW9iamVjdC5pc1NsaWRlcigpKQorICAgICAgICBpZiAoIWlzPFJlbmRlclNs
aWRlcj4ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsgLy8gcHJvYmFibHkgaGF2ZSAtd2Vi
a2l0LWFwcGVhcmFuY2U6IHNsaWRlci4uCiAKLSAgICAgICAgY29uc3QgUmVuZGVyU2xpZGVyKiBy
ZW5kZXJTbGlkZXIgPSB0b1JlbmRlclNsaWRlcigmb2JqZWN0KTsKLSAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSByZW5kZXJTbGlkZXItPmVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxSZW5kZXJTbGlkZXI+KG9iamVjdCkuZWxlbWVu
dCgpOwogICAgICAgICBkb3VibGUgdmFsdWVSYW5nZSA9IGlucHV0Lm1heGltdW0oKSAtIGlucHV0
Lm1pbmltdW0oKTsKIAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4gbXNn
ID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3BlcmF0
b3IgbmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91YmxlKSkp
KTsKQEAgLTMyMyw3ICszMjIsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExT
dGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3QgUmVuZGVyT2JqZWN0JiBvYgogICAgICAgICBt
c2ctPnZhbFsxXSA9IChpbnB1dC52YWx1ZUFzTnVtYmVyKCkgLSBpbnB1dC5taW5pbXVtKCkpIC8g
dmFsdWVSYW5nZTsKICAgICAgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9zZW5kKGVkamUsIEVESkVf
TUVTU0FHRV9GTE9BVF9TRVQsIDAsIG1zZy5nZXQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09
IFByb2dyZXNzQmFyKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9n
cmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mob2JqZWN0KTsKKyAgICAgICAgY29uc3QgYXV0byYgcmVu
ZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ob2JqZWN0KTsKIAogICAgICAg
ICBpbnQgbWF4ID0gcmVjdC53aWR0aCgpOwogICAgICAgICBkb3VibGUgdmFsdWUgPSByZW5kZXJQ
cm9ncmVzcy5wb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IDM1NDc5MGNmMzkyYTE4MzdlYWI3NDViMDg2YjgwMjBmZDdjYmVlY2QuLjVj
NTkzNzgwZDc4NjRmNTFlNWEwNzVhMTljOTEyZDA1ZjUyNzJmODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTI0OCw4ICsyNDgsOCBAQCBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIAog
c3RhdGljIGNvbnN0IEZvbnQmIGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKQogewotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmlu
ZSgpICYmIHJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJD
b21iaW5lVGV4dCYgdGV4dENvbWJpbmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQocmVu
ZGVyZXIpOworICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJp
bmVUZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVSZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAgIGlm
ICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0
ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KQEAgLTQ1NCwxMCAr
NDU0LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6ZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wmCiAgICAgaWYgKCFjb250YWluaW5nQmxv
Y2stPmlzUnVieUJhc2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgdGV4dCBpcyBu
b3QgaW5zaWRlIGEgcnVieSBiYXNlLCBzbyBpdCBkb2VzIG5vdCBoYXZlIHJ1YnkgdGV4dCBvdmVy
IGl0LgogCi0gICAgaWYgKCFjb250YWluaW5nQmxvY2stPnBhcmVudCgpLT5pc1J1YnlSdW4oKSkK
KyAgICBpZiAoIWlzPFJlbmRlclJ1YnlSdW4+KCpjb250YWluaW5nQmxvY2stPnBhcmVudCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENhbm5vdCBnZXQgdGhlIHJ1YnkgdGV4dC4KIAotICAg
IFJlbmRlclJ1YnlUZXh0KiBydWJ5VGV4dCA9IHRvUmVuZGVyUnVieVJ1bihjb250YWluaW5nQmxv
Y2stPnBhcmVudCgpKS0+cnVieVRleHQoKTsKKyAgICBSZW5kZXJSdWJ5VGV4dCogcnVieVRleHQg
PSBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPigqY29udGFpbmluZ0Jsb2NrLT5wYXJlbnQoKSkucnVi
eVRleHQoKTsKIAogICAgIC8vIFRoZSBlbXBoYXNpcyBtYXJrcyBvdmVyIGFyZSBzdXBwcmVzc2Vk
IG9ubHkgaWYgdGhlcmUgaXMgYSBydWJ5IHRleHQgYm94IGFuZCBpdCBub3QgZW1wdHkuCiAgICAg
cmV0dXJuICFydWJ5VGV4dCB8fCAhcnVieVRleHQtPmhhc0xpbmVzKCk7CkBAIC01MTksNyArNTE5
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGJveE9yaWdpbi5tb3ZlQnkobG9jYWxQ
YWludE9mZnNldCk7CiAgICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBGbG9hdFNpemUo
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOwogCi0gICAgUmVuZGVyQ29tYmluZVRl
eHQqIGNvbWJpbmVkVGV4dCA9IGxpbmVTdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIHJlbmRlcmVy
KCkuaXNDb21iaW5lVGV4dCgpICYmIHRvUmVuZGVyQ29tYmluZVRleHQocmVuZGVyZXIoKSkuaXND
b21iaW5lZCgpID8gJnRvUmVuZGVyQ29tYmluZVRleHQocmVuZGVyZXIoKSkgOiAwOworICAgIFJl
bmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQgPSBsaW5lU3R5bGUuaGFzVGV4dENvbWJpbmUo
KSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVy
Q29tYmluZVRleHQ+KHJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSA/ICZkb3duY2FzdDxSZW5kZXJD
b21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgOiBudWxscHRyOwogCiAgICAgYm9vbCBzaG91bGRSb3Rh
dGUgPSAhaXNIb3Jpem9udGFsKCkgJiYgIWNvbWJpbmVkVGV4dDsKICAgICBpZiAoc2hvdWxkUm90
YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggMThmNTFl
MDQ3YmVhZDk2M2QwZjQwNzU1MDU5NmM5NjdmZjM3MWM0OC4uMTdkMDYwMTViMDBmZTYzODQ4ZDlk
NzIzMTFhMDIxNjEyNzZlMGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwCkBAIC0xMTIsOCArMTEyLDggQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKHN0ZDo6
dW5pcXVlX3B0cjxMYXlvdXRTdGF0ZT4gbmV4dCwgUmVuZGVyQm94KiByZW5kZXJlciwKICAgICBt
X2xheW91dERlbHRhWVNhdHVyYXRlZCA9IG1fbmV4dC0+bV9sYXlvdXREZWx0YVlTYXR1cmF0ZWQ7
CiAjZW5kaWYKIAotICAgIGlmIChsaW5lR3JpZCgpICYmIChsaW5lR3JpZCgpLT5zdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gcmVuZGVyZXItPnN0eWxlKCkud3JpdGluZ01vZGUoKSkgJiYgcmVuZGVy
ZXItPmlzUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCi0gICAgICAgIHRvUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkKHJlbmRlcmVyKS0+Y29tcHV0ZUxpbmVHcmlkUGFnaW5hdGlvbk9y
aWdpbigqdGhpcyk7CisgICAgaWYgKGxpbmVHcmlkKCkgJiYgKGxpbmVHcmlkKCktPnN0eWxlKCku
d3JpdGluZ01vZGUoKSA9PSByZW5kZXJlci0+c3R5bGUoKS53cml0aW5nTW9kZSgpKSAmJiBpczxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCpyZW5kZXJlcikpCisgICAgICAgIGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKnJlbmRlcmVyKS5jb21wdXRlTGluZUdyaWRQ
YWdpbmF0aW9uT3JpZ2luKCp0aGlzKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgZ3JpZCB0
byB0cmFjaywgdGhlbiBhZGQgaXQgdG8gb3VyIHNldC4KICAgICBpZiAocmVuZGVyZXItPnN0eWxl
KCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkKCkgJiYgaXM8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKaW5kZXggMmQ4Y2RjYjFmZGYxZWRlODhhYmRjNzg2NjBkMTcwZDY4OWVlOTA0Zi4u
N2RlMTgxYzgzN2E4MWJjZTE5YTFkNTliODRhMWY0ZGRiZTk1YWVhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC03MDUsOCArNzA1LDggQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBS
ZW5kZXJCbG9jayogY2gKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjaGlsZEZsb3dUaHJlYWQgPSBj
aGlsZC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChjaGlsZEZsb3dUaHJl
YWQgJiYgY2hpbGRGbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQotICAgICAg
ICB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChjaGlsZEZsb3dUaHJlYWQpLT5yZW1vdmVGbG93Q2hp
bGRJbmZvKGNoaWxkKTsKKyAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihjaGlsZEZs
b3dUaHJlYWQpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpjaGls
ZEZsb3dUaHJlYWQpLnJlbW92ZUZsb3dDaGlsZEluZm8oY2hpbGQpOwogCiAgICAgcGFyZW50LnJl
bW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBjaGlsZC0+aGFzTGF5ZXIoKSA/IE5vdGlmeUNoaWxk
cmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICBjaGlsZC0+bW92ZUFsbENoaWxkcmVuVG8o
JnBhcmVudCwgbmV4dFNpYmxpbmcsIGNoaWxkLT5oYXNMYXllcigpKTsKQEAgLTEyNjgsOCArMTI2
OCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlvdXQoKQogCiAgICAgLy8gTWFr
ZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRlbnQgaWYgd2Ug
YXJlIGEgZmxvdyB0aHJlYWQgaW4gYSBzaW1wbGlmaWVkIGxheW91dC4KICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUg
bGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVu
ZGVyRmxvd1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5
QnJlYWtBZnRlckNvbnRlbnQoY2xpZW50TG9naWNhbEJvdHRvbSgpKTsKKyAgICBpZiAoaXM8UmVu
ZGVyRmxvd1RocmVhZD4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFk
PigqdGhpcykuYXBwbHlCcmVha0FmdGVyQ29udGVudChjbGllbnRMb2dpY2FsQm90dG9tKCkpOwog
CiAgICAgLy8gTGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGlmIG91ciBwb3NpdGlvbmVk
IGNoaWxkIGJpdCBpcyBzZXQuCiAgICAgLy8gQWxzbywgaWYgYW4gYWJzb2x1dGUgcG9zaXRpb24g
ZWxlbWVudCBpbnNpZGUgYSByZWxhdGl2ZSBwb3NpdGlvbmVkIGNvbnRhaW5lciBtb3ZlcywgYW5k
IHRoZSBhYnNvbHV0ZSBlbGVtZW50IGhhcyBhIGZpeGVkIHBvc2l0aW9uCkBAIC0xNTgwLDcgKzE1
ODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICAgICAgYm9vbCBkaWRDbGlw
VG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyICYmIG5h
bWVkRmxvd0ZyYWdtZW50ICYmIHBhaW50SW5mby5wYWludENvbnRhaW5lci0+aXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQoKSkgeworICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmIGlz
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4ocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKSkgewogICAg
ICAgICAgICAgICAgIC8vIElmIHRoaXMgYm94IGdvZXMgYmV5b25kIHRoZSBjdXJyZW50IHJlZ2lv
biwgdGhlbiBtYWtlIHN1cmUgbm90IHRvIG92ZXJmbG93IHRoZSByZWdpb24uCiAgICAgICAgICAg
ICAgICAgLy8gVGhpcyAob3ZlcmZsb3dpbmcgcmVnaW9uIFggYWx0b3VnaCBhbHNvIGZyYWdtZW50
ZWQgdG8gcmVnaW9uIFgrMSkgY291bGQgaGFwcGVuIHdoZW4gb25lIG9mIHRoaXMgYm94J3MgY2hp
bGRyZW4KICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd3MgcmVnaW9uIFggYW5kIGlzIGFuIHVu
c3BsaXR0YWJsZSBlbGVtZW50IChsaWtlIGFuIGltYWdlKS4KQEAgLTE1ODksNyArMTU4OSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKICAgICAgICAgICAgICAgICBkaWRDbGlwVG9SZWdpb24gPSB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAodG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKS0+ZGVjb3JhdGlvbnNDbGlwUmVjdEZvckJv
eEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGRvd25jYXN0PFJlbmRlck5hbWVkRmxv
d1RocmVhZD4oKnBhaW50SW5mby5wYWludENvbnRhaW5lcikuZGVjb3JhdGlvbnNDbGlwUmVjdEZv
ckJveEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dGcmFnbWVudCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpOwpAQCAtMTg5OCw5ICsxODk4LDkgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQm
IHIKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0Zy
YWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgaWYgKHBhaW50
SW5mbyAmJiBuYW1lZEZsb3dGcmFnbWVudCAmJiBwYWludEluZm8tPnBhaW50Q29udGFpbmVyLT5p
c1JlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIGlmIChwYWludEluZm8gJiYgbmFtZWRGbG93RnJh
Z21lbnQgJiYgaXM8UmVuZGVyRmxvd1RocmVhZD4oKnBhaW50SW5mby0+cGFpbnRDb250YWluZXIp
KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkg
Zmxvd2VkIGludG8gdGhlIHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIXRvUmVu
ZGVyRmxvd1RocmVhZChwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0U2hvdWxkRnJh
Z21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQorICAgICAgICBpZiAo
IWRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS5v
YmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjQ0Miw3ICsyNDQyLDcg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0g
dG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsK
KyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhy
ZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZsb3dUaHJlYWQtPmN1cnJl
bnRSZWdpb24oKSkgOiBudWxscHRyOwogICAgIC8vIElmIHdlIGFyZSBub3cgc2VhcmNoaW5nIGlu
c2lkZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAogICAgIC8vIGlzIGJlaW5nIGZy
YWdtZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYg
IWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVk
Rmxvd0ZyYWdtZW50KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAKaW5kZXggOTE5N2E5YmJlMjhhOTczYjVkNDVmMTdiOTdjNGUzZTVkMzNkNTNjOC4uY2Yw
NTkwMDRmNTAzYTliMmRmYzQ5MzAxYTFkMDAzMmQ5Nzk3MTIyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTUwMSw4ICs1MDEsOCBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0IHBhZ2VMb2dpY2FsSAogCiAgICAgLy8gQmVmb3JlIHVwZGF0aW5nIHRoZSBmaW5hbCBz
aXplIG9mIHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJlYWsgaXMgYXBwbGll
ZCBhZnRlciB0aGUgY29udGVudC4KICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHNpemUgaW5mb3Jt
YXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRvLWhlaWdodCByZWdp
b24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAg
ICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5QnJlYWtBZnRlckNvbnRlbnQob2xk
Q2xpZW50QWZ0ZXJFZGdlKTsKKyAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykuYXBwbHlCcmVha0FmdGVy
Q29udGVudChvbGRDbGllbnRBZnRlckVkZ2UpOwogCiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgp
OwogICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwpAQCAtMjgyNiw4
ICsyODI2LDggQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
OwotICAgIGlmIChpc1JlbmRlclZpZXcoKSkKLSAgICAgICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0
b0xheW91dFNpemUodG9SZW5kZXJWaWV3KCp0aGlzKS5mcmFtZVZpZXcoKS5zY3JvbGxQb3NpdGlv
bigpKTsKKyAgICBpZiAoaXM8UmVuZGVyVmlldz4oKnRoaXMpKQorICAgICAgICBhZGp1c3RlZExv
Y2F0aW9uICs9IHRvTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJWaWV3PigqdGhpcykuZnJhbWVW
aWV3KCkuc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgYXV0byBi
ZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CkBAIC0zNzI0LDggKzM3MjQsOCBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5n
ZShib29sJiByZWxheW91dENoaWxkcgogICAgICAgICBmbG93VGhyZWFkLT5zZXRDb2x1bW5IZWln
aHRBdmFpbGFibGUoc3RkOjptYXg8TGF5b3V0VW5pdD4oY29sdW1uSGVpZ2h0LCAwKSk7CiAgICAg
ICAgIGlmIChvbGRIZWlnaHRBdmFpbGFibGUgIT0gZmxvd1RocmVhZC0+Y29sdW1uSGVpZ2h0QXZh
aWxhYmxlKCkpCiAgICAgICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyk7CisgICAgfSBlbHNlIGlmIChp
czxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpIHsKKyAgICAgICAgUmVuZGVyRmxvd1RocmVhZCYg
Zmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKTsKIAogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gYWx3YXlzIG1ha2Ugc3VyZSB3ZSBoYXZlIGEg
cGFnZSBsb2dpY2FsIGhlaWdodCwgaWYgc2FpZCBoZWlnaHQKICAgICAgICAgLy8gaXMga25vd24u
IFRoZSBwYWdlIGxvZ2ljYWwgaGVpZ2h0IHRoaW5nIGluIExheW91dFN0YXRlIGlzIG1lYW5pbmds
ZXNzIGZvciBmbG93CkBAIC0zNzM2LDkgKzM3MzYsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5nZShib29sJiByZWxheW91dENoaWxk
cgogICAgICAgICAvLyBpdCdzIHVua25vd24sIHdlIG5lZWQgdG8gcHJldmVudCB0aGUgcGFnaW5h
dGlvbiBjb2RlIGZyb20gYXNzdW1pbmcgcGFnZSBicmVha3MgZXZlcnl3aGVyZQogICAgICAgICAv
LyBhbmQgdGhlcmVieSBlYXRpbmcgZXZlcnkgdG9wIG1hcmdpbi4gSXQgc2hvdWxkIGJlIHRyaXZp
YWwgdG8gY2xlYW4gdXAgYW5kIGdldCByaWQgb2YgdGhpcwogICAgICAgICAvLyBoYWNrIG9uY2Ug
dGhlIG9sZCBtdWx0aWNvbCBpbXBsZW1lbnRhdGlvbiBpcyBnb25lLgotICAgICAgICBwYWdlTG9n
aWNhbEhlaWdodCA9IGZsb3dUaHJlYWQtPmlzUGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpID8gTGF5
b3V0VW5pdCgxKSA6IExheW91dFVuaXQoMCk7CisgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0g
Zmxvd1RocmVhZC5pc1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSA/IExheW91dFVuaXQoMSkgOiBM
YXlvdXRVbml0KDApOwogCi0gICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IGZsb3dU
aHJlYWQtPnBhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkID0gZmxvd1RocmVhZC5wYWdlTG9naWNhbFNpemVDaGFuZ2VkKCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCmluZGV4IDRmNGE5ZjUxNzM0MThiMDAzZDcwMTA1ZGQ1MmQ3MTI5NDQwMDU0M2UuLjAz
YWZjMTVhYTU2NjYwNTNjODlkOTVjZmU4NjZkODY1Y2E0YjhhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MzQsNyAr
NzM0LDcgQEAgQmlkaVJ1biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9u
UG9zaXRpb25zRm9yU2VnbWVudChSb290SW5saW5lQm8KICAgICAgICAgICAgIHNldExvZ2ljYWxX
aWR0aEZvclRleHRSdW4obGluZUJveCwgcnVuLCAmcmVuZGVyVGV4dCwgdG90YWxMb2dpY2FsV2lk
dGgsIGxpbmVJbmZvLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlLCB3b3Jk
TWVhc3VyZW1lbnRzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgZW5jb3Vu
dGVyZWRKdXN0aWZpZWRSdWJ5ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyUnVi
eVJ1bj4ocnVuLT5yZW5kZXJlcigpKSAmJiB0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBydW4gIT0g
dHJhaWxpbmdTcGFjZVJ1biAmJiB0b1JlbmRlclJ1YnlSdW4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5
QmFzZSgpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJl
cigpKSAmJiB0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1biAm
JiBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCkpIHsK
ICAgICAgICAgICAgICAgICBhdXRvKiBydWJ5QmFzZSA9IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+
KHJ1bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKTsKICAgICAgICAgICAgICAgICBpZiAocnVieUJh
c2UtPmZpcnN0Um9vdEJveCgpICYmICFydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCktPm5leHRSb290
Qm94KCkgJiYgcnVuLT5yZW5kZXJlcigpLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBsZWFmQ2hpbGQgPSBydWJ5QmFzZS0+Zmly
c3RSb290Qm94KCktPmZpcnN0TGVhZkNoaWxkKCk7IGxlYWZDaGlsZDsgbGVhZkNoaWxkID0gbGVh
ZkNoaWxkLT5uZXh0TGVhZkNoaWxkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKaW5kZXggNTFmZDdkNTJkODk2MzM4YmU3NjUyY2MzYTU0MzI1YzVkYzk3NDk5MC4uZTli
NzFjMmI4YzU4ZGIyOTZmMjhmZjNlMjUyZWUxMDU4NjgwMjY5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTgwNCw5ICs4MDQsOSBAQCBib29sIFJlbmRlckJveDo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlckJsb2NrKiBuZXh0U2Ny
b2xsQmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAobmV4dFNjcm9sbEJsb2NrICYm
IG5leHRTY3JvbGxCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgIGlmIChp
czxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KG5leHRTY3JvbGxCbG9jaykpIHsKICAgICAgICAgQVNT
RVJUKHN0YXJ0Qm94KTsKLSAgICAgICAgbmV4dFNjcm9sbEJsb2NrID0gdG9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQobmV4dFNjcm9sbEJsb2NrKS0+ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJv
eCh3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCwgKnN0YXJ0Qm94KTsKKyAgICAgICAgbmV4dFNjcm9s
bEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqbmV4dFNjcm9sbEJsb2Nr
KS5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50
LCAqc3RhcnRCb3gpOwogICAgIH0KIAogICAgIGlmIChuZXh0U2Nyb2xsQmxvY2sgJiYgIW5leHRT
Y3JvbGxCbG9jay0+aXNSZW5kZXJWaWV3KCkpCkBAIC0xMTY2LDcgKzExNjYsNyBAQCBib29sIFJl
bmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdAogICAgIH0KIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdp
b25Ub1VzZSA9IGZsb3dUaHJlYWQgPyB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJl
YWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
VG9Vc2UgPSBmbG93VGhyZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwogCiAgICAgLy8gSWYgdGhlIGJv
eCBpcyBub3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29p
bmcgZnVydGhlci4KICAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNo
b3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKQEAgLTE2NDAsNyAr
MTY0MCw3IEBAIHZvaWQgUmVuZGVyQm94OjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyIGlt
YWdlLCBjb25zdCBJbnRSZWN0KikKIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0Zv
ckltYWdlKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgRmlsbExheWVyKiBsYXllcnMsIGJv
b2wgZHJhd2luZ0JhY2tncm91bmQpCiB7CiAgICAgTGF5b3V0UmVjdCByZW5kZXJlclJlY3Q7Ci0g
ICAgUmVuZGVyQm94KiBsYXllclJlbmRlcmVyID0gMDsKKyAgICBSZW5kZXJCb3gqIGxheWVyUmVu
ZGVyZXIgPSBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1ckxheWVyID0g
bGF5ZXJzOyBjdXJMYXllcjsgY3VyTGF5ZXIgPSBjdXJMYXllci0+bmV4dCgpKSB7CiAgICAgICAg
IGlmIChjdXJMYXllci0+aW1hZ2UoKSAmJiBpbWFnZSA9PSBjdXJMYXllci0+aW1hZ2UoKS0+ZGF0
YSgpICYmIGN1ckxheWVyLT5pbWFnZSgpLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpKSB7CkBAIC0xNjUwLDggKzE2NTAsOCBAQCBib29sIFJlbmRlckJveDo6cmVwYWlu
dExheWVyUmVjdHNGb3JJbWFnZShXcmFwcGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXll
cgogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tncm91bmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9ICZ2aWV3KCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBydyA9IHRvUmVuZGVyVmlldygqbGF5ZXJSZW5kZXJlcikuZnJhbWVWaWV3
KCkuY29udGVudHNXaWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJoID0g
dG9SZW5kZXJWaWV3KCpsYXllclJlbmRlcmVyKS5mcmFtZVZpZXcoKS5jb250ZW50c0hlaWdodCgp
OworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJ3ID0gZG93bmNhc3Q8UmVuZGVyVmll
dz4oKmxheWVyUmVuZGVyZXIpLmZyYW1lVmlldygpLmNvbnRlbnRzV2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCByaCA9IGRvd25jYXN0PFJlbmRlclZpZXc+KCpsYXllclJl
bmRlcmVyKS5mcmFtZVZpZXcoKS5jb250ZW50c0hlaWdodCgpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyUmVjdCA9IExheW91dFJlY3QoLWxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIC1sYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwK
QEAgLTE2NjQsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0Zv
ckltYWdlKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgRmlsbExheWVyCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5IGdlb21ldHJ5OwotICAg
ICAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnko
MCwgY3VyTGF5ZXIsIHJlbmRlcmVyUmVjdCwgZ2VvbWV0cnkpOworICAgICAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkobnVsbHB0ciwgY3VyTGF5
ZXIsIHJlbmRlcmVyUmVjdCwgZ2VvbWV0cnkpOwogICAgICAgICAgICAgaWYgKGdlb21ldHJ5Lmhh
c05vbkxvY2FsR2VvbWV0cnkoKSkgewogICAgICAgICAgICAgICAgIC8vIFJhdGhlciB0aGFuIGlu
Y3VyIHRoZSBjb3N0cyBvZiBjb21wdXRpbmcgdGhlIHBhaW50Q29udGFpbmVyIGZvciByZW5kZXJl
cnMgd2l0aCBmaXhlZCBiYWNrZ3JvdW5kcwogICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRv
IGdldCB0aGUgcmlnaHQgZGVzdFJlY3QsIGp1c3QgcmVwYWludCB0aGUgZW50aXJlIHJlbmRlcmVy
LgpAQCAtMTk1OCw3ICsxOTU4LDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2FsVG9Db250YWlu
ZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW4KICAgICBpZiAo
IWNvbnRhaW5lci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgfHwgIWZpeGVkUG9zaXRp
b25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgY29udGFpbmVyLT5t
YXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2Rl
LCB3YXNGaXhlZCk7CiAgICAgZWxzZQotICAgICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250
YWluZXIodG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KGNvbnRhaW5lciksIHRyYW5zZm9ybVN0YXRl
LCBtb2RlLCB3YXNGaXhlZCk7CisgICAgICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5l
cihkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0Pihjb250YWluZXIpLCB0cmFuc2Zvcm1T
dGF0ZSwgbW9kZSwgd2FzRml4ZWQpOwogfQogCiBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlckJv
eDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBh
bmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0CkBA
IC0zMDk3LDE1ICszMDk3LDE1IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vCiAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrJiBjYiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Js
b2NrKTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICghcmVnaW9uKSB7Ci0gICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5p
c1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250YWluaW5nQmxv
Y2spLT5jb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpOworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluaW5nQmxvY2spICYmICFjaGVja0ZvclBlcnBl
bmRpY3VsYXJXcml0aW5nTW9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxXaWR0aE9mRmly
c3RSZWdpb24oKTsKICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7CiAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi5vZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBjYlJlZ2lv
biA9IGNiLnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBpZiAoY2JSZWdpb24pCiAgICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJC
b3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChyZWdpb24gJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250
YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgUmVuZGVyUmVn
aW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25z
KHJlZ2lvbik7CiAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhj
b250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCmluZGV4IGQ0MjkzMjkyZTJiNjgwMWVkNzYxYWUzZGYw
MWJiMjE1ODNkOGZmZDcuLmE1OTU4ZDQwODQyM2JjZjg4ZjcyMTU1MmM5YzM0NDEwZWNhZjI2NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCkBAIC01
Nyw4ICs1Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzRm9udFVwZGF0ZSA6IDE7CiB9
OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyQ29tYmluZVRleHQsIGlzQ29tYmlu
ZVRleHQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyQ29tYmluZVRleHQsIGlzQ29tYmluZVRleHQoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCA0Y2EwZTBiZjdm
MDhmMDgxOTQyNDdlZmQ3ODYyODcwM2VjNjYyYTA3Li5kOTk1MjY2MThjNDhjMWZhYWE2NDk3ZWE2
NDE1MzFlNGY0ODRmMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCkBAIC0yNTYsNyArMjU2LDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6
OmFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWcKICAgICAg
ICAgLy8gVGV4dCBub2RlcyBzaGFyZSBzdHlsZSB3aXRoIHRoZWlyIHBhcmVudHMgYnV0IHRyYW5z
Zm9ybXMgZG9uJ3QgYXBwbHkgdG8gdGhlbSwKICAgICAgICAgLy8gaGVuY2UgdGhlICFpc1RleHQo
KSBjaGVjay4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gdHJhbnNmb3JtcyBhcmUgdGFrZW4gaW50
byBhY2NvdW50IGZvciBvdmVyZmxvdywgd2Ugd2lsbCBuZWVkIHRvIGRvIGEgbGF5b3V0LgotICAg
ICAgICBpZiAoIWhhc0xheWVyKCkgfHwgIXRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+
bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgaWYgKCFoYXNMYXllcigpIHx8ICFk
b3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+aXNDb21wb3Np
dGVkKCkpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IGF0IGxlYXN0IFNpbXBsaWZp
ZWRMYXlvdXQsIGJ1dCBpZiBQb3NpdGlvbmVkTW92ZW1lbnRPbmx5IGlzIGFscmVhZHkgc2V0CiAg
ICAgICAgICAgICAvLyB0aGVuIHdlIGFjdHVhbGx5IG5lZWQgU2ltcGxpZmllZExheW91dEFuZFBv
c2l0aW9uZWRNb3ZlbWVudC4KICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkKQEAgLTI3Miwx
NCArMjcyLDE0IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50OjphZGp1c3RTdHlsZURp
ZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAgLy8gSWYgb3BhY2l0eSBj
aGFuZ2VkLCBhbmQgd2UgYXJlIG5vdCBjb21wb3NpdGVkLCBuZWVkIHRvIHJlcGFpbnQgKGFsc28K
ICAgICAvLyBpZ25vcmluZyB0ZXh0IG5vZGVzKQogICAgIGlmIChjb250ZXh0U2Vuc2l0aXZlUHJv
cGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU9wYWNpdHkpIHsKLSAgICAgICAgaWYg
KCFoYXNMYXllcigpIHx8ICF0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCkt
PmlzQ29tcG9zaXRlZCgpKQorICAgICAgICBpZiAoIWhhc0xheWVyKCkgfHwgIWRvd25jYXN0PFJl
bmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkKICAg
ICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZXBhaW50TGF5ZXI7CiAgICAgICAgIGVs
c2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKQogICAgICAgICAg
ICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7CiAgICAgfQogCiAgICAg
aWYgKChjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
eUZpbHRlcikgJiYgaGFzTGF5ZXIoKSkgewotICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0
b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCk7CisgICAgICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXll
cigpOwogICAgICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSB8fCBsYXllci0+cGFpbnRz
V2l0aEZpbHRlcnMoKSkKICAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZXBhaW50
TGF5ZXI7CiAgICAgICAgIGVsc2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0
ZUxheWVyKQpAQCAtMjkwLDcgKzI5MCw3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50
OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAg
Ly8gc3R5bGUgY2hhbmdpbmcsIHNpbmNlIGl0IGRlcGVuZHMgb24gd2hldGhlciB3ZSBkZWNpZGUg
dG8gY29tcG9zaXRlIHRoZXNlIGVsZW1lbnRzLiBXaGVuIHRoZQogICAgIC8vIGxheWVyIHN0YXR1
cyBvZiBvbmUgb2YgdGhlc2UgZWxlbWVudHMgY2hhbmdlcywgd2UgbmVlZCB0byBmb3JjZSBhIGxh
eW91dC4KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCAmJiBpc1JlbmRlckxh
eWVyTW9kZWxPYmplY3QoKSkgewotICAgICAgICBpZiAoaGFzTGF5ZXIoKSAhPSB0b1JlbmRlckxh
eWVyTW9kZWxPYmplY3QodGhpcyktPnJlcXVpcmVzTGF5ZXIoKSkKKyAgICAgICAgaWYgKGhhc0xh
eWVyKCkgIT0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLnJlcXVpcmVz
TGF5ZXIoKSkKICAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CiAgICAg
fQogCkBAIC02NTgsNyArNjU4LDcgQEAgc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlckUKICAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gbmV3T2JqZWN0LT5wYXJlbnQoKS0+ZmluZE5leHRMYXllcihwYXJl
bnRMYXllciwgbmV3T2JqZWN0KTsKICAgICAgICAgICAgIG5ld09iamVjdCA9IG51bGxwdHI7CiAg
ICAgICAgIH0KLSAgICAgICAgcGFyZW50TGF5ZXItPmFkZENoaWxkKHRvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdChyZW5kZXJlcikubGF5ZXIoKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICBwYXJlbnRM
YXllci0+YWRkQ2hpbGQoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXIp
LmxheWVyKCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjgy
LDcgKzY4Miw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKFJlbmRlckxheWVy
KiBwYXJlbnRMYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhhc0xheWVyKCkpIHsK
LSAgICAgICAgcGFyZW50TGF5ZXItPnJlbW92ZUNoaWxkKHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCh0aGlzKS0+bGF5ZXIoKSk7CisgICAgICAgIHBhcmVudExheWVyLT5yZW1vdmVDaGlsZChkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTY5Niw3ICs2OTYsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6Om1v
dmVMYXllcnMoUmVuZGVyTGF5ZXIqIG9sZFBhcmVudCwgUmVuZGVyTGF5ZXIqIG5ld1BhcmVudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhhc0xheWVyKCkpIHsKLSAgICAgICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpOwor
ICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqdGhpcykubGF5ZXIoKTsKICAgICAgICAgQVNTRVJUKG9sZFBhcmVudCA9PSBsYXllci0+
cGFyZW50KCkpOwogICAgICAgICBpZiAob2xkUGFyZW50KQogICAgICAgICAgICAgb2xkUGFyZW50
LT5yZW1vdmVDaGlsZChsYXllcik7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogICAgIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0Qml0KHRydWUp
OwogICAgIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KCk7CiAgICAgaWYgKGhhc0xheWVy
KCkpIHsKLSAgICAgICAgaWYgKG9sZFN0eWxlICYmIHN0eWxlKCkuZGlmZlJlcXVpcmVzTGF5ZXJS
ZXBhaW50KCpvbGRTdHlsZSwgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKSkpCisgICAgICAgIGlmIChvbGRTdHlsZSAmJiBzdHlsZSgpLmRpZmZS
ZXF1aXJlc0xheWVyUmVwYWludCgqb2xkU3R5bGUsIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KCp0aGlzKS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkpCiAgICAgICAgICAgICBzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0TGF5
ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7CkBAIC0xMzMx
LDEwICsxMzMxLDEwIEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWludEZvclBhdXNlZEltYWdl
QW5pbWF0aW9uc0lmTmVlZGVkKGNvbnN0IEludFJlY3QmIHZpc2liCiAKIFJlbmRlck5hbWVkRmxv
d1RocmVhZCogUmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcigpCiB7
Ci0gICAgYXV0byByZW5kZXJlciA9IHRoaXM7Ci0gICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKQorICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpczsKKyAgICB3aGlsZSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhaXM8UmVuZGVyTmFtZWRGbG93VGhy
ZWFkPigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsK
LSAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFk
KCkgPyB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJl
dHVybiBpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4ocmVuZGVyZXIpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5kZXJF
bGVtZW50OjpoYXNDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApp
bmRleCA4M2M3YzM3MjkxMDYyMzk5Yzk4ZDgyYTY2OGUzMmFkZTA3MTJlZTdiLi4xNGYwYTM4ZWQ5
NjNjOTU2MTUyYTg5YjJiM2U1MDEzYzJlMGI0MTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApAQCAtMTAxLDggKzEwMSw2IEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbjsKIH07CiAKLVJFTkRF
Ul9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJFbWJlZGRlZE9iamVjdCwgaXNFbWJlZGRlZE9iamVj
dCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
UkVOREVSX09CSkVDVChSZW5kZXJFbWJlZGRlZE9iamVjdCwgaXNFbWJlZGRlZE9iamVjdCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGQy
YjAwODBhOTYyZDE3YTk5MDMwMzdmODFkNDAxNjZjYzA4ZWVlZTcuLjhlMDA2ZDcxMDA1YTVkZjMz
ODhhMmU1MzhhZTA1NWExZjgyNGU1NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTE1MCw4ICsxNTAsOCBAQCB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygpCiAgICAgICAgICAgICAgICAgLy8gQWxzbywgaWYgd2Ug
aGF2ZSBhdXRvLWhlaWdodCByZWdpb25zIHdlIGNhbid0IGFzc3VtZSBtX3JlZ2lvbnNIYXZlVW5p
Zm9ybUxvZ2ljYWxIZWlnaHQgdG8gYmUgdHJ1ZSBpbiB0aGUgZmlyc3QgcGhhc2UKICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGRvbid0IGhhdmUgdGhl
aXIgaGVpZ2h0IGNvbXB1dGVkIHlldC4KICAgICAgICAgICAgICAgICBpZiAoaW5NZWFzdXJlQ29u
dGVudExheW91dFBoYXNlKCkgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFn
bWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgbmFtZWRGbG93RnJhZ21lbnQtPnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZsb3dG
cmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50JiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZWRG
bG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBh
Z2VMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgICAgICBtX3JlZ2lvbnNIYXZlVW5p
Zm9ybUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIxNyw3
ICsyMTcsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgpCiBib29sIFJlbmRlckZs
b3dUaHJlYWQ6Omhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAg
Zm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgaWYgKHRvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+bGF5ZXJPd25lcigpLmxheWVyKCktPmhhc0NvbXBv
c2l0aW5nRGVzY2VuZGFudCgpKQorICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KCpyZWdpb24pLmxheWVyT3duZXIoKS5sYXllcigpLT5oYXNDb21wb3NpdGluZ0Rl
c2NlbmRhbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjQwLDEy
ICsyNDAsMTIgQEAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlckZsb3dUaHJlYWQ6OnJl
Z2lvbkZvckNvbXBvc2l0ZWRMYXllcihSZW5kZXJMYXllciYKICAgICAgICAgUmVuZGVyUmVnaW9u
KiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9u
ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKGdldFJlZ2lvblJhbmdlRm9yQm94KGNoaWxkTGF5ZXIu
cmVuZGVyQm94KCksIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQotICAgICAgICAgICAgcmV0dXJu
IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoc3RhcnRSZWdpb24pOworICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihzdGFydFJlZ2lvbik7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UnbGwgaGF2ZSByZWdpb24gcmFu
Z2VzIGZvciBpbmxpbmVzIGFzIHdlbGwuCiAgICAgTGF5b3V0UG9pbnQgZmxvd1RocmVhZE9mZnNl
dCA9IGZsb29yZWRMYXlvdXRQb2ludChjaGlsZExheWVyLnJlbmRlcmVyKCkubG9jYWxUb0NvbnRh
aW5lclBvaW50KExheW91dFBvaW50KCksIHRoaXMsIEFwcGx5Q29udGFpbmVyRmxpcCkpOwotICAg
IHJldHVybiB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoMCwg
ZmxpcEZvcldyaXRpbmdNb2RlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93VGhyZWFk
T2Zmc2V0LnkoKSA6IGZsb3dUaHJlYWRPZmZzZXQueCgpKSwgdHJ1ZSkpOworICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uQXRCbG9ja09mZnNldCgwLCBm
bGlwRm9yV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRP
ZmZzZXQueSgpIDogZmxvd1RocmVhZE9mZnNldC54KCkpLCB0cnVlKSk7CiB9CiAKIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRSZWdpb25Gb3JDb21wb3Np
dGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGNoaWxkTGF5ZXIpIGNvbnN0CkBAIC03MTMsOCArNzEzLDgg
QEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0
b21TdHlsZShjb25zdCBSZW5kZXJCb3gqIGIKICAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJh
bmdlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIShpbnNpZGVPbGRSZWdpb25SYW5nZSAmJiBpbnNp
ZGVOZXdSZWdpb25SYW5nZSkpIHsKLSAgICAgICAgICAgIGlmIChyZWdpb24tPmlzUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KHJlZ2lvbiktPmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihib3gpOworICAgICAgICAgICAg
aWYgKGlzPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKSkKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuY2xlYXJPYmplY3RT
dHlsZUluUmVnaW9uKGJveCk7CiAgICAgICAgICAgICBpZiAocmVnaW9uLT5yZW5kZXJCb3hSZWdp
b25JbmZvKGJveCkpCiAgICAgICAgICAgICAgICAgcmVnaW9uLT5yZW1vdmVSZW5kZXJCb3hSZWdp
b25JbmZvKGJveCk7CiAgICAgICAgIH0KQEAgLTk3OCwxMCArOTc4LDEwIEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQoUmVuZGVyUmVn
aW9uKiBzdGFydFJlCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byByZWdpb25JdGVy
ID0gc3RhcnRSZWdpb24gPyBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbikgOiBtX3JlZ2lv
bkxpc3QuYmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyByZWdpb25JdGVyICE9IGVu
ZDsgKytyZWdpb25JdGVyKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKnJlZ2lv
bkl0ZXI7Ci0gICAgICAgIGlmIChyZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKTsKLSAgICAgICAgICAgIG5hbWVkRmxvd0Zy
YWdtZW50LT5zZXRDb21wdXRlZEF1dG9IZWlnaHQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VM
b2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBSZW5kZXJSZWdpb24mIHJlZ2lvbiA9ICoqcmVnaW9u
SXRlcjsKKyAgICAgICAgaWYgKHJlZ2lvbi5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7CisgICAg
ICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgbmFtZWRGbG93RnJhZ21lbnQgPSBkb3du
Y2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uKTsKKyAgICAgICAgICAgIG5hbWVk
Rmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZsb3dGcmFnbWVudC5tYXhQ
YWdlTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEwMjAsNyArMTAy
MCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0
aW9uUmVjdChjb25zdCBSZW5kZXJSZWdpb24qIGxhCiAgICAgZm9yIChhdXRvJiByZWdpb24gOiBt
X3JlZ2lvbkxpc3QpIHsKICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdo
dCByZWdpb24sIGNsZWFyIHRoZSBjb21wdXRlZEF1dG9IZWlnaHQgdmFsdWUuCiAgICAgICAgIGlm
IChlbXB0eVJlZ2lvbnNTZWdtZW50ICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkK
LSAgICAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+Y2xlYXJDb21w
dXRlZEF1dG9IZWlnaHQoKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PigqcmVnaW9uKS5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgpOwogCiAgICAgICAgIExh
eW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7
CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91
dFVuaXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSAtIGxvZ2ljYWxIZWln
aHQsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSk7CkBAIC0x
MDgyLDI0ICsxMDgyLDI0IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9u
QnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0CiAgICAgTGF5b3V0VW5p
dCBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiA9IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkIC0g
Y3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZDsKIAogICAgIGlmIChyZWdpb24tPmhhc0F1
dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pOworICAg
ICAgICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PigqcmVnaW9uKTsKIAogICAgICAgICAvLyBBIGZvcmNlZCBicmVhayBjYW4gYXBwZWFy
IG9ubHkgaW4gYW4gYXV0by1oZWlnaHQgcmVnaW9uIHRoYXQgZGlkbid0IGhhdmUgYSBmb3JjZWQg
YnJlYWsgYmVmb3JlLgogICAgICAgICAvLyBUaGlzIEFTU0VSVCBpcyBhIGdvb2QtZW5vdWdoIGhl
dXJpc3RpYyB0byB2ZXJpZnkgdGhlIGFib3ZlIGNvbmRpdGlvbi4KLSAgICAgICAgQVNTRVJUKG5h
bWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpID09IG5hbWVkRmxvd0ZyYWdt
ZW50LT5jb21wdXRlZEF1dG9IZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFn
bWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpID09IG5hbWVkRmxvd0ZyYWdtZW50LmNvbXB1dGVk
QXV0b0hlaWdodCgpKTsKIAotICAgICAgICBtYXBUb1VzZS5zZXQoYnJlYWtDaGlsZCwgbmFtZWRG
bG93RnJhZ21lbnQpOworICAgICAgICBtYXBUb1VzZS5zZXQoYnJlYWtDaGlsZCwgJm5hbWVkRmxv
d0ZyYWdtZW50KTsKIAogICAgICAgICBoYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwogCiAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBoZWlnaHQgcHJldGVuZGluZyB0aGF0IHRoZSBv
ZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiBpcyB0aGUgbG9naWNhbEhlaWdodCBmb3IgdGhlIGF1
dG8taGVpZ2h0IHJlZ2lvbi4KLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Db21wdXRlZEF1dG9I
ZWlnaHQgPSBuYW1lZEZsb3dGcmFnbWVudC0+Y29uc3RyYWluQ29udGVudEJveExvZ2ljYWxIZWln
aHRCeU1pbk1heChvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbik7CisgICAgICAgIExheW91dFVu
aXQgcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gbmFtZWRGbG93RnJhZ21lbnQuY29uc3RyYWlu
Q29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lv
bik7CiAKICAgICAgICAgLy8gVGhlIG5ldyBoZWlnaHQgb2YgdGhpcyByZWdpb24gbmVlZHMgdG8g
YmUgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsIHZhbHVlLCB0aGUgbWF4IGhlaWdodC4gQSBmb3Jj
ZWQgYnJlYWsgaXMgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgaW5pdGlhbAogICAgICAgICAv
LyBoZWlnaHQgb2YgYW4gYXV0by1oZWlnaHQgcmVnaW9uIGJlc2lkZXMgY29udGVudCBlbmRpbmcu
Ci0gICAgICAgIEFTU0VSVChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0gbmFtZWRGbG93RnJh
Z21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQocmVnaW9uQ29t
cHV0ZWRBdXRvSGVpZ2h0IDw9IG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0
KCkpOwogCi0gICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21wdXRlZEF1dG9IZWlnaHQo
cmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0KTsKKyAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0
Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7CiAKICAgICAgICAg
Y3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZCArPSByZWdpb25Db21wdXRlZEF1dG9IZWln
aHQ7CiAgICAgfSBlbHNlCkBAIC0xNDA5LDkgKzE0MDksOSBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmFkZFJlZ2lvbnNPdmVyZmxvd0Zyb21DaGlsZChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29u
c3QgUgogICAgICAgICAvLyBJbiBvcmRlciB0byBiZWhhdmUgaW4gYSBzaW1pbGFyIG1hbm5lciB0
byB0aGUgbm9uLXJlZ2lvbnMgY2FzZSwgY29udGVudCBvdmVyZmxvd2luZyB0aGUgYm94CiAgICAg
ICAgIC8vIGZsb3dlZCBpbnRvIHRoZSByZWdpb24gbXVzdCBiZSBwYWludGVkIG9uIHRvcCBvZiB0
aGUgcmVnaW9uJ3MgcGFkZGluZyBhbmQgdGhlIGJveCdzIG1hcmdpbi4KICAgICAgICAgLy8gU2Vl
IGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDE0SmFuLzAw
ODkuaHRtbAotICAgICAgICBpZiAoYm94LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKmJveCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChib3ggPT0gdGhpcyk7Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGZy
YWdtZW50Q29udGFpbmVyID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5mcmFn
bWVudENvbnRhaW5lcigpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93JiBmcmFnbWVudENv
bnRhaW5lciA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5mcmFn
bWVudENvbnRhaW5lcigpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBzcGFjaW5nQWZ0ZXJMYXlv
dXQgPSBmcmFnbWVudENvbnRhaW5lci5wYWRkaW5nQWZ0ZXIoKSArIGNoaWxkLT5tYXJnaW5BZnRl
cigpOwogICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoZnJhZ21lbnRDb250YWluZXIuc2Nyb2xsc092ZXJmbG93WSgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCA4NGQwMzU2
ZDliZDRkYWQyNzlhODc3NmY2YjMxZmNmMzkwYTVlYThjLi42MjNlYmZhMjE2MTE0NTA0MDY4Zjk1
MjNjN2JjNzk0ZTNiYzA1MDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmgKQEAgLTM3Niw4ICszNzYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2xh
eWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSA6IDE7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVf
Q0FTVFMoUmVuZGVyRmxvd1RocmVhZCwgaXNSZW5kZXJGbG93VGhyZWFkKCkpCi0KIC8vIFRoaXMg
c3RydWN0dXJlIGlzIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuCiAjaWZu
ZGVmIE5ERUJVRwogdGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8UmVuZGVyUmVnaW9u
Kj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMDhmN2I1
NDczZWEwYTczZmNhNWMyYzRjMTJlOWZkZWU1ZTc1OTI0Ny4uMmEwNmE1MWVmNWNmMjk1YjJlZjg4
YTIyMTcwYTRlZmFhYmZhMTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0xNDk3LDcgKzE0OTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzZXRGaWx0ZXJC
YWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiAgICAg
fQogICAgIAogICAgIGlmIChwYXJlbnRMYXllci0+aXNSb290TGF5ZXIoKSkgewotICAgICAgICB0
b1JlbmRlclZpZXcocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnJlcGFpbnRWaWV3UmVjdGFuZ2xl
KHBhcmVudExheWVyUmVjdCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlclZpZXc+KHBhcmVudExh
eWVyLT5yZW5kZXJlcigpKS5yZXBhaW50Vmlld1JlY3RhbmdsZShwYXJlbnRMYXllclJlY3QpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTY1Miw3ICsxNjUyLDcgQEAgc3RhdGlj
IExheW91dFJlY3QgdHJhbnNwYXJlbmN5Q2xpcEJveChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IFJlbmRlckxheWUKICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayB1cCB0aGUgdHJh
bnNmb3JtZWQgZXh0ZW50IGFjcm9zcyBvdXIgY29sdW1ucy4KICAgICAgICAgLy8gU3BsaXQgb3Vy
IGJveCB1cCBpbnRvIHRoZSBhY3R1YWwgZnJhZ21lbnQgYm94ZXMgdGhhdCByZW5kZXIgaW4gdGhl
IGNvbHVtbnMvcGFnZXMgYW5kIHVuaXRlIHRob3NlIHRvZ2V0aGVyIHRvCiAgICAgICAgIC8vIGdl
dCBvdXIgdHJ1ZSBib3VuZGluZyBib3guCi0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQmIGVuY2xv
c2luZ0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQocGFnaW5hdGlvbkxheWVyLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgYXV0byYgZW5jbG9zaW5nRmxvd1RocmVhZCA9IGRvd25jYXN0PFJl
bmRlckZsb3dUaHJlYWQ+KHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIHJl
c3VsdCA9IGVuY2xvc2luZ0Zsb3dUaHJlYWQuZnJhZ21lbnRzQm91bmRpbmdCb3gocmVzdWx0KTsK
ICAgICAgICAgcmVzdWx0Lm1vdmUocGFnaW5hdGlvbkxheWVyLT5vZmZzZXRGcm9tQW5jZXN0b3Io
cm9vdExheWVyKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTkwLDggKzE5OTAsOCBA
QCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBhY2N1bXVsYXRlT2Zmc2V0VG93YXJk
c0FuY2VzdG9yKGNvbnN0IFJlbmRlckxheQogCiAgICAgaWYgKGFkanVzdEZvckNvbHVtbnMgPT0g
UmVuZGVyTGF5ZXI6OkFkanVzdEZvckNvbHVtbnMpIHsKICAgICAgICAgaWYgKFJlbmRlckxheWVy
KiBwYXJlbnRMYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhcmVu
dExheWVyLT5yZW5kZXJlcigpLmlzUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpIHsKLSAg
ICAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHRvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkKHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5waHlzaWNhbFRyYW5zbGF0aW9uRnJv
bUZsb3dUb1JlZ2lvbihsb2NhdGlvbik7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkPihwYXJlbnRMYXllci0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZD4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9t
Rmxvd1RvUmVnaW9uKGxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAocmVnaW9uKQogICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbi5tb3ZlQnkocmVnaW9uLT50b3BMZWZ0TG9jYXRpb24o
KSArIC1wYXJlbnRMYXllci0+cmVuZGVyQm94KCktPnRvcExlZnRMb2NhdGlvbigpKTsKICAgICAg
ICAgICAgIH0KQEAgLTQzMDQsNyArNDMwNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RG
cmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAg
ICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkID0gbGF5ZXJCb3VuZGlu
Z0JveCA/ICpsYXllckJvdW5kaW5nQm94IDogYm91bmRpbmdCb3gocGFnaW5hdGlvbkxheWVyLCBv
ZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CiAgICAgbGF5ZXJCb3VuZGluZ0JveEluRmxvd1Ro
cmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQucmVjdCgpKTsKICAgICAK
LSAgICBSZW5kZXJGbG93VGhyZWFkJiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9SZW5kZXJGbG93
VGhyZWFkKHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7CisgICAgYXV0byYgZW5jbG9zaW5n
Rmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHBhZ2luYXRpb25MYXllci0+
cmVuZGVyZXIoKSk7CiAgICAgUmVuZGVyTGF5ZXIqIHBhcmVudFBhZ2luYXRpb25MYXllciA9IHBh
Z2luYXRpb25MYXllci0+cGFyZW50KCktPmVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJl
ZShyb290TGF5ZXIsIGluY2x1c2lvbk1vZGUpOwogICAgIExheWVyRnJhZ21lbnRzIGFuY2VzdG9y
RnJhZ21lbnRzOwogICAgIGlmIChwYXJlbnRQYWdpbmF0aW9uTGF5ZXIpIHsKQEAgLTQ2MjcsNyAr
NDYyNyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRp
bmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKICAgICBBU1NF
UlQoIXJlbmRlcmVyKCkudmlldygpLm5lZWRzTGF5b3V0KCkpOwogCi0gICAgTGF5b3V0UmVjdCBo
aXRUZXN0QXJlYSA9IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpID8gdG9SZW5kZXJGbG93
VGhyZWFkKCZyZW5kZXJlcigpKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiByZW5kZXJlcigpLnZp
ZXcoKS5kb2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNPdXRP
ZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5k
ZXJlcigpKS52aXN1YWxPdmVyZmxvd1JlY3QoKSA6IHJlbmRlcmVyKCkudmlldygpLmRvY3VtZW50
UmVjdCgpOwogICAgIGlmICghcmVxdWVzdC5pZ25vcmVDbGlwcGluZygpKQogICAgICAgICBoaXRU
ZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNv
bnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKIApAQCAtNDYzNyw3ICs0
NjM3LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgogICAgICAgICAvLyByZXR1cm4gb3Vyc2Vs
dmVzLiBXZSBkbyB0aGlzIHNvIG1vdXNlIGV2ZW50cyBjb250aW51ZSBnZXR0aW5nIGRlbGl2ZXJl
ZCBhZnRlciBhIGRyYWcgaGFzIAogICAgICAgICAvLyBleGl0ZWQgdGhlIFdlYlZpZXcsIGFuZCBz
byBoaXQgdGVzdGluZyBvdmVyIGEgc2Nyb2xsYmFyIGhpdHMgdGhlIGNvbnRlbnQgZG9jdW1lbnQu
CiAgICAgICAgIGlmICghcmVxdWVzdC5pc0NoaWxkRnJhbWVIaXRUZXN0KCkgJiYgKHJlcXVlc3Qu
YWN0aXZlKCkgfHwgcmVxdWVzdC5yZWxlYXNlKCkpICYmIGlzUm9vdExheWVyKCkpIHsKLSAgICAg
ICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUmVuZGVyVmll
dyhyZW5kZXJlcigpKS5mbGlwRm9yV3JpdGluZ01vZGUoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkp
KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGRv
d25jYXN0PFJlbmRlclZpZXc+KHJlbmRlcmVyKCkpLmZsaXBGb3JXcml0aW5nTW9kZShoaXRUZXN0
TG9jYXRpb24ucG9pbnQoKSkpOwogICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSB0aGlzOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNDY3NSw3ICs0Njc1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjplbmNsb3NpbmdGbG93VGhyZWFkQW5jZXN0b3IoKSBjb25zdAogCiBib29sIFJlbmRlckxh
eWVyOjppc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSBj
b25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpLmlzUmVuZGVyRmxvd1RocmVhZCgpICYmIHRv
UmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS5jb2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJS
ZWdpb25zKCk7CisgICAgcmV0dXJuIGlzPFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpICYm
IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLmNvbGxlY3RzR3JhcGhpY3NM
YXllcnNVbmRlclJlZ2lvbnMoKTsKIH0KIAogLy8gQ29tcHV0ZSB0aGUgei1vZmZzZXQgb2YgdGhl
IHBvaW50IGluIHRoZSB0cmFuc2Zvcm1TdGF0ZS4KQEAgLTU2NjIsNyArNTY2Miw3IEBAIExheW91
dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rv
ckxheWVyLCBjb25zdCBMYXlvCiAgICAgICAgIC8vIGdldCBvdXIgdHJ1ZSBib3VuZGluZyBib3gu
CiAgICAgICAgIHJlc3VsdC5tb3ZlKGNoaWxkTGF5ZXItPm9mZnNldEZyb21BbmNlc3RvcihwYWdp
bmF0aW9uTGF5ZXIpKTsKIAotICAgICAgICBSZW5kZXJGbG93VGhyZWFkJiBlbmNsb3NpbmdGbG93
VGhyZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7
CisgICAgICAgIGF1dG8mIGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSBkb3duY2FzdDxSZW5kZXJGbG93
VGhyZWFkPihwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkpOwogICAgICAgICByZXN1bHQgPSBl
bmNsb3NpbmdGbG93VGhyZWFkLmZyYWdtZW50c0JvdW5kaW5nQm94KHJlc3VsdCk7CiAgICAgICAg
IAogICAgICAgICBjaGlsZExheWVyID0gcGFnaW5hdGlvbkxheWVyOwpAQCAtNTk3MCw3ICs1OTcw
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlaT3JkZXJMaXN0cygpCiAKICAgICBpZiAoIXJl
bmRlcmVyKCkuZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIGlmIChpc0Zsb3dU
aHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAg
IHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25NYXBw
aW5nc1VwZGF0ZSgpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVu
ZGVyZXIoKSkuc2V0TmVlZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKICAgICAgICAg
Y29tcG9zaXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAg
aWYgKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKICAg
ICAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRTaG91bGRSZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRl
ckxheW91dCgpOwpAQCAtNTk5NCw3ICs1OTk0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlO
b3JtYWxGbG93TGlzdCgpCiAKICAgICBpZiAoIXJlbmRlcmVyKCkuZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCgpKSB7CiAgICAgICAgIGlmIChpc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXll
cnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJl
cigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1VwZGF0ZSgpOworICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVuZGVyZXIoKSkuc2V0TmVlZHNMYXllclRvUmVn
aW9uTWFwcGluZ3NVcGRhdGUoKTsKICAgICAgICAgY29tcG9zaXRvcigpLnNldENvbXBvc2l0aW5n
TGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgaWYgKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRT
aG91bGRSZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAwMzRkYmNlMjJmMTI1
OTg3YjJiN2Y1MTA0Yzc4NWFjY2Q0ZThjYWQwLi4yZThiZWZkMmUwNmZiZDk1ZDNiYTU3MmNhNjFj
ZWQwODZkOTBjYTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNl
LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1Ro
cmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJ
RnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
Q29tcG9zaXRvci5oIgpAQCAtNDY5LDkgKzQ3MCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVDb21wb3NpdGVkQm91bmRzKCkKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUFmdGVyV2lkZ2V0UmVzaXplKCkKIHsKLSAgICBpZiAoIXJlbmRlcmVyKCkuaXNXaWRnZXQo
KSkKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHNDb21wb3NpdG9yKHRvUmVuZGVyV2lkZ2V0
KCZyZW5kZXJlcigpKSkpIHsKKyAgICBpZiAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBpbm5lckNv
bXBvc2l0b3IgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHNDb21wb3NpdG9y
KCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkpKSkgewogICAgICAgICBpbm5lckNv
bXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKICAgICAgICAgaW5uZXJDb21wb3Np
dG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VMb2NhdGlvbihmbG9vcmVkSW50UG9pbnQoY29udGVudHNC
b3goKS5sb2NhdGlvbigpKSk7CiAgICAgfQpAQCAtNTk4LDggKzU5OSw4IEBAIGJvb2wgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKCkKICAgICAgICAgbGF5ZXJDb25maWdD
aGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKLSAgICBpZiAocmVuZGVyZXIoKS5pc1dpZGdl
dCgpKQotICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnBhcmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRlcldpZGdldCgmcmVuZGVyZXIoKSkpOwor
ICAgIGlmIChpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkpKQorICAgICAgICBsYXllckNvbmZp
Z0NoYW5nZWQgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudEZyYW1lQ29udGVudExheWVy
cygmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSk7CiAKICAgICByZXR1cm4gbGF5
ZXJDb25maWdDaGFuZ2VkOwogfQpAQCAtMTY3NSwyMSArMTY3NiwyMSBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRzQ2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3N0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7
Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVjdCgpKQorICAgIGlmICghaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkp
OworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PFJlbmRlckVt
YmVkZGVkT2JqZWN0PihyZW5kZXJlcikuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBpZiAoIWlz
PEhUTUxQbHVnSW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVtZW50PigqZWxlbWVudCkuaXNSZXN0YXJ0
ZWRQbHVnaW4oKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1l
bnQpLmlzUmVzdGFydGVkUGx1Z2luKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzQ29tcG9zaXRlZFBs
dWdpbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNDb21wb3NpdGVkUGx1
Z2luKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc0Vt
YmVkZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlciktPmFsbG93
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICByZXR1cm4gaXM8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVy
ZXIpLmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKIH0KIAogLy8gQSAic2ltcGxlIGNv
bnRhaW5lciBsYXllciIgaXMgYSBSZW5kZXJMYXllciB3aGljaCBoYXMgbm8gdmlzaWJsZSBjb250
ZW50IHRvIHJlbmRlci4KQEAgLTE2OTcsNyArMTY5OCw3IEBAIHN0YXRpYyBib29sIGlzQ29tcG9z
aXRlZFBsdWdpbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogLy8gVGhpcyBpcyBhIHVzZWZ1bCBv
cHRpbWl6YXRpb24sIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIGF2b2lkIGFsbG9jYXRpbmcgYmFj
a2luZyBzdG9yZS4KIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRhaW5lckNv
bXBvc2l0aW5nTGF5ZXIoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVw
bGFjZWQoKSAmJiAoIWlzQ29tcG9zaXRlZFBsdWdpbigmcmVuZGVyZXIoKSkgfHwgaXNSZXN0YXJ0
ZWRQbHVnaW4oJnJlbmRlcmVyKCkpKSkKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxh
Y2VkKCkgJiYgKCFpc0NvbXBvc2l0ZWRQbHVnaW4ocmVuZGVyZXIoKSkgfHwgaXNSZXN0YXJ0ZWRQ
bHVnaW4ocmVuZGVyZXIoKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocGFp
bnRzQm94RGVjb3JhdGlvbnMoKSB8fCBwYWludHNDaGlsZHJlbigpKQpAQCAtMTgwMywxMiArMTgw
NCwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudChi
b29sIGlzU2ltcGxlQ29udGFpbmVyKSBjb25zdAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBvcHRp
bWl6ZSBjYXNlcyB3aGVyZSB0aGUgaW1hZ2UsIHZpZGVvIG9yIGNhbnZhcyBpcyBrbm93biB0byBm
aWxsIHRoZSBib3JkZXIgYm94IGVudGlyZWx5LAogICAgIC8vIGFuZCBzZXQgYmFja2dyb3VuZCBj
b2xvciBvbiB0aGUgbGF5ZXIgaW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYmFj
a2luZyBzdG9yZSBhbmQgcGFpbnRpbmcuCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmIChyZW5k
ZXJlcigpLmlzVmlkZW8oKSAmJiB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLnNob3VsZERpc3Bs
YXlWaWRlbygpKQorICAgIGlmIChpczxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkgJiYgZG93bmNh
c3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnNob3VsZERpc3BsYXlWaWRlbygpKQogICAgICAg
ICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0
cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykKKyAgICBpZiAoaXM8
UmVuZGVySFRNTENhbnZhcz4ocmVuZGVyZXIoKSkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVn
eShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybiBt
X293bmluZ0xheWVyLmhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAppbmRleCA5ZDUwMTJmZjdlOWZjNTk1ZjEwMGUxMDRlNTBlY2Y4OWZhZWY4Y2QzLi40MDkwNGJl
OGQ5NWI0M2ZjZmNlMzZlYzQzNWI0ZTBiOTkzNTVlZTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtOTQzLDEwICs5NDMs
MTAgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5
ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAgICAgICAgIC8vIGl0cyByZXBsaWNh
IEdyYXBoaWNzTGF5ZXIuIEluIHByYWN0aWNlIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBiZWNh
dXNlIHJlZmxlY3RlZSBhbmQgcmVmbGVjdGlvbiAKICAgICAgICAgICAgIC8vIGFyZSBib3RoIGVp
dGhlciBjb21wb3NpdGVkLCBvciBub3QgY29tcG9zaXRlZC4KICAgICAgICAgICAgIGlmIChsYXll
ci5pc1JlZmxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBzb3VyY2VM
YXllciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChsYXllci5yZW5kZXJlcigpLnBhcmVudCgp
KS0+bGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogc291cmNlTGF5ZXIgPSBk
b3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqbGF5ZXIucmVuZGVyZXIoKS5wYXJlbnQo
KSkubGF5ZXIoKTsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gc291cmNlTGF5ZXItPmJhY2tpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5yZXBsaWNhTGF5ZXIoKSA9PSBsYXllci5iYWNr
aW5nKCktPmdyYXBoaWNzTGF5ZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJhY2tpbmctPmdy
YXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIobnVsbHB0
cik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC05NjYsMTQgKzk2Niwx
NCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXll
ciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUgogICAgIH0KICAgICAKICNpZiBFTkFCTEUoVklE
RU8pCi0gICAgaWYgKGxheWVyQ2hhbmdlZCAmJiBsYXllci5yZW5kZXJlcigpLmlzVmlkZW8oKSkg
eworICAgIGlmIChsYXllckNoYW5nZWQgJiYgaXM8UmVuZGVyVmlkZW8+KGxheWVyLnJlbmRlcmVy
KCkpKSB7CiAgICAgICAgIC8vIElmIGl0J3MgYSB2aWRlbywgZ2l2ZSB0aGUgbWVkaWEgcGxheWVy
IGEgY2hhbmNlIHRvIGhvb2sgdXAgdG8gdGhlIGxheWVyLgotICAgICAgICB0b1JlbmRlclZpZGVv
KGxheWVyLnJlbmRlcmVyKCkpLmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgICAgIGRvd25jYXN0PFJlbmRlclZpZGVvPihsYXllci5yZW5kZXJlcigpKS5hY2NlbGVyYXRl
ZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGxheWVy
Q2hhbmdlZCAmJiBsYXllci5yZW5kZXJlcigpLmlzV2lkZ2V0KCkpIHsKLSAgICAgICAgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNvbnRlbnRzQ29tcG9zaXRv
cih0b1JlbmRlcldpZGdldCgmbGF5ZXIucmVuZGVyZXIoKSkpOworICAgIGlmIChsYXllckNoYW5n
ZWQgJiYgaXM8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSkgeworICAgICAgICBSZW5k
ZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IGZyYW1lQ29udGVudHNDb21wb3Np
dG9yKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKTsKICAgICAgICAg
aWYgKGlubmVyQ29tcG9zaXRvciAmJiBpbm5lckNvbXBvc2l0b3ItPmluQ29tcG9zaXRpbmdNb2Rl
KCkpCiAgICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPnVwZGF0ZVJvb3RMYXllckF0dGFjaG1l
bnQoKTsKICAgICB9CkBAIC0xMTc1LDcgKzExNzUsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBhbmNlc3Rv
cgogICAgIGxheWVyLnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwogCiAgICAgaWYgKGxheWVy
LmlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKSB7Ci0g
ICAgICAgIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQo
bGF5ZXIucmVuZGVyZXIoKSk7CisgICAgICAgIGF1dG8mIGZsb3dUaHJlYWQgPSBkb3duY2FzdDxS
ZW5kZXJGbG93VGhyZWFkPihsYXllci5yZW5kZXJlcigpKTsKICAgICAgICAgbGF5ZXIuc2V0SGFz
Q29tcG9zaXRpbmdEZXNjZW5kYW50KGZsb3dUaHJlYWQuaGFzQ29tcG9zaXRpbmdSZWdpb25EZXNj
ZW5kYW50KCkpOwogCiAgICAgICAgIC8vIEJlZm9yZSByZXR1cm5pbmcsIHdlIG5lZWQgdG8gdXBk
YXRlIHRoZSBsaXN0cyBvZiBhbGwgY2hpbGQgbGF5ZXJzLiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1
c2UsCkBAIC0xNTQ4LDggKzE1NDgsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVi
dWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyJiBsYXllciwgVmVjdAogCiAgICAg
aWYgKGxheWVyQmFja2luZykgewogICAgICAgICBib29sIHBhcmVudGVkID0gZmFsc2U7Ci0gICAg
ICAgIGlmIChsYXllci5yZW5kZXJlcigpLmlzV2lkZ2V0KCkpCi0gICAgICAgICAgICBwYXJlbnRl
ZCA9IHBhcmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRlcldpZGdldCgmbGF5ZXIucmVuZGVy
ZXIoKSkpOworICAgICAgICBpZiAoaXM8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSkK
KyAgICAgICAgICAgIHBhcmVudGVkID0gcGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKCZkb3duY2Fz
dDxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKTsKIAogICAgICAgICBpZiAoIXBhcmVu
dGVkKQogICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+c2V0
Q2hpbGRyZW4obGF5ZXJDaGlsZHJlbik7CkBAIC0yMDkwLDExICsyMDkwLDExIEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpuZWVkc1RvQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllciwgUmVuZGVyCiAvLyBzdGF0aWMKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJM
YXllcjo6Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24qIHZpZXdwb3J0Q29u
c3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKSBjb25zdAogewotICAgIGF1dG8gcmVuZGVyZXIg
PSAmbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9ICZsYXllci5yZW5kZXJl
cigpOwogCiAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGEgcmVmbGVjdGlvbiBzaG91
bGQgbWF0Y2ggdGhhdCBvZiBpdHMgcmVmbGVjdGVkIGxheWVyLgogICAgIGlmIChsYXllci5pc1Jl
ZmxlY3Rpb24oKSkKLSAgICAgICAgcmVuZGVyZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3Qo
cmVuZGVyZXItPnBhcmVudCgpKTsgLy8gVGhlIFJlbmRlclJlcGxpY2EncyBwYXJlbnQgaXMgdGhl
IG9iamVjdCBiZWluZyByZWZsZWN0ZWQuCisgICAgICAgIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXItPnBhcmVudCgpKTsgLy8gVGhlIFJlbmRlclJl
cGxpY2EncyBwYXJlbnQgaXMgdGhlIG9iamVjdCBiZWluZyByZWZsZWN0ZWQuCiAKICAgICAvLyBU
aGUgcm9vdCBsYXllciBhbHdheXMgaGFzIGEgY29tcG9zaXRpbmcgbGF5ZXIsIGJ1dCBpdCBtYXkg
bm90IGhhdmUgYmFja2luZy4KICAgICByZXR1cm4gcmVxdWlyZXNDb21wb3NpdGluZ0ZvclRyYW5z
Zm9ybSgqcmVuZGVyZXIpCkBAIC0yMTgzLDkgKzIxODMsOSBAQCBDb21wb3NpdGluZ1JlYXNvbnMg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcoY29uc3QgUmVuZGVy
TGF5ZQogICAgIGlmICghbGF5ZXIuaXNDb21wb3NpdGVkKCkpCiAgICAgICAgIHJldHVybiByZWFz
b25zOwogCi0gICAgYXV0byByZW5kZXJlciA9ICZsYXllci5yZW5kZXJlcigpOworICAgIGF1dG8q
IHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CiAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlv
bigpKQotICAgICAgICByZW5kZXJlciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChyZW5kZXJl
ci0+cGFyZW50KCkpOworICAgICAgICByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KHJlbmRlcmVyLT5wYXJlbnQoKSk7CiAKICAgICBpZiAocmVxdWlyZXNDb21wb3Np
dGluZ0ZvclRyYW5zZm9ybSgqcmVuZGVyZXIpKQogICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0
aW5nUmVhc29uM0RUcmFuc2Zvcm07CkBAIC0yNDUwLDggKzI0NTAsOCBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclZpZGVvKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmCiAgICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50
OjpWaWRlb1RyaWdnZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFZJREVP
KQotICAgIGlmIChyZW5kZXJlci5pc1ZpZGVvKCkpIHsKLSAgICAgICAgUmVuZGVyVmlkZW8mIHZp
ZGVvID0gdG9SZW5kZXJWaWRlbyhyZW5kZXJlcik7CisgICAgaWYgKGlzPFJlbmRlclZpZGVvPihy
ZW5kZXJlcikpIHsKKyAgICAgICAgYXV0byYgdmlkZW8gPSBkb3duY2FzdDxSZW5kZXJWaWRlbz4o
cmVuZGVyZXIpOwogICAgICAgICByZXR1cm4gKHZpZGVvLnJlcXVpcmVzSW1tZWRpYXRlQ29tcG9z
aXRpbmcoKSB8fCB2aWRlby5zaG91bGREaXNwbGF5VmlkZW8oKSkgJiYgY2FuQWNjZWxlcmF0ZVZp
ZGVvUmVuZGVyaW5nKHZpZGVvKTsKICAgICB9CiAjZWxzZQpAQCAtMjQ4NCwxMyArMjQ4NCwxMyBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdp
bihSZW5kZXJMYXllck1vZGVsT2JqZWN0JgogICAgIGlmICghKG1fY29tcG9zaXRpbmdUcmlnZ2Vy
cyAmIENocm9tZUNsaWVudDo6UGx1Z2luVHJpZ2dlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGJvb2wgY29tcG9zaXRlID0gcmVuZGVyZXIuaXNFbWJlZGRlZE9iamVjdCgpICYmIHRv
UmVuZGVyRW1iZWRkZWRPYmplY3QoJnJlbmRlcmVyKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOworICAgIGJvb2wgY29tcG9zaXRlID0gaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJl
bmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpLmFsbG93
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICAgICBpZiAoIWNvbXBvc2l0ZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCA9
IHRydWU7CiAgICAgCi0gICAgUmVuZGVyV2lkZ2V0JiBwbHVnaW5SZW5kZXJlciA9ICp0b1JlbmRl
cldpZGdldCgmcmVuZGVyZXIpOworICAgIFJlbmRlcldpZGdldCYgcGx1Z2luUmVuZGVyZXIgPSBk
b3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKTsKICAgICAvLyBJZiB3ZSBjYW4ndCByZWxp
YWJseSBrbm93IHRoZSBzaXplIG9mIHRoZSBwbHVnaW4geWV0LCBkb24ndCBjaGFuZ2UgY29tcG9z
aXRpbmcgc3RhdGUuCiAgICAgaWYgKHBsdWdpblJlbmRlcmVyLm5lZWRzTGF5b3V0KCkpCiAgICAg
ICAgIHJldHVybiBwbHVnaW5SZW5kZXJlci5oYXNMYXllcigpICYmIHBsdWdpblJlbmRlcmVyLmxh
eWVyKCktPmlzQ29tcG9zaXRlZCgpOwpAQCAtMjUwMiwxMCArMjUwMiwxMCBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JgogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvckZyYW1lKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdAog
ewotICAgIGlmICghcmVuZGVyZXIuaXNXaWRnZXQoKSkKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdl
dD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJXaWRnZXQm
IGZyYW1lUmVuZGVyZXIgPSAqdG9SZW5kZXJXaWRnZXQoJnJlbmRlcmVyKTsKKyAgICBhdXRvJiBm
cmFtZVJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcik7CiAKICAgICBp
ZiAoIWZyYW1lUmVuZGVyZXIucmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IDIwOTkwNDIwMjMzNTYwM2ViNWRlMGNiMmQ5YjA4MDRm
ZDU0YjM4OTguLjZjZjBmZGMwYzk4MTk5ZDJmMDA3NGNjZGUzN2JmZGRkNDEwY2ZkYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApA
QCAtNjksOCArNjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNfbGF5ZXJXYXNTZWxm
UGFpbnRpbmc7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCwgaXNSZW5kZXJMYXllck1vZGVsT2JqZWN0KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlckxheWVy
TW9kZWxPYmplY3QsIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGU4ZWM1ZWY3YTI1MjBmOTNlYWUxODMz
M2QxZjE3YzEwZDI5YTk0OGYuLmQwZTNmZTVkMjk0NzEyYjIyMmM0OWM3M2IyODNhM2Y2N2UwNjBm
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTkz
LDggKzkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNXQlI7CiB9OwogCi1SRU5ERVJfT0JK
RUNUX1RZUEVfQ0FTVFMoUmVuZGVyTGluZUJyZWFrLCBpc0xpbmVCcmVhaygpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChS
ZW5kZXJMaW5lQnJlYWssIGlzTGluZUJyZWFrKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZXRlci5oCmluZGV4IGE2MzI1MGVhMGFmZWI5OWUxOGNlZThhMjVjZDU5ZjY1NzE3YWY2NDYu
LmM2ZTI2MGFlZGU5YWE5MmNmYWRhODZmZGEyZDlmNmYxYTIzMjMyZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCkBAIC00Nyw4ICs0Nyw2IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNU
UyhSZW5kZXJNZXRlciwgaXNNZXRlcigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJNZXRlciwgaXNNZXRlcigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmNwcAppbmRleCBkMjBjYjAzZGFjZGZiODg2NjYwYTFjODI0MzZlMjA2OTFj
ZjQzNjgyLi42NWJjMDJjYmE5ZDM3ZjAzZjg1Nzg0NWMyNDg2ZWZmZTBjNmE0N2I4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkLmNwcApAQCAtNzIsOCArNzIsOCBAQCBjb25zdCBjaGFyKiBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQ6OnJlbmRlck5hbWUoKSBjb25zdAogUmVuZGVyTXVsdGlDb2x1bW5TZXQqIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCgpIGNvbnN0CiB7
CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOyBzaWJsaW5n
OyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGlu
Zy0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVy
TXVsdGlDb2x1bW5TZXQoc2libGluZyk7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVt
blNldD4oKnNpYmxpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck11bHRp
Q29sdW1uU2V0PihzaWJsaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC04
MSw4ICs4MSw4IEBAIFJlbmRlck11bHRpQ29sdW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6OmZpcnN0TXVsdGlDb2x1bW5TZXQoKSBjb25zdAogUmVuZGVyTXVsdGlDb2x1bW5TZXQq
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bGFzdE11bHRpQ29sdW1uU2V0KCkgY29uc3QK
IHsKICAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGluZyA9IG11bHRpQ29sdW1uQmxvY2tGbG93
KCktPmxhc3RDaGlsZCgpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkK
LSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHNpYmxpbmcpOworICAg
ICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpzaWJsaW5nKSkKKyAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oc2libGluZyk7CiAgICAgfQog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTI0LDggKzEyNCw4IEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpsYXlvdXQoKQogICAgIG1faW5MYXlvdXQgPSB0cnVlOwogICAg
IG1fbGFzdFNldFdvcmtlZE9uID0gbnVsbHB0cjsKICAgICBpZiAoUmVuZGVyQm94KiBmaXJzdCA9
IGZpcnN0Q29sdW1uU2V0T3JTcGFubmVyKCkpIHsKLSAgICAgICAgaWYgKGZpcnN0LT5pc1JlbmRl
ck11bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgICAgIG1fbGFzdFNldFdvcmtlZE9uID0gdG9S
ZW5kZXJNdWx0aUNvbHVtblNldChmaXJzdCk7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNv
bHVtblNldD4oKmZpcnN0KSkgeworICAgICAgICAgICAgbV9sYXN0U2V0V29ya2VkT24gPSBkb3du
Y2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oZmlyc3QpOwogICAgICAgICAgICAgbV9sYXN0U2V0
V29ya2VkT24tPmJlZ2luRmxvdyh0aGlzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE5Niw3ICsx
OTYsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6ZXZhY3VhdGVBbmREZXN0
cm95KCkKIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhy
ZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQogewotICAgIFJlbmRlck11bHRpQ29sdW1u
U2V0KiBjb2x1bW5TZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHJlbmRlclJlZ2lvbik7Cisg
ICAgYXV0byogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHJlbmRl
clJlZ2lvbik7CiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBuZXh0U2V0ID0gY29sdW1u
U2V0LT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKICAgICAgICAgUmVuZGVyUmVnaW9u
TGlzdDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChuZXh0U2V0KTsKICAgICAgICAg
QVNTRVJUKGl0ICE9IG1fcmVnaW9uTGlzdC5lbmQoKSk7CkBAIC0zNjcsMzYgKzM2NywzNiBAQCB2
b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNl
cnRlZChSZW5kZXJPYmplY3QqIGRlcwogICAgICAgICByZXR1cm47CiAgICAgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUm9vdCA9IGRlc2NlbmRhbnQ7CiAgICAgZm9yICg7IGRlc2NlbmRhbnQ7IGRlc2Nl
bmRhbnQgPSAoZGVzY2VuZGFudCA/IGRlc2NlbmRhbnQtPm5leHRJblByZU9yZGVyKHN1YnRyZWVS
b290KSA6IG51bGxwdHIpKSB7Ci0gICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1JlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIC8v
IEEgc3Bhbm5lcidzIHBsYWNlaG9sZGVyIGhhcyBiZWVuIGluc2VydGVkLiBUaGUgYWN0dWFsIHNw
YW5uZXIgcmVuZGVyZXIgaXMgbW92ZWQgZnJvbQogICAgICAgICAgICAgLy8gd2hlcmUgaXQgd291
bGQgb3RoZXJ3aXNlIG9jY3VyIChpZiBpdCB3ZXJlbid0IGEgc3Bhbm5lcikgdG8gYmVjb21pbmcg
YSBzaWJsaW5nIG9mIHRoZQogICAgICAgICAgICAgLy8gY29sdW1uIHNldHMuCi0gICAgICAgICAg
ICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogcGxhY2Vob2xkZXIgPSB0b1Jl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKGRlc2NlbmRhbnQpOwotICAgICAgICAg
ICAgaWYgKHBsYWNlaG9sZGVyLT5mbG93VGhyZWFkKCkgIT0gdGhpcykgeworICAgICAgICAgICAg
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXImIHBsYWNlaG9sZGVyID0gZG93bmNh
c3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpkZXNjZW5kYW50KTsKKyAg
ICAgICAgICAgIGlmIChwbGFjZWhvbGRlci5mbG93VGhyZWFkKCkgIT0gdGhpcykgewogICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXNuJ3Qgb3VyIHNwYW5uZXIhIEl0IHNoaWZ0ZWQgaGVyZSBmcm9t
IGFuIGFuY2VzdG9yIG11bHRpY29sdW1uIGJsb2NrLiBJdCdzIGdvaW5nIHRvIGVuZCB1cAogICAg
ICAgICAgICAgICAgIC8vIGJlY29taW5nIG91ciBzcGFubmVyIGluc3RlYWQsIGJ1dCBmb3IgaXQg
dG8gZG8gdGhhdCB3ZSBmaXJzdCBoYXZlIHRvIG51a2UgdGhlIG9yaWdpbmFsIHNwYW5uZXIsCiAg
ICAgICAgICAgICAgICAgLy8gYW5kIGdldCB0aGUgc3Bhbm5lciBjb250ZW50IGJhY2sgaW50byB0
aGlzIGZsb3cgdGhyZWFkLgotICAgICAgICAgICAgICAgIFJlbmRlckJveCogc3Bhbm5lciA9IHBs
YWNlaG9sZGVyLT5zcGFubmVyKCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBzcGFubmVy
ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIEluc2VydCBhZnRlciB0aGUgcGxhY2Vob2xkZXIsIGJ1dCBkb24ndCBsZXQgYSBub3Rp
ZmljYXRpb24gaGFwcGVuLgogICAgICAgICAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSB0cnVl
OwogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdyYgYW5jZXN0b3JCbG9jayA9IGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKnNwYW5uZXItPnBhcmVudCgpKTsKLSAgICAgICAgICAgICAg
ICBhbmNlc3RvckJsb2NrLm1vdmVDaGlsZFRvKHBsYWNlaG9sZGVyLT5wYXJlbnRCb3goKSwgc3Bh
bm5lciwgcGxhY2Vob2xkZXItPm5leHRTaWJsaW5nKCksIHRydWUpOworICAgICAgICAgICAgICAg
IGFuY2VzdG9yQmxvY2subW92ZUNoaWxkVG8ocGxhY2Vob2xkZXIucGFyZW50Qm94KCksIHNwYW5u
ZXIsIHBsYWNlaG9sZGVyLm5leHRTaWJsaW5nKCksIHRydWUpOwogICAgICAgICAgICAgICAgIGdT
aGlmdGluZ1NwYW5uZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIG51a2UgdGhlIHBsYWNlaG9sZGVyLCBzaW5jZSB0aGUgYW5jZXN0b3Ig
YWxyZWFkeSBsb3N0IHRoZSBtYXBwaW5nIHRvIGl0IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3
ZSBzaGlmdGVkIHRoZSBwbGFjZWhvbGRlciBkb3duIGludG8gdGhpcyBmbG93IHRocmVhZC4KICAg
ICAgICAgICAgICAgICBhbmNlc3RvckJsb2NrLm11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5oYW5k
bGVTcGFubmVyUmVtb3ZhbChzcGFubmVyKTsKLSAgICAgICAgICAgICAgICBwbGFjZWhvbGRlci0+
ZGVzdHJveSgpOworICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLmRlc3Ryb3koKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcHJvY2VzcyB0aGUgc3Bhbm5l
ci4KICAgICAgICAgICAgICAgICBkZXNjZW5kYW50ID0gcHJvY2Vzc1Bvc3NpYmxlU3Bhbm5lckRl
c2NlbmRhbnQoc3VidHJlZVJvb3QsIHNwYW5uZXIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW1fc3Bh
bm5lck1hcC5nZXQocGxhY2Vob2xkZXItPnNwYW5uZXIoKSkpOwotICAgICAgICAgICAgbV9zcGFu
bmVyTWFwLmFkZChwbGFjZWhvbGRlci0+c3Bhbm5lcigpLCBwbGFjZWhvbGRlcik7Ci0gICAgICAg
ICAgICBBU1NFUlQoIXBsYWNlaG9sZGVyLT5maXJzdENoaWxkKCkpOyAvLyBUaGVyZSBzaG91bGQg
YmUgbm8gY2hpbGRyZW4gaGVyZSwgYnV0IGlmIHRoZXJlIGFyZSwgd2Ugb3VnaHQgdG8gc2tpcCB0
aGVtLgorICAgICAgICAgICAgQVNTRVJUKCFtX3NwYW5uZXJNYXAuZ2V0KHBsYWNlaG9sZGVyLnNw
YW5uZXIoKSkpOworICAgICAgICAgICAgbV9zcGFubmVyTWFwLmFkZChwbGFjZWhvbGRlci5zcGFu
bmVyKCksICZwbGFjZWhvbGRlcik7CisgICAgICAgICAgICBBU1NFUlQoIXBsYWNlaG9sZGVyLmZp
cnN0Q2hpbGQoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBjaGlsZHJlbiBoZXJlLCBidXQgaWYg
dGhlcmUgYXJlLCB3ZSBvdWdodCB0byBza2lwIHRoZW0uCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTQyOCwxMiArNDI4LDEyIEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkUmVsYXRpdmVXaWxsQmVSZW1vdmVkKFJlbmRl
ck9iamVjdCoKICAgICBpZiAobV9iZWluZ0V2YWN1YXRlZCkKICAgICAgICAgcmV0dXJuOwogICAg
IGludmFsaWRhdGVSZWdpb25zKCk7Ci0gICAgaWYgKHJlbGF0aXZlLT5pc1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXI+KCpyZWxhdGl2ZSkpIHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBt
YXAgZW50cnkgZm9yIHRoaXMgc3Bhbm5lciwgYnV0IGxlYXZlIHRoZSBhY3R1YWwgc3Bhbm5lciBy
ZW5kZXJlciBhbG9uZS4gQWxzbwogICAgICAgICAvLyBrZWVwIHRoZSByZWZlcmVuY2UgdG8gdGhl
IHNwYW5uZXIsIHNpbmNlIHRoZSBwbGFjZWhvbGRlciBtYXkgYmUgYWJvdXQgdG8gYmUgcmUtaW5z
ZXJ0ZWQKICAgICAgICAgLy8gaW4gdGhlIHRyZWUuCiAgICAgICAgIEFTU0VSVChyZWxhdGl2ZS0+
aXNEZXNjZW5kYW50T2YodGhpcykpOwotICAgICAgICBtX3NwYW5uZXJNYXAucmVtb3ZlKHRvUmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIocmVsYXRpdmUpLT5zcGFubmVyKCkpOwor
ICAgICAgICBtX3NwYW5uZXJNYXAucmVtb3ZlKGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyPigqcmVsYXRpdmUpLnNwYW5uZXIoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKHJlbGF0aXZlLT5zdHlsZSgpLmNvbHVtblNwYW4oKSA9PSBDb2x1bW5T
cGFuQWxsKSB7CkBAIC00NDksMjEgKzQ0OSwyMSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZDo6Zmxvd1RocmVhZFJlbGF0aXZlV2lsbEJlUmVtb3ZlZChSZW5kZXJPYmplY3QqCiAK
IHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkRGVzY2VuZGFudEJv
eExhaWRPdXQoUmVuZGVyQm94KiBkZXNjZW5kYW50KQogewotICAgIGlmICghZGVzY2VuZGFudC0+
aXNSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpKQorICAgIGlmICghaXM8UmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpkZXNjZW5kYW50KSkKICAgICAgICAg
cmV0dXJuOwotICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhv
bGRlciA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoZGVzY2VuZGFudCk7
Ci0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHBsYWNlaG9sZGVyLT5jb250YWluaW5nQmxv
Y2soKTsKKyAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2VuZGFudCk7CisgICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lciA9IHBsYWNlaG9sZGVyLmNvbnRhaW5pbmdCbG9jaygpOwogCi0gICAgZm9yIChSZW5kZXJC
b3gqIHByZXYgPSBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihwbGFjZWhvbGRl
ci0+c3Bhbm5lcigpKTsgcHJldjsgcHJldiA9IHByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2li
bGluZ09mKHByZXYpKSB7Ci0gICAgICAgIGlmIChwcmV2LT5pc1JlbmRlck11bHRpQ29sdW1uU2V0
KCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQocHJldiktPmVuZEZsb3co
Y29udGFpbmVyLCBwbGFjZWhvbGRlci0+bG9naWNhbFRvcCgpKTsKKyAgICBmb3IgKFJlbmRlckJv
eCogcHJldiA9IHByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHBsYWNlaG9sZGVy
LnNwYW5uZXIoKSk7IHByZXY7IHByZXYgPSBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxp
bmdPZihwcmV2KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpwcmV2
KSkgeworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpwcmV2KS5l
bmRGbG93KGNvbnRhaW5lciwgcGxhY2Vob2xkZXIubG9naWNhbFRvcCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJCb3gqIG5leHQgPSBu
ZXh0Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHBsYWNlaG9sZGVyLT5zcGFubmVyKCkpOyBu
ZXh0OyBuZXh0ID0gbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihuZXh0KSkgewotICAg
ICAgICBpZiAobmV4dC0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKSB7Ci0gICAgICAgICAgICBt
X2xhc3RTZXRXb3JrZWRPbiA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQobmV4dCk7CisgICAgZm9y
IChSZW5kZXJCb3gqIG5leHQgPSBuZXh0Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHBsYWNl
aG9sZGVyLnNwYW5uZXIoKSk7IG5leHQ7IG5leHQgPSBuZXh0Q29sdW1uU2V0T3JTcGFubmVyU2li
bGluZ09mKG5leHQpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4oKm5l
eHQpKSB7CisgICAgICAgICAgICBtX2xhc3RTZXRXb3JrZWRPbiA9IGRvd25jYXN0PFJlbmRlck11
bHRpQ29sdW1uU2V0PihuZXh0KTsKICAgICAgICAgICAgIG1fbGFzdFNldFdvcmtlZE9uLT5iZWdp
bkZsb3coY29udGFpbmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00ODQs
MTMgKzQ4NCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6aW5p
dGlhbExvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpzZXRQYWdlQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9m
ZnNldCwgTGF5b3V0VW5pdCBzcGFjZVNob3J0YWdlKQogewotICAgIGlmIChSZW5kZXJNdWx0aUNv
bHVtblNldCogbXVsdGljb2xTZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHJlZ2lvbkF0Qmxv
Y2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQorICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9IGRv
d25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBv
ZmZzZXQpKSkKICAgICAgICAgbXVsdGljb2xTZXQtPnJlY29yZFNwYWNlU2hvcnRhZ2Uoc3BhY2VT
aG9ydGFnZSk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp1cGRhdGVN
aW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zm
c2V0LCBMYXlvdXRVbml0IG1pbkhlaWdodCkKIHsKLSAgICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5T
ZXQqIG11bHRpY29sU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChyZWdpb25BdEJsb2NrT2Zm
c2V0KGJsb2NrLCBvZmZzZXQpKSkKKyAgICBpZiAoYXV0byogbXVsdGljb2xTZXQgPSBkb3duY2Fz
dDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9ja09mZnNldChibG9jaywgb2Zmc2V0
KSkpCiAgICAgICAgIG11bHRpY29sU2V0LT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KG1pbkhl
aWdodCk7CiB9CiAKQEAgLTUzNCwxMiArNTM0LDEyIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVu
CiAgICAgLy8gZXhhY3Qgc2FtZSBmbG93IHRocmVhZCBwb3NpdGlvbiwgd2hpY2ggbWVhbnMgdGhh
dCBzb21lIHBhcnRzIG9mIHRoZSBjb2RlIG1heSBiZWxpZXZlIHRoYXQgYQogICAgIC8vIGdpdmVu
IGJveCBsaXZlcyBpbiBzZXRzIHRoYXQgaXQgZG9lc24ndCByZWFsbHkgbGl2ZSBpbi4gTWFrZSBz
b21lIGFkanVzdG1lbnRzIGhlcmUgYW5kCiAgICAgLy8gaW5jbHVkZSBzdWNoIHNldHMgaWYgdGhl
eSBhcmUgYWRqYWNlbnQgdG8gdGhlIHN0YXJ0IGFuZC9vciBlbmQgcmVnaW9ucy4KLSAgICBmb3Ig
KFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0
KHN0YXJ0UmVnaW9uKS0+cHJldmlvdXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0
OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPnByZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCkp
IHsKKyAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNldD4oKnN0YXJ0UmVnaW9uKS5wcmV2aW91c1NpYmxpbmdNdWx0aUNv
bHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVtblNldCA9IGNvbHVtblNldC0+cHJldmlvdXNTaWJs
aW5nTXVsdGlDb2x1bW5TZXQoKSkgewogICAgICAgICBpZiAoY29sdW1uU2V0LT5sb2dpY2FsSGVp
Z2h0SW5GbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgc3RhcnRSZWdp
b24gPSBjb2x1bW5TZXQ7CiAgICAgfQotICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNv
bHVtblNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoc3RhcnRSZWdpb24pLT5uZXh0U2libGlu
Z011bHRpQ29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0
U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKKyAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0
KiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnN0YXJ0UmVnaW9u
KS5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29s
dW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKICAgICAgICAgaWYgKGNvbHVt
blNldC0+bG9naWNhbEhlaWdodEluRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGVuZFJlZ2lvbiA9IGNvbHVtblNldDsKQEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVu
ZGVyQm94KiBib3gsIFJlbgogCiBib29sIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6YWRk
Rm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9m
ZnNldCwgUmVuZGVyQm94KiAvKmJyZWFrQ2hpbGQqLywgYm9vbCAvKmlzQmVmb3JlKi8sIExheW91
dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCkKIHsKLSAgICBpZiAoUmVuZGVyTXVsdGlDb2x1
bW5TZXQqIG11bHRpY29sU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChyZWdpb25BdEJsb2Nr
T2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkgeworICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9IGRv
d25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBv
ZmZzZXQpKSkgewogICAgICAgICBtdWx0aWNvbFNldC0+YWRkRm9yY2VkQnJlYWsob2Zmc2V0KTsK
ICAgICAgICAgaWYgKG9mZnNldEJyZWFrQWRqdXN0bWVudCkKICAgICAgICAgICAgICpvZmZzZXRC
cmVha0FkanVzdG1lbnQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChvZmZzZXQpID8gcGFn
ZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0LCBJbmNsdWRlUGFnZUJvdW5k
YXJ5KSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKQEAgLTY4OSw3ICs2ODksNyBAQCBSZW5k
ZXJSZWdpb24qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bWFwRnJvbUZsb3dUb1JlZ2lv
bihUcmFuc2Zvcm1TdGF0ZSYgdAogTGF5b3V0U2l6ZSBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25PZmZzZXRGcm9tRmxvd1RvUmVnaW9uKGNvbnN0IFJlbmRl
clJlZ2lvbiogcmVuZGVyUmVnaW9uLCBjb25zdCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNv
bnN0CiB7CiAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3aGljaCBtdWx0aWNvbHVtbiBzZXQgd2Ug
aGl0LCB3ZSBuZWVkIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgdHJhbnNsYXRpb24gb2Zmc2V0IGZv
ciB0aGUgY29sdW1uLgotICAgIGNvbnN0IFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQg
PSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHJlbmRlclJlZ2lvbik7CisgICAgY29uc3QgYXV0byog
Y29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHJlbmRlclJlZ2lvbik7
CiAgICAgTGF5b3V0UG9pbnQgdHJhbnNsYXRpb25PZmZzZXQgPSBjb2x1bW5TZXQtPmNvbHVtblRy
YW5zbGF0aW9uRm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQpOwogICAgIAogICAgIC8vIE5vdyB3ZSBr
bm93IGhvdyB3ZSB3YW50IHRoZSByZWN0IHRvIGJlIHRyYW5zbGF0ZWQgaW50byB0aGUgcmVnaW9u
LiBBdCB0aGlzIHBvaW50IHdlJ3JlIGNvbnZlcnRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAppbmRleCA1MTNkMzFk
OTI3ZjA3MWVjOGFjNWRhOThkNTU3NWUwMDcyYWU2NWRhLi4wMjIzYzk4MmM3MjBjMzdlNjc1OTRh
MDc4ZTljOWM4MGMwZWMxNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCkBAIC0xNTgsOCArMTU4LDYgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBnU2hpZnRpbmdTcGFubmVyOwogfTsKIAotUkVOREVSX09C
SkVDVF9UWVBFX0NBU1RTKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCwgaXNSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LCBpc1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKaW5kZXggYTNjYzZlNzcwN2NjYmJi
MWFhZjc3MTllNDU2OTU4OTBmYmJmYzkxNi4uMjQ4Yjk0ODllODY0NTY3MTM1NThiZTYxNWFiMDlj
MzYxZGQ1YWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwCkBAIC01MSw4ICs1MSw4IEBAIFJlbmRlck11bHRpQ29sdW1uU2V0OjpS
ZW5kZXJNdWx0aUNvbHVtblNldChSZW5kZXJGbG93VGhyZWFkJiBmbG93VGhyZWFkLCBQYXNzUmVm
CiBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6Om5leHRTaWJsaW5n
TXVsdGlDb2x1bW5TZXQoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBzaWJsaW5n
ID0gbmV4dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHNpYmxpbmcpOworICAgICAg
ICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpzaWJsaW5nKSkKKyAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oc2libGluZyk7CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtNjAsOCArNjAsOCBAQCBSZW5kZXJNdWx0aUNvbHVtblNl
dCogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6Om5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSBjb25z
dAogUmVuZGVyTXVsdGlDb2x1bW5TZXQqIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwcmV2aW91c1Np
YmxpbmdNdWx0aUNvbHVtblNldCgpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNp
YmxpbmcgPSBwcmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnBy
ZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc1JlbmRlck11bHRpQ29s
dW1uU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJNdWx0aUNvbHVtblNldChzaWJs
aW5nKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc2libGluZykpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHNpYmxpbmcp
OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgKaW5kZXggZjkzMGI3N2JmZmQ3MGZmOTU3ZGY3
OWMyOWE4MWM0NDVhYzNmZWM1OC4uMjdjYTczN2MzOGQ4MmFjZTRkZjRjNTY3NTI5OWQxZmZiNTZl
Mzc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
U2V0LmgKQEAgLTIyNSw4ICsyMjUsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDb250ZW50UnVu
LCAxPiBtX2NvbnRlbnRSdW5zOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRl
ck11bHRpQ29sdW1uU2V0LCBpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRl
ck11bHRpQ29sdW1uU2V0LCBpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oCmluZGV4IGNhYWMyZTdiZGRhNzQ3YWJlZTkyZWNjN2E4ZTc0MjE1NDc4MjMx
NzUuLmYxYTViODg0NzNiODRhZjVhOGFiMjVjM2JkMzNlNDdhYjNiNDdhZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5oCkBAIC01NSw4ICs1NSw2IEBAIHByaXZhdGU6CiAgICAgUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7CiB9OwogCi1SRU5ERVJfT0JKRUNU
X1RZUEVfQ0FTVFMoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIsIGlzUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIsIGlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwCmluZGV4IGQyZmY4ODU2MTU4NGUxOTYwOTJlYzYyODZhZDJlNGQyYTY1ZTcz
NjYuLmI1MDg0MzVkMzAxMTc3M2EzYmYzZTU3NGJkNTY5MTk0ZWNkZDk4YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcApA
QCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVn
aW9uU3R5bGUoKQogICAgIGlmICghaXNQc2V1ZG9FbGVtZW50KCkpCiAgICAgICAgIGN1c3RvbVJl
Z2lvblN0eWxlID0gdmlldygpLmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmNoZWNr
UmVnaW9uU3R5bGUoZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CiAgICAgc2V0SGFzQ3VzdG9tUmVnaW9u
U3R5bGUoY3VzdG9tUmVnaW9uU3R5bGUpOwotICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG1f
Zmxvd1RocmVhZCktPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7CisgICAgZG93bmNhc3Q8UmVu
ZGVyTmFtZWRGbG93VGhyZWFkPigqbV9mbG93VGhyZWFkKS5jaGVja1JlZ2lvbnNXaXRoU3R5bGlu
ZygpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSkgY29uc3QKQEAgLTQ4OSw3ICs0ODksNyBAQCB2b2lkIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50OjpyZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKQogCiBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpuYW1lZEZsb3dU
aHJlYWQoKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChmbG93
VGhyZWFkKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZs
b3dUaHJlYWQoKSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnZp
c3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCmluZGV4IDMzMGYzMGNhZTQ4ZmZkYjc3YzI1NGYw
ODJhOWZhYmJjYjFkYTEyNzMuLmM1ZWZiMzI0OTRjMzgxYTYyZjg0NTcxYWYxNzdhNjQ0NmIzYzFk
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBwYXJlbnQgcmVuZGVy
ZXIgaW5zdGVhZC4KICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoYXQgcmVuZGVyZXIgaG9s
ZGluZyB0aGUgbGF5ZXIuCiAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBjYW5ub3QgYmUgbnVsbCBi
ZWNhdXNlIENTUyBSZWdpb25zIGNyZWF0ZSBTdGFja2luZyBDb250ZXh0cyAod2hpY2ggbWVhbnMg
dGhleSBjcmVhdGUgbGF5ZXJzKS4KLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBsYXllck93
bmVyKCkgY29uc3QgeyByZXR1cm4gKnRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChwYXJlbnQoKSk7
IH0KKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBsYXllck93bmVyKCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnBhcmVudCgpKTsgfQogCiAgICAg
Ym9vbCBoYXNDdXN0b21SZWdpb25TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ3VzdG9tUmVn
aW9uU3R5bGU7IH0KICAgICB2b2lkIGNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBSZW5k
ZXJPYmplY3QqKTsKQEAgLTE2Myw4ICsxNjMsNiBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQg
bV9jb21wdXRlZEF1dG9IZWlnaHQ7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpF
Q1QoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAKaW5kZXggNWNiY2ZmZDVjY2U2ZDIxOGVhNDFjNGI0Y2Y4ZWU1YzhkODY2OThlMS4uMTc0Yzhj
ZTU0YWM5NWVlODJhNzUwNTM4MzllN2QxOTI4NzFkMDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTg1LDcgKzg1LDcg
QEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyQ29udGVudEVsZW1lbnRzKCkKIAog
dm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnVwZGF0ZVdyaXRpbmdNb2RlKCkKIHsKLSAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZmlyc3RGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQobV9yZWdpb25MaXN0LmZpcnN0KCkpOworICAgIGF1dG8qIGZpcnN0RnJhZ21lbnQg
PSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4obV9yZWdpb25MaXN0LmZpcnN0KCkp
OwogICAgIGlmICghZmlyc3RGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzdHls
ZSgpLndyaXRpbmdNb2RlKCkgPT0gZmlyc3RGcmFnbWVudC0+c3R5bGUoKS53cml0aW5nTW9kZSgp
KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIGFkZEZyYWdtZW50VG9MaXN0KFJlbmRl
clJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtCiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiAiZ3JlYXRlciIgdGhhbiByZW5kZXJO
YW1lZEZsb3dGcmFnbWVudC4KICAgICAgICAgYXV0byBpdCA9IHJlZ2lvbkxpc3QuYmVnaW4oKTsK
LSAgICAgICAgd2hpbGUgKGl0ICE9IHJlZ2lvbkxpc3QuZW5kKCkgJiYgIWNvbXBhcmVSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudHMocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKml0KSkpCisgICAgICAgIHdoaWxlIChpdCAhPSByZWdpb25MaXN0LmVuZCgp
ICYmICFjb21wYXJlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRzKHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LCBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKml0KSkpCiAgICAgICAgICAg
ICArK2l0OwogICAgICAgICByZWdpb25MaXN0Lmluc2VydEJlZm9yZShpdCwgcmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQpOwogICAgIH0KQEAgLTIzMCwxOCArMjMwLDE4IEBAIHZvaWQgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lv
bikKICAgICBBU1NFUlQocmVuZGVyUmVnaW9uKTsKICAgICBBU1NFUlQoIXJlbmRlclJlZ2lvbi0+
aXNWYWxpZCgpKTsKIAotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKTsKKyAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBkb3du
Y2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lvbik7CiAgICAgcmVzZXRN
YXJrRm9yRGVzdHJ1Y3Rpb24oKTsKIAotICAgIGlmIChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+
cGFyZW50TmFtZWRGbG93VGhyZWFkKCkgJiYgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnBhcmVu
dE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhpcykpIHsKKyAgICBpZiAocmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCkgJiYgcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlzKSkgewogICAg
ICAgICAvLyBUaGUgb3JkZXIgb2YgaW52YWxpZCByZWdpb25zIGlzIGlycmVsZXZhbnQuCi0gICAg
ICAgIG1faW52YWxpZFJlZ2lvbkxpc3QuYWRkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAg
ICAgICAgbV9pbnZhbGlkUmVnaW9uTGlzdC5hZGQoJnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsK
ICAgICAgICAgLy8gUmVnaXN0ZXIgb3Vyc2VsZiB0byBnZXQgYSBub3RpZmljYXRpb24gd2hlbiB0
aGUgc3RhdGUgY2hhbmdlcy4KLSAgICAgICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnBhcmVu
dE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5hZGQodGhpcyk7CisgICAg
ICAgIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29i
c2VydmVyVGhyZWFkc1NldC5hZGQodGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRGcmFnbWVudFRvTmFtZWRGbG93VGhyZWFkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsK
KyAgICBhZGRGcmFnbWVudFRvTmFtZWRGbG93VGhyZWFkKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCk7CiAKICAgICBpbnZhbGlkYXRlUmVnaW9ucygpOwogfQpAQCAtMjUwLDIyICsyNTAsMjIgQEAg
dm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQoUmVuZGVy
UmVnaW9uKiByZW5kZXJSZWdpb24pCiB7CiAgICAgQVNTRVJUKHJlbmRlclJlZ2lvbik7CiAKLSAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSB0b1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7Ci0gICAgaWYgKHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSkgewotICAgICAgICBpZiAoIXJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2ludmFsaWRSZWdpb25MaXN0LmNvbnRhaW5zKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSk7Ci0g
ICAgICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LnJlbW92ZShyZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCk7Ci0gICAgICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRG
bG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJUaHJlYWRzU2V0LnJlbW92ZSh0aGlzKTsKKyAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBkb3duY2FzdDxS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lvbik7CisgICAgaWYgKHJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgIGlmICgh
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
bV9pbnZhbGlkUmVnaW9uTGlzdC5jb250YWlucygmcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsK
KyAgICAgICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QucmVtb3ZlKCZyZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCk7CisgICAgICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1l
ZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQucmVtb3ZlKHRoaXMpOwogICAgICAg
ICAgICAgLy8gTm8gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSByZWdpb25zIHJlY3RhbmdsZXMuIFRo
ZSByZW1vdmVkIHJlZ2lvbgogICAgICAgICAgICAgLy8gd2FzIG5vdCB0YWtlbiBpbnRvIGFjY291
bnQuIEp1c3QgcmV0dXJuIGhlcmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChyZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCkpOworICAgICAgICByZW1vdmVEZXBlbmRlbmN5T25G
bG93VGhyZWFkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgp
KTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KSk7Ci0gICAgYm9vbCB3YXNGaXJzdCA9IG1fcmVnaW9uTGlzdC5maXJzdCgp
ID09IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwotICAgIG1fcmVnaW9uTGlzdC5yZW1vdmUocmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIEFTU0VSVChtX3JlZ2lvbkxpc3QuY29udGFpbnMo
JnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSk7CisgICAgYm9vbCB3YXNGaXJzdCA9IG1fcmVnaW9u
TGlzdC5maXJzdCgpID09ICZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKKyAgICBtX3JlZ2lvbkxp
c3QucmVtb3ZlKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CiAKICAgICBpZiAoY2FuQmVEZXN0
cm95ZWQoKSkKICAgICAgICAgc2V0TWFya0ZvckRlc3RydWN0aW9uKCk7CkBAIC0zNzcsNyArMzc3
LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlY29yYXRpb25zQ2xpcFJl
Y3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KGMKIAogUmVuZGVyQmxvY2sqIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tUmVuZGVyQm94QXNSZW5kZXJCbG9jayhSZW5kZXJCb3gq
IHJlbmRlckJveCwgY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQsIGNvbnN0IFJlbmRlckJv
eCYgZmxvd2VkQm94KQogewotICAgIHJldHVybiB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChyZW5k
ZXJCb3gpLT5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KGFic29sdXRlUG9pbnQsIGZs
b3dlZEJveCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKnJl
bmRlckJveCkuZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveChhYnNvbHV0ZVBvaW50LCBm
bG93ZWRCb3gpOwogfQogCiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjpmcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KGNvbnN0IEludFBvaW50JiBh
YnNvbHV0ZVBvaW50LCBjb25zdCBSZW5kZXJCb3gmIGZsb3dlZEJveCkKQEAgLTM4OCwxMyArMzg4
LDEzIEBAIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmZy
YWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3goCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24p
LCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCgqaXRlcik7Ci0gICAgICAgIFJlbmRlckJsb2NrRmxvdyYgZnJhZ21lbnRDb250YWlu
ZXIgPSBmcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXIoKTsKKyAgICAgICAgYXV0byYgZnJhZ21l
bnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKippdGVyKTsKKyAgICAgICAg
UmVuZGVyQmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9IGZyYWdtZW50LmZyYWdtZW50Q29u
dGFpbmVyKCk7CiAgICAgICAgIEludFJlY3QgZnJhZ21lbnRBYnNvbHV0ZVJlY3Qocm91bmRlZElu
dFBvaW50KGZyYWdtZW50Q29udGFpbmVyLmxvY2FsVG9BYnNvbHV0ZSgpKSwgcm91bmRlZEludFNp
emUoZnJhZ21lbnRDb250YWluZXIucGFkZGluZ0JveFJlY3QoKS5zaXplKCkpKTsKICAgICAgICAg
aWYgKGZyYWdtZW50QWJzb2x1dGVSZWN0LmNvbnRhaW5zKGFic29sdXRlUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAgICAgICAgcmV0dXJuICZmcmFnbWVudDsKICAg
ICAgICAgCi0gICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRSZWdpb24pCisgICAgICAgIGlmICgm
ZnJhZ21lbnQgPT0gZW5kUmVnaW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApA
QCAtNDMwLDEzICs0MzAsMTMgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52
YWxpZFJlZ2lvbnMoKQogewogICAgIFZlY3RvcjxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCo+IG5l
d1ZhbGlkRnJhZ21lbnRzOwogICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9pbnZhbGlkUmVnaW9u
TGlzdCkgewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21l
bnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbik7CisgICAgICAgIGF1dG8mIG5h
bWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdp
b24pOwogICAgICAgICAvLyBUaGUgb25seSByZWFzb24gYSByZWdpb24gd291bGQgYmUgaW52YWxp
ZCBpcyBiZWNhdXNlIGl0IGhhcyBhIHBhcmVudCBmbG93IHRocmVhZC4KLSAgICAgICAgQVNTRVJU
KCFuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJl
bnROYW1lZEZsb3dUaHJlYWQoKSk7Ci0gICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC0+cGFy
ZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlzKSkKKyAgICAgICAgQVNTRVJUKCFu
YW1lZEZsb3dGcmFnbWVudC5pc1ZhbGlkKCkgJiYgbmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFt
ZWRGbG93VGhyZWFkKCkpOworICAgICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFt
ZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIG5ld1ZhbGlkRnJhZ21lbnRzLmFwcGVuZChuYW1lZEZsb3dGcmFnbWVudCk7Cisg
ICAgICAgIG5ld1ZhbGlkRnJhZ21lbnRzLmFwcGVuZCgmbmFtZWRGbG93RnJhZ21lbnQpOwogICAg
IH0KIAogICAgIGZvciAoYXV0byYgbmFtZWRGbG93RnJhZ21lbnQgOiBuZXdWYWxpZEZyYWdtZW50
cykgewpAQCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVj
a1JlZ2lvbnNXaXRoU3R5bGluZygpCiB7CiAgICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcg
PSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewot
ICAgICAgICBpZiAodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5oYXNDdXN0b21S
ZWdpb25TdHlsZSgpKSB7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudD4oKnJlZ2lvbikuaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkgewogICAgICAgICAgICAgaGFz
UmVnaW9uc1dpdGhTdHlsaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC04MTYsNyArODE2LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVu
ZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmoKICAgICAvLyBDbGVh
ciB0aGUgc3R5bGVzIGZvciB0aGUgb2JqZWN0IGluIHRoZSByZWdpb25zLgogICAgIC8vIEZJWE1F
OiBSZWdpb24gc3R5bGluZyBpcyBub3QgY29tcHV0ZWQgb25seSBmb3IgdGhlIHJlZ2lvbiByYW5n
ZSBvZiB0aGUgb2JqZWN0IHNvIHRoaXMgaXMgd2h5IHdlIG5lZWQgdG8gd2FsayB0aGUgd2hvbGUg
Y2hhaW4uCiAgICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpCi0gICAgICAgIHRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9u
KG9iamVjdCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVn
aW9uKS5jbGVhck9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dDaGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaApp
bmRleCBkODI3MTNhMjRlOTY4OTMwMDU3Y2RjYjY2M2NlMTk5YjFlMzQyMGI4Li4xYjBlNzk0MDUz
NmY3MDg0MDQ5Mjk3YTU3YmQ1MTU5NmRkMWQ4N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCkBAIC0xNTksOCArMTU5LDYgQEAgcHJp
dmF0ZToKICAgICBMYXlvdXRVbml0IG1fZmxvd0NvbnRlbnRCb3R0b207CiB9OwogCi1SRU5ERVJf
T0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTmFtZWRGbG93VGhyZWFkLCBpc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJOYW1lZEZsb3dUaHJlYWQsIGlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmlu
ZGV4IDg4ODBkZGU4NGFhOTc3YzQzNjQyYmJjNDcwOTE3MTI3ODhiOTAyYmYuLmFlOTMwNzhjZTk2
MGVjOTk4Zjc0MDI1NTYzZjVkNTIwMzdiY2RlMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCkBAIC01NjksMTMgKzU2OSwxMyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6Y2xlYXJOZWVkc0xheW91dCgpCiAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlUmVsYXlvdXRGb3JT
dWJ0cmVlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIGlmICghcmVuZGVyZXIuaXNS
ZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoIWlzPFJlbmRlclZpZXc+KHJlbmRlcmVyKSkgewogICAg
ICAgICBpZiAoIXJlbmRlcmVyLmlzUm9vdGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY2hlZHVsZVJlbGF5b3V0T2ZTdWJ0cmVl
KHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0b1JlbmRlclZpZXcocmVu
ZGVyZXIpLmZyYW1lVmlldygpLnNjaGVkdWxlUmVsYXlvdXQoKTsKKyAgICBkb3duY2FzdDxSZW5k
ZXJWaWV3PihyZW5kZXJlcikuZnJhbWVWaWV3KCkuc2NoZWR1bGVSZWxheW91dCgpOwogfQogCiB2
b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoYm9vbCBzY2hl
ZHVsZVJlbGF5b3V0LCBSZW5kZXJFbGVtZW50KiBuZXdSb290KQpAQCAtNjc3LDEzICs2NzcsMTMg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVDb250YWluZXJQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCkKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRMYXllck5lZWRzRnVsbFJlcGFpbnQoKQog
ewogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3Qo
dGhpcyktPmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludCk7CisgICAg
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPnNldFJlcGFp
bnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnRGb3JQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKQogewogICAg
IEFTU0VSVChoYXNMYXllcigpKTsKLSAgICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcykt
PmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9uZWRN
b3ZlbWVudExheW91dCk7CisgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRo
aXMpLmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCk7CiB9CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRh
aW5pbmdCbG9jaygpIGNvbnN0CkBAIC0xMjM3LDggKzEyMzcsOCBAQCB2b2lkIFJlbmRlck9iamVj
dDo6cmVwYWludFVzaW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlcGFpbnRDb250YWlu
ZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZChy
ZXBhaW50Q29udGFpbmVyKS0+cmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhyKTsKKyAgICBpZiAo
aXM8UmVuZGVyRmxvd1RocmVhZD4oKnJlcGFpbnRDb250YWluZXIpKSB7CisgICAgICAgIGRvd25j
YXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpyZXBhaW50Q29udGFpbmVyKS5yZXBhaW50UmVjdGFuZ2xl
SW5SZWdpb25zKHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNjI0LDggKzE2MjQs
OCBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkVtcGhhc2lzTWFya0NvbG9yKCkgY29u
c3QKIFNlbGVjdGlvblN1YnRyZWVSb290JiBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3QoKSBj
b25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuICp0b1JlbmRlck5hbWVkRmxvd1Ro
cmVhZChmbG93VGhyZWFkKTsKKyAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihmbG93
VGhyZWFkKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4o
KmZsb3dUaHJlYWQpOwogCiAgICAgcmV0dXJuIHZpZXcoKTsKIH0KQEAgLTE3NjEsNyArMTc2MSw3
IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyCiAjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKICAg
ICAvLyBoYXNUcmFuc2Zvcm0oKSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgb2JqZWN0IGhhcyB0cmFu
c2Zvcm0sIHRyYW5zZm9ybS1zdHlsZSBvciBwZXJzcGVjdGl2ZS4gV2UganVzdCBjYXJlIGFib3V0
IHRyYW5zZm9ybSwKICAgICAvLyBzbyBjaGVjayB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0gZGlyZWN0
bHkuCi0gICAgcmV0dXJuIChoYXNMYXllcigpICYmIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0
aGlzKS0+bGF5ZXIoKS0+dHJhbnNmb3JtKCkpIHx8IChjb250YWluZXJPYmplY3QgJiYgY29udGFp
bmVyT2JqZWN0LT5zdHlsZSgpLmhhc1BlcnNwZWN0aXZlKCkpOworICAgIHJldHVybiAoaGFzTGF5
ZXIoKSAmJiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+
dHJhbnNmb3JtKCkpIHx8IChjb250YWluZXJPYmplY3QgJiYgY29udGFpbmVyT2JqZWN0LT5zdHls
ZSgpLmhhc1BlcnNwZWN0aXZlKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGFpbmVy
T2JqZWN0KTsKICAgICByZXR1cm4gaGFzVHJhbnNmb3JtKCk7CkBAIC0xNzczLDE0ICsxNzczLDE0
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0CiAgICAgdHJhbnNmb3JtLm1ha2VJZGVudGl0eSgp
OwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Zmc2V0SW5Db250YWluZXIud2lkdGgoKSwgb2Zm
c2V0SW5Db250YWluZXIuaGVpZ2h0KCkpOwogICAgIFJlbmRlckxheWVyKiBsYXllcjsKLSAgICBp
ZiAoaGFzTGF5ZXIoKSAmJiAobGF5ZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcykt
PmxheWVyKCkpICYmIGxheWVyLT50cmFuc2Zvcm0oKSkKKyAgICBpZiAoaGFzTGF5ZXIoKSAmJiAo
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKSkg
JiYgbGF5ZXItPnRyYW5zZm9ybSgpKQogICAgICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXIt
PmN1cnJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgCiAjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKICAg
ICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9iamVjdC0+aGFzTGF5ZXIoKSAmJiBj
b250YWluZXJPYmplY3QtPnN0eWxlKCkuaGFzUGVyc3BlY3RpdmUoKSkgewogICAgICAgICAvLyBQ
ZXJwc2VjdGl2ZSBvbiB0aGUgY29udGFpbmVyIGFmZmVjdHMgdXMsIHNvIHdlIGhhdmUgdG8gZmFj
dG9yIGl0IGluIGhlcmUuCiAgICAgICAgIEFTU0VSVChjb250YWluZXJPYmplY3QtPmhhc0xheWVy
KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZlT3JpZ2luID0gdG9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0KGNvbnRhaW5lck9iamVjdCktPmxheWVyKCktPnBlcnNwZWN0aXZlT3JpZ2lu
KCk7CisgICAgICAgIEZsb2F0UG9pbnQgcGVyc3BlY3RpdmVPcmlnaW4gPSBkb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PigqY29udGFpbmVyT2JqZWN0KS5sYXllcigpLT5wZXJzcGVjdGl2
ZU9yaWdpbigpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZlTWF0
cml4OwogICAgICAgICBwZXJzcGVjdGl2ZU1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKGNvbnRhaW5l
ck9iamVjdC0+c3R5bGUoKS5wZXJzcGVjdGl2ZSgpKTsKQEAgLTE4NTgsMTUgKzE4NTgsMTUgQEAg
TGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFQKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9vdGVkKFJl
bmRlclZpZXcqKiB2aWV3KSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbyA9IHRo
aXM7Ci0gICAgd2hpbGUgKG8tPnBhcmVudCgpKQotICAgICAgICBvID0gby0+cGFyZW50KCk7Cisg
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXM7CisgICAgd2hpbGUgKHJlbmRl
cmVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAK
LSAgICBpZiAoIW8tPmlzUmVuZGVyVmlldygpKQorICAgIGlmICghaXM8UmVuZGVyVmlldz4oKnJl
bmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHZpZXcpCi0gICAgICAg
ICp2aWV3ID0gJmNvbnN0X2Nhc3Q8UmVuZGVyVmlldyY+KHRvUmVuZGVyVmlldygqbykpOworICAg
ICAgICAqdmlldyA9IGNvbnN0X2Nhc3Q8UmVuZGVyVmlldyo+KGRvd25jYXN0PFJlbmRlclZpZXc+
KHJlbmRlcmVyKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5OTksNyArMTk5OSw3IEBA
IHZvaWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIC8vIGJlIG1vdmVkIGlu
dG8gUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3kuCiAgICAgaWYgKGhhc0xheWVyKCkpIHsK
ICAgICAgICAgc2V0SGFzTGF5ZXIoZmFsc2UpOwotICAgICAgICB0b1JlbmRlckxheWVyTW9kZWxP
YmplY3QodGhpcyktPmRlc3Ryb3lMYXllcigpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PigqdGhpcykuZGVzdHJveUxheWVyKCk7CiAgICAgfQogCiAgICAgY2xlYXJM
YXlvdXRSb290SWZOZWVkZWQoKTsKQEAgLTIxMzIsNyArMjEzMiw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojpp
c0NvbXBvc2l0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNMYXllcigpICYmIHRvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CisgICAgcmV0
dXJuIGhhc0xheWVyKCkgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMp
LmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aGl0VGVz
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKQpAQCAt
MjU3OSw3ICsyNTc5LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QKIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBSZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
IGNvbnN0CiB7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmlz
UmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCisgICAgaWYgKCFpczxSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudD4oZmxvd1RocmVhZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklY
TUU6IE9uY2UgcmVnaW9ucyBhcmUgZnVsbHkgaW50ZWdyYXRlZCB3aXRoIHRoZSBjb21wb3NpdGlu
ZyBzeXN0ZW0gd2Ugc2hvdWxkIHVuY29tbWVudCB0aGlzIGFzc2VydC4KQEAgLTI1ODcsNyArMjU4
Nyw3IEBAIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0CiAgICAgLy8gYSBsYXllciB3aXRob3V0IGtub3dp
bmcgdGhlIGNvbnRhaW5pbmcgcmVnaW9uIGluIGFkdmFuY2UuCiAgICAgLy8gQVNTRVJUKGZsb3dU
aHJlYWQtPmN1cnJlbnRSZWdpb24oKSAmJiBmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCktPmlz
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSk7CiAKLSAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigp
KTsKIH0KIAogUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAppbmRleCBlMjllNDkyZThhYzA1MzM3NTg3MjY2NTgzMGFjZWQ4MjIxODQwYzJjLi5kN2Qz
MTk4MWEyZmZmOTNiZmI0NGYzNzU4ZTU4NGI2MzQzYmNhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMTIyLDEwICsxMTIyLDYgQEAgaW5saW5lIGJvb2wg
UmVuZGVyT2JqZWN0OjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZCgpCiAgICAgcmV0dXJu
IG1fYml0ZmllbGRzLmJveERlY29yYXRpb25TdGF0ZSgpID09IEhhc0JveERlY29yYXRpb25zQW5k
QmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQ7CiB9CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBtYWNybyBhbmQgdXNlIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVCgpIGlu
c3RlYWQuCi0jZGVmaW5lIFJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUs
IHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb1ZhbHVlVHlwZU5hbWUsIFJlbmRl
ck9iamVjdCwgcmVuZGVyZXIsIGlzPFRvVmFsdWVUeXBlTmFtZT4oKnJlbmRlcmVyKSwgaXM8VG9W
YWx1ZVR5cGVOYW1lPihyZW5kZXJlcikpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Rl
ZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoVG9WYWx1ZVR5cGVOYW1l
LCBwcmVkaWNhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgK
aW5kZXggODZlODc2NTRhMzdlODFkZDAzMDFlNmY0MTUyMTZiYzRjNjYzMzE1Ni4uZTgyNGYxYTU0
MTk3YjI3ZWFiNmIzZDAxYzUzMzY3MDdhMTdjZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmgKQEAgLTU4LDggKzU4LDYgQEAgcHJpdmF0ZToKICAgICBUaW1l
cjxSZW5kZXJQcm9ncmVzcz4gbV9hbmltYXRpb25UaW1lcjsKIH07CiAKLVJFTkRFUl9PQkpFQ1Rf
VFlQRV9DQVNUUyhSZW5kZXJQcm9ncmVzcywgaXNQcm9ncmVzcygpKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJQ
cm9ncmVzcywgaXNQcm9ncmVzcygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1Ynku
Y3BwCmluZGV4IGYwMmFiYzBkYTk1YTc4YTg0ZGE2ZmYxOWNjNzAxMDE2MjUwMDk3ODEuLmQyZTA4
ZDQwYWY2YTMwYTM0MjIxYTMyNjg0MTM5MzQ2MDVhZjVjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieS5jcHAKQEAgLTk0LDEwICs5NCwxMCBAQCBzdGF0aWMgUmVuZGVyQmxv
Y2sqIGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jayhSZW5kZXJPYmplY3QmIHJ1YnkpCiBz
dGF0aWMgUmVuZGVyUnVieVJ1biogbGFzdFJ1YnlSdW4oY29uc3QgUmVuZGVyRWxlbWVudCogcnVi
eSkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkKCk7Ci0gICAg
aWYgKGNoaWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkpCisgICAgaWYgKGNoaWxkICYmICFpczxS
ZW5kZXJSdWJ5UnVuPigqY2hpbGQpKQogICAgICAgICBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKTsKLSAgICBBU1NFUlQoIWNoaWxkIHx8IGNoaWxkLT5pc1J1YnlSdW4oKSB8fCBjaGls
ZC0+aXNCZWZvcmVDb250ZW50KCkgfHwgY2hpbGQgPT0gcnVieUJlZm9yZUJsb2NrKHJ1YnkpKTsK
LSAgICByZXR1cm4gY2hpbGQgJiYgY2hpbGQtPmlzUnVieVJ1bigpID8gdG9SZW5kZXJSdWJ5UnVu
KGNoaWxkKSA6IDA7CisgICAgQVNTRVJUKCFjaGlsZCB8fCBpczxSZW5kZXJSdWJ5UnVuPigqY2hp
bGQpIHx8IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxv
Y2socnVieSkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihjaGlsZCk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVyUnVieVJ1biYgZmluZFJ1YnlSdW5QYXJlbnQoUmVuZGVy
T2JqZWN0JiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2Uu
Y3BwCmluZGV4IDNlNTM5Mjk5Y2ViNjdlM2Q0Yzk0MzA2NjAxNDczY2JjZjY5ZDkyNDEuLjMxMzI5
OTg1NmQxY2U2YTM4ZjFiZGExNzE0Y2JmNmUyMDQ3MDMzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcApAQCAtMTMxLDkgKzEzMSw3IEBAIHZvaWQgUmVu
ZGVyUnVieUJhc2U6Om1vdmVCbG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJl
bmRlck9iamVjdCogYmVmCiBSZW5kZXJSdWJ5UnVuKiBSZW5kZXJSdWJ5QmFzZTo6cnVieVJ1bigp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKLSAgICBBU1NFUlQocGFyZW50KCktPmlz
UnVieVJ1bigpKTsKLQotICAgIHJldHVybiAmdG9SZW5kZXJSdWJ5UnVuKCpwYXJlbnQoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHBhcmVudCgpKTsKIH0KIAogRVRleHRB
bGlnbiBSZW5kZXJSdWJ5QmFzZTo6dGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCAvKiBlbmRzV2l0
aFNvZnRCcmVhayAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5UnVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmNwcAppbmRleCAxNTI0YWQzODM2MjA5MjA0YTQ2YWZkZTVhNmQ1MjA0MTE1YTU3NzE3Li5j
NWFhNDAzYTRkNWY3ZTlhMWU1ZWJiZjY3ZmNmOWFiODA5YTNhZDI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCkBAIC0xNjMsMTUgKzE2MywxNSBAQCBSZW5k
ZXJPYmplY3QqIFJlbmRlclJ1YnlSdW46OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQp
CiAgICAgaWYgKCFiZWluZ0Rlc3Ryb3llZCgpICYmICFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkg
JiYgY2hpbGQuaXNSdWJ5VGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclJ1YnlCYXNlKiBiYXNlID0g
cnVieUJhc2UoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByaWdodE5laWdoYm91ciA9IG5leHRT
aWJsaW5nKCk7Ci0gICAgICAgIGlmIChiYXNlICYmIHJpZ2h0TmVpZ2hib3VyICYmIHJpZ2h0TmVp
Z2hib3VyLT5pc1J1YnlSdW4oKSkgeworICAgICAgICBpZiAoYmFzZSAmJiBpczxSZW5kZXJSdWJ5
UnVuPihyaWdodE5laWdoYm91cikpIHsKICAgICAgICAgICAgIC8vIFJ1YnkgcnVuIHdpdGhvdXQg
YSBiYXNlIGNhbiBoYXBwZW4gb25seSBhdCB0aGUgZmlyc3QgcnVuLgotICAgICAgICAgICAgUmVu
ZGVyUnVieVJ1biogcmlnaHRSdW4gPSB0b1JlbmRlclJ1YnlSdW4ocmlnaHROZWlnaGJvdXIpOwot
ICAgICAgICAgICAgaWYgKHJpZ2h0UnVuLT5oYXNSdWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVuZGVyUnVieUJhc2UqIHJpZ2h0QmFzZSA9IHJpZ2h0UnVuLT5ydWJ5QmFzZVNhZmUoKTsK
KyAgICAgICAgICAgIFJlbmRlclJ1YnlSdW4mIHJpZ2h0UnVuID0gZG93bmNhc3Q8UmVuZGVyUnVi
eVJ1bj4oKnJpZ2h0TmVpZ2hib3VyKTsKKyAgICAgICAgICAgIGlmIChyaWdodFJ1bi5oYXNSdWJ5
QmFzZSgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyUnVieUJhc2UqIHJpZ2h0QmFzZSA9IHJp
Z2h0UnVuLnJ1YnlCYXNlU2FmZSgpOwogICAgICAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIGNo
aWxkcmVuIGluIGEgc2luZ2xlIGJhc2UsIHRoZW4gc3dhcCB0aGUgYmFzZXMuCiAgICAgICAgICAg
ICAgICAgcmlnaHRCYXNlLT5tZXJnZUNoaWxkcmVuV2l0aEJhc2UoYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgbW92ZUNoaWxkVG8ocmlnaHRSdW4sIGJhc2UpOwotICAgICAgICAgICAgICAgIHJpZ2h0
UnVuLT5tb3ZlQ2hpbGRUbyh0aGlzLCByaWdodEJhc2UpOworICAgICAgICAgICAgICAgIG1vdmVD
aGlsZFRvKCZyaWdodFJ1biwgYmFzZSk7CisgICAgICAgICAgICAgICAgcmlnaHRSdW4ubW92ZUNo
aWxkVG8odGhpcywgcmlnaHRCYXNlKTsKICAgICAgICAgICAgICAgICAvLyBUaGUgbm93IGVtcHR5
IHJ1YnkgYmFzZSB3aWxsIGJlIHJlbW92ZWQgYmVsb3cuCiAgICAgICAgICAgICAgICAgQVNTRVJU
KCFydWJ5QmFzZSgpLT5maXJzdENoaWxkKCkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKaW5kZXggZmRmMzgxZmQ5ZmI1ZWYwYjY4ZDkzZTU3
MzNhMjY3NGJhN2ZjZTkzOC4uZDlkY2U0Zjc4YTZlZTVlMzRjYTc2OTllYzRjMTAxM2E1ZjY4Yzdj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCkBAIC03Nyw4ICs3
Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3Vz
QmxvY2soUmVuZGVyQmxvY2sqKSB7IH0KIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhS
ZW5kZXJSdWJ5UnVuLCBpc1J1YnlSdW4oKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyUnVieVJ1biwgaXNSdWJ5
UnVuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKaW5kZXggZGE4YWM3
YWI4Njc3NDk4NDgwNDExNWJkN2Y1ODY2OThmMTJkYzI5MS4uODZkYTIyNWEwMzBmODJlYzM1YTBh
ZTNjNWVjZGNiMTQxNjY0N2Y4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuaApAQCAtNTEsOCArNTEsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KSBvdmVycmlkZTsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJTbGlkZXIs
IGlzU2xpZGVyKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclNsaWRlciwgaXNTbGlkZXIoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBhYjQyZDU0YTQwZTIzZGJmMmI4MmE2
YTE0NWJlZGJkNTgxN2U5NmI1Li44NTdkZTY3M2Q2YTA2YzRhNTBjYWExNWFmMDI0MDhiYjg3YjM1
Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00MzgsOCAr
NDM4LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
IGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXkKIAogQUxXQVlTX0lOTElORSBmbG9hdCBS
ZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBs
ZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzQ29tYmlu
ZVRleHQoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRleHQg
PSB0b1JlbmRlckNvbWJpbmVUZXh0KCp0aGlzKTsKKyAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJp
bmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CisgICAgICAgIGNvbnN0IFJl
bmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0
PigqdGhpcyk7CiAgICAgICAgIGlmIChjb21iaW5lVGV4dC5pc0NvbWJpbmVkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gY29tYmluZVRleHQuY29tYmluZWRUZXh0V2lkdGgoZik7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggYzU5ODc1YTY1
ZjM0N2M3MDk2NmQ5ODkyZmZhZDVhYjVjNmYzNWJjOS4uY2Q2MzI5NTkyNzE2ZDNiMTc4YWUxMzQ4
YWY4NjEwNzhhODFhYTg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCkBAIC0xNjIwLDcgKzE2MjAsNyBAQCBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFu
aW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogSW50
UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJ
bnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgUmVuZGVyUHJvZ3Jl
c3MmIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAg
IGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJl
bmRlck9iamVjdCk7CiAgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewog
ICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVy
UHJvZ3Jlc3MucG9zaXRpb24oKTsKICAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRp
cmVjdGlvbigpID09IFJUTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQppbmRleCBhN2RiZTg1NzMyOWQxYzY2N2UyN2YxNGFjOTNlNzQzOTUzNDM0NmViLi5lZDUx
NjVlYmI2ZjNkZTc3NjkwNTkxYmVhOWExY2JmZWU2ZDQyZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC04NDksNyArODQ5LDcgQEAgZG91YmxlIFJl
bmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzJikgY29uc3QKIAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlcmVyLmlzUHJvZ3Jlc3MoKSkKKyAg
ICBpZiAoIWlzPFJlbmRlclByb2dyZXNzPihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKQEAgLTg5Nyw3ICs4OTcs
NyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogCiAgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxv
YXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCByZWN0LndpZHRoKCks
IHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKIAotICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5k
ZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJlcik7CisgICAgY29uc3QgYXV0
byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIpOwog
ICAgIGlmIChyZW5kZXJQcm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgLy8gMikg
RHJhdyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRv
KHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA2NzczMWI0ZmY3NjVkNTNmMGMwZjE5OGY1
YWIwYzEzZjJkYWQyNThmLi5lNzg1YmVkMjhlY2RiYjg1ODZlNmRiM2I1ZTllNDkxNzVmZDI5YjQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC05Njcs
MTIgKzk2NywxMiBAQCBJbnRTaXplIFJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMo
Y29uc3QgUmVuZGVyTWV0ZXImIHJlbmRlck1ldGVyLCBjb25zdAogCiBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJl
bmRlck9iamVjdC5pc01ldGVyKCkpCisgICAgaWYgKCFpczxSZW5kZXJNZXRlcj4ocmVuZGVyT2Jq
ZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRp
Y2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcihyZW5kZXJP
YmplY3QpKTsKKyAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9y
Rm9yKGRvd25jYXN0PFJlbmRlck1ldGVyPihyZW5kZXJPYmplY3QpKTsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIFtj
ZWxsIGRyYXdXaXRoRnJhbWU6cmVjdCBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKHJlbmRlck9iamVj
dCldOwpAQCAtMTExNSwxMyArMTExNSwxMyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbgogCiBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC5pc1Byb2dyZXNzKCkpCisgICAgaWYgKCFp
czxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhyZW5k
ZXJPYmplY3QsIHJlY3QpOwogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9s
U2l6ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCi0gICAgY29uc3QgUmVuZGVyUHJv
Z3Jlc3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7
CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9ncmVz
cz4ocmVuZGVyT2JqZWN0KTsKICAgICBISVRoZW1lVHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAg
ICAgdHJhY2tJbmZvLnZlcnNpb24gPSAwOwogICAgIGlmIChjb250cm9sU2l6ZSA9PSBOU1JlZ3Vs
YXJDb250cm9sU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVT
YWZhcmkuY3BwCmluZGV4IGYzZGM1YTUxOWU0NWRlZThhMjE2YTFiYjI2ZDg5ZmUwNTY0OGY0NDEu
Ljg2NTIyMTM5ODcyYjZkZmI1M2YxMzUzMTNmMGNlZGIzMDZhYTIxMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAtMTIxNiwxMCArMTIx
NiwxMCBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogewogICAgIC8vIE5PVEU6IFRoaXMgcm91
dGluZSBpcyBmb3IgdGVzdGluZyBvbmx5LiBJdCBzaG91bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBh
IHJlYWwgQ0ctYmFzZWQgaW1wbGVtZW50YXRpb24uCiAgICAgLy8gUmlnaHQgbm93IGl0IHVzZXMg
YSBzbGlkZXIsIHdpdGggdGhlIHRodW1iIHBvc2l0aW9uZWQgYXQgdGhlIG1ldGVyIHBvaW50Lgot
ICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKKyAgICBpZiAoIWlzPFJlbmRlck1ldGVy
PihyZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVs
ZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkubWV0ZXJFbGVtZW50
KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PFJlbmRlck1ldGVy
PihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmluZyA9IHN0
YXRpY19jYXN0PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0aWNfY2Fz
dDxkb3VibGU+KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKaW5kZXggNDBjZTUyOTZmNDBlNTcyNTg3ODUzMWM5YzQ3
OGRjN2QxOTkzZGExNC4uYWRiNDYzMjUzOWYyMTk4MDVhMjlkYjRiODA1ZTVkMzVjMGU5MzNmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCkBAIC0xMTc1
LDEwICsxMTc1LDEwIEBAIEludFNpemUgUmVuZGVyVGhlbWVXaW46Om1ldGVyU2l6ZUZvckJvdW5k
cyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmIGJvCiAKIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICgh
cmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKKyAgICBpZiAoIWlzPFJlbmRlck1ldGVyPihyZW5kZXJP
YmplY3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVs
ZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkubWV0ZXJFbGVtZW50KCk7CisgICAg
SFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PFJlbmRlck1ldGVyPihyZW5kZXJP
YmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgVGhlbWVEYXRhIHRoZW1lID0gZ2V0VGhlbWVE
YXRhKHJlbmRlck9iamVjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCAyNGYwN2E0NzkyMWRiYzc0MzZjOGY2N2MxYmZiOTQxYThkNTg2
OWM4Li42ODk4NzkwYmUzNGY0ZDMxZTM1MDA4NzUzODhkYjllYTU3N2FkMmJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC02NTIsOCArNjUy
LDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJSZWdpb25MaXN0KGNvbnN0IFJlbmRlclJlZ2lv
bkxpc3QmIGZsb3dUaHJlYWRSZWdpb25MaXN0LAogCiAgICAgICAgIEVsZW1lbnQqIGdlbmVyYXRp
bmdFbGVtZW50ID0gcmVuZGVyUmVnaW9uLT5nZW5lcmF0aW5nRWxlbWVudCgpOwogICAgICAgICBp
ZiAoZ2VuZXJhdGluZ0VsZW1lbnQpIHsKLSAgICAgICAgICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCA9IHJlbmRlclJlZ2lvbi0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwot
ICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgdG9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pLT5oYXNDdXN0b21SZWdpb25TdHlsZSgpKQorICAg
ICAgICAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gaXM8UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOworICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQgJiYgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5k
ZXJSZWdpb24pLmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwg
IiByZWdpb24gc3R5bGU6IDEiOwogICAgICAgICAgICAgaWYgKHJlbmRlclJlZ2lvbi0+aGFzQXV0
b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0IjsKQEAgLTgwMiw4ICs4MDIsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZQogICAg
IAogICAgIC8vIEFsdG91Z2ggdGhlIFJlbmRlckZsb3dUaHJlYWQgcmVxdWlyZXMgYSBsYXllciwg
aXQgaXMgbm90IGNvbGxlY3RlZCBieSBpdHMgcGFyZW50LAogICAgIC8vIHNvIHdlIGhhdmUgdG8g
dHJlYXQgaXQgYXMgYSBzcGVjaWFsIGNhc2UuCi0gICAgaWYgKGwtPnJlbmRlcmVyKCkuaXNSZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFkcyh0cywgdG9SZW5k
ZXJWaWV3KGwtPnJlbmRlcmVyKCkpLCByb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBpbmRlbnQs
IGJlaGF2aW9yKTsKKyAgICBpZiAoaXM8UmVuZGVyVmlldz4obC0+cmVuZGVyZXIoKSkpCisgICAg
ICAgIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFkcyh0cywgZG93bmNhc3Q8UmVuZGVyVmlldz4o
bC0+cmVuZGVyZXIoKSksIHJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3QsIGluZGVudCwgYmVoYXZp
b3IpOwogfQogCiBzdGF0aWMgU3RyaW5nIG5vZGVQb3NpdGlvbihOb2RlKiBub2RlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAppbmRleCA1NGFlM2YwNWJhMTBmOTUxNDE3ZmQ2
NjljOTY0YzQwMTJkYTI4NzI1Li5lYTYwOGVjODE2NjBiYjA0NzcxNWMzOTJlYzRjZDc0YzBmNzU2
NzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaApAQCAtOTAsOCArOTAs
NiBAQCBwcml2YXRlOgogICAgIExheW91dFNpemUgbV9jYWNoZWRJbWFnZVNpemU7CiB9OwogCi1S
RU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyVmlkZW8sIGlzVmlkZW8oKSkKLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1Qo
UmVuZGVyVmlkZW8sIGlzVmlkZW8oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAppbmRleCA3NjQyMjkxMGUzYjFlOWFjYzhmZGNlYmVjZDM5MjUwYWZiZWEzZmQ3Li41MTYw
OTI2ZTA0NjI3ODM1ODlkODAyNzBkOGRhMTRlY2M5MjYyMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IFNlbGVjdGlv
bkl0ZXJhdG9yIHsKICAgICAKICAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCiAgICAgewotICAg
ICAgICBpZiAoIW1fY3VycmVudCB8fCAhbV9jdXJyZW50LT5pc1JlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKCkpCisgICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXI+KG1fY3VycmVudCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IHRvUmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIobV9jdXJyZW50KTsKLSAgICAgICAgbV9z
cGFubmVyU3RhY2suYXBwZW5kKHBsYWNlaG9sZGVyKTsKLSAgICAgICAgbV9jdXJyZW50ID0gcGxh
Y2Vob2xkZXItPnNwYW5uZXIoKTsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2Fz
dDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7CisgICAg
ICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgICAgICBtX2N1cnJl
bnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CiAgICAgfQogICAgIAogICAgIFJlbmRlck9iamVj
dCogY3VycmVudCgpCkBAIC01MDMsNyArNTAzLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb3NpdGVkKFJlbmRlckVsZW1lbnQqIG9iamVjdCkKIHsK
LSAgICByZXR1cm4gb2JqZWN0LT5oYXNMYXllcigpICYmIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dChvYmplY3QpLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKTsKKyAgICByZXR1cm4gb2JqZWN0LT5o
YXNMYXllcigpICYmIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpvYmplY3QpLmxh
eWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJP
YnNjdXJlc0JhY2tncm91bmQoUmVuZGVyRWxlbWVudCogcm9vdE9iamVjdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDgzYWJlNzJhNjc3NTFjNGI1MDMzOWY0MmExNTcw
NjliMmUzNWY5YTUuLjI5NmZmNTY4MTRmNzlhMzY0MTE3NTQ0N2M3NjQxOWQ4NDQ3ZGJmZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMzY5LDggKzM2OSw2IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJWaWV3
LCBpc1JlbmRlclZpZXcoKSkKLQogLy8gU3RhY2stYmFzZWQgY2xhc3MgdG8gYXNzaXN0IHdpdGgg
TGF5b3V0U3RhdGUgcHVzaC9wb3AKIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5b3V0U3RhdGVNYWludGFpbmVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAppbmRleCBiMjdhZTlhZTNjZmIwYzVlZjMwMmQxYzUx
YzY5MTZiZmFkNTc2NzBjLi5hNTU1NzhhMzIzZGNkZTk5NzNkNjBhYzJjYTU3Mjc4Yjk5NDMyZDIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCkBAIC0xMDQsOCArMTA0
LDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSByZWN0YW5nbGUg
bmVlZHMgdG8gcmVtYWluIGNvcnJlY3QgYWZ0ZXIgc2Nyb2xsaW5nLCBzbyBpdCBpcyBzdG9yZWQg
aW4gY29udGVudCB2aWV3IGNvb3JkaW5hdGVzLCBhbmQgbm90IGNsaXBwZWQgdG8gd2luZG93Lgog
fTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlcldpZGdldCwgaXNXaWRnZXQoKSkK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRF
Ul9PQkpFQ1QoUmVuZGVyV2lkZ2V0LCBpc1dpZGdldCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5o
CmluZGV4IGI2NGM3NjQ0YzY5ODIwMjk2MjFlMDg0M2Q0YmU4MTRmMTI3NDM5MzAuLjUzZjAxYzFm
OGE4YTM4ZDE4ZGI1MDUzMTMwOTZlZGQ4Mzc1MzRlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJz
LmgKQEAgLTU5NCw4ICs1OTQsOCBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRs
ZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgIGlmICht
X2F1dG9XcmFwICYmICFSZW5kZXJTdHlsZTo6YXV0b1dyYXAobV9sYXN0V1MpICYmIG1faWdub3Jp
bmdTcGFjZXMpCiAgICAgICAgIGNvbW1pdExpbmVCcmVha0F0Q3VycmVudFdpZHRoKHJlbmRlclRl
eHQpOwogCi0gICAgaWYgKHJlbmRlclRleHQuc3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIG1f
Y3VycmVudC5yZW5kZXJlcigpLT5pc0NvbWJpbmVUZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRl
eHQoKm1fY3VycmVudC5yZW5kZXJlcigpKS5pc0NvbWJpbmVkKCkpIHsKLSAgICAgICAgUmVuZGVy
Q29tYmluZVRleHQmIGNvbWJpbmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3Vy
cmVudC5yZW5kZXJlcigpKTsKKyAgICBpZiAocmVuZGVyVGV4dC5zdHlsZSgpLmhhc1RleHRDb21i
aW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCptX2N1cnJlbnQucmVuZGVyZXIoKSkgJiYg
IWRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PigqbV9jdXJyZW50LnJlbmRlcmVyKCkpLmlzQ29t
YmluZWQoKSkgeworICAgICAgICBhdXRvJiBjb21iaW5lUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5k
ZXJDb21iaW5lVGV4dD4oKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICAgICAgY29tYmluZVJl
bmRlcmVyLmNvbWJpbmVUZXh0KCk7CiAgICAgICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIHJlbmRl
cmVyJ3MgdGV4dCBtYXkgaGF2ZSBjaGFuZ2VkLiBJbmNyZW1lbnQgc3RhbGUgaXRlcmF0b3IgcG9z
aXRpb25zCiAgICAgICAgIGlmIChpdGVyYXRvcklzQmV5b25kRW5kT2ZSZW5kZXJDb21iaW5lVGV4
dChtX2xpbmVCcmVhaywgY29tYmluZVJlbmRlcmVyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCmluZGV4IGM3NzRhNTg2NjY3NjAxN2I5NDg2NjA5
ZTVlYTYwNjg4M2I4ZDM5OTUuLmI2ODU3YjZmNDM3YWQ1MjZhNTg3MWE4ZjQwMmM0NzJmMGI3NjU4
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAK
QEAgLTY3LDkgKzY3LDkgQEAgdm9pZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNl
KElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJgogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICBtX2Js
b2NrLnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobV9ibG9jay5pbnNlcnRGbG9hdGluZ09iamVjdChk
b3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkpLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBs
aW5lSW5mbywgd2lkdGgpOwotICAgICAgICBlbHNlIGlmIChvYmplY3QuaXNUZXh0KCkgJiYgb2Jq
ZWN0LnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBvYmplY3QuaXNDb21iaW5lVGV4dCgpICYm
ICF0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCkuaXNDb21iaW5lZCgpKSB7Ci0gICAgICAgICAg
ICB0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCkuY29tYmluZVRleHQoKTsKLSAgICAgICAgICAg
IGlmICh0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCkuaXNDb21iaW5lZCgpKQorICAgICAgICBl
bHNlIGlmIChpczxSZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KSAmJiBvYmplY3Quc3R5bGUoKS5o
YXNUZXh0Q29tYmluZSgpICYmICFkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5p
c0NvbWJpbmVkKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0Pihv
YmplY3QpLmNvbWJpbmVUZXh0KCk7CisgICAgICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyQ29t
YmluZVRleHQ+KG9iamVjdCkuaXNDb21iaW5lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIHJlc29sdmVyLmluY3JlbWVudCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDE0OGQzYzIzZTMwNDU0MWU0ZjgzYmMyNWVkYjlmZTUx
NjU1ZDdjZjMuLmE4NTIxN2JkMzAwNGQwN2M2NDRkOTY1NWFiNjkwZDA0Zjg1ZTI2YjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTIyMjAsMTQgKzIyMjAsMTMgQEAgYm9v
bCBJbnRlcm5hbHM6OmlzUGx1Z2luVW5hdmFpbGFiaWxpdHlJbmRpY2F0b3JPYnNjdXJlZChFbGVt
ZW50KiBlbGVtZW50LCBFeGNlcHQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIg
fHwgIXJlbmRlcmVyLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKKyAgICBhdXRvKiByZW5kZXJlciA9
IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4o
cmVuZGVyZXIpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVuZGVyRW1iZWRkZWRPYmplY3QqIGVtYmVkID0g
dG9SZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlcik7Ci0gICAgcmV0dXJuIGVtYmVkLT5pc1Jl
cGxhY2VtZW50T2JzY3VyZWQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KCpyZW5kZXJlcikuaXNSZXBsYWNlbWVudE9ic2N1cmVkKCk7CiB9CiAgICAgCiBib29s
IEludGVybmFsczo6aXNQbHVnaW5TbmFwc2hvdHRlZChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCBmMjRkZmQyN2I0
MzU5ZTUwOTJlNjEwMTIyZjVhMzBhYWZkYjQzMGQyLi4zOTZlNjFlYjZiYWU4NmQ3NGJjZGM1OGQ2
Y2U2Nzc1YTlmYjNmNzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC00MzAs
MTAgKzQzMCw4IEBAIC0gKHZvaWQpc2VuZE1vZGlmaWVyRXZlbnRXaXRoS2V5Q29kZTooaW50KWtl
eUNvZGUgY2hhcmFjdGVyOihjaGFyKWNoYXJhY3RlcgogCiAtICh2b2lkKXBsdWdpbkhvc3REaWVk
CiB7Ci0gICAgaWYgKF9lbGVtZW50LT5yZW5kZXJlcigpICYmIF9lbGVtZW50LT5yZW5kZXJlcigp
LT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAgUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJl
bmRlcmVyID0gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChfZWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0g
ICAgICAgIHJlbmRlcmVyLT5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJl
ZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7Ci0gICAgfQorICAgIGlmIChpczxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4oX2VsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICBkb3duY2FzdDxSZW5k
ZXJFbWJlZGRlZE9iamVjdD4oKl9lbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7CiAKICAg
ICBfcGx1Z2luTGF5ZXIgPSBuaWw7CiAgICAgX3Byb3h5ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA5
OTg1OTRmYWQyNTM4NjlkNWFjNzc2YjQ3NDRlNjcyNDE4YjNkMDcxLi5iOTE0NGZiYWY4ZDdmMTQy
NjA0YTM1ZDdkZmQ2NWI1Y2NjMDAxN2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC0yOTAsMTEgKzI5MCwx
MSBAQCAtICh2b2lkKXJlc3RhcnRUaW1lcnMKIAogLSAoTlNSZWN0KV93aW5kb3dDbGlwUmVjdAog
ewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBfZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAg
ICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwogCi0gICAgcmV0dXJuIHRvUmVuZGVyV2lk
Z2V0KHJlbmRlcmVyKS0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpbmRvd0NsaXBSZWN0KCk7CiB9CiAKIC0gKE5TUmVjdCl2
aXNpYmxlUmVjdApAQCAtODc0LDEzICs4NzQsMTMgQEAgLSAodm9pZClpbnZhbGlkYXRlUGx1Z2lu
Q29udGVudFJlY3Q6KE5TUmVjdClyZWN0CiAKIC0gKE5TUmVjdClhY3R1YWxWaXNpYmxlUmVjdElu
V2luZG93CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5kZXJl
cigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gX2VsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAKICAgICBJbnRSZWN0IHdp
ZGdldFJlY3QgPSByZW5kZXJlci0+cGl4ZWxTbmFwcGVkQWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CiAgICAgd2lkZ2V0UmVjdCA9IHJlbmRlcmVyLT52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dGVudHNUb1dpbmRvdyh3aWRnZXRSZWN0KTsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHRvUmVu
ZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2luZG93Q2xpcFJlY3QoKSwgd2lkZ2V0UmVjdCk7CisgICAg
cmV0dXJuIGludGVyc2VjdGlvbihkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lu
ZG93Q2xpcFJlY3QoKSwgd2lkZ2V0UmVjdCk7CiB9CiAKIC0gKENBTGF5ZXIgKilwbHVnaW5MYXll
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5tbQppbmRleCBjNWY5ZTNhZDM1ZGY4NzllOWFmMzRlNDhiNjBiNTdhYTRi
ZWYyODkzLi4yZTQzZWY4NTcyOWNmZmExOGNjZGEwNTQ4YWVhZmZhZjQ3MmVkZmNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQpAQCAtMTk2Miw4ICsxOTYyLDggQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgc2l6ZSwgSFRNTFAK
ICAgICBpZiAocGx1Z2luUGFja2FnZSkgewogICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1BsdWdp
bihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVuZGxl
VmVyc2lvbl0pKSB7CiAgICAgICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQ
bHVnSW5WZXJzaW9uOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1i
ZWRkZWRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KGVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJF
bWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKKyAgICAgICAgICAgIGlmIChp
czxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIo
KSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Oklu
c2VjdXJlUGx1Z2luVmVyc2lvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
W3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKQog
ICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQ
bHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwgYXR0cmlidXRlS2V5cywga2l0KHBhcmFtVmFs
dWVzKSwgYmFzZVVSTCwga2l0KGVsZW1lbnQpLCBsb2FkTWFudWFsbHkpOwpAQCAtMjA2Nyw4ICsy
MDY3LDggQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVK
YXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHMKICAgICBpZiAocGx1Z2luUGFja2FnZSkg
ewogICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1BsdWdpbihbcGx1Z2luUGFja2FnZSBidW5kbGVJ
ZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVuZGxlVmVyc2lvbl0pKSB7CiAgICAgICAgICAg
ICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQbHVnSW5WZXJzaW9uOwotICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSkKLSAgICAgICAg
ICAgICAgICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5zZXRQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQ
bHVnaW5WZXJzaW9uKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4o
KmVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckVt
YmVkZGVkT2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIoKSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7CiAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAg
ICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlIGNsYXNzXV0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAppbmRleCAwMjA4MDcxMDdlNGRiOTM4MTIyMTFlNzlmZDgzZjNjOGZk
MDc2ZDc4Li5mMzM1OWI4OTllNGQ2YTBkZDY0MGJjNDhmMDgxNGU0ZTE5MWRhYzA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0x
NDY2LDE2ICsxNDY2LDEyIEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQo
KQogewogICAgIG1fcGx1Z2luUHJvY2Vzc0hhc0NyYXNoZWQgPSB0cnVlOwogCi0gICAgaWYgKCFt
X3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCisgICAgaWYg
KCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4obV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wbHVnaW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVj
YWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIAotICAgIFJlbmRlckVtYmVkZGVkT2JqZWN0KiBy
ZW5kZXJlciA9IHRvUmVuZGVyRW1iZWRkZWRPYmplY3QobV9wbHVnaW5FbGVtZW50LT5yZW5kZXJl
cigpKTsKLSAgICByZW5kZXJlci0+c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OlBsdWdpbkNyYXNoZWQpOworICAgIGRvd25jYXN0PFJlbmRlckVtYmVk
ZGVkT2JqZWN0PigqbV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7CiAgICAg
CiAgICAgV2lkZ2V0OjppbnZhbGlkYXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOTY1OWYwZDU0ZTliMzY3NTY2NjJiYTZmNzQ4
MzU4YjdmNTg0NTI0MS4uZWZmN2QwNWE5NjIzYThlYzUxNWM1Mjc1Y2Q0NDgxZWFlMDZhZTQ5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAt
NjU0LDExICs2NTQsMTEgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdp
bihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKIAogICAgIGlmIChpc0Js
b2NrZWRQbHVnaW4pIHsKICAgICAgICAgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVkID0gZmFsc2U7
Ci0gICAgICAgIGlmIChwbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJPYmplY3QgPSB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KHBsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgcmVuZGVyT2JqZWN0LT5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbldpdGhEZXNj
cmlwdGlvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uLCB1bmF2
YWlsYWJpbGl0eURlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50T2JzY3VyZWQg
PSByZW5kZXJPYmplY3QtPmlzUmVwbGFjZW1lbnRPYnNjdXJlZCgpOwotICAgICAgICAgICAgcmVu
ZGVyT2JqZWN0LT5zZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzSGlkZGVuKHJlcGxhY2Vt
ZW50T2JzY3VyZWQpOworICAgICAgICBpZiAoaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpwbHVn
aW5FbGVtZW50LT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyT2JqZWN0
ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpwbHVnaW5FbGVtZW50LT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIHJlbmRlck9iamVjdC5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbldpdGhEZXNjcmlwdGlvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5W
ZXJzaW9uLCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJlcGxhY2Vt
ZW50T2JzY3VyZWQgPSByZW5kZXJPYmplY3QuaXNSZXBsYWNlbWVudE9ic2N1cmVkKCk7CisgICAg
ICAgICAgICByZW5kZXJPYmplY3Quc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc0hpZGRl
bihyZXBsYWNlbWVudE9ic2N1cmVkKTsKICAgICAgICAgfQogCiAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24ocGFyYW1ldGVy
cy5taW1lVHlwZSwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIGZyYW1lVVJMU3RyaW5nLCBwYWdl
VVJMU3RyaW5nLCByZXBsYWNlbWVudE9ic2N1cmVkKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240066</attachid>
            <date>2014-10-18 10:51:26 -0700</date>
            <delta_ts>2014-10-19 19:53:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137845-20141018105132.patch</filename>
            <type>text/plain</type>
            <size>158228</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTdkMThhNzg5Mzc4MzBh
ZTc1NTQ2MGZjMzE4NWUzMWI2MWY0YTM0ZS4uOTQ5MjhmYjYwMGVmZTE1ODdhMzY1ZmZkYjI2MmE4
YWRiNTNkNjU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNC0xMC0xNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5k
CisgICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjptZXRlckVsZW1lbnQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZXRGb3JB
dHRhY2htZW50Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Q
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5k
T2Zmc2V0KToKKyAgICAgICAgKiBkb20vV2ViS2l0TmFtZWRGbG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYktpdE5hbWVkRmxvdzo6b3ZlcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXROYW1lZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0TmFtZWRGbG93OjpnZXRSZWdpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVFbGVtZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdpZGdl
dFJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlcldp
ZGdldCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVu
dDo6cmVuZGVyTWV0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVh
dGVQbHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpyZW5kZXJQcm9ncmVzcyk6CisgICAg
ICAgICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
b2N1bWVudDo6cGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAg
ICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om93bmVyUmVu
ZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRU
b1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2
ZW50VG9TdWJmcmFtZSk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRU
b1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2
ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JFdmVudFRhcmdldCk6
CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFRvVXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElz
QWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRT
dGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0RmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNh
bEhlaWdodENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVE
aXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmFkanVzdFN0
eWxlRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphZGRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6Om1vdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxl
bWVudDo6c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6dmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
Omhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpyZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lv
bnNDb21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRGaWx0
ZXJCYWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5z
cGFyZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZU9mZnNldFRvd2Fy
ZHNBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5
ZXJzVW5kZXJSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdl
dFJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWluZXJDb21wb3NpdGluZ0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Omxhc3RNdWx0
aUNvbHVtblNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmFkZFJlZ2lvblRvVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRSZWxhdGl2ZVdp
bGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp1cGRhdGVNaW5pbXVtUGFnZUhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJl
Z2lvblJhbmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dU
b1JlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6bmV4dFNpYmxpbmdNdWx0aUNvbHVt
blNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cHJldmlvdXNT
aWJsaW5nTXVsdGlDb2x1bW5TZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tS
ZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
bmFtZWRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6dXBkYXRlV3JpdGluZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRkRnJhZ21lbnRUb0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21S
ZW5kZXJCb3hBc1JlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d1RocmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVy
T2JqZWN0Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNjaGVkdWxlUmVsYXlvdXRGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludFVz
aW5nQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9u
Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNob3VsZFVzZVRyYW5zZm9y
bUZyb21Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUcmFu
c2Zvcm1Gcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNS
b290ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpsYXN0UnVieVJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpydWJ5
UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclJ1YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFy
aS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclJlZ2lvbkxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWRlby5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpz
a2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGlj
YXRvck9ic2N1cmVkKToKKwogMjAxNC0xMC0xNiAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBw
bGUuY29tPgogCiAgICAgICAgIENhbGxpbmcgZ2xSZWFkUGl4ZWxzIHdpdGggQkdSQSBmb3JtYXQg
b24gYW4gTlZJRElBIG1hY2hpbmUgd2l0aCBhbiBvcGFxdWUgY29udGV4dCByZXR1cm5zIHRoZSB3
cm9uZyBhbHBoYSB2YWx1ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZTdmYTExNjVjODBjZjlhODkz
MGIyZDQ5YmZhNTY0ZTE5MGQ5NGYyNC4uYmVhMGU2NTQyOTY5ODhhYTM2Mzg5Zjc0ZjFiODE2ZDQ0
NjY1NTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE0LTEwLTE3ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRv
d25jYXN0PD4oKSBmb3IgYWxsIHJlbWFpbmluZyBSZW5kZXJPYmplY3Qgc3ViY2xhc3NlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODQ1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgYWxsIHJlbWFpbmluZyBSZW5kZXJPYmplY3Qgc3ViY2xhc3NlcyBh
bmQgCisgICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAo
LVtXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgcGx1Z2luSG9zdERpZWRdKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgX3dpbmRvd0NsaXBSZWN0XSk6CisgICAgICAgICgtW1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgYWN0dWFsVmlzaWJsZVJlY3RJbldpbmRvd10pOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisKIDIwMTQtMTAtMTcgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciAz
Mi1iaXQgWW9zZW1pdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyNDU4M2YzOGM1OTAyMTM4YWMyYjE0MTYwNGJm
MDZmNzhmMmM3MDUwLi42ZWMxMjA3N2M0ODEwODk2MmRlY2I2ZTdkZTI0MzJiYjU5ZmJmOTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMTQtMTAtMTcgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBh
bGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZv
ciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2VzIGFuZCAKKyAgICAgICAgY2xl
YW4gdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblBy
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBsdWdpbik6CisKKzIwMTQtMTAtMTcg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzgwNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAK
aW5kZXggYjUyYmY3ODU5MmJlNDZkNDNiNWJiODU1Y2ZiODc5OTZiNDgxMzgxYS4uYWFmYTdmMzk1
MDEyZmE4MGIwYjRkNTYxNjY2YmExZTJiOWRhZTQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNh
dG9yLmNwcApAQCAtMTIyLDE5ICsxMjIsMTkgQEAgZmxvYXQgQWNjZXNzaWJpbGl0eVByb2dyZXNz
SW5kaWNhdG9yOjptaW5WYWx1ZUZvclJhbmdlKCkgY29uc3QKIAogSFRNTFByb2dyZXNzRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQoKSBjb25z
dAogewotICAgIGlmICghbV9yZW5kZXJlci0+aXNQcm9ncmVzcygpKQorICAgIGlmICghaXM8UmVu
ZGVyUHJvZ3Jlc3M+KCptX3JlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ci0gICAgcmV0dXJuIHRvUmVuZGVyUHJvZ3Jlc3MobV9yZW5kZXJlciktPnByb2dyZXNzRWxlbWVu
dCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4oKm1fcmVuZGVyZXIpLnBy
b2dyZXNzRWxlbWVudCgpOwogfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiBIVE1MTWV0
ZXJFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6Om1ldGVyRWxlbWVudCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyLT5pc01ldGVyKCkpCisgICAgaWYgKCFpczxS
ZW5kZXJNZXRlcj4oKm1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiB0b1JlbmRlck1ldGVyKG1fcmVuZGVyZXIpLT5tZXRlckVsZW1lbnQoKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KCptX3JlbmRlcmVyKS5tZXRlckVsZW1lbnQoKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3NjlhNTYyZDJiMDEwZDZhZGE0
YTcyYjY5N2E2YjA2OTRmNDA5NWZjLi5jYTIyZWNjNjI0MGNiNDMzY2IxYTg1NzI1MTlkOWVmNDIy
MGM4MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTEzODcsOSArMTM4Nyw5IEBAIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojplc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBj
b25zdAogICAgIAogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxheW91dENvdW50KCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQorICAgIGlmICgh
aXM8UmVuZGVyVmlldz4oKm1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gdG9SZW5kZXJWaWV3KCptX3JlbmRlcmVyKS5mcmFtZVZpZXcoKS5sYXlvdXRDb3VudCgpOwor
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJWaWV3PigqbV9yZW5kZXJlcikuZnJhbWVWaWV3KCku
bGF5b3V0Q291bnQoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRl
eHQoKSBjb25zdApAQCAtMTc2Myw3ICsxNzYzLDcgQEAgV2lkZ2V0KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojp3aWRnZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0CiB7CiAgICAgaWYgKCFp
c0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRvUmVu
ZGVyV2lkZ2V0KG1fcmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PigqbV9yZW5kZXJlcikud2lkZ2V0KCk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24g
aXMgbGlrZSBhIGNyb3NzLXBsYXRmb3JtIHZlcnNpb24gb2YgLSAoV2ViQ29yZVRleHRNYXJrZXJS
YW5nZSopdGV4dE1hcmtlclJhbmdlLiBJdCByZXR1cm5zCkBAIC0xOTk2LDExICsxOTk2LDExIEBA
IFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChjb25zdCBJbnRQb2luCiAgICAgICAgIHBvaW50UmVzdWx0ID0gcmVzdWx0Lmxv
Y2FsUG9pbnQoKTsKIAogICAgICAgICAvLyBkb25lIGlmIGhpdCBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIHdpZGdldAotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICBp
ZiAoIWlzPFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIC8vIGRlc2NlbmQgaW50byB3aWRnZXQgKEZSQU1FLCBJRlJBTUUsIE9CSkVDVC4uLikK
LSAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdl
dCgpOworICAgICAgICBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJl
bmRlcmVyKS53aWRnZXQoKTsKICAgICAgICAgaWYgKCFpczxGcmFtZVZpZXc+KHdpZGdldCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgRnJhbWUmIGZyYW1lID0gZG93bmNhc3Q8RnJhbWVW
aWV3Pigqd2lkZ2V0KS5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOGY2NzZm
MDYxZTUwNzdhYTA3YmMwOGQwNmZkNTk5YzQ2Y2RmYTZkMi4uMGFlNDg3Njk4MWIyYjJkNDJkNGQx
NGJiMmNhYmQ3NzA1NmJkZGZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zMjcsMTAg
KzMyNywxMCBAQCBzdGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50KQogewogICAgIGlmICghZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGF1dG8gcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKKyAgICBhdXRvKiBy
ZW5kZXJlciA9IGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVy
V2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiB0
b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7CiB9CiAKIHN0YXRpYyBib29sIGFjY2Vw
dHNFZGl0aW5nRm9jdXMoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDgw
NTYxMmUyZDE3ZjM1ODdlYzgzMTgxZTMyM2ZhNDRjM2JjOTRkMDIuLjljYzk1NzZiZDZhZGFkMDE2
YzE3OThiNGE2MTgxMjc2YzdmZDVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTE1
Niw3ICsxMTU2LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKIAogICAgIGlmIChyZW5k
ZXJlci0+aXNCUigpKQotICAgICAgICBpbmxpbmVCb3ggPSAhY2FyZXRPZmZzZXQgPyB0b1JlbmRl
ckxpbmVCcmVhayhyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSA6IG51bGxwdHI7CisgICAg
ICAgIGlubGluZUJveCA9ICFjYXJldE9mZnNldCA/IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4o
KnJlbmRlcmVyKS5pbmxpbmVCb3hXcmFwcGVyKCkgOiBudWxscHRyOwogICAgIGVsc2UgaWYgKGlz
PFJlbmRlclRleHQ+KCpyZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgdGV4dFJlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKTsKICAgICAgICAgdGV4dFJlbmRlcmVyLmVu
c3VyZUxpbmVCb3hlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5h
bWVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAppbmRl
eCAzOTVjODg5NDc1ZGE2NTVmN2FkMjlmMGE2NDM5NWYyOGQ0Mzk5ZmU5Li41MWRmYzBiOWM4ODFl
NzJmMTFjOGQ4MWVjMTE1MzA5ZmVkY2JjNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0TmFtZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFt
ZWRGbG93LmNwcApAQCAtNzIsOCArNzIsOCBAQCBib29sIFdlYktpdE5hbWVkRmxvdzo6b3ZlcnNl
dCgpIGNvbnN0CiAgICAgaWYgKCFtX3BhcmVudEZsb3dUaHJlYWQgfHwgIW1fcGFyZW50Rmxvd1Ro
cmVhZC0+aGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQobV9wYXJlbnRGbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkpOwotICAgIHJldHVy
biBuYW1lZEZsb3dGcmFnbWVudC0+cmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9uT3ZlcnNl
dDsKKyAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50PigqbV9wYXJlbnRGbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkpOworICAg
IHJldHVybiBuYW1lZEZsb3dGcmFnbWVudC5yZWdpb25PdmVyc2V0U3RhdGUoKSA9PSBSZWdpb25P
dmVyc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaW5GbG93VGhyZWFkKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCkKQEAgLTEwNCwx
NCArMTA0LDE0IEBAIGludCBXZWJLaXROYW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCgp
IGNvbnN0CiAKICAgICBpbnQgY291bnROb25Qc2V1ZG9SZWdpb25zID0gLTE7CiAgICAgZm9yIChj
b25zdCBhdXRvJiByZW5kZXJSZWdpb24gOiByZWdpb25MaXN0KSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKTsKKyAgICAgICAgY29uc3QgYXV0byYgbmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lv
bik7CiAgICAgICAgIC8vIEZJWE1FOiBQc2V1ZG8tZWxlbWVudHMgYXJlIG5vdCBpbmNsdWRlZCBp
biB0aGUgbGlzdC4KICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGluY2x1ZGVkIHdoZW4gd2Ugd2ls
bCBwcm9wZXJseSBzdXBwb3J0IHRoZSBSZWdpb24gaW50ZXJmYWNlCiAgICAgICAgIC8vIGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVnaW9uLWludGVyZmFjZQotICAg
ICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQtPmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQorICAg
ICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQuaXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY291bnROb25Qc2V1ZG9SZWdpb25zKys7Ci0gICAg
ICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC0+cmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9u
RW1wdHkpCisgICAgICAgICsrY291bnROb25Qc2V1ZG9SZWdpb25zOworICAgICAgICBpZiAobmFt
ZWRGbG93RnJhZ21lbnQucmVnaW9uT3ZlcnNldFN0YXRlKCkgPT0gUmVnaW9uRW1wdHkpCiAgICAg
ICAgICAgICByZXR1cm4gY291bnROb25Qc2V1ZG9SZWdpb25zOwogICAgIH0KICAgICByZXR1cm4g
LTE7CkBAIC0xMzUsMTUgKzEzNSwxNSBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBXZWJLaXROYW1l
ZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQoTm9kZSogY29udGVudE5vZGUpCiAgICAgaWYgKGlu
Rmxvd1RocmVhZChjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSwgbV9wYXJlbnRGbG93VGhyZWFkKSkg
ewogICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0ID0gbV9wYXJlbnRG
bG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYg
cmVuZGVyUmVnaW9uIDogcmVnaW9uTGlzdCkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudChyZW5kZXJSZWdpb24pOworICAgICAgICAgICAgY29uc3QgYXV0byYgbmFtZWRGbG93RnJh
Z21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lvbik7
CiAgICAgICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1lbnRzIGFyZSBub3QgaW5jbHVkZWQg
aW4gdGhlIGxpc3QuCiAgICAgICAgICAgICAvLyBUaGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiB3
ZSB3aWxsIHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRlcmZhY2UKICAgICAgICAgICAg
IC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVnaW9uLWludGVy
ZmFjZQotICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1BzZXVkb0VsZW1lbnRS
ZWdpb24oKSkKKyAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1BzZXVkb0VsZW1l
bnRSZWdpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICht
X3BhcmVudEZsb3dUaHJlYWQtPm9iamVjdEluRmxvd1JlZ2lvbihjb250ZW50Tm9kZS0+cmVuZGVy
ZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5hbWVk
Rmxvd0ZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICByZWdp
b25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0ZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgp
KTsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudEZsb3dUaHJlYWQtPm9iamVjdEluRmxvd1JlZ2lv
bihjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSwgJm5hbWVkRmxvd0ZyYWdtZW50KSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC5nZW5lcmF0aW5nRWxlbWVudCgpKTsK
KyAgICAgICAgICAgICAgICByZWdpb25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0ZyYWdtZW50
LmdlbmVyYXRpbmdFbGVtZW50KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTY1LDE0ICsxNjUsMTQgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gV2ViS2l0TmFtZWRGbG93
OjpnZXRSZWdpb25zKCkKIAogICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3Qg
PSBtX3BhcmVudEZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHJlbmRlclJlZ2lvbiA6IHJlZ2lvbkxpc3QpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZW5kZXJSZWdpb24pOworICAgICAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFn
bWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsK
ICAgICAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhcmUgbm90IGluY2x1ZGVkIGluIHRo
ZSBsaXN0LgogICAgICAgICAvLyBUaGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxsIHBy
b3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRlcmZhY2UKICAgICAgICAgLy8gaHR0cDovL2Rl
di53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMvI3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudC0+aXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkpCisgICAgICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1BzZXVkb0VsZW1lbnRSZWdpb24oKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRp
bmdFbGVtZW50KCkpOwotICAgICAgICByZWdpb25FbGVtZW50cy5hcHBlbmQoKm5hbWVkRmxvd0Zy
YWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsKKyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0Zy
YWdtZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICByZWdpb25FbGVtZW50cy5hcHBl
bmQoKm5hbWVkRmxvd0ZyYWdtZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOwogICAgIH0KIAogICAg
IHJldHVybiBTdGF0aWNFbGVtZW50TGlzdDo6YWRvcHQocmVnaW9uRWxlbWVudHMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA5ZjkzYTg0NmMyNDlkZmEy
MzFjMTUwOTRhYmUzMzFiMGZjOTQ1Nzg3Li44MGEwNmY5MDNmZTMzMzFlZjMzODBiYjA5MmY1OWZk
YWU1M2EzMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMTkxMiw5ICsxOTEyLDkgQEAgc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9k
ZSogbikKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdl
dChyZW5kZXJlciktPndpZGdldCgpOworICAgIFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgIHJldHVybiB3aWRnZXQgJiYgd2lk
Z2V0LT5pc0ZyYW1lVmlldygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAppbmRleCAzNDU0MmFkYjQwYjgwOTdmZjRhYjNhOGU3ZjZlOWM2OTNiOTQwZTEwLi42
MWQ5OGUxMDdmZmU1YzBkZTIyYTIxMWRjYmMyOTI3MzQ5ZWFkZDk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTU3LDE1ICs1NywxNiBAQCBQYXNzUmVmUHRy
PEhUTUxFbWJlZEVsZW1lbnQ+IEhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYQogCiBzdGF0aWMgaW5saW5lIFJlbmRlcldpZGdldCogZmluZFdpZGdldFJl
bmRlcmVyKGNvbnN0IE5vZGUqIG4pIAogewotICAgIGlmICghbi0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgZG8KKyAgICBpZiAoIW4tPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgZG8gewogICAgICAgICAg
ICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmhhc1RhZ05h
bWUob2JqZWN0VGFnKSk7CisgICAgICAgIH0gd2hpbGUgKG4gJiYgIWlzPEhUTUxPYmplY3RFbGVt
ZW50PigqbikpOworICAgIH0KIAotICAgIGlmIChuICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVu
ZGVyZXIoKS0+aXNXaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG4tPnJl
bmRlcmVyKCkpOworICAgIGlmIChuICYmIGlzPFJlbmRlcldpZGdldD4obi0+cmVuZGVyZXIoKSkp
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KG4tPnJlbmRlcmVyKCkpOwog
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJlbmRlcldpZGdldCog
SFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyV2lkZ2V0TG9hZGluZ1BsdWdpbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggNTIwNDcy
NjQ5NDM1YThmNWJhNzNlNmM2YTNlYTA2MTZkZWFiYTYwMi4uYTg1ZTc5ZGQwZDYyMDdhMThmOTY5
YjU2NjA5OTVlNGMzY2Y2MmI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9jb250ZW50RnJhbWUoMCkKKyAgICAsIG1fY29u
dGVudEZyYW1lKG51bGxwdHIpCiAgICAgLCBtX3NhbmRib3hGbGFncyhTYW5kYm94Tm9uZSkKIHsK
IH0KQEAgLTQzLDkgKzQzLDkgQEAgUmVuZGVyV2lkZ2V0KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnJlbmRlcldpZGdldCgpIGNvbnN0CiB7CiAgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhU
TUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzCiAgICAgLy8gd2hl
biB1c2luZyBmYWxsYmFjayBjb250ZW50LgotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVy
ZXIoKS0+aXNXaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKCkpOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigp
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldp
ZGdldD4ocmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzZXRD
b250ZW50RnJhbWUoRnJhbWUqIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggMWZhOTBlYjMyOTk4YWQyZGNmYmEwNjdkOTkzZGViYTI2ZTI2MWE3Mi4u
MWRhYWIxOGI5M2M4ZDUxOTg0NzkzYjI2OWVhYTk1Njg4MDViNzBhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC00MjQ1LDggKzQyNDUsOCBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2l6ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRl
ZChNZWRpYVBsYXllciopCiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNW
aWRlbygpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dmlldygpLmNvbXBvc2l0b3IoKS5j
YW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcodG9SZW5kZXJWaWRlbygqcmVuZGVyZXIoKSkpOwor
ICAgIGlmIChpczxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiByZW5k
ZXJlcigpLT52aWV3KCkuY29tcG9zaXRvcigpLmNhbkFjY2VsZXJhdGVWaWRlb1JlbmRlcmluZyhk
b3duY2FzdDxSZW5kZXJWaWRlbz4oKnJlbmRlcmVyKCkpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCmluZGV4IGYyYWFjMWM0
NmM0NDVkNGM2ZWY5MTA0NzlkMTBkOTZlMzVlOTIxZjUuLjk0NTIxMGVlNGY4ZTU0MzkyYWMwYWZk
OTE1ZjU0NDU4NmJjOWRiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmNwcApAQCAtMjIwLDkgKzIyMCw5IEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkRWxlbWVu
dFN0YXRlQ2hhbmdlKCkKIAogUmVuZGVyTWV0ZXIqIEhUTUxNZXRlckVsZW1lbnQ6OnJlbmRlck1l
dGVyKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01ldGVy
KCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlck1ldGVyKHJlbmRlcmVyKCkpOwotICAgIHJldHVy
biB0b1JlbmRlck1ldGVyKGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFk
b3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVyKCkpOworICAgIGlmIChpczxSZW5kZXJNZXRlcj4o
cmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNZXRlcj4ocmVuZGVy
ZXIoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1ldGVyPihkZXNjZW5kYW50c09mVHlw
ZTxFbGVtZW50PigqdXNlckFnZW50U2hhZG93Um9vdCgpKS5maXJzdCgpLT5yZW5kZXJlcigpKTsK
IH0KIAogdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QqIHJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3Bw
CmluZGV4IDNhODE5ZGIyMTEwY2JhNDYxNGViMDYzMzI0Y2U0ZTQ0NjFiNDc3NWEuLjJkMTdlN2I5
ODIyODQ5NGJkOWNiOTk1M2YwZGNiZWRiYjllYTUzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0yNzUsOSArMjc1LDkgQEAgYm9vbCBIVE1MUGx1Z0lu
RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh1
c2VGYWxsYmFja0NvbnRlbnQoKSB8fCAhcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNFbWJl
ZGRlZE9iamVjdCgpKQorICAgIGlmICh1c2VGYWxsYmFja0NvbnRlbnQoKSB8fCAhaXM8UmVuZGVy
RW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuICF0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKCkpLT5pc1BsdWdpblVuYXZh
aWxhYmxlKCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKnJl
bmRlcmVyKCkpLmlzUGx1Z2luVW5hdmFpbGFibGUoKTsKIH0KIAogI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAKaW5kZXggYzFlYzI1NzE3MThiOGZjZmE4NmZjMjk5MDc4ZGM1ODUyMTlkOWY2ZC4u
YjYwMDg1ZGY5ZTUyMmRlZjIzMWU5Y2NjYjA5NTZlYWU2YTQ3Mjc0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC0xNDUsOSArMTQ1LDcg
QEAgUmVuZGVyRW1iZWRkZWRPYmplY3QqIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRlckVt
YmVkZGVkT2JqZWN0KCkgY29uc3QKIHsKICAgICAvLyBIVE1MT2JqZWN0RWxlbWVudCBhbmQgSFRN
TEVtYmVkRWxlbWVudCBtYXkgcmV0dXJuIGFyYml0cmFyeSByZW5kZXJlcnMKICAgICAvLyB3aGVu
IHVzaW5nIGZhbGxiYWNrIGNvbnRlbnQuCi0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJl
cigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBpczxSZW5kZXJF
bWJlZGRlZE9iamVjdD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVj
dD4ocmVuZGVyZXIoKSkgOiBudWxscHRyOwogfQogCiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmlzSW1hZ2VUeXBlKCkKQEAgLTY5Myw3ICs2OTEsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbihjb25zdCBVUkwmIHVybCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvJiByZW5kZXJlciA9IHRvUmVu
ZGVyRW1iZWRkZWRPYmplY3QoKnRoaXMtPnJlbmRlcmVyKCkpOworICAgIGF1dG8mIHJlbmRlcmVy
ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCp0aGlzLT5yZW5kZXJlcigpKTsKICAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRSZWN0ID0gcmVuZGVyZXIuY29udGVudEJveFJlY3QoKTsKICAg
ICBpbnQgY29udGVudFdpZHRoID0gY29udGVudFJlY3Qud2lkdGgoKTsKICAgICBpbnQgY29udGVu
dEhlaWdodCA9IGNvbnRlbnRSZWN0LmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOTgzNzEyNDY5ZTJmZTMwOTcxY2Q4ZTJiZWJlZWJk
MDI3NTY0NDg1ZS4uZjUwZmZjMGNkMjhhOWVkZGQxYzM1MzBlMTA3MzQyM2Y2MGYxYjVkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC03Miw5ICs3
Miw5IEBAIGJvb2wgSFRNTFByb2dyZXNzRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJl
cihjb25zdCBOb2RlJiBjaGlsZCkgY29uc3QKIAogUmVuZGVyUHJvZ3Jlc3MqIEhUTUxQcm9ncmVz
c0VsZW1lbnQ6OnJlbmRlclByb2dyZXNzKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlclByb2dy
ZXNzKHJlbmRlcmVyKCkpOwotICAgIHJldHVybiB0b1JlbmRlclByb2dyZXNzKGRlc2NlbmRhbnRz
T2ZUeXBlPEVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFkb3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVy
KCkpOworICAgIGlmIChpczxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlclByb2dyZXNzPihkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PigqdXNlckFn
ZW50U2hhZG93Um9vdCgpKS5maXJzdCgpLT5yZW5kZXJlcigpKTsKIH0KIAogdm9pZCBIVE1MUHJv
Z3Jlc3NFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9QbHVnaW5Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50
LmNwcAppbmRleCBiMjIwODdiNGMwODA5MzE3ZmMwYWZlNDlhNDc5ZDY3Nzk5MTUyZTIyLi5lZDBm
NjIyMmI0OWIyNTMwMWU2YWQ0ZmFmMzYzOTBmYjQ0ZTc3ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1BsdWdpbkRvY3VtZW50LmNwcApAQCAtMTU1LDExICsxNTUsOSBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50UGFyc2VyPiBQbHVnaW5Eb2N1bWVudDo6Y3JlYXRlUGFyc2VyKCkKIAogV2lkZ2V0KiBQbHVn
aW5Eb2N1bWVudDo6cGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAobV9wbHVnaW5FbGVtZW50ICYm
IG1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBBU1NFUlQobV9wbHVnaW5F
bGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOwotICAgICAgICByZXR1cm4g
dG9SZW5kZXJFbWJlZGRlZE9iamVjdChtX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpLT53aWRn
ZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKG1fcGx1Z2luRWxlbWVudCAmJiBt
X3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJFbWJlZGRlZE9iamVjdD4oKm1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkud2lkZ2V0KCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgUGx1Z2luRG9jdW1lbnQ6OnNldFBsdWdp
bkVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRl
eCAyNzFmMDZhMzQ1OWRlMjMwNTgzMWQxOGU0MDhkOTk3M2RhMzdkYzIzLi40YzdiZDc1YTMzZGY3
Zjk1ZmJjOTcxOGJkZTU2NzI0ODhlMDBkMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC04NzIsOCArODcyLDggQEAg
dm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5pbnB1dEV2
ZW50ICYmIHRpbWUgIT0gbWVkaWFDb250cm9sbGVyKCktPmN1cnJlbnRUaW1lKCkpCiAgICAgICAg
IG1lZGlhQ29udHJvbGxlcigpLT5zZXRDdXJyZW50VGltZSh0aW1lKTsKIAotICAgIFJlbmRlclNs
aWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSk7Ci0gICAgaWYgKHNsaWRl
ciAmJiBzbGlkZXItPmluRHJhZ01vZGUoKSkKKyAgICBSZW5kZXJTbGlkZXImIHNsaWRlciA9IGRv
d25jYXN0PFJlbmRlclNsaWRlcj4oKnJlbmRlcmVyKCkpOworICAgIGlmIChzbGlkZXIuaW5EcmFn
TW9kZSgpKQogICAgICAgICBtX2NvbnRyb2xzLT51cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsK
IH0KIApAQCAtMTMzNyw5ICsxMzM3LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcyhib29sIGZvcmNlVXBkYXRlKQogICAgIGlmIChtX3Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uKQogICAgICAgICB2aWRlb0JveCA9IG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb24tPmJvdW5kcygpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIW1lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKSB8fCAhbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5pc1ZpZGVvKCkp
CisgICAgICAgIGlmICghaXM8UmVuZGVyVmlkZW8+KG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZpZGVvQm94ID0gdG9SZW5kZXJWaWRlbygq
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0JveCgpOworICAgICAgICB2aWRlb0JveCA9
IGRvd25jYXN0PFJlbmRlclZpZGVvPigqbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS52aWRlb0Jv
eCgpOwogICAgIH0KIAogICAgIGlmICghZm9yY2VVcGRhdGUgJiYgbV92aWRlb0Rpc3BsYXlTaXpl
ID09IHZpZGVvQm94KQpAQCAtMTM2MywxNCArMTM2MywxNCBAQCBQYXNzUmVmUHRyPEltYWdlPiBN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXBy
ZXNlbgogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIAotICAgIGF1dG8gcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghcmVuZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHJlbmRlcmVy
KS0+bGF5ZXIoKTsKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CiAKICAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDE7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQu
Y3BwCmluZGV4IGU5ODNmMDdlMWVkYjAyNjllNmJiNjc3OWJhMmUzNjAwNTMyMDc5MjcuLmYwY2Vm
NDBkYjVlMGVmNWU2NzNiN2Y4ZjRiZjI3NjRhMTQxMGU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApAQCAtMTI5LDcg
KzEyOSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiB2b2lkIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
IGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXItPmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgdG9SZW5kZXJM
YXllck1vZGVsT2JqZWN0KHJlbmRlcmVyKS0+bGF5ZXIoKSwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKaW5kZXggODRkNDkyMjEwNTMyN2I5NmRhOTQ0ZDhkYjBkMzM5MWYyMTU3
MmM5Mi4uZTE0ZDFmYTcwMWZhMTFiNTEwYzQ0Y2VkZTJhMDRkNTBhZWRmNTI2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNzIyLDkgKzcy
Miw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JF
bGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgIH0KIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNv
bnRhaW5pbmdGbG93VGhyZWFkID0gcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKLSAgICBpZiAoY29udGFpbmluZ0Zsb3dUaHJlYWQgJiYgY29udGFpbmluZ0Zsb3dUaHJlYWQt
PmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPihjb250YWluaW5nRmxvd1RocmVhZCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY29udGVudEZsb3dJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgY29udGVudEZsb3dJbmZvLT5zZXRTdHJpbmcoIm5hbWUiLCB0b1JlbmRlck5hbWVkRmxv
d1RocmVhZChjb250YWluaW5nRmxvd1RocmVhZCktPmZsb3dUaHJlYWROYW1lKCkpOworICAgICAg
ICBjb250ZW50Rmxvd0luZm8tPnNldFN0cmluZygibmFtZSIsIGRvd25jYXN0PFJlbmRlck5hbWVk
Rmxvd1RocmVhZD4oKmNvbnRhaW5pbmdGbG93VGhyZWFkKS5mbG93VGhyZWFkTmFtZSgpKTsKICAg
ICAgICAgZWxlbWVudEluZm8tPnNldE9iamVjdCgiY29udGVudEZsb3dJbmZvIiwgY29udGVudEZs
b3dJbmZvLnJlbGVhc2UoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcAppbmRleCA4YTE2MTQyYTQ0MDg1ZmJiMzQzNjIyNzc3N2NhYTYzZDI4YmRjOTRi
Li41YzM3Nzg5MWI2NDI2ZDViYjVlN2U5NDNmNDYxODg4ZjZiOWExMTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTMyOCwxMCArMzI4LDEwIEBAIEZyYW1l
KiBTdWJmcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCYgb3du
ZXJFbGVtZW50LCBjb25zdCBVCiAgICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBlbnRp
cmVseT8gbV9pc0NvbXBsZXRlIG5vcm1hbGx5IGdldHMgc2V0IHRvIGZhbHNlIHdoZW4gYSBsb2Fk
IGlzIGNvbW1pdHRlZC4KICAgICBmcmFtZS0+bG9hZGVyKCkuc3RhcnRlZCgpOwogICAgCi0gICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC5yZW5kZXJlcigpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gb3duZXJFbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgRnJhbWVWaWV3KiB2
aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzV2lk
Z2V0KCkgJiYgdmlldykKLSAgICAgICAgdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT5zZXRXaWRn
ZXQodmlldyk7CisgICAgaWYgKGlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpICYmIHZpZXcpCisg
ICAgICAgIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKS5zZXRXaWRnZXQodmlldyk7
CiAgICAgCiAgICAgbV9mcmFtZS5sb2FkZXIoKS5jaGVja0NhbGxJbXBsaWNpdENsb3NlKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDhiOGY2M2NiZjU3Mzc2OTk1YWQxZjUzZjQ3YjRh
MWU5MTg0ZWMyM2MuLjVkZGNhNDIyYmE0ZDY1OTExNzVlMzFmNTE3ODVkZDIzM2Q4YzNiYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC03MzUsMTcgKzczNSwxNyBAQCBSZW5kZXJXaWRnZXQqIEZy
YW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50OwogICAgIGlmICghb3duZXJFbGVtZW50KQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIG9iamVjdCA9IG93bmVyRWxlbWVudC0+cmVuZGVy
ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byogb2JqZWN0ID0gb3duZXJF
bGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IElmIDxvYmplY3Q+IGlzIGV2
ZXIgZml4ZWQgdG8gZGlzYXNzb2NpYXRlIGl0c2VsZiBmcm9tIGZyYW1lcwogICAgIC8vIHRoYXQg
aXQgaGFzIHN0YXJ0ZWQgYnV0IGNhbmNlbGVkLCB0aGVuIHRoaXMgY2FuIHR1cm4gaW50byBhbiBB
U1NFUlQKICAgICAvLyBzaW5jZSBtX293bmVyRWxlbWVudCB3b3VsZCBiZSAwIHdoZW4gdGhlIGxv
YWQgaXMgY2FuY2VsZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTg1Ci0gICAgaWYgKCFvYmplY3QtPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiB0b1JlbmRlcldpZGdldChvYmplY3QpOworICAgIGlmICghaXM8UmVu
ZGVyV2lkZ2V0Pigqb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlcldpZGdldD4ob2JqZWN0KTsKIH0KIAogRnJhbWUqIEZyYW1lOjpmcmFt
ZUZvcldpZGdldChjb25zdCBXaWRnZXQqIHdpZGdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmNzg5MGQ0NWMyOThjOGYzYWQ0NjRjNmRmZjNmOTQ4OGJkM2ZlZmNlLi4zMzAyNWEw
NTZjMzRiZTU2Yzk2YWE2MGY0MzUwOWU5MGRkZjVmNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0xMjM3LDcgKzEyMzcsNyBAQCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wg
YWxsb3dTdWJ0cmVlKQogCiAgICAgICAgIGF1dG9TaXplSWZFbmFibGVkKCk7CiAKLSAgICAgICAg
bV9uZWVkc0Z1bGxSZXBhaW50ID0gIXN1YnRyZWUgJiYgKG1fZmlyc3RMYXlvdXQgfHwgdG9SZW5k
ZXJWaWV3KCpyb290KS5wcmludGluZygpKTsKKyAgICAgICAgbV9uZWVkc0Z1bGxSZXBhaW50ID0g
IXN1YnRyZWUgJiYgKG1fZmlyc3RMYXlvdXQgfHwgZG93bmNhc3Q8UmVuZGVyVmlldz4oKnJvb3Qp
LnByaW50aW5nKCkpOwogCiAgICAgICAgIGlmICghc3VidHJlZSkgewogICAgICAgICAgICAgU2Ny
b2xsYmFyTW9kZSBoTW9kZTsKQEAgLTEzMjUsNyArMTMyNSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojps
YXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAgICAgICAgIGlmIChzdWJ0cmVlKQogICAgICAgICAg
ICAgcm9vdC0+dmlldygpLnBvcExheW91dFN0YXRlKCpyb290KTsKIAotICAgICAgICBtX2xheW91
dFJvb3QgPSAwOworICAgICAgICBtX2xheW91dFJvb3QgPSBudWxscHRyOwogCiAgICAgICAgIC8v
IENsb3NlIGJsb2NrIGhlcmUgdG8gZW5kIHRoZSBzY29wZSBvZiBjaGFuZ2VTY2hlZHVsaW5nRW5h
YmxlZCBhbmQgbGF5b3V0U3RhdGVEaXNhYmxlci4KICAgICB9CkBAIC0xMzM0LDcgKzEzMzQsNyBA
QCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlKQogCiAgICAgYm9vbCBu
ZWVkZWRGdWxsUmVwYWludCA9IG1fbmVlZHNGdWxsUmVwYWludDsKIAotICAgIGlmICghc3VidHJl
ZSAmJiAhdG9SZW5kZXJWaWV3KCpyb290KS5wcmludGluZygpKQorICAgIGlmICghc3VidHJlZSAm
JiAhZG93bmNhc3Q8UmVuZGVyVmlldz4oKnJvb3QpLnByaW50aW5nKCkpCiAgICAgICAgIGFkanVz
dFZpZXdTaXplKCk7CiAKICAgICBtX2xheW91dFBoYXNlID0gSW5Qb3N0TGF5b3V0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggOTQ4M2Y5M2IzN2Vi
OWQwMDVjM2E4YzliY2FlNmNkY2QxOGRlZWMxNy4uNzUwYjg4YTE1NTQyZDdmNzdhNWZmYzRhOTE1
MmM0ZGNkYWY2YWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJH
dGsuY3BwCkBAIC02MSwxMCArNjEsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1l
bnRWaWV3KCkKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAv
LyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVy
T2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCkt
PnJlbmRlcmVyKCkgOiAwOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkp
CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50
YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlmICghaXM8UmVuZGVyV2lk
Z2V0Pih0YXJnZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKKyAg
ICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0
PigqdGFyZ2V0KS53aWRnZXQoKSk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0
TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQppbmRleCA4MzdhN2E5MjQ4Yzcw
MjgxZTE5ZTg0MzY1YTgwOWU4ZmU4MGY0MDFiLi4wMmYwOTViNDEwYmYyZTA4Y2FkNWQ5ZDZkMjM2
NTJkMWVhZGEyOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhh
bmRsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9T
Lm1tCkBAIC0xNjksMTUgKzE2OSwxNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBhdXRvIHRh
cmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAg
ICBhdXRvKiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCkt
PnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEb3VibGUtY2xpY2sgZXZlbnRzIGRv
bid0IGV4aXN0IGluIENvY29hLiBTaW5jZSBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dCgpIHdpbGwKICAgICAvLyBqdXN0IHBhc3MgY3VycmVudEV2ZW50IGRvd24gdG8gdGhlIHdpZGdl
dCwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIGl0IGZvciBldmVudHMgdGhhdAogICAgIC8vIGRvbid0
IGNvcnJlc3BvbmQgdG8gQ29jb2EgZXZlbnRzLiBUaGUgbW91c2Vkb3duL3VwcyB3aWxsIGhhdmUg
YWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBhcwogICAgIC8vIHBhcnQgb2YgdGhlIHByZXNzZWQvcmVs
ZWFzZWQgaGFuZGxpbmcuCi0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRv
UmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKSk7
CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKQEAgLTM2MywxMyArMzYzLDEzIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0
Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCisgICAgICAg
ICAgICBhdXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAo
IWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIp
LT53aWRnZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UmVuZGVy
V2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgICAgICAgICAgaWYgKCF3aWRnZXQgfHwg
IXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKSkpCisgICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25F
dmVudFRvV2lkZ2V0KGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBtX21vdXNlRG93bldhc0luU3ViZnJh
bWUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNDJhYmMzODg1YTMwZWY1Yjk0MDgzMTdjYjdm
NzA0ZTEyMTk3ODhhZi4uOGJlOWYyMmFjOTkxYWFkOTczNjY4NWM2NTYxZGIwMGJmZTRlZjZlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtMTQzLDE1
ICsxNDMsMTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgYXV0byB0YXJnZXQgPSBldmVudC50
YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiBudWxscHRyOwot
ICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgYXV0byogdGFyZ2V0
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDog
bnVsbHB0cjsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRG91YmxlLWNsaWNrIGV2ZW50cyBkb24ndCBleGlzdCBpbiBD
b2NvYS4gU2luY2UgcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoKSB3aWxsCiAgICAg
Ly8ganVzdCBwYXNzIGN1cnJlbnRFdmVudCBkb3duIHRvIHRoZSB3aWRnZXQsIHdlIGRvbid0IHdh
bnQgdG8gY2FsbCBpdCBmb3IgZXZlbnRzIHRoYXQKICAgICAvLyBkb24ndCBjb3JyZXNwb25kIHRv
IENvY29hIGV2ZW50cy4gVGhlIG1vdXNlZG93bi91cHMgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBw
YXNzZWQgb24gYXMKICAgICAvLyBwYXJ0IG9mIHRoZSBwcmVzc2VkL3JlbGVhc2VkIGhhbmRsaW5n
LgotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0
YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0
KGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkud2lkZ2V0KCkpOwogfQogCiBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0
KiByZW5kZXJXaWRnZXQpCkBAIC0zNjEsMTMgKzM2MSwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IGV2ZQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICAg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICAgICAgYXV0byogcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJXaWRn
ZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Cisg
ICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRl
cmVyKS53aWRnZXQoKTsKICAgICAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzRnJh
bWVWaWV3KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldChyZW5kZXJl
cikpKQorICAgICAgICAgICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChk
b3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgbV9tb3VzZURvd25XYXNJblN1YmZyYW1lID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzg1LDExICs3ODUsMTEgQEAgc3RhdGljIFdpZGdl
dCogd2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCiAgICAgaWYgKCFl
dmVudFRhcmdldCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyRWxl
bWVudCogdGFyZ2V0ID0gZXZlbnRUYXJnZXQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCF0YXJnZXQg
fHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICBhdXRvKiB0YXJnZXQgPSBldmVudFRhcmdldC0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHRhcmdldCkt
PndpZGdldCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndp
ZGdldCgpOwogfQogCiBzdGF0aWMgU2Nyb2xsVmlldyogc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0
KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5jcHAKaW5kZXggZGJlNGQwMTExNDkzODE4MzMyNTlkNTJlYTk2NGFlN2M5
ZjllNjc0OC4uOWZlNjdkMjJmZDkyZTI2Zjc1Mzg3YmIyYTQ5MjQ3MTU5NmNkMzg5MSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCkBAIC0zMDEs
MTEgKzMwMSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVTdGF0ZUZyb21Gb3Jt
KEV2YXNfT2JqZWN0KiBvYmplY3QsIGNvbnN0IENvbnRyb2xTdAogdm9pZCBSZW5kZXJUaGVtZUVm
bDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19PYmplY3QqIGVkamUsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlm
ICh0eXBlID09IFNsaWRlclZlcnRpY2FsIHx8IHR5cGUgPT0gU2xpZGVySG9yaXpvbnRhbCkgewot
ICAgICAgICBpZiAoIW9iamVjdC5pc1NsaWRlcigpKQorICAgICAgICBpZiAoIWlzPFJlbmRlclNs
aWRlcj4ob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsgLy8gcHJvYmFibHkgaGF2ZSAtd2Vi
a2l0LWFwcGVhcmFuY2U6IHNsaWRlci4uCiAKLSAgICAgICAgY29uc3QgUmVuZGVyU2xpZGVyKiBy
ZW5kZXJTbGlkZXIgPSB0b1JlbmRlclNsaWRlcigmb2JqZWN0KTsKLSAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSByZW5kZXJTbGlkZXItPmVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxSZW5kZXJTbGlkZXI+KG9iamVjdCkuZWxlbWVu
dCgpOwogICAgICAgICBkb3VibGUgdmFsdWVSYW5nZSA9IGlucHV0Lm1heGltdW0oKSAtIGlucHV0
Lm1pbmltdW0oKTsKIAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4gbXNn
ID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3BlcmF0
b3IgbmV3IChzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91YmxlKSkp
KTsKQEAgLTMyMyw3ICszMjIsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExT
dGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3QgUmVuZGVyT2JqZWN0JiBvYgogICAgICAgICBt
c2ctPnZhbFsxXSA9IChpbnB1dC52YWx1ZUFzTnVtYmVyKCkgLSBpbnB1dC5taW5pbXVtKCkpIC8g
dmFsdWVSYW5nZTsKICAgICAgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9zZW5kKGVkamUsIEVESkVf
TUVTU0FHRV9GTE9BVF9TRVQsIDAsIG1zZy5nZXQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09
IFByb2dyZXNzQmFyKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9n
cmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mob2JqZWN0KTsKKyAgICAgICAgY29uc3QgYXV0byYgcmVu
ZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ob2JqZWN0KTsKIAogICAgICAg
ICBpbnQgbWF4ID0gcmVjdC53aWR0aCgpOwogICAgICAgICBkb3VibGUgdmFsdWUgPSByZW5kZXJQ
cm9ncmVzcy5wb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IDM1NDc5MGNmMzkyYTE4MzdlYWI3NDViMDg2YjgwMjBmZDdjYmVlY2QuLjVj
NTkzNzgwZDc4NjRmNTFlNWEwNzVhMTljOTEyZDA1ZjUyNzJmODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTI0OCw4ICsyNDgsOCBAQCBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIAog
c3RhdGljIGNvbnN0IEZvbnQmIGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKQogewotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmlu
ZSgpICYmIHJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJD
b21iaW5lVGV4dCYgdGV4dENvbWJpbmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQocmVu
ZGVyZXIpOworICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJp
bmVUZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVSZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAgIGlm
ICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0
ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KQEAgLTQ1NCwxMCAr
NDU0LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6ZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wmCiAgICAgaWYgKCFjb250YWluaW5nQmxv
Y2stPmlzUnVieUJhc2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgdGV4dCBpcyBu
b3QgaW5zaWRlIGEgcnVieSBiYXNlLCBzbyBpdCBkb2VzIG5vdCBoYXZlIHJ1YnkgdGV4dCBvdmVy
IGl0LgogCi0gICAgaWYgKCFjb250YWluaW5nQmxvY2stPnBhcmVudCgpLT5pc1J1YnlSdW4oKSkK
KyAgICBpZiAoIWlzPFJlbmRlclJ1YnlSdW4+KCpjb250YWluaW5nQmxvY2stPnBhcmVudCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENhbm5vdCBnZXQgdGhlIHJ1YnkgdGV4dC4KIAotICAg
IFJlbmRlclJ1YnlUZXh0KiBydWJ5VGV4dCA9IHRvUmVuZGVyUnVieVJ1bihjb250YWluaW5nQmxv
Y2stPnBhcmVudCgpKS0+cnVieVRleHQoKTsKKyAgICBSZW5kZXJSdWJ5VGV4dCogcnVieVRleHQg
PSBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPigqY29udGFpbmluZ0Jsb2NrLT5wYXJlbnQoKSkucnVi
eVRleHQoKTsKIAogICAgIC8vIFRoZSBlbXBoYXNpcyBtYXJrcyBvdmVyIGFyZSBzdXBwcmVzc2Vk
IG9ubHkgaWYgdGhlcmUgaXMgYSBydWJ5IHRleHQgYm94IGFuZCBpdCBub3QgZW1wdHkuCiAgICAg
cmV0dXJuICFydWJ5VGV4dCB8fCAhcnVieVRleHQtPmhhc0xpbmVzKCk7CkBAIC01MTksNyArNTE5
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGJveE9yaWdpbi5tb3ZlQnkobG9jYWxQ
YWludE9mZnNldCk7CiAgICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBGbG9hdFNpemUo
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOwogCi0gICAgUmVuZGVyQ29tYmluZVRl
eHQqIGNvbWJpbmVkVGV4dCA9IGxpbmVTdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIHJlbmRlcmVy
KCkuaXNDb21iaW5lVGV4dCgpICYmIHRvUmVuZGVyQ29tYmluZVRleHQocmVuZGVyZXIoKSkuaXND
b21iaW5lZCgpID8gJnRvUmVuZGVyQ29tYmluZVRleHQocmVuZGVyZXIoKSkgOiAwOworICAgIFJl
bmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQgPSBsaW5lU3R5bGUuaGFzVGV4dENvbWJpbmUo
KSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVy
Q29tYmluZVRleHQ+KHJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSA/ICZkb3duY2FzdDxSZW5kZXJD
b21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgOiBudWxscHRyOwogCiAgICAgYm9vbCBzaG91bGRSb3Rh
dGUgPSAhaXNIb3Jpem9udGFsKCkgJiYgIWNvbWJpbmVkVGV4dDsKICAgICBpZiAoc2hvdWxkUm90
YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggMThmNTFl
MDQ3YmVhZDk2M2QwZjQwNzU1MDU5NmM5NjdmZjM3MWM0OC4uMTdkMDYwMTViMDBmZTYzODQ4ZDlk
NzIzMTFhMDIxNjEyNzZlMGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwCkBAIC0xMTIsOCArMTEyLDggQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKHN0ZDo6
dW5pcXVlX3B0cjxMYXlvdXRTdGF0ZT4gbmV4dCwgUmVuZGVyQm94KiByZW5kZXJlciwKICAgICBt
X2xheW91dERlbHRhWVNhdHVyYXRlZCA9IG1fbmV4dC0+bV9sYXlvdXREZWx0YVlTYXR1cmF0ZWQ7
CiAjZW5kaWYKIAotICAgIGlmIChsaW5lR3JpZCgpICYmIChsaW5lR3JpZCgpLT5zdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gcmVuZGVyZXItPnN0eWxlKCkud3JpdGluZ01vZGUoKSkgJiYgcmVuZGVy
ZXItPmlzUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCi0gICAgICAgIHRvUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkKHJlbmRlcmVyKS0+Y29tcHV0ZUxpbmVHcmlkUGFnaW5hdGlvbk9y
aWdpbigqdGhpcyk7CisgICAgaWYgKGxpbmVHcmlkKCkgJiYgKGxpbmVHcmlkKCktPnN0eWxlKCku
d3JpdGluZ01vZGUoKSA9PSByZW5kZXJlci0+c3R5bGUoKS53cml0aW5nTW9kZSgpKSAmJiBpczxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCpyZW5kZXJlcikpCisgICAgICAgIGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKnJlbmRlcmVyKS5jb21wdXRlTGluZUdyaWRQ
YWdpbmF0aW9uT3JpZ2luKCp0aGlzKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgZ3JpZCB0
byB0cmFjaywgdGhlbiBhZGQgaXQgdG8gb3VyIHNldC4KICAgICBpZiAocmVuZGVyZXItPnN0eWxl
KCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkKCkgJiYgaXM8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKaW5kZXggMmQ4Y2RjYjFmZGYxZWRlODhhYmRjNzg2NjBkMTcwZDY4OWVlOTA0Zi4u
N2RlMTgxYzgzN2E4MWJjZTE5YTFkNTliODRhMWY0ZGRiZTk1YWVhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC03MDUsOCArNzA1LDggQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBS
ZW5kZXJCbG9jayogY2gKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjaGlsZEZsb3dUaHJlYWQgPSBj
aGlsZC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChjaGlsZEZsb3dUaHJl
YWQgJiYgY2hpbGRGbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQotICAgICAg
ICB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChjaGlsZEZsb3dUaHJlYWQpLT5yZW1vdmVGbG93Q2hp
bGRJbmZvKGNoaWxkKTsKKyAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihjaGlsZEZs
b3dUaHJlYWQpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpjaGls
ZEZsb3dUaHJlYWQpLnJlbW92ZUZsb3dDaGlsZEluZm8oY2hpbGQpOwogCiAgICAgcGFyZW50LnJl
bW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBjaGlsZC0+aGFzTGF5ZXIoKSA/IE5vdGlmeUNoaWxk
cmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICBjaGlsZC0+bW92ZUFsbENoaWxkcmVuVG8o
JnBhcmVudCwgbmV4dFNpYmxpbmcsIGNoaWxkLT5oYXNMYXllcigpKTsKQEAgLTEyNjgsOCArMTI2
OCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlvdXQoKQogCiAgICAgLy8gTWFr
ZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRlbnQgaWYgd2Ug
YXJlIGEgZmxvdyB0aHJlYWQgaW4gYSBzaW1wbGlmaWVkIGxheW91dC4KICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUg
bGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVu
ZGVyRmxvd1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5
QnJlYWtBZnRlckNvbnRlbnQoY2xpZW50TG9naWNhbEJvdHRvbSgpKTsKKyAgICBpZiAoaXM8UmVu
ZGVyRmxvd1RocmVhZD4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFk
PigqdGhpcykuYXBwbHlCcmVha0FmdGVyQ29udGVudChjbGllbnRMb2dpY2FsQm90dG9tKCkpOwog
CiAgICAgLy8gTGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGlmIG91ciBwb3NpdGlvbmVk
IGNoaWxkIGJpdCBpcyBzZXQuCiAgICAgLy8gQWxzbywgaWYgYW4gYWJzb2x1dGUgcG9zaXRpb24g
ZWxlbWVudCBpbnNpZGUgYSByZWxhdGl2ZSBwb3NpdGlvbmVkIGNvbnRhaW5lciBtb3ZlcywgYW5k
IHRoZSBhYnNvbHV0ZSBlbGVtZW50IGhhcyBhIGZpeGVkIHBvc2l0aW9uCkBAIC0xNTgwLDcgKzE1
ODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICAgICAgYm9vbCBkaWRDbGlw
VG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyICYmIG5h
bWVkRmxvd0ZyYWdtZW50ICYmIHBhaW50SW5mby5wYWludENvbnRhaW5lci0+aXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQoKSkgeworICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmIGlz
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4ocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKSkgewogICAg
ICAgICAgICAgICAgIC8vIElmIHRoaXMgYm94IGdvZXMgYmV5b25kIHRoZSBjdXJyZW50IHJlZ2lv
biwgdGhlbiBtYWtlIHN1cmUgbm90IHRvIG92ZXJmbG93IHRoZSByZWdpb24uCiAgICAgICAgICAg
ICAgICAgLy8gVGhpcyAob3ZlcmZsb3dpbmcgcmVnaW9uIFggYWx0b3VnaCBhbHNvIGZyYWdtZW50
ZWQgdG8gcmVnaW9uIFgrMSkgY291bGQgaGFwcGVuIHdoZW4gb25lIG9mIHRoaXMgYm94J3MgY2hp
bGRyZW4KICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd3MgcmVnaW9uIFggYW5kIGlzIGFuIHVu
c3BsaXR0YWJsZSBlbGVtZW50IChsaWtlIGFuIGltYWdlKS4KQEAgLTE1ODksNyArMTU4OSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKICAgICAgICAgICAgICAgICBkaWRDbGlwVG9SZWdpb24gPSB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAodG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKS0+ZGVjb3JhdGlvbnNDbGlwUmVjdEZvckJv
eEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGRvd25jYXN0PFJlbmRlck5hbWVkRmxv
d1RocmVhZD4oKnBhaW50SW5mby5wYWludENvbnRhaW5lcikuZGVjb3JhdGlvbnNDbGlwUmVjdEZv
ckJveEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dGcmFnbWVudCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpOwpAQCAtMTg5OCw5ICsxODk4LDkgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQm
IHIKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0Zy
YWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgaWYgKHBhaW50
SW5mbyAmJiBuYW1lZEZsb3dGcmFnbWVudCAmJiBwYWludEluZm8tPnBhaW50Q29udGFpbmVyLT5p
c1JlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIGlmIChwYWludEluZm8gJiYgbmFtZWRGbG93RnJh
Z21lbnQgJiYgaXM8UmVuZGVyRmxvd1RocmVhZD4oKnBhaW50SW5mby0+cGFpbnRDb250YWluZXIp
KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkg
Zmxvd2VkIGludG8gdGhlIHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIXRvUmVu
ZGVyRmxvd1RocmVhZChwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0U2hvdWxkRnJh
Z21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQorICAgICAgICBpZiAo
IWRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS5v
YmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjQ0Miw3ICsyNDQyLDcg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0g
dG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsK
KyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhy
ZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZsb3dUaHJlYWQtPmN1cnJl
bnRSZWdpb24oKSkgOiBudWxscHRyOwogICAgIC8vIElmIHdlIGFyZSBub3cgc2VhcmNoaW5nIGlu
c2lkZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAogICAgIC8vIGlzIGJlaW5nIGZy
YWdtZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYg
IWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVk
Rmxvd0ZyYWdtZW50KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAKaW5kZXggOTE5N2E5YmJlMjhhOTczYjVkNDVmMTdiOTdjNGUzZTVkMzNkNTNjOC4uY2Yw
NTkwMDRmNTAzYTliMmRmYzQ5MzAxYTFkMDAzMmQ5Nzk3MTIyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTUwMSw4ICs1MDEsOCBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0IHBhZ2VMb2dpY2FsSAogCiAgICAgLy8gQmVmb3JlIHVwZGF0aW5nIHRoZSBmaW5hbCBz
aXplIG9mIHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJlYWsgaXMgYXBwbGll
ZCBhZnRlciB0aGUgY29udGVudC4KICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHNpemUgaW5mb3Jt
YXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRvLWhlaWdodCByZWdp
b24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAg
ICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5QnJlYWtBZnRlckNvbnRlbnQob2xk
Q2xpZW50QWZ0ZXJFZGdlKTsKKyAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykuYXBwbHlCcmVha0FmdGVy
Q29udGVudChvbGRDbGllbnRBZnRlckVkZ2UpOwogCiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgp
OwogICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwpAQCAtMjgyNiw4
ICsyODI2LDggQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
OwotICAgIGlmIChpc1JlbmRlclZpZXcoKSkKLSAgICAgICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0
b0xheW91dFNpemUodG9SZW5kZXJWaWV3KCp0aGlzKS5mcmFtZVZpZXcoKS5zY3JvbGxQb3NpdGlv
bigpKTsKKyAgICBpZiAoaXM8UmVuZGVyVmlldz4oKnRoaXMpKQorICAgICAgICBhZGp1c3RlZExv
Y2F0aW9uICs9IHRvTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJWaWV3PigqdGhpcykuZnJhbWVW
aWV3KCkuc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgYXV0byBi
ZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CkBAIC0zNzI0LDggKzM3MjQsOCBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5n
ZShib29sJiByZWxheW91dENoaWxkcgogICAgICAgICBmbG93VGhyZWFkLT5zZXRDb2x1bW5IZWln
aHRBdmFpbGFibGUoc3RkOjptYXg8TGF5b3V0VW5pdD4oY29sdW1uSGVpZ2h0LCAwKSk7CiAgICAg
ICAgIGlmIChvbGRIZWlnaHRBdmFpbGFibGUgIT0gZmxvd1RocmVhZC0+Y29sdW1uSGVpZ2h0QXZh
aWxhYmxlKCkpCiAgICAgICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyk7CisgICAgfSBlbHNlIGlmIChp
czxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpIHsKKyAgICAgICAgUmVuZGVyRmxvd1RocmVhZCYg
Zmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKTsKIAogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gYWx3YXlzIG1ha2Ugc3VyZSB3ZSBoYXZlIGEg
cGFnZSBsb2dpY2FsIGhlaWdodCwgaWYgc2FpZCBoZWlnaHQKICAgICAgICAgLy8gaXMga25vd24u
IFRoZSBwYWdlIGxvZ2ljYWwgaGVpZ2h0IHRoaW5nIGluIExheW91dFN0YXRlIGlzIG1lYW5pbmds
ZXNzIGZvciBmbG93CkBAIC0zNzM2LDkgKzM3MzYsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5nZShib29sJiByZWxheW91dENoaWxk
cgogICAgICAgICAvLyBpdCdzIHVua25vd24sIHdlIG5lZWQgdG8gcHJldmVudCB0aGUgcGFnaW5h
dGlvbiBjb2RlIGZyb20gYXNzdW1pbmcgcGFnZSBicmVha3MgZXZlcnl3aGVyZQogICAgICAgICAv
LyBhbmQgdGhlcmVieSBlYXRpbmcgZXZlcnkgdG9wIG1hcmdpbi4gSXQgc2hvdWxkIGJlIHRyaXZp
YWwgdG8gY2xlYW4gdXAgYW5kIGdldCByaWQgb2YgdGhpcwogICAgICAgICAvLyBoYWNrIG9uY2Ug
dGhlIG9sZCBtdWx0aWNvbCBpbXBsZW1lbnRhdGlvbiBpcyBnb25lLgotICAgICAgICBwYWdlTG9n
aWNhbEhlaWdodCA9IGZsb3dUaHJlYWQtPmlzUGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpID8gTGF5
b3V0VW5pdCgxKSA6IExheW91dFVuaXQoMCk7CisgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0g
Zmxvd1RocmVhZC5pc1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSA/IExheW91dFVuaXQoMSkgOiBM
YXlvdXRVbml0KDApOwogCi0gICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IGZsb3dU
aHJlYWQtPnBhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkID0gZmxvd1RocmVhZC5wYWdlTG9naWNhbFNpemVDaGFuZ2VkKCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCmluZGV4IDRmNGE5ZjUxNzM0MThiMDAzZDcwMTA1ZGQ1MmQ3MTI5NDQwMDU0M2UuLjAz
YWZjMTVhYTU2NjYwNTNjODlkOTVjZmU4NjZkODY1Y2E0YjhhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MzQsNyAr
NzM0LDcgQEAgQmlkaVJ1biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9u
UG9zaXRpb25zRm9yU2VnbWVudChSb290SW5saW5lQm8KICAgICAgICAgICAgIHNldExvZ2ljYWxX
aWR0aEZvclRleHRSdW4obGluZUJveCwgcnVuLCAmcmVuZGVyVGV4dCwgdG90YWxMb2dpY2FsV2lk
dGgsIGxpbmVJbmZvLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlLCB3b3Jk
TWVhc3VyZW1lbnRzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgZW5jb3Vu
dGVyZWRKdXN0aWZpZWRSdWJ5ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyUnVi
eVJ1bj4ocnVuLT5yZW5kZXJlcigpKSAmJiB0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBydW4gIT0g
dHJhaWxpbmdTcGFjZVJ1biAmJiB0b1JlbmRlclJ1YnlSdW4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5
QmFzZSgpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJl
cigpKSAmJiB0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1biAm
JiBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCkpIHsK
ICAgICAgICAgICAgICAgICBhdXRvKiBydWJ5QmFzZSA9IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+
KHJ1bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKTsKICAgICAgICAgICAgICAgICBpZiAocnVieUJh
c2UtPmZpcnN0Um9vdEJveCgpICYmICFydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCktPm5leHRSb290
Qm94KCkgJiYgcnVuLT5yZW5kZXJlcigpLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBsZWFmQ2hpbGQgPSBydWJ5QmFzZS0+Zmly
c3RSb290Qm94KCktPmZpcnN0TGVhZkNoaWxkKCk7IGxlYWZDaGlsZDsgbGVhZkNoaWxkID0gbGVh
ZkNoaWxkLT5uZXh0TGVhZkNoaWxkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKaW5kZXggNTFmZDdkNTJkODk2MzM4YmU3NjUyY2MzYTU0MzI1YzVkYzk3NDk5MC4uZTli
NzFjMmI4YzU4ZGIyOTZmMjhmZjNlMjUyZWUxMDU4NjgwMjY5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTgwNCw5ICs4MDQsOSBAQCBib29sIFJlbmRlckJveDo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlckJsb2NrKiBuZXh0U2Ny
b2xsQmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAobmV4dFNjcm9sbEJsb2NrICYm
IG5leHRTY3JvbGxCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgIGlmIChp
czxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KG5leHRTY3JvbGxCbG9jaykpIHsKICAgICAgICAgQVNT
RVJUKHN0YXJ0Qm94KTsKLSAgICAgICAgbmV4dFNjcm9sbEJsb2NrID0gdG9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQobmV4dFNjcm9sbEJsb2NrKS0+ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJv
eCh3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCwgKnN0YXJ0Qm94KTsKKyAgICAgICAgbmV4dFNjcm9s
bEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqbmV4dFNjcm9sbEJsb2Nr
KS5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50
LCAqc3RhcnRCb3gpOwogICAgIH0KIAogICAgIGlmIChuZXh0U2Nyb2xsQmxvY2sgJiYgIW5leHRT
Y3JvbGxCbG9jay0+aXNSZW5kZXJWaWV3KCkpCkBAIC0xMTY2LDcgKzExNjYsNyBAQCBib29sIFJl
bmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdAogICAgIH0KIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdp
b25Ub1VzZSA9IGZsb3dUaHJlYWQgPyB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJl
YWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
VG9Vc2UgPSBmbG93VGhyZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwogCiAgICAgLy8gSWYgdGhlIGJv
eCBpcyBub3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29p
bmcgZnVydGhlci4KICAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNo
b3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKQEAgLTE2NDAsNyAr
MTY0MCw3IEBAIHZvaWQgUmVuZGVyQm94OjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyIGlt
YWdlLCBjb25zdCBJbnRSZWN0KikKIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0Zv
ckltYWdlKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgRmlsbExheWVyKiBsYXllcnMsIGJv
b2wgZHJhd2luZ0JhY2tncm91bmQpCiB7CiAgICAgTGF5b3V0UmVjdCByZW5kZXJlclJlY3Q7Ci0g
ICAgUmVuZGVyQm94KiBsYXllclJlbmRlcmVyID0gMDsKKyAgICBSZW5kZXJCb3gqIGxheWVyUmVu
ZGVyZXIgPSBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1ckxheWVyID0g
bGF5ZXJzOyBjdXJMYXllcjsgY3VyTGF5ZXIgPSBjdXJMYXllci0+bmV4dCgpKSB7CiAgICAgICAg
IGlmIChjdXJMYXllci0+aW1hZ2UoKSAmJiBpbWFnZSA9PSBjdXJMYXllci0+aW1hZ2UoKS0+ZGF0
YSgpICYmIGN1ckxheWVyLT5pbWFnZSgpLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpKSB7CkBAIC0xNjUwLDggKzE2NTAsOCBAQCBib29sIFJlbmRlckJveDo6cmVwYWlu
dExheWVyUmVjdHNGb3JJbWFnZShXcmFwcGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXll
cgogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tncm91bmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9ICZ2aWV3KCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBydyA9IHRvUmVuZGVyVmlldygqbGF5ZXJSZW5kZXJlcikuZnJhbWVWaWV3
KCkuY29udGVudHNXaWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJoID0g
dG9SZW5kZXJWaWV3KCpsYXllclJlbmRlcmVyKS5mcmFtZVZpZXcoKS5jb250ZW50c0hlaWdodCgp
OworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJ3ID0gZG93bmNhc3Q8UmVuZGVyVmll
dz4oKmxheWVyUmVuZGVyZXIpLmZyYW1lVmlldygpLmNvbnRlbnRzV2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCByaCA9IGRvd25jYXN0PFJlbmRlclZpZXc+KCpsYXllclJl
bmRlcmVyKS5mcmFtZVZpZXcoKS5jb250ZW50c0hlaWdodCgpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyUmVjdCA9IExheW91dFJlY3QoLWxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIC1sYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwK
QEAgLTE2NjQsNyArMTY2NCw3IEBAIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0Zv
ckltYWdlKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgRmlsbExheWVyCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5IGdlb21ldHJ5OwotICAg
ICAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnko
MCwgY3VyTGF5ZXIsIHJlbmRlcmVyUmVjdCwgZ2VvbWV0cnkpOworICAgICAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkobnVsbHB0ciwgY3VyTGF5
ZXIsIHJlbmRlcmVyUmVjdCwgZ2VvbWV0cnkpOwogICAgICAgICAgICAgaWYgKGdlb21ldHJ5Lmhh
c05vbkxvY2FsR2VvbWV0cnkoKSkgewogICAgICAgICAgICAgICAgIC8vIFJhdGhlciB0aGFuIGlu
Y3VyIHRoZSBjb3N0cyBvZiBjb21wdXRpbmcgdGhlIHBhaW50Q29udGFpbmVyIGZvciByZW5kZXJl
cnMgd2l0aCBmaXhlZCBiYWNrZ3JvdW5kcwogICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRv
IGdldCB0aGUgcmlnaHQgZGVzdFJlY3QsIGp1c3QgcmVwYWludCB0aGUgZW50aXJlIHJlbmRlcmVy
LgpAQCAtMTk1OCw3ICsxOTU4LDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2FsVG9Db250YWlu
ZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW4KICAgICBpZiAo
IWNvbnRhaW5lci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgfHwgIWZpeGVkUG9zaXRp
b25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgY29udGFpbmVyLT5t
YXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2Rl
LCB3YXNGaXhlZCk7CiAgICAgZWxzZQotICAgICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250
YWluZXIodG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KGNvbnRhaW5lciksIHRyYW5zZm9ybVN0YXRl
LCBtb2RlLCB3YXNGaXhlZCk7CisgICAgICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5l
cihkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0Pihjb250YWluZXIpLCB0cmFuc2Zvcm1T
dGF0ZSwgbW9kZSwgd2FzRml4ZWQpOwogfQogCiBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlckJv
eDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBh
bmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0CkBA
IC0zMDk3LDE1ICszMDk3LDE1IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vCiAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrJiBjYiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Js
b2NrKTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICghcmVnaW9uKSB7Ci0gICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5p
c1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250YWluaW5nQmxv
Y2spLT5jb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpOworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluaW5nQmxvY2spICYmICFjaGVja0ZvclBlcnBl
bmRpY3VsYXJXcml0aW5nTW9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxXaWR0aE9mRmly
c3RSZWdpb24oKTsKICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7CiAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi5vZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBjYlJlZ2lv
biA9IGNiLnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBpZiAoY2JSZWdpb24pCiAgICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJC
b3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChyZWdpb24gJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250
YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgUmVuZGVyUmVn
aW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25z
KHJlZ2lvbik7CiAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhj
b250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCmluZGV4IGQ0MjkzMjkyZTJiNjgwMWVkNzYxYWUzZGYw
MWJiMjE1ODNkOGZmZDcuLmE1OTU4ZDQwODQyM2JjZjg4ZjcyMTU1MmM5YzM0NDEwZWNhZjI2NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCkBAIC01
Nyw4ICs1Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzRm9udFVwZGF0ZSA6IDE7CiB9
OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyQ29tYmluZVRleHQsIGlzQ29tYmlu
ZVRleHQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyQ29tYmluZVRleHQsIGlzQ29tYmluZVRleHQoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCA0Y2EwZTBiZjdm
MDhmMDgxOTQyNDdlZmQ3ODYyODcwM2VjNjYyYTA3Li5kOTk1MjY2MThjNDhjMWZhYWE2NDk3ZWE2
NDE1MzFlNGY0ODRmMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCkBAIC0yNTYsNyArMjU2LDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6
OmFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWcKICAgICAg
ICAgLy8gVGV4dCBub2RlcyBzaGFyZSBzdHlsZSB3aXRoIHRoZWlyIHBhcmVudHMgYnV0IHRyYW5z
Zm9ybXMgZG9uJ3QgYXBwbHkgdG8gdGhlbSwKICAgICAgICAgLy8gaGVuY2UgdGhlICFpc1RleHQo
KSBjaGVjay4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gdHJhbnNmb3JtcyBhcmUgdGFrZW4gaW50
byBhY2NvdW50IGZvciBvdmVyZmxvdywgd2Ugd2lsbCBuZWVkIHRvIGRvIGEgbGF5b3V0LgotICAg
ICAgICBpZiAoIWhhc0xheWVyKCkgfHwgIXRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+
bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgaWYgKCFoYXNMYXllcigpIHx8ICFk
b3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+aXNDb21wb3Np
dGVkKCkpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IGF0IGxlYXN0IFNpbXBsaWZp
ZWRMYXlvdXQsIGJ1dCBpZiBQb3NpdGlvbmVkTW92ZW1lbnRPbmx5IGlzIGFscmVhZHkgc2V0CiAg
ICAgICAgICAgICAvLyB0aGVuIHdlIGFjdHVhbGx5IG5lZWQgU2ltcGxpZmllZExheW91dEFuZFBv
c2l0aW9uZWRNb3ZlbWVudC4KICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkKQEAgLTI3Miwx
NCArMjcyLDE0IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50OjphZGp1c3RTdHlsZURp
ZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAgLy8gSWYgb3BhY2l0eSBj
aGFuZ2VkLCBhbmQgd2UgYXJlIG5vdCBjb21wb3NpdGVkLCBuZWVkIHRvIHJlcGFpbnQgKGFsc28K
ICAgICAvLyBpZ25vcmluZyB0ZXh0IG5vZGVzKQogICAgIGlmIChjb250ZXh0U2Vuc2l0aXZlUHJv
cGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU9wYWNpdHkpIHsKLSAgICAgICAgaWYg
KCFoYXNMYXllcigpIHx8ICF0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCkt
PmlzQ29tcG9zaXRlZCgpKQorICAgICAgICBpZiAoIWhhc0xheWVyKCkgfHwgIWRvd25jYXN0PFJl
bmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkKICAg
ICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZXBhaW50TGF5ZXI7CiAgICAgICAgIGVs
c2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKQogICAgICAgICAg
ICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7CiAgICAgfQogCiAgICAg
aWYgKChjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
eUZpbHRlcikgJiYgaGFzTGF5ZXIoKSkgewotICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0
b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCk7CisgICAgICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXll
cigpOwogICAgICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSB8fCBsYXllci0+cGFpbnRz
V2l0aEZpbHRlcnMoKSkKICAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZXBhaW50
TGF5ZXI7CiAgICAgICAgIGVsc2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0
ZUxheWVyKQpAQCAtMjkwLDcgKzI5MCw3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50
OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAg
Ly8gc3R5bGUgY2hhbmdpbmcsIHNpbmNlIGl0IGRlcGVuZHMgb24gd2hldGhlciB3ZSBkZWNpZGUg
dG8gY29tcG9zaXRlIHRoZXNlIGVsZW1lbnRzLiBXaGVuIHRoZQogICAgIC8vIGxheWVyIHN0YXR1
cyBvZiBvbmUgb2YgdGhlc2UgZWxlbWVudHMgY2hhbmdlcywgd2UgbmVlZCB0byBmb3JjZSBhIGxh
eW91dC4KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCAmJiBpc1JlbmRlckxh
eWVyTW9kZWxPYmplY3QoKSkgewotICAgICAgICBpZiAoaGFzTGF5ZXIoKSAhPSB0b1JlbmRlckxh
eWVyTW9kZWxPYmplY3QodGhpcyktPnJlcXVpcmVzTGF5ZXIoKSkKKyAgICAgICAgaWYgKGhhc0xh
eWVyKCkgIT0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLnJlcXVpcmVz
TGF5ZXIoKSkKICAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CiAgICAg
fQogCkBAIC02NTgsNyArNjU4LDcgQEAgc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlckUKICAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gbmV3T2JqZWN0LT5wYXJlbnQoKS0+ZmluZE5leHRMYXllcihwYXJl
bnRMYXllciwgbmV3T2JqZWN0KTsKICAgICAgICAgICAgIG5ld09iamVjdCA9IG51bGxwdHI7CiAg
ICAgICAgIH0KLSAgICAgICAgcGFyZW50TGF5ZXItPmFkZENoaWxkKHRvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdChyZW5kZXJlcikubGF5ZXIoKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICBwYXJlbnRM
YXllci0+YWRkQ2hpbGQoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXIp
LmxheWVyKCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjgy
LDcgKzY4Miw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKFJlbmRlckxheWVy
KiBwYXJlbnRMYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhhc0xheWVyKCkpIHsK
LSAgICAgICAgcGFyZW50TGF5ZXItPnJlbW92ZUNoaWxkKHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCh0aGlzKS0+bGF5ZXIoKSk7CisgICAgICAgIHBhcmVudExheWVyLT5yZW1vdmVDaGlsZChkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTY5Niw3ICs2OTYsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6Om1v
dmVMYXllcnMoUmVuZGVyTGF5ZXIqIG9sZFBhcmVudCwgUmVuZGVyTGF5ZXIqIG5ld1BhcmVudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhhc0xheWVyKCkpIHsKLSAgICAgICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpOwor
ICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqdGhpcykubGF5ZXIoKTsKICAgICAgICAgQVNTRVJUKG9sZFBhcmVudCA9PSBsYXllci0+
cGFyZW50KCkpOwogICAgICAgICBpZiAob2xkUGFyZW50KQogICAgICAgICAgICAgb2xkUGFyZW50
LT5yZW1vdmVDaGlsZChsYXllcik7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogICAgIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0Qml0KHRydWUp
OwogICAgIG1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KCk7CiAgICAgaWYgKGhhc0xheWVy
KCkpIHsKLSAgICAgICAgaWYgKG9sZFN0eWxlICYmIHN0eWxlKCkuZGlmZlJlcXVpcmVzTGF5ZXJS
ZXBhaW50KCpvbGRTdHlsZSwgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKSkpCisgICAgICAgIGlmIChvbGRTdHlsZSAmJiBzdHlsZSgpLmRpZmZS
ZXF1aXJlc0xheWVyUmVwYWludCgqb2xkU3R5bGUsIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KCp0aGlzKS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkpCiAgICAgICAgICAgICBzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0TGF5
ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7CkBAIC0xMzMx
LDEwICsxMzMxLDEwIEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWludEZvclBhdXNlZEltYWdl
QW5pbWF0aW9uc0lmTmVlZGVkKGNvbnN0IEludFJlY3QmIHZpc2liCiAKIFJlbmRlck5hbWVkRmxv
d1RocmVhZCogUmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcigpCiB7
Ci0gICAgYXV0byByZW5kZXJlciA9IHRoaXM7Ci0gICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKQorICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpczsKKyAgICB3aGlsZSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhaXM8UmVuZGVyTmFtZWRGbG93VGhy
ZWFkPigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsK
LSAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFk
KCkgPyB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJl
dHVybiBpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4ocmVuZGVyZXIpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBSZW5kZXJF
bGVtZW50OjpoYXNDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApp
bmRleCA4M2M3YzM3MjkxMDYyMzk5Yzk4ZDgyYTY2OGUzMmFkZTA3MTJlZTdiLi4xNGYwYTM4ZWQ5
NjNjOTU2MTUyYTg5YjJiM2U1MDEzYzJlMGI0MTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApAQCAtMTAxLDggKzEwMSw2IEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbjsKIH07CiAKLVJFTkRF
Ul9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJFbWJlZGRlZE9iamVjdCwgaXNFbWJlZGRlZE9iamVj
dCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
UkVOREVSX09CSkVDVChSZW5kZXJFbWJlZGRlZE9iamVjdCwgaXNFbWJlZGRlZE9iamVjdCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGQy
YjAwODBhOTYyZDE3YTk5MDMwMzdmODFkNDAxNjZjYzA4ZWVlZTcuLjRiZTI4NjlmNjVjODJjYjA3
MjA5ODk4NDI4MDNiODE0MThhZDI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xNTAsOCArMTUxLDggQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjp2YWxpZGF0ZVJlZ2lvbnMoKQogICAgICAgICAgICAgICAgIC8vIEFsc28sIGlm
IHdlIGhhdmUgYXV0by1oZWlnaHQgcmVnaW9ucyB3ZSBjYW4ndCBhc3N1bWUgbV9yZWdpb25zSGF2
ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IHRvIGJlIHRydWUgaW4gdGhlIGZpcnN0IHBoYXNlCiAgICAg
ICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYXV0by1oZWlnaHQgcmVnaW9ucyBkb24ndCBoYXZl
IHRoZWlyIGhlaWdodCBjb21wdXRlZCB5ZXQuCiAgICAgICAgICAgICAgICAgaWYgKGluTWVhc3Vy
ZUNvbnRlbnRMYXlvdXRQaGFzZSgpICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93
RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21wdXRlZEF1dG9IZWlnaHQobmFtZWRG
bG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50PigqcmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0
Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0
KCkpOwogICAgICAgICAgICAgICAgICAgICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWln
aHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgpCiBib29sIFJlbmRlckZsb3dUaHJlYWQ6Omhhc0Nv
bXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByZWdp
b24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgaWYgKHRvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQocmVnaW9uKS0+bGF5ZXJPd25lcigpLmxheWVyKCktPmhhc0NvbXBvc2l0aW5nRGVzY2VuZGFu
dCgpKQorICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdp
b24pLmxheWVyT3duZXIoKS5sYXllcigpLT5oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjQwLDEyICsyNDEsMTIgQEAgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkZvckNvbXBvc2l0
ZWRMYXllcihSZW5kZXJMYXllciYKICAgICAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9
IG51bGxwdHI7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKGdldFJlZ2lvblJhbmdlRm9yQm94KGNoaWxkTGF5ZXIucmVuZGVyQm94KCksIHN0
YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoc3RhcnRSZWdpb24pOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50PihzdGFydFJlZ2lvbik7CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UnbGwgaGF2ZSByZWdpb24gcmFuZ2VzIGZvciBpbmxpbmVz
IGFzIHdlbGwuCiAgICAgTGF5b3V0UG9pbnQgZmxvd1RocmVhZE9mZnNldCA9IGZsb29yZWRMYXlv
dXRQb2ludChjaGlsZExheWVyLnJlbmRlcmVyKCkubG9jYWxUb0NvbnRhaW5lclBvaW50KExheW91
dFBvaW50KCksIHRoaXMsIEFwcGx5Q29udGFpbmVyRmxpcCkpOwotICAgIHJldHVybiB0b1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoMCwgZmxpcEZvcldyaXRpbmdN
b2RlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93VGhyZWFkT2Zmc2V0LnkoKSA6IGZs
b3dUaHJlYWRPZmZzZXQueCgpKSwgdHJ1ZSkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uQXRCbG9ja09mZnNldCgwLCBmbGlwRm9yV3JpdGluZ01v
ZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRPZmZzZXQueSgpIDogZmxv
d1RocmVhZE9mZnNldC54KCkpLCB0cnVlKSk7CiB9CiAKIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIoUmVuZGVy
TGF5ZXImIGNoaWxkTGF5ZXIpIGNvbnN0CkBAIC03MTMsOCArNzE0LDggQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJCb3gqIGIKICAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gdHJ1ZTsKIAog
ICAgICAgICBpZiAoIShpbnNpZGVPbGRSZWdpb25SYW5nZSAmJiBpbnNpZGVOZXdSZWdpb25SYW5n
ZSkpIHsKLSAgICAgICAgICAgIGlmIChyZWdpb24tPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
KSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbiktPmNs
ZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihib3gpOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJv
eCk7CiAgICAgICAgICAgICBpZiAocmVnaW9uLT5yZW5kZXJCb3hSZWdpb25JbmZvKGJveCkpCiAg
ICAgICAgICAgICAgICAgcmVnaW9uLT5yZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CiAg
ICAgICAgIH0KQEAgLTk3OCwxMCArOTc5LDEwIEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5p
dGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQoUmVuZGVyUmVnaW9uKiBzdGFydFJlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byByZWdpb25JdGVyID0gc3RhcnRSZWdpb24g
PyBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbikgOiBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwg
ZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyByZWdpb25JdGVyICE9IGVuZDsgKytyZWdpb25JdGVy
KSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKnJlZ2lvbkl0ZXI7Ci0gICAgICAg
IGlmIChyZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQocmVnaW9uKTsKLSAgICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21w
dXRlZEF1dG9IZWlnaHQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkp
OworICAgICAgICBSZW5kZXJSZWdpb24mIHJlZ2lvbiA9ICoqcmVnaW9uSXRlcjsKKyAgICAgICAg
aWYgKHJlZ2lvbi5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7CisgICAgICAgICAgICBhdXRvJiBu
YW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihyZWdp
b24pOworICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0
KG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTAyMCw3ICsxMDIxLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRh
dGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KGNvbnN0IFJlbmRlclJlZ2lvbiogbGEKICAg
ICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewogICAgICAgICAvLyBJZiB3ZSBm
aW5kIGFuIGVtcHR5IGF1dG8taGVpZ2h0IHJlZ2lvbiwgY2xlYXIgdGhlIGNvbXB1dGVkQXV0b0hl
aWdodCB2YWx1ZS4KICAgICAgICAgaWYgKGVtcHR5UmVnaW9uc1NlZ21lbnQgJiYgcmVnaW9uLT5o
YXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudChyZWdpb24pLT5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgpOworICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyQ29tcHV0ZWRBdXRv
SGVpZ2h0KCk7CiAKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSByZWdp
b24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2Fs
SGVpZ2h0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oUmVuZGVyRmxvd1RocmVhZDo6bWF4TG9naWNh
bEhlaWdodCgpIC0gbG9naWNhbEhlaWdodCwgcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93
VGhyZWFkQ29udGVudCgpKTsKQEAgLTEwODIsMjQgKzEwODMsMjQgQEAgYm9vbCBSZW5kZXJGbG93
VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExh
eW91dFVuaXQKICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uID0gb2Zm
c2V0QnJlYWtJbkZsb3dUaHJlYWQgLSBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkOwog
CiAgICAgaWYgKHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KHJlZ2lvbik7CisgICAgICAgIGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93
bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pOwogCiAgICAgICAgIC8vIEEg
Zm9yY2VkIGJyZWFrIGNhbiBhcHBlYXIgb25seSBpbiBhbiBhdXRvLWhlaWdodCByZWdpb24gdGhh
dCBkaWRuJ3QgaGF2ZSBhIGZvcmNlZCBicmVhayBiZWZvcmUuCiAgICAgICAgIC8vIFRoaXMgQVNT
RVJUIGlzIGEgZ29vZC1lbm91Z2ggaGV1cmlzdGljIHRvIHZlcmlmeSB0aGUgYWJvdmUgY29uZGl0
aW9uLgotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVp
Z2h0KCkgPT0gbmFtZWRGbG93RnJhZ21lbnQtPmNvbXB1dGVkQXV0b0hlaWdodCgpKTsKKyAgICAg
ICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkgPT0gbmFt
ZWRGbG93RnJhZ21lbnQuY29tcHV0ZWRBdXRvSGVpZ2h0KCkpOwogCi0gICAgICAgIG1hcFRvVXNl
LnNldChicmVha0NoaWxkLCBuYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIG1hcFRvVXNlLnNl
dChicmVha0NoaWxkLCAmbmFtZWRGbG93RnJhZ21lbnQpOwogCiAgICAgICAgIGhhc0NvbXB1dGVk
QXV0b0hlaWdodCA9IHRydWU7CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIGhlaWdo
dCBwcmV0ZW5kaW5nIHRoYXQgdGhlIG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uIGlzIHRoZSBs
b2dpY2FsSGVpZ2h0IGZvciB0aGUgYXV0by1oZWlnaHQgcmVnaW9uLgotICAgICAgICBMYXlvdXRV
bml0IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5jb25zdHJh
aW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KG9mZnNldEJyZWFrSW5DdXJyZW50UmVn
aW9uKTsKKyAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPSBuYW1l
ZEZsb3dGcmFnbWVudC5jb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KG9m
ZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uKTsKIAogICAgICAgICAvLyBUaGUgbmV3IGhlaWdodCBv
ZiB0aGlzIHJlZ2lvbiBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwgdmFsdWUs
IHRoZSBtYXggaGVpZ2h0LiBBIGZvcmNlZCBicmVhayBpcyB0aGUgb25seSB3YXkgdG8gY2hhbmdl
IHRoZSBpbml0aWFsCiAgICAgICAgIC8vIGhlaWdodCBvZiBhbiBhdXRvLWhlaWdodCByZWdpb24g
YmVzaWRlcyBjb250ZW50IGVuZGluZy4KLSAgICAgICAgQVNTRVJUKHJlZ2lvbkNvbXB1dGVkQXV0
b0hlaWdodCA8PSBuYW1lZEZsb3dGcmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7Cisg
ICAgICAgIEFTU0VSVChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0gbmFtZWRGbG93RnJhZ21l
bnQubWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQt
PnNldENvbXB1dGVkQXV0b0hlaWdodChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQpOworICAgICAg
ICBuYW1lZEZsb3dGcmFnbWVudC5zZXRDb21wdXRlZEF1dG9IZWlnaHQocmVnaW9uQ29tcHV0ZWRB
dXRvSGVpZ2h0KTsKIAogICAgICAgICBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkICs9
IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodDsKICAgICB9IGVsc2UKQEAgLTE0MDksOSArMTQxMCw5
IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc092ZXJmbG93RnJvbUNoaWxkKGNv
bnN0IFJlbmRlckJveCogYm94LCBjb25zdCBSCiAgICAgICAgIC8vIEluIG9yZGVyIHRvIGJlaGF2
ZSBpbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSBub24tcmVnaW9ucyBjYXNlLCBjb250ZW50IG92
ZXJmbG93aW5nIHRoZSBib3gKICAgICAgICAgLy8gZmxvd2VkIGludG8gdGhlIHJlZ2lvbiBtdXN0
IGJlIHBhaW50ZWQgb24gdG9wIG9mIHRoZSByZWdpb24ncyBwYWRkaW5nIGFuZCB0aGUgYm94J3Mg
bWFyZ2luLgogICAgICAgICAvLyBTZWUgaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJs
aWMvd3d3LXN0eWxlLzIwMTRKYW4vMDA4OS5odG1sCi0gICAgICAgIGlmIChib3gtPmlzUmVuZGVy
TmFtZWRGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVh
ZD4oKmJveCkpIHsKICAgICAgICAgICAgIEFTU0VSVChib3ggPT0gdGhpcyk7Ci0gICAgICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdtZW50Q29udGFpbmVyID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZWdpb24pLT5mcmFnbWVudENvbnRhaW5lcigpOworICAgICAgICAgICAgUmVuZGVy
QmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PigqcmVnaW9uKS5mcmFnbWVudENvbnRhaW5lcigpOwogICAgICAgICAgICAgTGF5b3V0
VW5pdCBzcGFjaW5nQWZ0ZXJMYXlvdXQgPSBmcmFnbWVudENvbnRhaW5lci5wYWRkaW5nQWZ0ZXIo
KSArIGNoaWxkLT5tYXJnaW5BZnRlcigpOwogICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRDb250YWluZXIuc2Ny
b2xsc092ZXJmbG93WSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuaAppbmRleCA4NGQwMzU2ZDliZDRkYWQyNzlhODc3NmY2YjMxZmNmMzkwYTVlYThjLi42
MjNlYmZhMjE2MTE0NTA0MDY4Zjk1MjNjN2JjNzk0ZTNiYzA1MDMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTM3Niw4ICszNzYsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgYm9vbCBtX2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSA6IDE7CiB9Owog
Ci1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyRmxvd1RocmVhZCwgaXNSZW5kZXJGbG93
VGhyZWFkKCkpCi0KIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVl
IGZvciBkZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwogdGVtcGxhdGUgPD4gc3RydWN0IFZhbHVl
VG9TdHJpbmc8UmVuZGVyUmVnaW9uKj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggMDhmN2I1NDczZWEwYTczZmNhNWMyYzRjMTJlOWZkZWU1ZTc1OTI0Ny4u
MmEwNmE1MWVmNWNmMjk1YjJlZjg4YTIyMTcwYTRlZmFhYmZhMTRhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xNDk3LDcgKzE0OTcsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpzZXRGaWx0ZXJCYWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KGNvbnN0IExh
eW91dFJlY3QmIHJlY3QpCiAgICAgfQogICAgIAogICAgIGlmIChwYXJlbnRMYXllci0+aXNSb290
TGF5ZXIoKSkgewotICAgICAgICB0b1JlbmRlclZpZXcocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkp
LnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHBhcmVudExheWVyUmVjdCk7CisgICAgICAgIGRvd25jYXN0
PFJlbmRlclZpZXc+KHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5yZXBhaW50Vmlld1JlY3Rhbmds
ZShwYXJlbnRMYXllclJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTY1
Miw3ICsxNjUyLDcgQEAgc3RhdGljIExheW91dFJlY3QgdHJhbnNwYXJlbmN5Q2xpcEJveChjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWUKICAgICAgICAgLy8gV2UgaGF2
ZSB0byBicmVhayB1cCB0aGUgdHJhbnNmb3JtZWQgZXh0ZW50IGFjcm9zcyBvdXIgY29sdW1ucy4K
ICAgICAgICAgLy8gU3BsaXQgb3VyIGJveCB1cCBpbnRvIHRoZSBhY3R1YWwgZnJhZ21lbnQgYm94
ZXMgdGhhdCByZW5kZXIgaW4gdGhlIGNvbHVtbnMvcGFnZXMgYW5kIHVuaXRlIHRob3NlIHRvZ2V0
aGVyIHRvCiAgICAgICAgIC8vIGdldCBvdXIgdHJ1ZSBib3VuZGluZyBib3guCi0gICAgICAgIFJl
bmRlckZsb3dUaHJlYWQmIGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQo
cGFnaW5hdGlvbkxheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgYXV0byYgZW5jbG9zaW5nRmxv
d1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHBhZ2luYXRpb25MYXllci0+cmVu
ZGVyZXIoKSk7CiAgICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0Zsb3dUaHJlYWQuZnJhZ21lbnRz
Qm91bmRpbmdCb3gocmVzdWx0KTsKICAgICAgICAgcmVzdWx0Lm1vdmUocGFnaW5hdGlvbkxheWVy
LT5vZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xOTkwLDggKzE5OTAsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlckxheWVyKiBh
Y2N1bXVsYXRlT2Zmc2V0VG93YXJkc0FuY2VzdG9yKGNvbnN0IFJlbmRlckxheQogCiAgICAgaWYg
KGFkanVzdEZvckNvbHVtbnMgPT0gUmVuZGVyTGF5ZXI6OkFkanVzdEZvckNvbHVtbnMpIHsKICAg
ICAgICAgaWYgKFJlbmRlckxheWVyKiBwYXJlbnRMYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewot
ICAgICAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmlzUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9
IHRvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5w
aHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb1JlZ2lvbihsb2NhdGlvbik7CisgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPihwYXJlbnRMYXllci0+cmVuZGVy
ZXIoKSkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnBo
eXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVnaW9uKGxvY2F0aW9uKTsKICAgICAgICAgICAg
ICAgICBpZiAocmVnaW9uKQogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5tb3ZlQnkocmVn
aW9uLT50b3BMZWZ0TG9jYXRpb24oKSArIC1wYXJlbnRMYXllci0+cmVuZGVyQm94KCktPnRvcExl
ZnRMb2NhdGlvbigpKTsKICAgICAgICAgICAgIH0KQEAgLTQzMDQsNyArNDMwNCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywg
Y29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94SW5GbG93
VGhyZWFkID0gbGF5ZXJCb3VuZGluZ0JveCA/ICpsYXllckJvdW5kaW5nQm94IDogYm91bmRpbmdC
b3gocGFnaW5hdGlvbkxheWVyLCBvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CiAgICAgbGF5
ZXJCb3VuZGluZ0JveEluRmxvd1RocmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJlY3RJbkZsb3dU
aHJlYWQucmVjdCgpKTsKICAgICAKLSAgICBSZW5kZXJGbG93VGhyZWFkJiBlbmNsb3NpbmdGbG93
VGhyZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7
CisgICAgYXV0byYgZW5jbG9zaW5nRmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJl
YWQ+KHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7CiAgICAgUmVuZGVyTGF5ZXIqIHBhcmVu
dFBhZ2luYXRpb25MYXllciA9IHBhZ2luYXRpb25MYXllci0+cGFyZW50KCktPmVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllckluU3VidHJlZShyb290TGF5ZXIsIGluY2x1c2lvbk1vZGUpOwogICAgIExh
eWVyRnJhZ21lbnRzIGFuY2VzdG9yRnJhZ21lbnRzOwogICAgIGlmIChwYXJlbnRQYWdpbmF0aW9u
TGF5ZXIpIHsKQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAg
ICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudCgpKTsKICAgICBBU1NFUlQoIXJlbmRlcmVyKCkudmlldygpLm5lZWRzTGF5b3V0KCkp
OwogCi0gICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJlYSA9IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1Ro
cmVhZCgpID8gdG9SZW5kZXJGbG93VGhyZWFkKCZyZW5kZXJlcigpKS0+dmlzdWFsT3ZlcmZsb3dS
ZWN0KCkgOiByZW5kZXJlcigpLnZpZXcoKS5kb2N1bWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0
IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgPyBkb3duY2FzdDxS
ZW5kZXJGbG93VGhyZWFkPihyZW5kZXJlcigpKS52aXN1YWxPdmVyZmxvd1JlY3QoKSA6IHJlbmRl
cmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgpOwogICAgIGlmICghcmVxdWVzdC5pZ25vcmVDbGlw
cGluZygpKQogICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJl
Y3QpKTsKIApAQCAtNDYzNyw3ICs0NjM3LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgogICAg
ICAgICAvLyByZXR1cm4gb3Vyc2VsdmVzLiBXZSBkbyB0aGlzIHNvIG1vdXNlIGV2ZW50cyBjb250
aW51ZSBnZXR0aW5nIGRlbGl2ZXJlZCBhZnRlciBhIGRyYWcgaGFzIAogICAgICAgICAvLyBleGl0
ZWQgdGhlIFdlYlZpZXcsIGFuZCBzbyBoaXQgdGVzdGluZyBvdmVyIGEgc2Nyb2xsYmFyIGhpdHMg
dGhlIGNvbnRlbnQgZG9jdW1lbnQuCiAgICAgICAgIGlmICghcmVxdWVzdC5pc0NoaWxkRnJhbWVI
aXRUZXN0KCkgJiYgKHJlcXVlc3QuYWN0aXZlKCkgfHwgcmVxdWVzdC5yZWxlYXNlKCkpICYmIGlz
Um9vdExheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHRvUmVuZGVyVmlldyhyZW5kZXJlcigpKS5mbGlwRm9yV3JpdGluZ01vZGUoaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIGRvd25jYXN0PFJlbmRlclZpZXc+KHJlbmRlcmVyKCkpLmZsaXBG
b3JXcml0aW5nTW9kZShoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSkpOwogICAgICAgICAgICAgaW5z
aWRlTGF5ZXIgPSB0aGlzOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY3NSw3ICs0Njc1LDcgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGbG93VGhyZWFkQW5jZXN0b3IoKSBj
b25zdAogCiBib29sIFJlbmRlckxheWVyOjppc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NM
YXllcnNVbmRlclJlZ2lvbnMoKSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpLmlzUmVu
ZGVyRmxvd1RocmVhZCgpICYmIHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS5jb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCk7CisgICAgcmV0dXJuIGlzPFJlbmRlckZsb3dU
aHJlYWQ+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVy
KCkpLmNvbGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKTsKIH0KIAogLy8gQ29tcHV0
ZSB0aGUgei1vZmZzZXQgb2YgdGhlIHBvaW50IGluIHRoZSB0cmFuc2Zvcm1TdGF0ZS4KQEAgLTU2
NjIsNyArNTY2Miw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvCiAgICAgICAgIC8vIGdldCBv
dXIgdHJ1ZSBib3VuZGluZyBib3guCiAgICAgICAgIHJlc3VsdC5tb3ZlKGNoaWxkTGF5ZXItPm9m
ZnNldEZyb21BbmNlc3RvcihwYWdpbmF0aW9uTGF5ZXIpKTsKIAotICAgICAgICBSZW5kZXJGbG93
VGhyZWFkJiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRp
b25MYXllci0+cmVuZGVyZXIoKSk7CisgICAgICAgIGF1dG8mIGVuY2xvc2luZ0Zsb3dUaHJlYWQg
PSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkp
OwogICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdGbG93VGhyZWFkLmZyYWdtZW50c0JvdW5kaW5n
Qm94KHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICBjaGlsZExheWVyID0gcGFnaW5hdGlvbkxh
eWVyOwpAQCAtNTk3MCw3ICs1OTcwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlaT3JkZXJM
aXN0cygpCiAKICAgICBpZiAoIXJlbmRlcmVyKCkuZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7
CiAgICAgICAgIGlmIChpc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJl
Z2lvbnMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS5zZXRO
ZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1VwZGF0ZSgpOworICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyRmxvd1RocmVhZD4ocmVuZGVyZXIoKSkuc2V0TmVlZHNMYXllclRvUmVnaW9uTWFwcGlu
Z3NVcGRhdGUoKTsKICAgICAgICAgY29tcG9zaXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVl
ZFJlYnVpbGQoKTsKICAgICAgICAgaWYgKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRTaG91bGRSZWV2
YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCgpOwpAQCAtNTk5NCw3ICs1OTk0LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6ZGlydHlOb3JtYWxGbG93TGlzdCgpCiAKICAgICBpZiAoIXJlbmRlcmVy
KCkuZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIGlmIChpc0Zsb3dUaHJlYWRD
b2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgIHRvUmVu
ZGVyRmxvd1RocmVhZChyZW5kZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1Vw
ZGF0ZSgpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVuZGVyZXIo
KSkuc2V0TmVlZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKICAgICAgICAgY29tcG9z
aXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgaWYgKGFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKICAgICAgICAg
ICAgIGNvbXBvc2l0b3IoKS5zZXRTaG91bGRSZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAppbmRleCAwMzRkYmNlMjJmMTI1OTg3YjJiN2Y1MTA0Yzc4NWFjY2Q0ZThjYWQwLi4yZThiZWZk
MmUwNmZiZDk1ZDNiYTU3MmNhNjFjZWQwODZkOTBjYTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2lu
Y2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMu
aCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgpAQCAtNDY5LDkgKzQ3MCw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKCkKIAogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUFmdGVyV2lkZ2V0UmVzaXplKCkKIHsKLSAgICBpZiAo
IXJlbmRlcmVyKCkuaXNXaWRnZXQoKSkKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVy
ZXIoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBp
bm5lckNvbXBvc2l0b3IgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHNDb21w
b3NpdG9yKHRvUmVuZGVyV2lkZ2V0KCZyZW5kZXJlcigpKSkpIHsKKyAgICBpZiAoUmVuZGVyTGF5
ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZy
YW1lQ29udGVudHNDb21wb3NpdG9yKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkp
KSkgewogICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsK
ICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VMb2NhdGlvbihmbG9v
cmVkSW50UG9pbnQoY29udGVudHNCb3goKS5sb2NhdGlvbigpKSk7CiAgICAgfQpAQCAtNTk4LDgg
KzU5OSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKCkK
ICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKLSAgICBp
ZiAocmVuZGVyZXIoKS5pc1dpZGdldCgpKQotICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRlcldp
ZGdldCgmcmVuZGVyZXIoKSkpOworICAgIGlmIChpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkp
KQorICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBh
cmVudEZyYW1lQ29udGVudExheWVycygmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigp
KSk7CiAKICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VkOwogfQpAQCAtMTY3NSwyMSArMTY3
NiwyMSBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRzQ2hpbGRyZW4oKSBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4oUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVj
dCgpKQorICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KHJlbmRlcmVyLT5ub2RlKCkpOworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikuZnJhbWVPd25lckVs
ZW1lbnQoKTsKICAgICBpZiAoIWlzPEhUTUxQbHVnSW5FbGVtZW50PihlbGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVtZW50
PigqZWxlbWVudCkuaXNSZXN0YXJ0ZWRQbHVnaW4oKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpLmlzUmVzdGFydGVkUGx1Z2luKCk7CiB9CiAKLXN0YXRp
YyBib29sIGlzQ29tcG9zaXRlZFBsdWdpbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGlj
IGJvb2wgaXNDb21wb3NpdGVkUGx1Z2luKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAg
cmV0dXJuIHJlbmRlcmVyLT5pc0VtYmVkZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9i
amVjdChyZW5kZXJlciktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICByZXR1
cm4gaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJF
bWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpLmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsK
IH0KIAogLy8gQSAic2ltcGxlIGNvbnRhaW5lciBsYXllciIgaXMgYSBSZW5kZXJMYXllciB3aGlj
aCBoYXMgbm8gdmlzaWJsZSBjb250ZW50IHRvIHJlbmRlci4KQEAgLTE2OTcsNyArMTY5OCw3IEBA
IHN0YXRpYyBib29sIGlzQ29tcG9zaXRlZFBsdWdpbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
Ly8gVGhpcyBpcyBhIHVzZWZ1bCBvcHRpbWl6YXRpb24sIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRv
IGF2b2lkIGFsbG9jYXRpbmcgYmFja2luZyBzdG9yZS4KIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojppc1NpbXBsZUNvbnRhaW5lckNvbXBvc2l0aW5nTGF5ZXIoKSBjb25zdAogewotICAgIGlmIChy
ZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSAmJiAoIWlzQ29tcG9zaXRlZFBsdWdpbigmcmVu
ZGVyZXIoKSkgfHwgaXNSZXN0YXJ0ZWRQbHVnaW4oJnJlbmRlcmVyKCkpKSkKKyAgICBpZiAocmVu
ZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgJiYgKCFpc0NvbXBvc2l0ZWRQbHVnaW4ocmVuZGVy
ZXIoKSkgfHwgaXNSZXN0YXJ0ZWRQbHVnaW4ocmVuZGVyZXIoKSkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAocGFpbnRzQm94RGVjb3JhdGlvbnMoKSB8fCBwYWludHNDaGlsZHJl
bigpKQpAQCAtMTgwMywxMiArMTgwNCwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29u
dGFpbnNQYWludGVkQ29udGVudChib29sIGlzU2ltcGxlQ29udGFpbmVyKSBjb25zdAogICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSB0aGUgaW1hZ2UsIHZpZGVvIG9y
IGNhbnZhcyBpcyBrbm93biB0byBmaWxsIHRoZSBib3JkZXIgYm94IGVudGlyZWx5LAogICAgIC8v
IGFuZCBzZXQgYmFja2dyb3VuZCBjb2xvciBvbiB0aGUgbGF5ZXIgaW4gdGhhdCBjYXNlLCBpbnN0
ZWFkIG9mIGFsbG9jYXRpbmcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcuCiAjaWYgRU5BQkxF
KFZJREVPKQotICAgIGlmIChyZW5kZXJlcigpLmlzVmlkZW8oKSAmJiB0b1JlbmRlclZpZGVvKHJl
bmRlcmVyKCkpLnNob3VsZERpc3BsYXlWaWRlbygpKQorICAgIGlmIChpczxSZW5kZXJWaWRlbz4o
cmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpLnNob3VsZERp
c3BsYXlWaWRlbygpKQogICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNCb3hEZWNvcmF0
aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykKKyAgICBpZiAoaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVyZXIoKSkgJiYgY2Fu
dmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVu
dHMpCiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc0JveERlY29yYXRpb25zT3JCYWNr
Z3JvdW5kKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA5ZDUwMTJmZjdlOWZjNTk1ZjEwMGUxMDRlNTBl
Y2Y4OWZhZWY4Y2QzLi40MDkwNGJlOGQ5NWI0M2ZjZmNlMzZlYzQzNWI0ZTBiOTkzNTVlZTg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcApAQCAtOTQzLDEwICs5NDMsMTAgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAg
ICAgICAgIC8vIGl0cyByZXBsaWNhIEdyYXBoaWNzTGF5ZXIuIEluIHByYWN0aWNlIHRoaXMgc2hv
dWxkIG5ldmVyIGhhcHBlbiBiZWNhdXNlIHJlZmxlY3RlZSBhbmQgcmVmbGVjdGlvbiAKICAgICAg
ICAgICAgIC8vIGFyZSBib3RoIGVpdGhlciBjb21wb3NpdGVkLCBvciBub3QgY29tcG9zaXRlZC4K
ICAgICAgICAgICAgIGlmIChsYXllci5pc1JlZmxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAg
IFJlbmRlckxheWVyKiBzb3VyY2VMYXllciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChsYXll
ci5yZW5kZXJlcigpLnBhcmVudCgpKS0+bGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJM
YXllciogc291cmNlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqbGF5
ZXIucmVuZGVyZXIoKS5wYXJlbnQoKSkubGF5ZXIoKTsKICAgICAgICAgICAgICAgICBpZiAoUmVu
ZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gc291cmNlTGF5ZXItPmJhY2tpbmcoKSkgewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5yZXBsaWNh
TGF5ZXIoKSA9PSBsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
MCk7CisgICAgICAgICAgICAgICAgICAgIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVw
bGljYXRlZEJ5TGF5ZXIobnVsbHB0cik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCkBAIC05NjYsMTQgKzk2NiwxNCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUgogICAgIH0K
ICAgICAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKGxheWVyQ2hhbmdlZCAmJiBsYXllci5y
ZW5kZXJlcigpLmlzVmlkZW8oKSkgeworICAgIGlmIChsYXllckNoYW5nZWQgJiYgaXM8UmVuZGVy
VmlkZW8+KGxheWVyLnJlbmRlcmVyKCkpKSB7CiAgICAgICAgIC8vIElmIGl0J3MgYSB2aWRlbywg
Z2l2ZSB0aGUgbWVkaWEgcGxheWVyIGEgY2hhbmNlIHRvIGhvb2sgdXAgdG8gdGhlIGxheWVyLgot
ICAgICAgICB0b1JlbmRlclZpZGVvKGxheWVyLnJlbmRlcmVyKCkpLmFjY2VsZXJhdGVkUmVuZGVy
aW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlclZpZGVvPihsYXllci5y
ZW5kZXJlcigpKS5hY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwogICAgIH0KICNl
bmRpZgogCi0gICAgaWYgKGxheWVyQ2hhbmdlZCAmJiBsYXllci5yZW5kZXJlcigpLmlzV2lkZ2V0
KCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBm
cmFtZUNvbnRlbnRzQ29tcG9zaXRvcih0b1JlbmRlcldpZGdldCgmbGF5ZXIucmVuZGVyZXIoKSkp
OworICAgIGlmIChsYXllckNoYW5nZWQgJiYgaXM8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJl
cigpKSkgeworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9
IGZyYW1lQ29udGVudHNDb21wb3NpdG9yKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KGxheWVyLnJl
bmRlcmVyKCkpKTsKICAgICAgICAgaWYgKGlubmVyQ29tcG9zaXRvciAmJiBpbm5lckNvbXBvc2l0
b3ItPmluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPnVw
ZGF0ZVJvb3RMYXllckF0dGFjaG1lbnQoKTsKICAgICB9CkBAIC0xMTc1LDcgKzExNzUsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRz
KFJlbmRlckxheWVyKiBhbmNlc3RvcgogICAgIGxheWVyLnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRl
ZCgpOwogCiAgICAgaWYgKGxheWVyLmlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVy
c1VuZGVyUmVnaW9ucygpKSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQg
PSB0b1JlbmRlckZsb3dUaHJlYWQobGF5ZXIucmVuZGVyZXIoKSk7CisgICAgICAgIGF1dG8mIGZs
b3dUaHJlYWQgPSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihsYXllci5yZW5kZXJlcigpKTsK
ICAgICAgICAgbGF5ZXIuc2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZsb3dUaHJlYWQuaGFz
Q29tcG9zaXRpbmdSZWdpb25EZXNjZW5kYW50KCkpOwogCiAgICAgICAgIC8vIEJlZm9yZSByZXR1
cm5pbmcsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsaXN0cyBvZiBhbGwgY2hpbGQgbGF5ZXJzLiBU
aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UsCkBAIC0xNTQ4LDggKzE1NDgsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVy
JiBsYXllciwgVmVjdAogCiAgICAgaWYgKGxheWVyQmFja2luZykgewogICAgICAgICBib29sIHBh
cmVudGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJlcigpLmlzV2lkZ2V0KCkp
Ci0gICAgICAgICAgICBwYXJlbnRlZCA9IHBhcmVudEZyYW1lQ29udGVudExheWVycyh0b1JlbmRl
cldpZGdldCgmbGF5ZXIucmVuZGVyZXIoKSkpOworICAgICAgICBpZiAoaXM8UmVuZGVyV2lkZ2V0
PihsYXllci5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIHBhcmVudGVkID0gcGFyZW50RnJhbWVD
b250ZW50TGF5ZXJzKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKTsK
IAogICAgICAgICBpZiAoIXBhcmVudGVkKQogICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT5wYXJl
bnRGb3JTdWJsYXllcnMoKS0+c2V0Q2hpbGRyZW4obGF5ZXJDaGlsZHJlbik7CkBAIC0yMDkwLDEx
ICsyMDkwLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpuZWVkc1RvQmVDb21wb3Np
dGVkKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyCiAvLyBzdGF0aWMKIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBSZW5kZXJMYXllcjo6Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24qIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKSBjb25zdAog
ewotICAgIGF1dG8gcmVuZGVyZXIgPSAmbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5k
ZXJlciA9ICZsYXllci5yZW5kZXJlcigpOwogCiAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRl
IG9mIGEgcmVmbGVjdGlvbiBzaG91bGQgbWF0Y2ggdGhhdCBvZiBpdHMgcmVmbGVjdGVkIGxheWVy
LgogICAgIGlmIChsYXllci5pc1JlZmxlY3Rpb24oKSkKLSAgICAgICAgcmVuZGVyZXIgPSB0b1Jl
bmRlckxheWVyTW9kZWxPYmplY3QocmVuZGVyZXItPnBhcmVudCgpKTsgLy8gVGhlIFJlbmRlclJl
cGxpY2EncyBwYXJlbnQgaXMgdGhlIG9iamVjdCBiZWluZyByZWZsZWN0ZWQuCisgICAgICAgIHJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXItPnBhcmVu
dCgpKTsgLy8gVGhlIFJlbmRlclJlcGxpY2EncyBwYXJlbnQgaXMgdGhlIG9iamVjdCBiZWluZyBy
ZWZsZWN0ZWQuCiAKICAgICAvLyBUaGUgcm9vdCBsYXllciBhbHdheXMgaGFzIGEgY29tcG9zaXRp
bmcgbGF5ZXIsIGJ1dCBpdCBtYXkgbm90IGhhdmUgYmFja2luZy4KICAgICByZXR1cm4gcmVxdWly
ZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybSgqcmVuZGVyZXIpCkBAIC0yMTgzLDkgKzIxODMsOSBA
QCBDb21wb3NpdGluZ1JlYXNvbnMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29t
cG9zaXRpbmcoY29uc3QgUmVuZGVyTGF5ZQogICAgIGlmICghbGF5ZXIuaXNDb21wb3NpdGVkKCkp
CiAgICAgICAgIHJldHVybiByZWFzb25zOwogCi0gICAgYXV0byByZW5kZXJlciA9ICZsYXllci5y
ZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CiAgICAg
aWYgKGxheWVyLmlzUmVmbGVjdGlvbigpKQotICAgICAgICByZW5kZXJlciA9IHRvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdChyZW5kZXJlci0+cGFyZW50KCkpOworICAgICAgICByZW5kZXJlciA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyLT5wYXJlbnQoKSk7CiAKICAg
ICBpZiAocmVxdWlyZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybSgqcmVuZGVyZXIpKQogICAgICAg
ICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uM0RUcmFuc2Zvcm07CkBAIC0yNDUwLDggKzI0
NTAsOCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clZpZGVvKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAgICAgaWYgKCEobV9jb21wb3NpdGluZ1Ry
aWdnZXJzICYgQ2hyb21lQ2xpZW50OjpWaWRlb1RyaWdnZXIpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmIChyZW5kZXJlci5pc1ZpZGVvKCkpIHsKLSAg
ICAgICAgUmVuZGVyVmlkZW8mIHZpZGVvID0gdG9SZW5kZXJWaWRlbyhyZW5kZXJlcik7CisgICAg
aWYgKGlzPFJlbmRlclZpZGVvPihyZW5kZXJlcikpIHsKKyAgICAgICAgYXV0byYgdmlkZW8gPSBk
b3duY2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm4gKHZpZGVvLnJl
cXVpcmVzSW1tZWRpYXRlQ29tcG9zaXRpbmcoKSB8fCB2aWRlby5zaG91bGREaXNwbGF5VmlkZW8o
KSkgJiYgY2FuQWNjZWxlcmF0ZVZpZGVvUmVuZGVyaW5nKHZpZGVvKTsKICAgICB9CiAjZWxzZQpA
QCAtMjQ4NCwxMyArMjQ4NCwxMyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JgogICAgIGlmICgh
KG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6UGx1Z2luVHJpZ2dlcikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgY29tcG9zaXRlID0gcmVuZGVyZXIuaXNF
bWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QoJnJlbmRlcmVyKS0+YWxs
b3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAgIGJvb2wgY29tcG9zaXRlID0gaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9i
amVjdD4ocmVuZGVyZXIpLmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICAgICBpZiAo
IWNvbXBvc2l0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9yZWV2YWx1YXRlQ29t
cG9zaXRpbmdBZnRlckxheW91dCA9IHRydWU7CiAgICAgCi0gICAgUmVuZGVyV2lkZ2V0JiBwbHVn
aW5SZW5kZXJlciA9ICp0b1JlbmRlcldpZGdldCgmcmVuZGVyZXIpOworICAgIFJlbmRlcldpZGdl
dCYgcGx1Z2luUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKTsKICAg
ICAvLyBJZiB3ZSBjYW4ndCByZWxpYWJseSBrbm93IHRoZSBzaXplIG9mIHRoZSBwbHVnaW4geWV0
LCBkb24ndCBjaGFuZ2UgY29tcG9zaXRpbmcgc3RhdGUuCiAgICAgaWYgKHBsdWdpblJlbmRlcmVy
Lm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybiBwbHVnaW5SZW5kZXJlci5oYXNMYXllcigp
ICYmIHBsdWdpblJlbmRlcmVyLmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwpAQCAtMjUwMiwxMCAr
MjUwMiwxMCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBsdWdpbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JgogCiBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIuaXNXaWRnZXQoKSkKKyAg
ICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBSZW5kZXJXaWRnZXQmIGZyYW1lUmVuZGVyZXIgPSAqdG9SZW5kZXJXaWRnZXQoJnJl
bmRlcmVyKTsKKyAgICBhdXRvJiBmcmFtZVJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0
PihyZW5kZXJlcik7CiAKICAgICBpZiAoIWZyYW1lUmVuZGVyZXIucmVxdWlyZXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IDIwOTkwNDIwMjMz
NTYwM2ViNWRlMGNiMmQ5YjA4MDRmZDU0YjM4OTguLjZjZjBmZGMwYzk4MTk5ZDJmMDA3NGNjZGUz
N2JmZGRkNDEwY2ZkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuaApAQCAtNjksOCArNjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIHNfbGF5ZXJXYXNTZWxmUGFpbnRpbmc7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVf
Q0FTVFMoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgaXNSZW5kZXJMYXllck1vZGVsT2JqZWN0KCkp
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5E
RVJfT0JKRUNUKFJlbmRlckxheWVyTW9kZWxPYmplY3QsIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVh
ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGU4
ZWM1ZWY3YTI1MjBmOTNlYWUxODMzM2QxZjE3YzEwZDI5YTk0OGYuLmQwZTNmZTVkMjk0NzEyYjIy
MmM0OWM3M2IyODNhM2Y2N2UwNjBmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJyZWFrLmgKQEAgLTkzLDggKzkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNX
QlI7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTGluZUJyZWFrLCBpc0xp
bmVCcmVhaygpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJMaW5lQnJlYWssIGlzTGluZUJyZWFrKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCmluZGV4IGE2MzI1MGVhMGFmZWI5OWUxOGNl
ZThhMjVjZDU5ZjY1NzE3YWY2NDYuLmM2ZTI2MGFlZGU5YWE5MmNmYWRhODZmZGEyZDlmNmYxYTIz
MjMyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCkBAIC00Nyw4ICs0
Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNh
bGNQcm9wYWdhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKLVJF
TkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJNZXRlciwgaXNNZXRlcigpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChS
ZW5kZXJNZXRlciwgaXNNZXRlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAppbmRleCBkMjBjYjAzZGFjZGZi
ODg2NjYwYTFjODI0MzZlMjA2OTFjZjQzNjgyLi42NWJjMDJjYmE5ZDM3ZjAzZjg1Nzg0NWMyNDg2
ZWZmZTBjNmE0N2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcApAQCAtNzIsOCArNzIsOCBAQCBjb25zdCBj
aGFyKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnJlbmRlck5hbWUoKSBjb25zdAogUmVu
ZGVyTXVsdGlDb2x1bW5TZXQqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0
aUNvbHVtblNldCgpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBu
ZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkg
ewotICAgICAgICBpZiAoc2libGluZy0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoc2libGluZyk7CisgICAgICAgIGlm
IChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnNpYmxpbmcpKQorICAgICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihzaWJsaW5nKTsKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkBAIC04MSw4ICs4MSw4IEBAIFJlbmRlck11bHRpQ29sdW1uU2V0KiBS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZpcnN0TXVsdGlDb2x1bW5TZXQoKSBjb25zdAog
UmVuZGVyTXVsdGlDb2x1bW5TZXQqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bGFzdE11
bHRpQ29sdW1uU2V0KCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGluZyA9
IG11bHRpQ29sdW1uQmxvY2tGbG93KCktPmxhc3RDaGlsZCgpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzUmVu
ZGVyTXVsdGlDb2x1bW5TZXQoKSkKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlck11bHRpQ29s
dW1uU2V0KHNpYmxpbmcpOworICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpz
aWJsaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNl
dD4oc2libGluZyk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTI0LDggKzEy
NCw4IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpsYXlvdXQoKQogICAgIG1f
aW5MYXlvdXQgPSB0cnVlOwogICAgIG1fbGFzdFNldFdvcmtlZE9uID0gbnVsbHB0cjsKICAgICBp
ZiAoUmVuZGVyQm94KiBmaXJzdCA9IGZpcnN0Q29sdW1uU2V0T3JTcGFubmVyKCkpIHsKLSAgICAg
ICAgaWYgKGZpcnN0LT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgICAgIG1f
bGFzdFNldFdvcmtlZE9uID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChmaXJzdCk7CisgICAgICAg
IGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4oKmZpcnN0KSkgeworICAgICAgICAgICAgbV9s
YXN0U2V0V29ya2VkT24gPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oZmlyc3QpOwog
ICAgICAgICAgICAgbV9sYXN0U2V0V29ya2VkT24tPmJlZ2luRmxvdyh0aGlzKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZDo6ZXZhY3VhdGVBbmREZXN0cm95KCkKIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6OmFkZFJlZ2lvblRvVGhyZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQogewot
ICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSB0b1JlbmRlck11bHRpQ29sdW1u
U2V0KHJlbmRlclJlZ2lvbik7CisgICAgYXV0byogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVy
TXVsdGlDb2x1bW5TZXQ+KHJlbmRlclJlZ2lvbik7CiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1u
U2V0KiBuZXh0U2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsK
ICAgICAgICAgUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvbkxpc3QuZmlu
ZChuZXh0U2V0KTsKICAgICAgICAgQVNTRVJUKGl0ICE9IG1fcmVnaW9uTGlzdC5lbmQoKSk7CkBA
IC0zNjcsMzYgKzM2NywzNiBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxv
d1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZChSZW5kZXJPYmplY3QqIGRlcwogICAgICAgICByZXR1
cm47CiAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCA9IGRlc2NlbmRhbnQ7CiAgICAgZm9y
ICg7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSAoZGVzY2VuZGFudCA/IGRlc2NlbmRhbnQtPm5l
eHRJblByZU9yZGVyKHN1YnRyZWVSb290KSA6IG51bGxwdHIpKSB7Ci0gICAgICAgIGlmIChkZXNj
ZW5kYW50LT5pc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpIHsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2VuZGFu
dCkpIHsKICAgICAgICAgICAgIC8vIEEgc3Bhbm5lcidzIHBsYWNlaG9sZGVyIGhhcyBiZWVuIGlu
c2VydGVkLiBUaGUgYWN0dWFsIHNwYW5uZXIgcmVuZGVyZXIgaXMgbW92ZWQgZnJvbQogICAgICAg
ICAgICAgLy8gd2hlcmUgaXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyIChpZiBpdCB3ZXJlbid0IGEg
c3Bhbm5lcikgdG8gYmVjb21pbmcgYSBzaWJsaW5nIG9mIHRoZQogICAgICAgICAgICAgLy8gY29s
dW1uIHNldHMuCi0gICAgICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
ciogcGxhY2Vob2xkZXIgPSB0b1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKGRl
c2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyLT5mbG93VGhyZWFkKCkgIT0g
dGhpcykgeworICAgICAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIm
IHBsYWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI+KCpkZXNjZW5kYW50KTsKKyAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlci5mbG93VGhyZWFk
KCkgIT0gdGhpcykgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXNuJ3Qgb3VyIHNwYW5uZXIh
IEl0IHNoaWZ0ZWQgaGVyZSBmcm9tIGFuIGFuY2VzdG9yIG11bHRpY29sdW1uIGJsb2NrLiBJdCdz
IGdvaW5nIHRvIGVuZCB1cAogICAgICAgICAgICAgICAgIC8vIGJlY29taW5nIG91ciBzcGFubmVy
IGluc3RlYWQsIGJ1dCBmb3IgaXQgdG8gZG8gdGhhdCB3ZSBmaXJzdCBoYXZlIHRvIG51a2UgdGhl
IG9yaWdpbmFsIHNwYW5uZXIsCiAgICAgICAgICAgICAgICAgLy8gYW5kIGdldCB0aGUgc3Bhbm5l
ciBjb250ZW50IGJhY2sgaW50byB0aGlzIGZsb3cgdGhyZWFkLgotICAgICAgICAgICAgICAgIFJl
bmRlckJveCogc3Bhbm5lciA9IHBsYWNlaG9sZGVyLT5zcGFubmVyKCk7CisgICAgICAgICAgICAg
ICAgUmVuZGVyQm94KiBzcGFubmVyID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEluc2VydCBhZnRlciB0aGUgcGxhY2Vob2xkZXIs
IGJ1dCBkb24ndCBsZXQgYSBub3RpZmljYXRpb24gaGFwcGVuLgogICAgICAgICAgICAgICAgIGdT
aGlmdGluZ1NwYW5uZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdyYg
YW5jZXN0b3JCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnNwYW5uZXItPnBhcmVu
dCgpKTsKLSAgICAgICAgICAgICAgICBhbmNlc3RvckJsb2NrLm1vdmVDaGlsZFRvKHBsYWNlaG9s
ZGVyLT5wYXJlbnRCb3goKSwgc3Bhbm5lciwgcGxhY2Vob2xkZXItPm5leHRTaWJsaW5nKCksIHRy
dWUpOworICAgICAgICAgICAgICAgIGFuY2VzdG9yQmxvY2subW92ZUNoaWxkVG8ocGxhY2Vob2xk
ZXIucGFyZW50Qm94KCksIHNwYW5uZXIsIHBsYWNlaG9sZGVyLm5leHRTaWJsaW5nKCksIHRydWUp
OwogICAgICAgICAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG51a2UgdGhlIHBsYWNlaG9sZGVy
LCBzaW5jZSB0aGUgYW5jZXN0b3IgYWxyZWFkeSBsb3N0IHRoZSBtYXBwaW5nIHRvIGl0IHdoZW4K
ICAgICAgICAgICAgICAgICAvLyB3ZSBzaGlmdGVkIHRoZSBwbGFjZWhvbGRlciBkb3duIGludG8g
dGhpcyBmbG93IHRocmVhZC4KICAgICAgICAgICAgICAgICBhbmNlc3RvckJsb2NrLm11bHRpQ29s
dW1uRmxvd1RocmVhZCgpLT5oYW5kbGVTcGFubmVyUmVtb3ZhbChzcGFubmVyKTsKLSAgICAgICAg
ICAgICAgICBwbGFjZWhvbGRlci0+ZGVzdHJveSgpOworICAgICAgICAgICAgICAgIHBsYWNlaG9s
ZGVyLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgcHJvY2VzcyB0aGUgc3Bhbm5lci4KICAgICAgICAgICAgICAgICBkZXNjZW5kYW50ID0gcHJv
Y2Vzc1Bvc3NpYmxlU3Bhbm5lckRlc2NlbmRhbnQoc3VidHJlZVJvb3QsIHNwYW5uZXIpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBU1NFUlQoIW1fc3Bhbm5lck1hcC5nZXQocGxhY2Vob2xkZXItPnNwYW5uZXIoKSkp
OwotICAgICAgICAgICAgbV9zcGFubmVyTWFwLmFkZChwbGFjZWhvbGRlci0+c3Bhbm5lcigpLCBw
bGFjZWhvbGRlcik7Ci0gICAgICAgICAgICBBU1NFUlQoIXBsYWNlaG9sZGVyLT5maXJzdENoaWxk
KCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gY2hpbGRyZW4gaGVyZSwgYnV0IGlmIHRoZXJlIGFy
ZSwgd2Ugb3VnaHQgdG8gc2tpcCB0aGVtLgorICAgICAgICAgICAgQVNTRVJUKCFtX3NwYW5uZXJN
YXAuZ2V0KHBsYWNlaG9sZGVyLnNwYW5uZXIoKSkpOworICAgICAgICAgICAgbV9zcGFubmVyTWFw
LmFkZChwbGFjZWhvbGRlci5zcGFubmVyKCksICZwbGFjZWhvbGRlcik7CisgICAgICAgICAgICBB
U1NFUlQoIXBsYWNlaG9sZGVyLmZpcnN0Q2hpbGQoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBj
aGlsZHJlbiBoZXJlLCBidXQgaWYgdGhlcmUgYXJlLCB3ZSBvdWdodCB0byBza2lwIHRoZW0uCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQyOCwxMiArNDI4
LDEyIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkUmVsYXRp
dmVXaWxsQmVSZW1vdmVkKFJlbmRlck9iamVjdCoKICAgICBpZiAobV9iZWluZ0V2YWN1YXRlZCkK
ICAgICAgICAgcmV0dXJuOwogICAgIGludmFsaWRhdGVSZWdpb25zKCk7Ci0gICAgaWYgKHJlbGF0
aXZlLT5pc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpIHsKKyAgICBpZiAo
aXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpyZWxhdGl2ZSkpIHsKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSBtYXAgZW50cnkgZm9yIHRoaXMgc3Bhbm5lciwgYnV0IGxlYXZl
IHRoZSBhY3R1YWwgc3Bhbm5lciByZW5kZXJlciBhbG9uZS4gQWxzbwogICAgICAgICAvLyBrZWVw
IHRoZSByZWZlcmVuY2UgdG8gdGhlIHNwYW5uZXIsIHNpbmNlIHRoZSBwbGFjZWhvbGRlciBtYXkg
YmUgYWJvdXQgdG8gYmUgcmUtaW5zZXJ0ZWQKICAgICAgICAgLy8gaW4gdGhlIHRyZWUuCiAgICAg
ICAgIEFTU0VSVChyZWxhdGl2ZS0+aXNEZXNjZW5kYW50T2YodGhpcykpOwotICAgICAgICBtX3Nw
YW5uZXJNYXAucmVtb3ZlKHRvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIocmVs
YXRpdmUpLT5zcGFubmVyKCkpOworICAgICAgICBtX3NwYW5uZXJNYXAucmVtb3ZlKGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqcmVsYXRpdmUpLnNwYW5uZXIo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHJlbGF0aXZlLT5zdHlsZSgpLmNv
bHVtblNwYW4oKSA9PSBDb2x1bW5TcGFuQWxsKSB7CkBAIC00NDksMjEgKzQ0OSwyMSBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZFJlbGF0aXZlV2lsbEJlUmVt
b3ZlZChSZW5kZXJPYmplY3QqCiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpm
bG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQoUmVuZGVyQm94KiBkZXNjZW5kYW50KQogewot
ICAgIGlmICghZGVzY2VuZGFudC0+aXNSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cigpKQorICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpk
ZXNjZW5kYW50KSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIoZGVzY2VuZGFudCk7Ci0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHBsYWNl
aG9sZGVyLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25j
YXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2VuZGFudCk7Cisg
ICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHBsYWNlaG9sZGVyLmNvbnRhaW5pbmdCbG9jaygp
OwogCi0gICAgZm9yIChSZW5kZXJCb3gqIHByZXYgPSBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5l
clNpYmxpbmdPZihwbGFjZWhvbGRlci0+c3Bhbm5lcigpKTsgcHJldjsgcHJldiA9IHByZXZpb3Vz
Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHByZXYpKSB7Ci0gICAgICAgIGlmIChwcmV2LT5p
c1JlbmRlck11bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyTXVsdGlDb2x1
bW5TZXQocHJldiktPmVuZEZsb3coY29udGFpbmVyLCBwbGFjZWhvbGRlci0+bG9naWNhbFRvcCgp
KTsKKyAgICBmb3IgKFJlbmRlckJveCogcHJldiA9IHByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVy
U2libGluZ09mKHBsYWNlaG9sZGVyLnNwYW5uZXIoKSk7IHByZXY7IHByZXYgPSBwcmV2aW91c0Nv
bHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihwcmV2KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
TXVsdGlDb2x1bW5TZXQ+KCpwcmV2KSkgeworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTXVs
dGlDb2x1bW5TZXQ+KCpwcmV2KS5lbmRGbG93KGNvbnRhaW5lciwgcGxhY2Vob2xkZXIubG9naWNh
bFRvcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9y
IChSZW5kZXJCb3gqIG5leHQgPSBuZXh0Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHBsYWNl
aG9sZGVyLT5zcGFubmVyKCkpOyBuZXh0OyBuZXh0ID0gbmV4dENvbHVtblNldE9yU3Bhbm5lclNp
YmxpbmdPZihuZXh0KSkgewotICAgICAgICBpZiAobmV4dC0+aXNSZW5kZXJNdWx0aUNvbHVtblNl
dCgpKSB7Ci0gICAgICAgICAgICBtX2xhc3RTZXRXb3JrZWRPbiA9IHRvUmVuZGVyTXVsdGlDb2x1
bW5TZXQobmV4dCk7CisgICAgZm9yIChSZW5kZXJCb3gqIG5leHQgPSBuZXh0Q29sdW1uU2V0T3JT
cGFubmVyU2libGluZ09mKHBsYWNlaG9sZGVyLnNwYW5uZXIoKSk7IG5leHQ7IG5leHQgPSBuZXh0
Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKG5leHQpKSB7CisgICAgICAgIGlmIChpczxSZW5k
ZXJNdWx0aUNvbHVtblNldD4oKm5leHQpKSB7CisgICAgICAgICAgICBtX2xhc3RTZXRXb3JrZWRP
biA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihuZXh0KTsKICAgICAgICAgICAgIG1f
bGFzdFNldFdvcmtlZE9uLT5iZWdpbkZsb3coY29udGFpbmVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC00ODQsMTMgKzQ4NCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6aW5pdGlhbExvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIHZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBzcGFjZVNob3J0YWdlKQogewot
ICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNldCogbXVsdGljb2xTZXQgPSB0b1JlbmRlck11bHRp
Q29sdW1uU2V0KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQorICAgIGlmIChh
dXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25B
dEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKICAgICAgICAgbXVsdGljb2xTZXQtPnJlY29y
ZFNwYWNlU2hvcnRhZ2Uoc3BhY2VTaG9ydGFnZSk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkOjp1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayog
YmxvY2ssIExheW91dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IG1pbkhlaWdodCkKIHsKLSAgICBp
ZiAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIG11bHRpY29sU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVt
blNldChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKKyAgICBpZiAoYXV0byog
bXVsdGljb2xTZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9j
a09mZnNldChibG9jaywgb2Zmc2V0KSkpCiAgICAgICAgIG11bHRpY29sU2V0LT51cGRhdGVNaW5p
bXVtQ29sdW1uSGVpZ2h0KG1pbkhlaWdodCk7CiB9CiAKQEAgLTUzNCwxMiArNTM0LDEyIEBAIHZv
aWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25z
dCBSZW5kZXJCb3gqIGJveCwgUmVuCiAgICAgLy8gZXhhY3Qgc2FtZSBmbG93IHRocmVhZCBwb3Np
dGlvbiwgd2hpY2ggbWVhbnMgdGhhdCBzb21lIHBhcnRzIG9mIHRoZSBjb2RlIG1heSBiZWxpZXZl
IHRoYXQgYQogICAgIC8vIGdpdmVuIGJveCBsaXZlcyBpbiBzZXRzIHRoYXQgaXQgZG9lc24ndCBy
ZWFsbHkgbGl2ZSBpbi4gTWFrZSBzb21lIGFkanVzdG1lbnRzIGhlcmUgYW5kCiAgICAgLy8gaW5j
bHVkZSBzdWNoIHNldHMgaWYgdGhleSBhcmUgYWRqYWNlbnQgdG8gdGhlIHN0YXJ0IGFuZC9vciBl
bmQgcmVnaW9ucy4KLSAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSB0
b1JlbmRlck11bHRpQ29sdW1uU2V0KHN0YXJ0UmVnaW9uKS0+cHJldmlvdXNTaWJsaW5nTXVsdGlD
b2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPnByZXZpb3VzU2li
bGluZ011bHRpQ29sdW1uU2V0KCkpIHsKKyAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBj
b2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnN0YXJ0UmVnaW9uKS5w
cmV2aW91c1NpYmxpbmdNdWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVtblNldCA9IGNv
bHVtblNldC0+cHJldmlvdXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgewogICAgICAgICBpZiAo
Y29sdW1uU2V0LT5sb2dpY2FsSGVpZ2h0SW5GbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgc3RhcnRSZWdpb24gPSBjb2x1bW5TZXQ7CiAgICAgfQotICAgIGZvciAoUmVu
ZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoc3Rh
cnRSZWdpb24pLT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1u
U2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKKyAgICBmb3Ig
KFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNv
bHVtblNldD4oKnN0YXJ0UmVnaW9uKS5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCk7IGNvbHVt
blNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkp
IHsKICAgICAgICAgaWYgKGNvbHVtblNldC0+bG9naWNhbEhlaWdodEluRmxvd1RocmVhZCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVuZFJlZ2lvbiA9IGNvbHVtblNldDsKQEAgLTU1
MCw3ICs1NTAsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0UmVnaW9u
UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbgogCiBib29sIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldCwgUmVuZGVyQm94KiAvKmJyZWFrQ2hpbGQqLywgYm9v
bCAvKmlzQmVmb3JlKi8sIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCkKIHsKLSAg
ICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIG11bHRpY29sU2V0ID0gdG9SZW5kZXJNdWx0aUNv
bHVtblNldChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkgeworICAgIGlmIChh
dXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25B
dEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkgewogICAgICAgICBtdWx0aWNvbFNldC0+YWRk
Rm9yY2VkQnJlYWsob2Zmc2V0KTsKICAgICAgICAgaWYgKG9mZnNldEJyZWFrQWRqdXN0bWVudCkK
ICAgICAgICAgICAgICpvZmZzZXRCcmVha0FkanVzdG1lbnQgPSBwYWdlTG9naWNhbEhlaWdodEZv
ck9mZnNldChvZmZzZXQpID8gcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zm
c2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKQEAg
LTY4OSw3ICs2ODksNyBAQCBSZW5kZXJSZWdpb24qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6bWFwRnJvbUZsb3dUb1JlZ2lvbihUcmFuc2Zvcm1TdGF0ZSYgdAogTGF5b3V0U2l6ZSBSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25PZmZzZXRGcm9tRmxv
d1RvUmVnaW9uKGNvbnN0IFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uLCBjb25zdCBMYXlvdXRV
bml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3aGlj
aCBtdWx0aWNvbHVtbiBzZXQgd2UgaGl0LCB3ZSBuZWVkIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUg
dHJhbnNsYXRpb24gb2Zmc2V0IGZvciB0aGUgY29sdW1uLgotICAgIGNvbnN0IFJlbmRlck11bHRp
Q29sdW1uU2V0KiBjb2x1bW5TZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHJlbmRlclJlZ2lv
bik7CisgICAgY29uc3QgYXV0byogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1
bW5TZXQ+KHJlbmRlclJlZ2lvbik7CiAgICAgTGF5b3V0UG9pbnQgdHJhbnNsYXRpb25PZmZzZXQg
PSBjb2x1bW5TZXQtPmNvbHVtblRyYW5zbGF0aW9uRm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQpOwog
ICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IGhvdyB3ZSB3YW50IHRoZSByZWN0IHRvIGJlIHRyYW5z
bGF0ZWQgaW50byB0aGUgcmVnaW9uLiBBdCB0aGlzIHBvaW50IHdlJ3JlIGNvbnZlcnRpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQuaAppbmRleCA1MTNkMzFkOTI3ZjA3MWVjOGFjNWRhOThkNTU3NWUwMDcyYWU2NWRhLi4w
MjIzYzk4MmM3MjBjMzdlNjc1OTRhMDc4ZTljOWM4MGMwZWMxNDZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCkBA
IC0xNTgsOCArMTU4LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBnU2hpZnRpbmdTcGFu
bmVyOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZCwgaXNSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKSkKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLCBpc1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAK
aW5kZXggYTNjYzZlNzcwN2NjYmJiMWFhZjc3MTllNDU2OTU4OTBmYmJmYzkxNi4uMjQ4Yjk0ODll
ODY0NTY3MTM1NThiZTYxNWFiMDljMzYxZGQ1YWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCkBAIC01MSw4ICs1MSw4IEBAIFJl
bmRlck11bHRpQ29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVtblNldChSZW5kZXJGbG93VGhyZWFk
JiBmbG93VGhyZWFkLCBQYXNzUmVmCiBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6Om5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSBjb25zdAogewogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBzaWJsaW5nID0gbmV4dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzUmVuZGVy
TXVsdGlDb2x1bW5TZXQoKSkKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlck11bHRpQ29sdW1u
U2V0KHNpYmxpbmcpOworICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpzaWJs
aW5nKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4o
c2libGluZyk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNjAsOCArNjAsOCBA
QCBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6Om5leHRTaWJsaW5n
TXVsdGlDb2x1bW5TZXQoKSBjb25zdAogUmVuZGVyTXVsdGlDb2x1bW5TZXQqIFJlbmRlck11bHRp
Q29sdW1uU2V0OjpwcmV2aW91c1NpYmxpbmdNdWx0aUNvbHVtblNldCgpIGNvbnN0CiB7CiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsg
c2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJs
aW5nLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5k
ZXJNdWx0aUNvbHVtblNldChzaWJsaW5nKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29s
dW1uU2V0Pigqc2libGluZykpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTXVs
dGlDb2x1bW5TZXQ+KHNpYmxpbmcpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgKaW5kZXgg
ZjkzMGI3N2JmZmQ3MGZmOTU3ZGY3OWMyOWE4MWM0NDVhYzNmZWM1OC4uMjdjYTczN2MzOGQ4MmFj
ZTRkZjRjNTY3NTI5OWQxZmZiNTZlMzc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmgKQEAgLTIyNSw4ICsyMjUsNiBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxDb250ZW50UnVuLCAxPiBtX2NvbnRlbnRSdW5zOwogfTsKIAotUkVOREVSX09C
SkVDVF9UWVBFX0NBU1RTKFJlbmRlck11bHRpQ29sdW1uU2V0LCBpc1JlbmRlck11bHRpQ29sdW1u
U2V0KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19SRU5ERVJfT0JKRUNUKFJlbmRlck11bHRpQ29sdW1uU2V0LCBpc1JlbmRlck11bHRpQ29sdW1u
U2V0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCmluZGV4IGNhYWMyZTdiZGRhNzQ3YWJl
ZTkyZWNjN2E4ZTc0MjE1NDc4MjMxNzUuLmYxYTViODg0NzNiODRhZjVhOGFiMjVjM2JkMzNlNDdh
YjNiNDdhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCkBAIC01NSw4ICs1NSw2IEBA
IHByaXZhdGU6CiAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7
CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIsIGlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9P
QkpFQ1QoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIsIGlzUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCmluZGV4IGQyZmY4ODU2MTU4NGUxOTYw
OTJlYzYyODZhZDJlNGQyYTY1ZTczNjYuLmI1MDg0MzVkMzAxMTc3M2EzYmYzZTU3NGJkNTY5MTk0
ZWNkZDk4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LmNwcApAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OmNoZWNrUmVnaW9uU3R5bGUoKQogICAgIGlmICghaXNQc2V1ZG9FbGVtZW50
KCkpCiAgICAgICAgIGN1c3RvbVJlZ2lvblN0eWxlID0gdmlldygpLmRvY3VtZW50KCkuZW5zdXJl
U3R5bGVSZXNvbHZlcigpLmNoZWNrUmVnaW9uU3R5bGUoZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CiAg
ICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoY3VzdG9tUmVnaW9uU3R5bGUpOwotICAgIHRvUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKG1fZmxvd1RocmVhZCktPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCk7CisgICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqbV9mbG93VGhyZWFkKS5j
aGVja1JlZ2lvbnNXaXRoU3R5bGluZygpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3QKQEAgLTQ4OSw3ICs0
ODksNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpyZXN0b3JlUmVnaW9uT2JqZWN0
c09yaWdpbmFsU3R5bGUoKQogCiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpuYW1lZEZsb3dUaHJlYWQoKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRl
ck5hbWVkRmxvd1RocmVhZChmbG93VGhyZWFkKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQoKSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OnZpc3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCmluZGV4IDMz
MGYzMGNhZTQ4ZmZkYjc3YzI1NGYwODJhOWZhYmJjYjFkYTEyNzMuLmM1ZWZiMzI0OTRjMzgxYTYy
Zjg0NTcxYWYxNzdhNjQ0NmIzYzFkNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoK
ICAgICAvLyBwYXJlbnQgcmVuZGVyZXIgaW5zdGVhZC4KICAgICAvLyBUaGlzIG1ldGhvZCByZXR1
cm5zIHRoYXQgcmVuZGVyZXIgaG9sZGluZyB0aGUgbGF5ZXIuCiAgICAgLy8gVGhlIHJldHVybiB2
YWx1ZSBjYW5ub3QgYmUgbnVsbCBiZWNhdXNlIENTUyBSZWdpb25zIGNyZWF0ZSBTdGFja2luZyBD
b250ZXh0cyAod2hpY2ggbWVhbnMgdGhleSBjcmVhdGUgbGF5ZXJzKS4KLSAgICBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiBsYXllck93bmVyKCkgY29uc3QgeyByZXR1cm4gKnRvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdChwYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBsYXll
ck93bmVyKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
KnBhcmVudCgpKTsgfQogCiAgICAgYm9vbCBoYXNDdXN0b21SZWdpb25TdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGU7IH0KICAgICB2b2lkIGNsZWFyT2JqZWN0U3R5
bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqKTsKQEAgLTE2Myw4ICsxNjMsNiBAQCBwcml2
YXRlOgogICAgIExheW91dFVuaXQgbV9jb21wdXRlZEF1dG9IZWlnaHQ7CiB9OwogCi1SRU5ERVJf
T0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggNWNiY2ZmZDVjY2U2ZDIxOGVhNDFjNGI0Y2Y4
ZWU1YzhkODY2OThlMS4uMTc0YzhjZTU0YWM5NWVlODJhNzUwNTM4MzllN2QxOTI4NzFkMDRkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVh
ZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFy
Q29udGVudEVsZW1lbnRzKCkKIAogdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnVwZGF0ZVdy
aXRpbmdNb2RlKCkKIHsKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZmlyc3RGcmFnbWVu
dCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQobV9yZWdpb25MaXN0LmZpcnN0KCkpOworICAg
IGF1dG8qIGZpcnN0RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4o
bV9yZWdpb25MaXN0LmZpcnN0KCkpOwogICAgIGlmICghZmlyc3RGcmFnbWVudCkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gZmlyc3RGcmFnbWVudC0+
c3R5bGUoKS53cml0aW5nTW9kZSgpKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIGFk
ZEZyYWdtZW50VG9MaXN0KFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QsIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtCiAgICAgZWxzZSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiAi
Z3JlYXRlciIgdGhhbiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC4KICAgICAgICAgYXV0byBpdCA9
IHJlZ2lvbkxpc3QuYmVnaW4oKTsKLSAgICAgICAgd2hpbGUgKGl0ICE9IHJlZ2lvbkxpc3QuZW5k
KCkgJiYgIWNvbXBhcmVSZW5kZXJOYW1lZEZsb3dGcmFnbWVudHMocmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQsIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKml0KSkpCisgICAgICAgIHdoaWxlIChp
dCAhPSByZWdpb25MaXN0LmVuZCgpICYmICFjb21wYXJlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRz
KHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dD4oKml0KSkpCiAgICAgICAgICAgICArK2l0OwogICAgICAgICByZWdpb25MaXN0Lmluc2VydEJl
Zm9yZShpdCwgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOwogICAgIH0KQEAgLTIzMCwxOCArMjMw
LDE4IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5k
ZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKICAgICBBU1NFUlQocmVuZGVyUmVnaW9uKTsKICAgICBB
U1NFUlQoIXJlbmRlclJlZ2lvbi0+aXNWYWxpZCgpKTsKIAotICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQocmVuZGVyUmVnaW9uKTsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRl
clJlZ2lvbik7CiAgICAgcmVzZXRNYXJrRm9yRGVzdHJ1Y3Rpb24oKTsKIAotICAgIGlmIChyZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCkgJiYgcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhpcykp
IHsKKyAgICBpZiAocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFk
KCkgJiYgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRl
cGVuZHNPbih0aGlzKSkgewogICAgICAgICAvLyBUaGUgb3JkZXIgb2YgaW52YWxpZCByZWdpb25z
IGlzIGlycmVsZXZhbnQuCi0gICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QuYWRkKHJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgbV9pbnZhbGlkUmVnaW9uTGlzdC5hZGQoJnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgLy8gUmVnaXN0ZXIgb3Vyc2VsZiB0byBnZXQg
YSBub3RpZmljYXRpb24gd2hlbiB0aGUgc3RhdGUgY2hhbmdlcy4KLSAgICAgICAgcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFk
c1NldC5hZGQodGhpcyk7CisgICAgICAgIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5h
bWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5hZGQodGhpcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhZGRGcmFnbWVudFRvTmFtZWRGbG93VGhyZWFkKHJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICBhZGRGcmFnbWVudFRvTmFtZWRGbG93VGhyZWFkKCZy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CiAKICAgICBpbnZhbGlkYXRlUmVnaW9ucygpOwogfQpA
QCAtMjUwLDIyICsyNTAsMjIgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJl
Z2lvbkZyb21UaHJlYWQoUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24pCiB7CiAgICAgQVNTRVJU
KHJlbmRlclJlZ2lvbik7CiAKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7
Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQo
KSkgewotICAgICAgICBpZiAoIXJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2ludmFsaWRSZWdpb25MaXN0LmNvbnRhaW5zKHJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KSk7Ci0gICAgICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LnJlbW92
ZShyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7Ci0gICAgICAgICAgICByZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJUaHJlYWRzU2V0LnJl
bW92ZSh0aGlzKTsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lv
bik7CisgICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVh
ZCgpKSB7CisgICAgICAgIGlmICghcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaXNWYWxpZCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQobV9pbnZhbGlkUmVnaW9uTGlzdC5jb250YWlucygmcmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQpKTsKKyAgICAgICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QucmVt
b3ZlKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgICAgICByZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQu
cmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBy
ZWdpb25zIHJlY3RhbmdsZXMuIFRoZSByZW1vdmVkIHJlZ2lvbgogICAgICAgICAgICAgLy8gd2Fz
IG5vdCB0YWtlbiBpbnRvIGFjY291bnQuIEp1c3QgcmV0dXJuIGhlcmUuCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCkpOworICAgICAg
ICByZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBh
cmVudE5hbWVkRmxvd1RocmVhZCgpKTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9yZWdpb25MaXN0
LmNvbnRhaW5zKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSk7Ci0gICAgYm9vbCB3YXNGaXJzdCA9
IG1fcmVnaW9uTGlzdC5maXJzdCgpID09IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwotICAgIG1f
cmVnaW9uTGlzdC5yZW1vdmUocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIEFTU0VSVCht
X3JlZ2lvbkxpc3QuY29udGFpbnMoJnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSk7CisgICAgYm9v
bCB3YXNGaXJzdCA9IG1fcmVnaW9uTGlzdC5maXJzdCgpID09ICZyZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDsKKyAgICBtX3JlZ2lvbkxpc3QucmVtb3ZlKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7
CiAKICAgICBpZiAoY2FuQmVEZXN0cm95ZWQoKSkKICAgICAgICAgc2V0TWFya0ZvckRlc3RydWN0
aW9uKCk7CkBAIC0zNzcsNyArMzc3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KGMKIAogUmVu
ZGVyQmxvY2sqIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tUmVuZGVyQm94QXNS
ZW5kZXJCbG9jayhSZW5kZXJCb3gqIHJlbmRlckJveCwgY29uc3QgSW50UG9pbnQmIGFic29sdXRl
UG9pbnQsIGNvbnN0IFJlbmRlckJveCYgZmxvd2VkQm94KQogewotICAgIHJldHVybiB0b1JlbmRl
ck5hbWVkRmxvd1RocmVhZChyZW5kZXJCb3gpLT5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5k
Qm94KGFic29sdXRlUG9pbnQsIGZsb3dlZEJveCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4oKnJlbmRlckJveCkuZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFu
ZEJveChhYnNvbHV0ZVBvaW50LCBmbG93ZWRCb3gpOwogfQogCiBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5k
Qm94KGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50LCBjb25zdCBSZW5kZXJCb3gmIGZsb3dl
ZEJveCkKQEAgLTM4OCwxMyArMzg4LDEzIEBAIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ6OmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3goCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25M
aXN0LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZyYWdtZW50
ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRlcik7Ci0gICAgICAgIFJlbmRlckJsb2Nr
RmxvdyYgZnJhZ21lbnRDb250YWluZXIgPSBmcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXIoKTsK
KyAgICAgICAgYXV0byYgZnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dD4oKippdGVyKTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9
IGZyYWdtZW50LmZyYWdtZW50Q29udGFpbmVyKCk7CiAgICAgICAgIEludFJlY3QgZnJhZ21lbnRB
YnNvbHV0ZVJlY3Qocm91bmRlZEludFBvaW50KGZyYWdtZW50Q29udGFpbmVyLmxvY2FsVG9BYnNv
bHV0ZSgpKSwgcm91bmRlZEludFNpemUoZnJhZ21lbnRDb250YWluZXIucGFkZGluZ0JveFJlY3Qo
KS5zaXplKCkpKTsKICAgICAgICAgaWYgKGZyYWdtZW50QWJzb2x1dGVSZWN0LmNvbnRhaW5zKGFi
c29sdXRlUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAgICAgICAg
cmV0dXJuICZmcmFnbWVudDsKICAgICAgICAgCi0gICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRS
ZWdpb24pCisgICAgICAgIGlmICgmZnJhZ21lbnQgPT0gZW5kUmVnaW9uKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIApAQCAtNDMwLDEzICs0MzAsMTMgQEAgdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMoKQogewogICAgIFZlY3RvcjxSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCo+IG5ld1ZhbGlkRnJhZ21lbnRzOwogICAgIGZvciAoYXV0byYgcmVn
aW9uIDogbV9pbnZhbGlkUmVnaW9uTGlzdCkgewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lv
bik7CisgICAgICAgIGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pOwogICAgICAgICAvLyBUaGUgb25seSByZWFzb24gYSBy
ZWdpb24gd291bGQgYmUgaW52YWxpZCBpcyBiZWNhdXNlIGl0IGhhcyBhIHBhcmVudCBmbG93IHRo
cmVhZC4KLSAgICAgICAgQVNTRVJUKCFuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpICYmIG5h
bWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSk7Ci0gICAgICAgIGlmIChu
YW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlz
KSkKKyAgICAgICAgQVNTRVJUKCFuYW1lZEZsb3dGcmFnbWVudC5pc1ZhbGlkKCkgJiYgbmFtZWRG
bG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCkpOworICAgICAgICBpZiAobmFtZWRG
bG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlzKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG5ld1ZhbGlkRnJhZ21lbnRzLmFwcGVuZChu
YW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIG5ld1ZhbGlkRnJhZ21lbnRzLmFwcGVuZCgmbmFt
ZWRGbG93RnJhZ21lbnQpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgbmFtZWRGbG93RnJhZ21l
bnQgOiBuZXdWYWxpZEZyYWdtZW50cykgewpAQCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZygpCiB7CiAgICAgYm9vbCBo
YXNSZWdpb25zV2l0aFN0eWxpbmcgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZ2lv
biA6IG1fcmVnaW9uTGlzdCkgewotICAgICAgICBpZiAodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dChyZWdpb24pLT5oYXNDdXN0b21SZWdpb25TdHlsZSgpKSB7CisgICAgICAgIGlmIChkb3duY2Fz
dDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuaGFzQ3VzdG9tUmVnaW9uU3R5bGUo
KSkgewogICAgICAgICAgICAgaGFzUmVnaW9uc1dpdGhTdHlsaW5nID0gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MTYsNyArODE2LDcgQEAgdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmoKICAgICAvLyBDbGVhciB0aGUgc3R5bGVzIGZvciB0aGUgb2JqZWN0IGluIHRoZSBy
ZWdpb25zLgogICAgIC8vIEZJWE1FOiBSZWdpb24gc3R5bGluZyBpcyBub3QgY29tcHV0ZWQgb25s
eSBmb3IgdGhlIHJlZ2lvbiByYW5nZSBvZiB0aGUgb2JqZWN0IHNvIHRoaXMgaXMgd2h5IHdlIG5l
ZWQgdG8gd2FsayB0aGUgd2hvbGUgY2hhaW4uCiAgICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3Jl
Z2lvbkxpc3QpCi0gICAgICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+Y2xl
YXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5jbGVhck9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0
KTsKIH0KIAogdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dDaGlsZEluZm8o
UmVuZGVyT2JqZWN0KiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuaAppbmRleCBkODI3MTNhMjRlOTY4OTMwMDU3Y2RjYjY2M2NlMTk5
YjFlMzQyMGI4Li4xYjBlNzk0MDUzNmY3MDg0MDQ5Mjk3YTU3YmQ1MTU5NmRkMWQ4N2JkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCkBA
IC0xNTksOCArMTU5LDYgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fZmxvd0NvbnRlbnRC
b3R0b207CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLCBpc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQsIGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDg4ODBkZGU4NGFhOTc3YzQzNjQyYmJjNDcwOTE3MTI3
ODhiOTAyYmYuLmFiYmMyYjQ2MzMyNGU5MjBkOWVjOTc4Yzc0NmEwOTY3YmNlYzBiNmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC01NjksMTMgKzU2OSwx
MyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y2xlYXJOZWVkc0xheW91dCgpCiAKIHN0YXRpYyB2b2lk
IHNjaGVkdWxlUmVsYXlvdXRGb3JTdWJ0cmVlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewot
ICAgIGlmICghcmVuZGVyZXIuaXNSZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoIWlzPFJlbmRlclZp
ZXc+KHJlbmRlcmVyKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLmlzUm9vdGVkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY2hl
ZHVsZVJlbGF5b3V0T2ZTdWJ0cmVlKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICB0b1JlbmRlclZpZXcocmVuZGVyZXIpLmZyYW1lVmlldygpLnNjaGVkdWxlUmVsYXlvdXQo
KTsKKyAgICBkb3duY2FzdDxSZW5kZXJWaWV3PihyZW5kZXJlcikuZnJhbWVWaWV3KCkuc2NoZWR1
bGVSZWxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9j
a3NGb3JMYXlvdXQoYm9vbCBzY2hlZHVsZVJlbGF5b3V0LCBSZW5kZXJFbGVtZW50KiBuZXdSb290
KQpAQCAtNjc3LDEzICs2NzcsMTMgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVDb250
YWluZXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRMYXll
ck5lZWRzRnVsbFJlcGFpbnQoKQogewogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICB0b1Jl
bmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVl
ZHNGdWxsUmVwYWludCk7CisgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRo
aXMpLmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludCk7CiB9CiAKIHZv
aWQgUmVuZGVyT2JqZWN0OjpzZXRMYXllck5lZWRzRnVsbFJlcGFpbnRGb3JQb3NpdGlvbmVkTW92
ZW1lbnRMYXlvdXQoKQogewogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICB0b1JlbmRlckxh
eWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxs
UmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCk7CisgICAgZG93bmNhc3Q8UmVuZGVy
TGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNG
dWxsUmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCk7CiB9CiAKIFJlbmRlckJsb2Nr
KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CkBAIC0xMjM3LDggKzEyMzcs
OCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFVzaW5nQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKHJlcGFpbnRDb250YWluZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAg
IHRvUmVuZGVyRmxvd1RocmVhZChyZXBhaW50Q29udGFpbmVyKS0+cmVwYWludFJlY3RhbmdsZUlu
UmVnaW9ucyhyKTsKKyAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKnJlcGFpbnRDb250YWlu
ZXIpKSB7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpyZXBhaW50Q29udGFp
bmVyKS5yZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zKHIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xNjI0LDggKzE2MjQsOCBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkVt
cGhhc2lzTWFya0NvbG9yKCkgY29uc3QKIFNlbGVjdGlvblN1YnRyZWVSb290JiBSZW5kZXJPYmpl
Y3Q6OnNlbGVjdGlvblJvb3QoKSBjb25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQg
JiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJu
ICp0b1JlbmRlck5hbWVkRmxvd1RocmVhZChmbG93VGhyZWFkKTsKKyAgICBpZiAoaXM8UmVuZGVy
TmFtZWRGbG93VGhyZWFkPihmbG93VGhyZWFkKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlck5hbWVkRmxvd1RocmVhZD4oKmZsb3dUaHJlYWQpOwogCiAgICAgcmV0dXJuIHZpZXcoKTsK
IH0KQEAgLTE3NjEsNyArMTc2MSw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpzaG91bGRVc2VUcmFu
c2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyCiAjaWYgRU5B
QkxFKDNEX1JFTkRFUklORykKICAgICAvLyBoYXNUcmFuc2Zvcm0oKSBpbmRpY2F0ZXMgd2hldGhl
ciB0aGUgb2JqZWN0IGhhcyB0cmFuc2Zvcm0sIHRyYW5zZm9ybS1zdHlsZSBvciBwZXJzcGVjdGl2
ZS4gV2UganVzdCBjYXJlIGFib3V0IHRyYW5zZm9ybSwKICAgICAvLyBzbyBjaGVjayB0aGUgbGF5
ZXIncyB0cmFuc2Zvcm0gZGlyZWN0bHkuCi0gICAgcmV0dXJuIChoYXNMYXllcigpICYmIHRvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+dHJhbnNmb3JtKCkpIHx8IChjb250
YWluZXJPYmplY3QgJiYgY29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLmhhc1BlcnNwZWN0aXZlKCkp
OworICAgIHJldHVybiAoaGFzTGF5ZXIoKSAmJiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqdGhpcykubGF5ZXIoKS0+dHJhbnNmb3JtKCkpIHx8IChjb250YWluZXJPYmplY3QgJiYg
Y29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLmhhc1BlcnNwZWN0aXZlKCkpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oY29udGFpbmVyT2JqZWN0KTsKICAgICByZXR1cm4gaGFzVHJhbnNmb3JtKCk7
CkBAIC0xNzczLDE0ICsxNzczLDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUcmFuc2Zvcm1G
cm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0CiAgICAgdHJh
bnNmb3JtLm1ha2VJZGVudGl0eSgpOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Zmc2V0SW5D
b250YWluZXIud2lkdGgoKSwgb2Zmc2V0SW5Db250YWluZXIuaGVpZ2h0KCkpOwogICAgIFJlbmRl
ckxheWVyKiBsYXllcjsKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiAobGF5ZXIgPSB0b1JlbmRlckxh
eWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCkpICYmIGxheWVyLT50cmFuc2Zvcm0oKSkKKyAg
ICBpZiAoaGFzTGF5ZXIoKSAmJiAobGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqdGhpcykubGF5ZXIoKSkgJiYgbGF5ZXItPnRyYW5zZm9ybSgpKQogICAgICAgICB0cmFu
c2Zvcm0ubXVsdGlwbHkobGF5ZXItPmN1cnJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgCiAjaWYgRU5B
QkxFKDNEX1JFTkRFUklORykKICAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9i
amVjdC0+aGFzTGF5ZXIoKSAmJiBjb250YWluZXJPYmplY3QtPnN0eWxlKCkuaGFzUGVyc3BlY3Rp
dmUoKSkgewogICAgICAgICAvLyBQZXJwc2VjdGl2ZSBvbiB0aGUgY29udGFpbmVyIGFmZmVjdHMg
dXMsIHNvIHdlIGhhdmUgdG8gZmFjdG9yIGl0IGluIGhlcmUuCiAgICAgICAgIEFTU0VSVChjb250
YWluZXJPYmplY3QtPmhhc0xheWVyKCkpOwotICAgICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZl
T3JpZ2luID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KGNvbnRhaW5lck9iamVjdCktPmxheWVy
KCktPnBlcnNwZWN0aXZlT3JpZ2luKCk7CisgICAgICAgIEZsb2F0UG9pbnQgcGVyc3BlY3RpdmVP
cmlnaW4gPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqY29udGFpbmVyT2JqZWN0
KS5sYXllcigpLT5wZXJzcGVjdGl2ZU9yaWdpbigpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHBlcnNwZWN0aXZlTWF0cml4OwogICAgICAgICBwZXJzcGVjdGl2ZU1hdHJpeC5hcHBs
eVBlcnNwZWN0aXZlKGNvbnRhaW5lck9iamVjdC0+c3R5bGUoKS5wZXJzcGVjdGl2ZSgpKTsKQEAg
LTE4NTgsMTUgKzE4NTgsMTUgQEAgTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRS
ZWN0KElubGluZUJveCosIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFQKIAogYm9vbCBSZW5k
ZXJPYmplY3Q6OmlzUm9vdGVkKFJlbmRlclZpZXcqKiB2aWV3KSBjb25zdAogewotICAgIGNvbnN0
IFJlbmRlck9iamVjdCogbyA9IHRoaXM7Ci0gICAgd2hpbGUgKG8tPnBhcmVudCgpKQotICAgICAg
ICBvID0gby0+cGFyZW50KCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXM7CisgICAgd2hpbGUgKHJlbmRlcmVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cGFyZW50KCk7CiAKLSAgICBpZiAoIW8tPmlzUmVuZGVyVmlldygpKQorICAgIGlm
ICghaXM8UmVuZGVyVmlldz4oKnJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKHZpZXcpCi0gICAgICAgICp2aWV3ID0gJmNvbnN0X2Nhc3Q8UmVuZGVyVmlldyY+KHRv
UmVuZGVyVmlldygqbykpOworICAgICAgICAqdmlldyA9IGNvbnN0X2Nhc3Q8UmVuZGVyVmlldyo+
KGRvd25jYXN0PFJlbmRlclZpZXc+KHJlbmRlcmVyKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTE5OTksNyArMTk5OSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQo
KQogICAgIC8vIGJlIG1vdmVkIGludG8gUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3kuCiAg
ICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc2V0SGFzTGF5ZXIoZmFsc2UpOwotICAgICAg
ICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmRlc3Ryb3lMYXllcigpOworICAgICAg
ICBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykuZGVzdHJveUxheWVyKCk7
CiAgICAgfQogCiAgICAgY2xlYXJMYXlvdXRSb290SWZOZWVkZWQoKTsKQEAgLTIxMzIsNyArMjEz
Miw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCiAK
IGJvb2wgUmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBo
YXNMYXllcigpICYmIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+aXND
b21wb3NpdGVkKCk7CisgICAgcmV0dXJuIGhhc0xheWVyKCkgJiYgZG93bmNhc3Q8UmVuZGVyTGF5
ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQogCiBib29s
IFJlbmRlck9iamVjdDo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRl
ciBoaXRUZXN0RmlsdGVyKQpAQCAtMjU3OSw3ICsyNTc5LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6
Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QKIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWZsb3dUaHJl
YWQgfHwgIWZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCisgICAgaWYgKCFp
czxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIEZJWE1FOiBPbmNlIHJlZ2lvbnMgYXJlIGZ1bGx5IGludGVncmF0ZWQg
d2l0aCB0aGUgY29tcG9zaXRpbmcgc3lzdGVtIHdlIHNob3VsZCB1bmNvbW1lbnQgdGhpcyBhc3Nl
cnQuCkBAIC0yNTg3LDcgKzI1ODcsNyBAQCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVy
T2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdAogICAgIC8vIGEg
bGF5ZXIgd2l0aG91dCBrbm93aW5nIHRoZSBjb250YWluaW5nIHJlZ2lvbiBpbiBhZHZhbmNlLgog
ICAgIC8vIEFTU0VSVChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkgJiYgZmxvd1RocmVhZC0+
Y3VycmVudFJlZ2lvbigpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogCi0gICAgcmV0
dXJuIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigp
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZsb3dUaHJl
YWQtPmN1cnJlbnRSZWdpb24oKSk7CiB9CiAKIFJlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVj
dDo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZTI5ZTQ5MmU4YWMwNTMzNzU4NzI2NjU4MzBh
Y2VkODIyMTg0MGMyYy4uZDdkMzE5ODFhMmZmZjkzYmZiNDRmMzc1OGU1ODRiNjM0M2JjYWQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMTEyMiwxMCArMTEy
Miw2IEBAIGlubGluZSBib29sIFJlbmRlck9iamVjdDo6YmFja2dyb3VuZElzS25vd25Ub0JlT2Jz
Y3VyZWQoKQogICAgIHJldHVybiBtX2JpdGZpZWxkcy5ib3hEZWNvcmF0aW9uU3RhdGUoKSA9PSBI
YXNCb3hEZWNvcmF0aW9uc0FuZEJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkOwogfQogCi0v
LyBGSVhNRTogUmVtb3ZlIHRoaXMgbWFjcm8gYW5kIHVzZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1JFTkRFUl9PQkpFQ1QoKSBpbnN0ZWFkLgotI2RlZmluZSBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FT
VFMoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9W
YWx1ZVR5cGVOYW1lLCBSZW5kZXJPYmplY3QsIHJlbmRlcmVyLCBpczxUb1ZhbHVlVHlwZU5hbWU+
KCpyZW5kZXJlciksIGlzPFRvVmFsdWVUeXBlTmFtZT4ocmVuZGVyZXIpKQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JK
RUNUKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQcm9ncmVzcy5oCmluZGV4IDg2ZTg3NjU0YTM3ZTgxZGQwMzAxZTZmNDE1MjE2YmM0
YzY2MzMxNTYuLmU4MjRmMWE1NDE5N2IyN2VhYjZiM2QwMWM1MzM2NzA3YTE3Y2Q3OTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCkBAIC01OCw4ICs1OCw2IEBA
IHByaXZhdGU6CiAgICAgVGltZXI8UmVuZGVyUHJvZ3Jlc3M+IG1fYW5pbWF0aW9uVGltZXI7CiB9
OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyUHJvZ3Jlc3MsIGlzUHJvZ3Jlc3Mo
KSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JF
TkRFUl9PQkpFQ1QoUmVuZGVyUHJvZ3Jlc3MsIGlzUHJvZ3Jlc3MoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5LmNwcAppbmRleCBmMDJhYmMwZGE5NWE3OGE4NGRhNmZmMTljYzcw
MTAxNjI1MDA5NzgxLi5kMmUwOGQ0MGFmNmEzMGEzNDIyMWEzMjY4NDEzOTM0NjA1YWY1YzRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCkBAIC05NCwxMCArOTQsMTAg
QEAgc3RhdGljIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVu
ZGVyT2JqZWN0JiBydWJ5KQogc3RhdGljIFJlbmRlclJ1YnlSdW4qIGxhc3RSdWJ5UnVuKGNvbnN0
IFJlbmRlckVsZW1lbnQqIHJ1YnkpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1Ynkt
Pmxhc3RDaGlsZCgpOwotICAgIGlmIChjaGlsZCAmJiAhY2hpbGQtPmlzUnVieVJ1bigpKQorICAg
IGlmIChjaGlsZCAmJiAhaXM8UmVuZGVyUnVieVJ1bj4oKmNoaWxkKSkKICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgQVNTRVJUKCFjaGlsZCB8fCBjaGlsZC0+
aXNSdWJ5UnVuKCkgfHwgY2hpbGQtPmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkID09IHJ1YnlC
ZWZvcmVCbG9jayhydWJ5KSk7Ci0gICAgcmV0dXJuIGNoaWxkICYmIGNoaWxkLT5pc1J1YnlSdW4o
KSA/IHRvUmVuZGVyUnVieVJ1bihjaGlsZCkgOiAwOworICAgIEFTU0VSVCghY2hpbGQgfHwgaXM8
UmVuZGVyUnVieVJ1bj4oKmNoaWxkKSB8fCBjaGlsZC0+aXNCZWZvcmVDb250ZW50KCkgfHwgY2hp
bGQgPT0gcnVieUJlZm9yZUJsb2NrKHJ1YnkpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
UnVieVJ1bj4oY2hpbGQpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlclJ1YnlSdW4mIGZpbmRS
dWJ5UnVuUGFyZW50KFJlbmRlck9iamVjdCYgY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcAppbmRleCAzZTUzOTI5OWNlYjY3ZTNkNGM5NDMwNjYwMTQ3
M2NiY2Y2OWQ5MjQxLi4zMTMyOTk4NTZkMWNlNmEzOGYxYmRhMTcxNGNiZjZlMjA0NzAzMzc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKQEAgLTEzMSw5
ICsxMzEsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlQmxvY2tDaGlsZHJlbihSZW5kZXJS
dWJ5QmFzZSogdG9CYXNlLCBSZW5kZXJPYmplY3QqIGJlZgogUmVuZGVyUnVieVJ1biogUmVuZGVy
UnVieUJhc2U6OnJ1YnlSdW4oKSBjb25zdAogewogICAgIEFTU0VSVChwYXJlbnQoKSk7Ci0gICAg
QVNTRVJUKHBhcmVudCgpLT5pc1J1YnlSdW4oKSk7Ci0KLSAgICByZXR1cm4gJnRvUmVuZGVyUnVi
eVJ1bigqcGFyZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihwYXJl
bnQoKSk7CiB9CiAKIEVUZXh0QWxpZ24gUmVuZGVyUnVieUJhc2U6OnRleHRBbGlnbm1lbnRGb3JM
aW5lKGJvb2wgLyogZW5kc1dpdGhTb2Z0QnJlYWsgKi8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKaW5kZXggMTUyNGFkMzgzNjIwOTIwNGE0NmFmZGU1
YTZkNTIwNDExNWE1NzcxNy4uYzVhYTQwM2E0ZDVmN2U5YTFlNWViYmY2N2ZjZjlhYjgwOWEzYWQy
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcApAQCAtMTYz
LDE1ICsxNjMsMTUgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZChS
ZW5kZXJPYmplY3QmIGNoaWxkKQogICAgIGlmICghYmVpbmdEZXN0cm95ZWQoKSAmJiAhZG9jdW1l
bnRCZWluZ0Rlc3Ryb3llZCgpICYmIGNoaWxkLmlzUnVieVRleHQoKSkgewogICAgICAgICBSZW5k
ZXJSdWJ5QmFzZSogYmFzZSA9IHJ1YnlCYXNlKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmln
aHROZWlnaGJvdXIgPSBuZXh0U2libGluZygpOwotICAgICAgICBpZiAoYmFzZSAmJiByaWdodE5l
aWdoYm91ciAmJiByaWdodE5laWdoYm91ci0+aXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgaWYgKGJh
c2UgJiYgaXM8UmVuZGVyUnVieVJ1bj4ocmlnaHROZWlnaGJvdXIpKSB7CiAgICAgICAgICAgICAv
LyBSdWJ5IHJ1biB3aXRob3V0IGEgYmFzZSBjYW4gaGFwcGVuIG9ubHkgYXQgdGhlIGZpcnN0IHJ1
bi4KLSAgICAgICAgICAgIFJlbmRlclJ1YnlSdW4qIHJpZ2h0UnVuID0gdG9SZW5kZXJSdWJ5UnVu
KHJpZ2h0TmVpZ2hib3VyKTsKLSAgICAgICAgICAgIGlmIChyaWdodFJ1bi0+aGFzUnVieUJhc2Uo
KSkgewotICAgICAgICAgICAgICAgIFJlbmRlclJ1YnlCYXNlKiByaWdodEJhc2UgPSByaWdodFJ1
bi0+cnVieUJhc2VTYWZlKCk7CisgICAgICAgICAgICBSZW5kZXJSdWJ5UnVuJiByaWdodFJ1biA9
IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KCpyaWdodE5laWdoYm91cik7CisgICAgICAgICAgICBp
ZiAocmlnaHRSdW4uaGFzUnVieUJhc2UoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclJ1YnlC
YXNlKiByaWdodEJhc2UgPSByaWdodFJ1bi5ydWJ5QmFzZVNhZmUoKTsKICAgICAgICAgICAgICAg
ICAvLyBDb2xsZWN0IGFsbCBjaGlsZHJlbiBpbiBhIHNpbmdsZSBiYXNlLCB0aGVuIHN3YXAgdGhl
IGJhc2VzLgogICAgICAgICAgICAgICAgIHJpZ2h0QmFzZS0+bWVyZ2VDaGlsZHJlbldpdGhCYXNl
KGJhc2UpOwotICAgICAgICAgICAgICAgIG1vdmVDaGlsZFRvKHJpZ2h0UnVuLCBiYXNlKTsKLSAg
ICAgICAgICAgICAgICByaWdodFJ1bi0+bW92ZUNoaWxkVG8odGhpcywgcmlnaHRCYXNlKTsKKyAg
ICAgICAgICAgICAgICBtb3ZlQ2hpbGRUbygmcmlnaHRSdW4sIGJhc2UpOworICAgICAgICAgICAg
ICAgIHJpZ2h0UnVuLm1vdmVDaGlsZFRvKHRoaXMsIHJpZ2h0QmFzZSk7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIG5vdyBlbXB0eSBydWJ5IGJhc2Ugd2lsbCBiZSByZW1vdmVkIGJlbG93LgogICAg
ICAgICAgICAgICAgIEFTU0VSVCghcnVieUJhc2UoKS0+Zmlyc3RDaGlsZCgpKTsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVu
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCmluZGV4IGZkZjM4
MWZkOWZiNWVmMGI2OGQ5M2U1NzMzYTI2NzRiYTdmY2U5MzguLmQ5ZGNlNGY3OGE2ZWU1ZTM0Y2E3
Njk5ZWM0YzEwMTNhNWY2OGM3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlSdW4uaApAQCAtNzcsOCArNzcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKikgeyB9CiB9OwogCi1SRU5ERVJf
T0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyUnVieVJ1biwgaXNSdWJ5UnVuKCkpCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJl
bmRlclJ1YnlSdW4sIGlzUnVieVJ1bigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNsaWRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNs
aWRlci5oCmluZGV4IGRhOGFjN2FiODY3NzQ5ODQ4MDQxMTViZDdmNTg2Njk4ZjEyZGMyOTEuLjg2
ZGEyMjVhMDMwZjgyZWMzNWEwYWUzYzVlY2RjYjE0MTY2NDdmODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKQEAgLTUxLDggKzUxLDYgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVf
Q0FTVFMoUmVuZGVyU2xpZGVyLCBpc1NsaWRlcigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJTbGlkZXIsIGlz
U2xpZGVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggYWI0
MmQ1NGE0MGUyM2RiZjJiODJhNmExNDViZWRiZDU4MTdlOTZiNS4uODU3ZGU2NzNkNmEwNmM0YTUw
Y2FhMTVhZjAyNDA4YmI4N2IzNWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcApAQCAtNDM4LDggKzQzOCw4IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5CiAKIEFM
V0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYg
ZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUuaGFzVGV4dENv
bWJpbmUoKSAmJiBpc0NvbWJpbmVUZXh0KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQ29tYmlu
ZVRleHQmIGNvbWJpbmVUZXh0ID0gdG9SZW5kZXJDb21iaW5lVGV4dCgqdGhpcyk7CisgICAgaWYg
KHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkg
eworICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRleHQgPSBkb3duY2Fz
dDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwogICAgICAgICBpZiAoY29tYmluZVRleHQuaXND
b21iaW5lZCgpKQogICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVUZXh0LmNvbWJpbmVkVGV4dFdp
ZHRoKGYpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCmluZGV4IGM1OTg3NWE2NWYzNDdjNzA5NjZkOTg5MmZmYWQ1YWI1YzZmMzViYzkuLmNkNjMy
OTU5MjcxNmQzYjE3OGFlMTM0OGFmODYxMDc4YTgxYWE4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMTYyMCw3ICsxNjIwLDcgQEAgZG91Ymxl
IFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzJikgY29uc3QKIEludFJlY3QgUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNz
UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgZnVs
bEJhclJlY3QpCiB7CiAgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QoZnVsbEJhclJlY3QpOwotICAg
IGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mo
cmVuZGVyT2JqZWN0KTsKKyAgICBjb25zdCBhdXRvJiByZW5kZXJQcm9ncmVzcyA9IGRvd25jYXN0
PFJlbmRlclByb2dyZXNzPihyZW5kZXJPYmplY3QpOwogICAgIGlmIChyZW5kZXJQcm9ncmVzcy5p
c0RldGVybWluYXRlKCkpIHsKICAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggYTdkYmU4NTczMjlkMWM2NjdlMjdmMTRhYzkz
ZTc0Mzk1MzQzNDZlYi4uZWQ1MTY1ZWJiNmYzZGU3NzY5MDU5MWJlYTlhMWNiZmVlNmQ0MmUzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtODQ5LDcg
Kzg0OSw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJl
ci5pc1Byb2dyZXNzKCkpCisgICAgaWYgKCFpczxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyZXIpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNvbnN0IGludCBwcm9ncmVzc0JhckhlaWdodCA9
IDk7CkBAIC04OTcsNyArODk3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVz
c0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKIAogICAgIGNv
bnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3Np
dGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CiAKLSAgICBjb25zdCBS
ZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVy
ZXIpOworICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93bmNhc3Q8UmVuZGVyUHJv
Z3Jlc3M+KHJlbmRlcmVyKTsKICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1pbmF0ZSgp
KSB7CiAgICAgICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggNjc3MzFi
NGZmNzY1ZDUzZjBjMGYxOThmNWFiMGMxM2YyZGFkMjU4Zi4uZTc4NWJlZDI4ZWNkYmI4NTg2ZTZk
YjNiNWU5ZTQ5MTc1ZmQyOWI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQpAQCAtOTY3LDEyICs5NjcsMTIgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwgY29uc3QK
IAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQorICAgIGlmICghaXM8UmVu
ZGVyTWV0ZXI+KHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CiAKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHRv
UmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KSk7CisgICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNl
bGwgPSBsZXZlbEluZGljYXRvckZvcihkb3duY2FzdDxSZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0
KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8u
Y29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0aEZyYW1lOnJlY3QgaW5WaWV3OmRvY3VtZW50
Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTExMTUsMTMgKzExMTUsMTMgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW4KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QuaXNQcm9n
cmVzcygpKQorICAgIGlmICghaXM8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVzc0Jh
clJlY3RGb3JCb3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKICAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgpKTsKIAot
ICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dy
ZXNzKCZyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93
bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCk7CiAgICAgSElUaGVtZVRyYWNrRHJh
d0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0gMDsKICAgICBpZiAoY29u
dHJvbFNpemUgPT0gTlNSZWd1bGFyQ29udHJvbFNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAppbmRleCBmM2RjNWE1MTllNDVkZWU4YTIxNmEx
YmIyNmQ4OWZlMDU2NDhmNDQxLi44NjUyMjEzOTg3MmI2ZGZiNTNmMTM1MzEzZjBjZWRiMzA2YWEy
MTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZh
cmkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHAKQEAgLTEyMTYsMTAgKzEyMTYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRN
ZXRlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKIHsKICAg
ICAvLyBOT1RFOiBUaGlzIHJvdXRpbmUgaXMgZm9yIHRlc3Rpbmcgb25seS4gSXQgc2hvdWxkIGJl
IGZsZXNoZWQgb3V0IHdpdGggYSByZWFsIENHLWJhc2VkIGltcGxlbWVudGF0aW9uLgogICAgIC8v
IFJpZ2h0IG5vdyBpdCB1c2VzIGEgc2xpZGVyLCB3aXRoIHRoZSB0aHVtYiBwb3NpdGlvbmVkIGF0
IHRoZSBtZXRlciBwb2ludC4KLSAgICBpZiAoIXJlbmRlck9iamVjdC5pc01ldGVyKCkpCisgICAg
aWYgKCFpczxSZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5kZXJP
YmplY3QpLm1ldGVyRWxlbWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSBk
b3duY2FzdDxSZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAogICAg
IGludCByZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KCgxLjAgLSBlbGVtZW50LT52YWx1ZVJh
dGlvKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LnNpemUoKS53aWR0aCgpKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCmluZGV4IDQwY2U1Mjk2
ZjQwZTU3MjU4Nzg1MzFjOWM0NzhkYzdkMTk5M2RhMTQuLmFkYjQ2MzI1MzlmMjE5ODA1YTI5ZGI0
YjgwNWU1ZDM1YzBlOTMzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmNwcApAQCAtMTE3NSwxMCArMTE3NSwxMCBAQCBJbnRTaXplIFJlbmRlclRoZW1lV2lu
OjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBi
bwogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC5pc01ldGVyKCkpCisgICAgaWYgKCFpczxS
ZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBI
VE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5kZXJPYmplY3QpLm1l
dGVyRWxlbWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxS
ZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0
YSB0aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggMjRmMDdhNDc5MjFkYmM3NDM2
YzhmNjdjMWJmYjk0MWE4ZDU4NjljOC4uNjg5ODc5MGJlMzRmNGQzMWUzNTAwODc1Mzg4ZGI5ZWE1
NzdhZDJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNjUyLDggKzY1Miw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyUmVnaW9uTGlz
dChjb25zdCBSZW5kZXJSZWdpb25MaXN0JiBmbG93VGhyZWFkUmVnaW9uTGlzdCwKIAogICAgICAg
ICBFbGVtZW50KiBnZW5lcmF0aW5nRWxlbWVudCA9IHJlbmRlclJlZ2lvbi0+Z2VuZXJhdGluZ0Vs
ZW1lbnQoKTsKICAgICAgICAgaWYgKGdlbmVyYXRpbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICBi
b29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJSZWdpb24tPmlzUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKTsKLSAgICAgICAgICAgIGlmIChpc1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50ICYmIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKS0+aGFzQ3VzdG9t
UmVnaW9uU3R5bGUoKSkKKyAgICAgICAgICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCA9IGlzPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKKyAgICAgICAg
ICAgIGlmIChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ICYmIGRvd25jYXN0PFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKS5oYXNDdXN0b21SZWdpb25TdHlsZSgpKQogICAg
ICAgICAgICAgICAgIHRzIDw8ICIgcmVnaW9uIHN0eWxlOiAxIjsKICAgICAgICAgICAgIGlmIChy
ZW5kZXJSZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgdHMg
PDwgIiBoYXNBdXRvTG9naWNhbEhlaWdodCI7CkBAIC04MDIsOCArODAyLDggQEAgc3RhdGljIHZv
aWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWUKICAgICAKICAgICAvLyBBbHRvdWdoIHRoZSBSZW5kZXJGbG93VGhyZWFk
IHJlcXVpcmVzIGEgbGF5ZXIsIGl0IGlzIG5vdCBjb2xsZWN0ZWQgYnkgaXRzIHBhcmVudCwKICAg
ICAvLyBzbyB3ZSBoYXZlIHRvIHRyZWF0IGl0IGFzIGEgc3BlY2lhbCBjYXNlLgotICAgIGlmIChs
LT5yZW5kZXJlcigpLmlzUmVuZGVyVmlldygpKQotICAgICAgICB3cml0ZVJlbmRlck5hbWVkRmxv
d1RocmVhZHModHMsIHRvUmVuZGVyVmlldyhsLT5yZW5kZXJlcigpKSwgcm9vdExheWVyLCBwYWlu
dERpcnR5UmVjdCwgaW5kZW50LCBiZWhhdmlvcik7CisgICAgaWYgKGlzPFJlbmRlclZpZXc+KGwt
PnJlbmRlcmVyKCkpKQorICAgICAgICB3cml0ZVJlbmRlck5hbWVkRmxvd1RocmVhZHModHMsIGRv
d25jYXN0PFJlbmRlclZpZXc+KGwtPnJlbmRlcmVyKCkpLCByb290TGF5ZXIsIHBhaW50RGlydHlS
ZWN0LCBpbmRlbnQsIGJlaGF2aW9yKTsKIH0KIAogc3RhdGljIFN0cmluZyBub2RlUG9zaXRpb24o
Tm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWRlby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKaW5kZXggNTRh
ZTNmMDViYTEwZjk1MTQxN2ZkNjY5Yzk2NGM0MDEyZGEyODcyNS4uZWE2MDhlYzgxNjYwYmIwNDc3
MTVjMzkyZWM0Y2Q3NGMwZjc1NjcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZGVvLmgKQEAgLTkwLDggKzkwLDYgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRTaXplIG1fY2FjaGVk
SW1hZ2VTaXplOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlclZpZGVvLCBp
c1ZpZGVvKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclZpZGVvLCBpc1ZpZGVvKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggNzY0MjI5MTBlM2IxZTlhY2M4ZmRjZWJlY2Qz
OTI1MGFmYmVhM2ZkNy4uNTE2MDkyNmUwNDYyNzgzNTg5ZDgwMjcwZDhkYTE0ZWNjOTI2MjEzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNjYsMTEgKzY2LDEx
IEBAIHN0cnVjdCBTZWxlY3Rpb25JdGVyYXRvciB7CiAgICAgCiAgICAgdm9pZCBjaGVja0ZvclNw
YW5uZXIoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnQgfHwgIW1fY3VycmVudC0+aXNS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpKQorICAgICAgICBpZiAoIWlzPFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciog
cGxhY2Vob2xkZXIgPSB0b1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKG1fY3Vy
cmVudCk7Ci0gICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZChwbGFjZWhvbGRlcik7Ci0gICAg
ICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5zcGFubmVyKCk7CisgICAgICAgIGF1dG8mIHBs
YWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+
KCptX2N1cnJlbnQpOworICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9sZGVy
KTsKKyAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwogICAgIH0KICAg
ICAKICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKQpAQCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQg
UmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKIAogc3RhdGljIGlubGluZSBib29sIGlzQ29tcG9zaXRlZChSZW5kZXJF
bGVtZW50KiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+aGFzTGF5ZXIoKSAmJiB0b1Jl
bmRlckxheWVyTW9kZWxPYmplY3Qob2JqZWN0KS0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7Cisg
ICAgcmV0dXJuIG9iamVjdC0+aGFzTGF5ZXIoKSAmJiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0Pigqb2JqZWN0KS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIHJlbmRlcmVyT2JzY3VyZXNCYWNrZ3JvdW5kKFJlbmRlckVsZW1lbnQqIHJvb3RP
YmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA4M2FiZTcyYTY3
NzUxYzRiNTAzMzlmNDJhMTU3MDY5YjJlMzVmOWE1Li4yOTZmZjU2ODE0Zjc5YTM2NDExNzU0NDdj
NzY0MTlkODQ0N2RiZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAg
LTM2OSw4ICszNjksNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZ
UEVfQ0FTVFMoUmVuZGVyVmlldywgaXNSZW5kZXJWaWV3KCkpCi0KIC8vIFN0YWNrLWJhc2VkIGNs
YXNzIHRvIGFzc2lzdCB3aXRoIExheW91dFN0YXRlIHB1c2gvcG9wCiBjbGFzcyBMYXlvdXRTdGF0
ZU1haW50YWluZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheW91dFN0YXRlTWFpbnRh
aW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKaW5kZXggYjI3YWU5
YWUzY2ZiMGM1ZWYzMDJkMWM1MWM2OTE2YmZhZDU3NjcwYy4uYTU1NTc4YTMyM2RjZGU5OTczZDYw
YWMyY2E1NzI3OGI5OTQzMmQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaApAQCAtMTA0LDggKzEwNCw2IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0
OyAvLyBUaGUgcmVjdGFuZ2xlIG5lZWRzIHRvIHJlbWFpbiBjb3JyZWN0IGFmdGVyIHNjcm9sbGlu
Zywgc28gaXQgaXMgc3RvcmVkIGluIGNvbnRlbnQgdmlldyBjb29yZGluYXRlcywgYW5kIG5vdCBj
bGlwcGVkIHRvIHdpbmRvdy4KIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJX
aWRnZXQsIGlzV2lkZ2V0KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlcldpZGdldCwgaXNXaWRnZXQoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElu
bGluZUhlYWRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29u
dGV4dElubGluZUhlYWRlcnMuaAppbmRleCBiNjRjNzY0NGM2OTgyMDI5NjIxZTA4NDNkNGJlODE0
ZjEyNzQzOTMwLi41M2YwMWMxZjhhOGEzOGQxOGRiNTA1MzEzMDk2ZWRkODM3NTM0ZTIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxp
bmVIZWFkZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdD
b250ZXh0SW5saW5lSGVhZGVycy5oCkBAIC01OTQsOCArNTk0LDggQEAgaW5saW5lIGJvb2wgQnJl
YWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVu
dHMsIGJvb2wKICAgICBpZiAobV9hdXRvV3JhcCAmJiAhUmVuZGVyU3R5bGU6OmF1dG9XcmFwKG1f
bGFzdFdTKSAmJiBtX2lnbm9yaW5nU3BhY2VzKQogICAgICAgICBjb21taXRMaW5lQnJlYWtBdEN1
cnJlbnRXaWR0aChyZW5kZXJUZXh0KTsKIAotICAgIGlmIChyZW5kZXJUZXh0LnN0eWxlKCkuaGFz
VGV4dENvbWJpbmUoKSAmJiBtX2N1cnJlbnQucmVuZGVyZXIoKS0+aXNDb21iaW5lVGV4dCgpICYm
ICF0b1JlbmRlckNvbWJpbmVUZXh0KCptX2N1cnJlbnQucmVuZGVyZXIoKSkuaXNDb21iaW5lZCgp
KSB7Ci0gICAgICAgIFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lUmVuZGVyZXIgPSB0b1JlbmRl
ckNvbWJpbmVUZXh0KCptX2N1cnJlbnQucmVuZGVyZXIoKSk7CisgICAgaWYgKHJlbmRlclRleHQu
c3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PigqbV9jdXJy
ZW50LnJlbmRlcmVyKCkpICYmICFkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKm1fY3VycmVu
dC5yZW5kZXJlcigpKS5pc0NvbWJpbmVkKCkpIHsKKyAgICAgICAgYXV0byYgY29tYmluZVJlbmRl
cmVyID0gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KCptX2N1cnJlbnQucmVuZGVyZXIoKSk7
CiAgICAgICAgIGNvbWJpbmVSZW5kZXJlci5jb21iaW5lVGV4dCgpOwogICAgICAgICAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSByZW5kZXJlcidzIHRleHQgbWF5IGhhdmUgY2hhbmdlZC4gSW5jcmVtZW50
IHN0YWxlIGl0ZXJhdG9yIHBvc2l0aW9ucwogICAgICAgICBpZiAoaXRlcmF0b3JJc0JleW9uZEVu
ZE9mUmVuZGVyQ29tYmluZVRleHQobV9saW5lQnJlYWssIGNvbWJpbmVSZW5kZXJlcikpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAppbmRleCBjNzc0
YTU4NjY2NzYwMTdiOTQ4NjYwOWU1ZWE2MDY4ODNiOGQzOTk1Li5iNjg1N2I2ZjQzN2FkNTI2YTU4
NzFhOGY0MDJjNDcyZjBiNzY1ODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9MaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvTGluZUJyZWFrZXIuY3BwCkBAIC02Nyw5ICs2Nyw5IEBAIHZvaWQgTGluZUJyZWFrZXI6OnNr
aXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSW5m
byYKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QuaXNGbG9hdGluZygp
KQogICAgICAgICAgICAgbV9ibG9jay5wb3NpdGlvbk5ld0Zsb2F0T25MaW5lKG1fYmxvY2suaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKSwgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKLSAgICAgICAgZWxzZSBpZiAob2Jq
ZWN0LmlzVGV4dCgpICYmIG9iamVjdC5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgb2JqZWN0
LmlzQ29tYmluZVRleHQoKSAmJiAhdG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29tYmlu
ZWQoKSkgewotICAgICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmNvbWJpbmVU
ZXh0KCk7Ci0gICAgICAgICAgICBpZiAodG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29t
YmluZWQoKSkKKyAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQ29tYmluZVRleHQ+KG9iamVjdCkg
JiYgb2JqZWN0LnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiAhZG93bmNhc3Q8UmVuZGVyQ29t
YmluZVRleHQ+KG9iamVjdCkuaXNDb21iaW5lZCgpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5jb21iaW5lVGV4dCgpOworICAgICAgICAgICAgaWYg
KGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihvYmplY3QpLmlzQ29tYmluZWQoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByZXNvbHZlci5pbmNyZW1l
bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxNDhkM2MyM2UzMDQ1
NDFlNGY4M2JjMjVlZGI5ZmU1MTY1NWQ3Y2YzLi5hODUyMTdiZDMwMDRkMDdjNjQ0ZDk2NTVhYjY5
MGQwNGY4NWUyNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yMjIw
LDE0ICsyMjIwLDEzIEBAIGJvb2wgSW50ZXJuYWxzOjppc1BsdWdpblVuYXZhaWxhYmlsaXR5SW5k
aWNhdG9yT2JzY3VyZWQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVjdCgpKSB7Cisg
ICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJlbmRlckVtYmVk
ZGVkT2JqZWN0KiBlbWJlZCA9IHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIpOwotICAg
IHJldHVybiBlbWJlZC0+aXNSZXBsYWNlbWVudE9ic2N1cmVkKCk7CisgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpLmlzUmVwbGFjZW1lbnRPYnNjdXJl
ZCgpOwogfQogICAgIAogYm9vbCBJbnRlcm5hbHM6OmlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVu
dCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcu
bW0KaW5kZXggZjI0ZGZkMjdiNDM1OWU1MDkyZTYxMDEyMmY1YTMwYWFmZGI0MzBkMi4uMzk2ZTYx
ZWI2YmFlODZkNzRiY2RjNThkNmNlNjc3NWE5ZmIzZjc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldy5tbQpAQCAtNDMwLDEwICs0MzAsOCBAQCAtICh2b2lkKXNlbmRNb2RpZmllckV2ZW50
V2l0aEtleUNvZGU6KGludClrZXlDb2RlIGNoYXJhY3RlcjooY2hhciljaGFyYWN0ZXIKIAogLSAo
dm9pZClwbHVnaW5Ib3N0RGllZAogewotICAgIGlmIChfZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBf
ZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVjdCgpKSB7Ci0gICAgICAgIFJlbmRl
ckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciA9IHRvUmVuZGVyRW1iZWRkZWRPYmplY3QoX2VsZW1l
bnQtPnJlbmRlcmVyKCkpOwotICAgICAgICByZW5kZXJlci0+c2V0UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbkNyYXNoZWQpOwotICAgIH0KKyAg
ICBpZiAoaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KF9lbGVtZW50LT5yZW5kZXJlcigpKSkKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpfZWxlbWVudC0+cmVuZGVyZXIo
KSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBs
dWdpbkNyYXNoZWQpOwogCiAgICAgX3BsdWdpbkxheWVyID0gbmlsOwogICAgIF9wcm94eSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW0KaW5kZXggOTk4NTk0ZmFkMjUzODY5ZDVhYzc3NmI0NzQ0ZTY3MjQxOGIzZDA3
MS4uYjkxNDRmYmFmOGQ3ZjE0MjYwNGEzNWQ3ZGZkNjViNWNjYzAwMTdiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5t
bQpAQCAtMjkwLDExICsyOTAsMTEgQEAgLSAodm9pZClyZXN0YXJ0VGltZXJzCiAKIC0gKE5TUmVj
dClfd2luZG93Q2xpcFJlY3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gX2VsZW1l
bnQtPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBfZWxlbWVudC0+cmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIAotICAg
IHJldHVybiB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpbmRvd0NsaXBSZWN0KCk7CisgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKS53aW5kb3dDbGlwUmVjdCgp
OwogfQogCiAtIChOU1JlY3QpdmlzaWJsZVJlY3QKQEAgLTg3NCwxMyArODc0LDEzIEBAIC0gKHZv
aWQpaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OihOU1JlY3QpcmVjdAogCiAtIChOU1JlY3Qp
YWN0dWFsVmlzaWJsZVJlY3RJbldpbmRvdwogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBfZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0
OwogCiAgICAgSW50UmVjdCB3aWRnZXRSZWN0ID0gcmVuZGVyZXItPnBpeGVsU25hcHBlZEFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHdpZGdldFJlY3QgPSByZW5kZXJlci0+dmll
dygpLmZyYW1lVmlldygpLmNvbnRlbnRzVG9XaW5kb3cod2lkZ2V0UmVjdCk7Ci0gICAgcmV0dXJu
IGludGVyc2VjdGlvbih0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpbmRvd0NsaXBSZWN0KCks
IHdpZGdldFJlY3QpOworICAgIHJldHVybiBpbnRlcnNlY3Rpb24oZG93bmNhc3Q8UmVuZGVyV2lk
Z2V0PigqcmVuZGVyZXIpLndpbmRvd0NsaXBSZWN0KCksIHdpZGdldFJlY3QpOwogfQogCiAtIChD
QUxheWVyICopcGx1Z2luTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggYzVmOWUzYWQzNWRmODc5
ZTlhZjM0ZTQ4YjYwYjU3YWE0YmVmMjg5My4uMmU0M2VmODU3MjljZmZhMThjY2RhMDU0OGFlYWZm
YWY0NzJlZGZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTE5NjIsOCArMTk2Miw4IEBAIFBhc3NS
ZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IElu
dFNpemUmIHNpemUsIEhUTUxQCiAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKICAgICAgICAgaWYg
KFdLU2hvdWxkQmxvY2tQbHVnaW4oW3BsdWdpblBhY2thZ2UgYnVuZGxlSWRlbnRpZmllcl0sIFtw
bHVnaW5QYWNrYWdlIGJ1bmRsZVZlcnNpb25dKSkgewogICAgICAgICAgICAgZXJyb3JDb2RlID0g
V2ViS2l0RXJyb3JCbG9ja2VkUGx1Z0luVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgdG9SZW5k
ZXJFbWJlZGRlZE9iamVjdChlbGVtZW50LT5yZW5kZXJlcigpKS0+c2V0UGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7
CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCplbGVtZW50LT5yZW5k
ZXJlcigpKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4o
KmVsZW1lbnQtPnJlbmRlcmVyKCkpLnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb24pOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdp
blBhY2thZ2UgY2xhc3NdXSkKICAgICAgICAgICAgICAgICB2aWV3ID0gcGx1Z2luVmlldyhtX3dl
YkZyYW1lLmdldCgpLCAoV2ViUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UsIGF0dHJpYnV0
ZUtleXMsIGtpdChwYXJhbVZhbHVlcyksIGJhc2VVUkwsIGtpdChlbGVtZW50KSwgbG9hZE1hbnVh
bGx5KTsKQEAgLTIwNjcsOCArMjA2Nyw4IEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBzCiAgICAg
aWYgKHBsdWdpblBhY2thZ2UpIHsKICAgICAgICAgaWYgKFdLU2hvdWxkQmxvY2tQbHVnaW4oW3Bs
dWdpblBhY2thZ2UgYnVuZGxlSWRlbnRpZmllcl0sIFtwbHVnaW5QYWNrYWdlIGJ1bmRsZVZlcnNp
b25dKSkgewogICAgICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JCbG9ja2VkUGx1Z0lu
VmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVk
T2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChlbGVtZW50
LT5yZW5kZXJlcigpKS0+c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KCplbGVtZW50LT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQtPnJlbmRlcmVyKCkpLnNl
dFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3Vy
ZVBsdWdpblZlcnNpb24pOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQogICAgICAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6
W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMDIwODA3MTA3ZTRkYjkz
ODEyMjExZTc5ZmQ4M2YzYzhmZDA3NmQ3OC4uZjMzNTliODk5ZTRkNmEwZGQ2NDBiYzQ4ZjA4MTRl
NGUxOTFkYWMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTQ2NiwxNiArMTQ2NiwxMiBAQCB2b2lkIFBsdWdpblZpZXc6OnBs
dWdpblByb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBtX3BsdWdpblByb2Nlc3NIYXNDcmFzaGVkID0g
dHJ1ZTsKIAotICAgIGlmICghbV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNFbWJlZGRl
ZE9iamVjdCgpKQorICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KG1fcGx1Z2luRWxl
bWVudC0+cmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGx1Z2luRWxlbWVu
dC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAKLSAgICBSZW5k
ZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KG1fcGx1
Z2luRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgcmVuZGVyZXItPnNldFBsdWdpblVuYXZhaWxh
YmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVkKTsKKyAgICBk
b3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKm1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIo
KSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBs
dWdpbkNyYXNoZWQpOwogICAgIAogICAgIFdpZGdldDo6aW52YWxpZGF0ZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDk2NTlmMGQ1
NGU5YjM2NzU2NjYyYmE2Zjc0ODM1OGI3ZjU4NDUyNDEuLmVmZjdkMDVhOTYyM2E4ZWM1MTVjNTI3
NWNkNDQ4MWVhZTA2YWU0OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTY1NCwxMSArNjU0LDExIEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBX
ZWJQYWdlOjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCog
cGx1CiAKICAgICBpZiAoaXNCbG9ja2VkUGx1Z2luKSB7CiAgICAgICAgIGJvb2wgcmVwbGFjZW1l
bnRPYnNjdXJlZCA9IGZhbHNlOwotICAgICAgICBpZiAocGx1Z2luRWxlbWVudC0+cmVuZGVyZXIo
KS0+aXNFbWJlZGRlZE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJFbWJlZGRlZE9iamVj
dCogcmVuZGVyT2JqZWN0ID0gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChwbHVnaW5FbGVtZW50LT5y
ZW5kZXJlcigpKTsKLSAgICAgICAgICAgIHJlbmRlck9iamVjdC0+c2V0UGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJl
UGx1Z2luVmVyc2lvbiwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBy
ZXBsYWNlbWVudE9ic2N1cmVkID0gcmVuZGVyT2JqZWN0LT5pc1JlcGxhY2VtZW50T2JzY3VyZWQo
KTsKLSAgICAgICAgICAgIHJlbmRlck9iamVjdC0+c2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0
b3JJc0hpZGRlbihyZXBsYWNlbWVudE9ic2N1cmVkKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckVt
YmVkZGVkT2JqZWN0PigqcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHJlbmRlck9iamVjdCA9IGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcGx1
Z2luRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICByZW5kZXJPYmplY3Quc2V0UGx1
Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb24oUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbiwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICByZXBsYWNlbWVudE9ic2N1cmVkID0gcmVuZGVyT2JqZWN0LmlzUmVwbGFjZW1l
bnRPYnNjdXJlZCgpOworICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnNldFVuYXZhaWxhYmxlUGx1
Z2luSW5kaWNhdG9ySXNIaWRkZW4ocmVwbGFjZW1lbnRPYnNjdXJlZCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEJsb2NrSW5zZWN1cmVQbHVn
aW5WZXJzaW9uKHBhcmFtZXRlcnMubWltZVR5cGUsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBm
cmFtZVVSTFN0cmluZywgcGFnZVVSTFN0cmluZywgcmVwbGFjZW1lbnRPYnNjdXJlZCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240094</attachid>
            <date>2014-10-19 19:54:05 -0700</date>
            <delta_ts>2014-10-19 19:57:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137845-20141019195410.patch</filename>
            <type>text/plain</type>
            <size>158331</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uMDc3ZTdlMjViNjk2YjhhMmZhMzA3MWUxNzRjNDk5
Y2E1YjZmMWUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNC0xMC0xNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5kCisg
ICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjptZXRlckVsZW1lbnQpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZXRGb3JBdHRh
Y2htZW50Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojp2aXNpYmxlUG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zm
c2V0KToKKyAgICAgICAgKiBkb20vV2ViS2l0TmFtZWRGbG93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdE5hbWVkRmxvdzo6b3ZlcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRO
YW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0TmFtZWRGbG93OjpnZXRSZWdpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdpZGdldFJl
bmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlcldpZGdl
dCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6
cmVuZGVyTWV0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQ
bHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpyZW5kZXJQcm9ncmVzcyk6CisgICAgICAg
ICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Eb2N1
bWVudDo6cGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om93bmVyUmVuZGVy
ZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZl
bnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50
VG9TdWJmcmFtZSk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50
VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JFdmVudFRhcmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFRvVXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0
ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0RmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhl
aWdodENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmFkanVzdFN0eWxl
RGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphZGRMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVsZW1lbnQ6Om1vdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omhh
c0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjpyZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lvbnND
b21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRGaWx0ZXJC
YWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zcGFy
ZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZU9mZnNldFRvd2FyZHNB
bmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJz
VW5kZXJSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdldFJl
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWluZXJDb21wb3NpdGluZ0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlk
ZW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5l
QnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Omxhc3RNdWx0aUNv
bHVtblNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OmFkZFJlZ2lvblRvVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDo6Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRSZWxhdGl2ZVdpbGxC
ZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp1cGRhdGVNaW5pbXVtUGFnZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lv
blJhbmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1Jl
Z2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cHJldmlvdXNTaWJs
aW5nTXVsdGlDb2x1bW5TZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
blNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdp
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bmFt
ZWRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6dXBkYXRlV3JpdGluZ01vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6YWRkRnJhZ21lbnRUb0xpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21SZW5k
ZXJCb3hBc1JlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2Jq
ZWN0Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjaGVkdWxlUmVsYXlvdXRGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVt
ZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludFVzaW5n
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9v
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNob3VsZFVzZVRyYW5zZm9ybUZy
b21Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSb290
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUHJvZ3Jlc3MuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpsYXN0UnVieVJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpydWJ5UnVu
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jl
c3NSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclJlZ2lvbkxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJWaWRlby5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmg6CisgICAgICAgIChXZWJD
b3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lw
TGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRv
ck9ic2N1cmVkKToKKwogMjAxNC0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBm
cm9tIFBsYXRmb3JtIHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBlN2ZhMTE2NWM4MGNm
OWE4OTMwYjJkNDliZmE1NjRlMTkwZDk0ZjI0Li41YWI4YzQ2MjVlNzEzYWFkNDVkMzU5MDJhODVj
Y2QyM2UyYTk0YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMTAt
MTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGZvciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4NDUK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGZvciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2Vz
IGFuZCAKKyAgICAgICAgY2xlYW4gdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAg
ICgtW1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyBwbHVnaW5Ib3N0RGllZF0pOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBfd2luZG93Q2xpcFJlY3RdKToKKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93XSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKwogMjAxNC0xMC0xNyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggZm9y
IDMyLWJpdCBZb3NlbWl0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNmYTA5ZWY3MTFkYjc1NjU4YWRiZTYzNWVj
N2E3MjhhOThkOGZkYzIuLmY5YTkwYTQyYWJhMTViYjQzN2VhOTA5NTI3NTFkNTVkMjRmNGM3NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMC0xNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9y
IGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9y
IGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5kIAorICAgICAgICBjbGVh
biB1cCB0aGUgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luUHJv
Y2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKwogMjAxNC0xMC0xOSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBmcm9tIFBsYXRmb3JtIHRvIFdlYktpdDIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcAppbmRleCBiNTJiZjc4NTkyYmU0NmQ0M2I1YmI4NTVj
ZmI4Nzk5NmI0ODEzODFhLi5hYWZhN2YzOTUwMTJmYTgwYjBiNGQ1NjE2NjZiYTFlMmI5ZGFlNDJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCkBAIC0xMjIsMTkgKzEyMiwxOSBAQCBm
bG9hdCBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6Om1pblZhbHVlRm9yUmFuZ2UoKSBj
b25zdAogCiBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0
b3I6OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyLT5pc1By
b2dyZXNzKCkpCisgICAgaWYgKCFpczxSZW5kZXJQcm9ncmVzcz4oKm1fcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9SZW5kZXJQcm9ncmVzcyht
X3JlbmRlcmVyKS0+cHJvZ3Jlc3NFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clByb2dyZXNzPigqbV9yZW5kZXJlcikucHJvZ3Jlc3NFbGVtZW50KCk7CiB9CiAKICNpZiBFTkFC
TEUoTUVURVJfRUxFTUVOVCkKIEhUTUxNZXRlckVsZW1lbnQqIEFjY2Vzc2liaWxpdHlQcm9ncmVz
c0luZGljYXRvcjo6bWV0ZXJFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXIt
PmlzTWV0ZXIoKSkKKyAgICBpZiAoIWlzPFJlbmRlck1ldGVyPigqbV9yZW5kZXJlcikpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvUmVuZGVyTWV0ZXIobV9yZW5kZXJl
ciktPm1ldGVyRWxlbWVudCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNZXRlcj4oKm1f
cmVuZGVyZXIpLm1ldGVyRWxlbWVudCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDc2OWE1NjJkMmIwMTBkNmFkYTRhNzJiNjk3YTZiMDY5NGY0MDk1ZmMuLmNhMjJlY2M2
MjQwY2I0MzNjYjFhODU3MjUxOWQ5ZWY0MjIwYzgxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtMTM4Nyw5ICsxMzg3LDkgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVz
dGltYXRlZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAgICAgCiBpbnQgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6bGF5b3V0Q291bnQoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlci0+
aXNSZW5kZXJWaWV3KCkpCisgICAgaWYgKCFpczxSZW5kZXJWaWV3PigqbV9yZW5kZXJlcikpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclZpZXcoKm1fcmVuZGVyZXIpLmZy
YW1lVmlldygpLmxheW91dENvdW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+
KCptX3JlbmRlcmVyKS5mcmFtZVZpZXcoKS5sYXlvdXRDb3VudCgpOwogfQogCiBTdHJpbmcgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCgpIGNvbnN0CkBAIC0xNzYzLDcgKzE3NjMsNyBA
QCBXaWRnZXQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OndpZGdldEZvckF0dGFjaG1lbnRW
aWV3KCkgY29uc3QKIHsKICAgICBpZiAoIWlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobV9yZW5kZXJlciktPndpZGdldCgp
OworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCptX3JlbmRlcmVyKS53aWRnZXQo
KTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGEgY3Jvc3MtcGxhdGZvcm0gdmVyc2lv
biBvZiAtIChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuZ2UuIEl0IHJldHVy
bnMKQEAgLTE5OTYsMTEgKzE5OTYsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW4KICAgICAg
ICAgcG9pbnRSZXN1bHQgPSByZXN1bHQubG9jYWxQb2ludCgpOwogCiAgICAgICAgIC8vIGRvbmUg
aWYgaGl0IHNvbWV0aGluZyBvdGhlciB0aGFuIGEgd2lkZ2V0Ci0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzV2lkZ2V0KCkpCisgICAgICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIp
KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gZGVzY2VuZCBpbnRvIHdpZGdldCAo
RlJBTUUsIElGUkFNRSwgT0JKRUNULi4uKQotICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVu
ZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0g
ZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgICAgICBpZiAo
IWlzPEZyYW1lVmlldz4od2lkZ2V0KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBGcmFt
ZSYgZnJhbWUgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCp3aWRnZXQpLmZyYW1lKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCA4ZjY3NmYwNjFlNTA3N2FhMDdiYzA4ZDA2ZmQ1OTljNDZjZGZh
NmQyLi4wYWU0ODc2OTgxYjJiMmQ0MmQ0ZDE0YmIyY2FiZDc3MDU2YmRkZmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTMyNywxMCArMzI3LDEwIEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdl
dEZvckVsZW1lbnQoRWxlbWVudCogZm9jdXNlZEVsZW1lbnQpCiB7CiAgICAgaWYgKCFmb2N1c2Vk
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZW5kZXJlciA9IGZv
Y3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVy
LT5pc1dpZGdldCgpKQorICAgIGF1dG8qIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1lbnQtPnJlbmRl
cmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0
KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKS53aWRnZXQo
KTsKIH0KIAogc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggODA1NjEyZTJkMTdmMzU4N2VjODMxODFlMzIzZmE0NGMz
YmM5NGQwMi4uOWNjOTU3NmJkNmFkYWQwMTZjMTc5OGI0YTYxODEyNzZjN2ZkNWY5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xMTU2LDcgKzExNTYsNyBAQCB2b2lkIFBvc2l0aW9uOjpn
ZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHBy
aW1hcnlEaQogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5y
ZW5kZXJlcigpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgIGlubGluZUJv
eCA9ICFjYXJldE9mZnNldCA/IHRvUmVuZGVyTGluZUJyZWFrKHJlbmRlcmVyKS0+aW5saW5lQm94
V3JhcHBlcigpIDogbnVsbHB0cjsKKyAgICAgICAgaW5saW5lQm94ID0gIWNhcmV0T2Zmc2V0ID8g
ZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpLmlubGluZUJveFdyYXBwZXIoKSA6
IG51bGxwdHI7CiAgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewogICAg
ICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIp
OwogICAgICAgICB0ZXh0UmVuZGVyZXIuZW5zdXJlTGluZUJveGVzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXROYW1lZEZsb3cuY3BwCmluZGV4IDM5NWM4ODk0NzVkYTY1NWY3YWQyOWYwYTY0Mzk1
ZjI4ZDQzOTlmZTkuLjUxZGZjMGI5Yzg4MWU3MmYxMWM4ZDgxZWMxMTUzMDlmZWRjYmM1NWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCkBAIC03Miw4ICs3Miw4IEBAIGJv
b2wgV2ViS2l0TmFtZWRGbG93OjpvdmVyc2V0KCkgY29uc3QKICAgICBpZiAoIW1fcGFyZW50Rmxv
d1RocmVhZCB8fCAhbV9wYXJlbnRGbG93VGhyZWFkLT5oYXNSZWdpb25zKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChtX3BhcmVudEZsb3dUaHJlYWQt
Pmxhc3RSZWdpb24oKSk7Ci0gICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50LT5yZWdpb25PdmVy
c2V0U3RhdGUoKSA9PSBSZWdpb25PdmVyc2V0OworICAgIGNvbnN0IGF1dG8mIG5hbWVkRmxvd0Zy
YWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCptX3BhcmVudEZsb3dU
aHJlYWQtPmxhc3RSZWdpb24oKSk7CisgICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50LnJlZ2lv
bk92ZXJzZXRTdGF0ZSgpID09IFJlZ2lvbk92ZXJzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpbkZsb3dUaHJlYWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKiBmbG93VGhyZWFkKQpAQCAtMTA0LDE0ICsxMDQsMTQgQEAgaW50IFdlYktpdE5hbWVkRmxv
dzo6Zmlyc3RFbXB0eVJlZ2lvbkluZGV4KCkgY29uc3QKIAogICAgIGludCBjb3VudE5vblBzZXVk
b1JlZ2lvbnMgPSAtMTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlbmRlclJlZ2lvbiA6IHJlZ2lv
bkxpc3QpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pOworICAg
ICAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKICAgICAgICAgLy8gRklYTUU6IFBzZXVkby1l
bGVtZW50cyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0LgogICAgICAgICAvLyBUaGV5IHdp
bGwgYmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxsIHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBp
bnRlcmZhY2UKICAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMv
I3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC0+aXNQ
c2V1ZG9FbGVtZW50UmVnaW9uKCkpCisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1Bz
ZXVkb0VsZW1lbnRSZWdpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb3Vu
dE5vblBzZXVkb1JlZ2lvbnMrKzsKLSAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5yZWdp
b25PdmVyc2V0U3RhdGUoKSA9PSBSZWdpb25FbXB0eSkKKyAgICAgICAgKytjb3VudE5vblBzZXVk
b1JlZ2lvbnM7CisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5yZWdpb25PdmVyc2V0U3Rh
dGUoKSA9PSBSZWdpb25FbXB0eSkKICAgICAgICAgICAgIHJldHVybiBjb3VudE5vblBzZXVkb1Jl
Z2lvbnM7CiAgICAgfQogICAgIHJldHVybiAtMTsKQEAgLTEzNSwxNSArMTM1LDE1IEBAIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IFdlYktpdE5hbWVkRmxvdzo6Z2V0UmVnaW9uc0J5Q29udGVudChOb2Rl
KiBjb250ZW50Tm9kZSkKICAgICBpZiAoaW5GbG93VGhyZWFkKGNvbnRlbnROb2RlLT5yZW5kZXJl
cigpLCBtX3BhcmVudEZsb3dUaHJlYWQpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxp
c3QmIHJlZ2lvbkxpc3QgPSBtX3BhcmVudEZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsK
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZW5kZXJSZWdpb24gOiByZWdpb25MaXN0KSB7Ci0g
ICAgICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21l
bnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7CisgICAgICAgICAg
ICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBQc2V1ZG8t
ZWxlbWVudHMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KICAgICAgICAgICAgIC8vIFRo
ZXkgd2lsbCBiZSBpbmNsdWRlZCB3aGVuIHdlIHdpbGwgcHJvcGVybHkgc3VwcG9ydCB0aGUgUmVn
aW9uIGludGVyZmFjZQogICAgICAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nz
LXJlZ2lvbnMvI3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAgICAgICBpZiAobmFtZWRGbG93
RnJhZ21lbnQtPmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQorICAgICAgICAgICAgaWYgKG5hbWVk
Rmxvd0ZyYWdtZW50LmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fcGFyZW50Rmxvd1RocmVhZC0+b2JqZWN0SW5GbG93
UmVnaW9uKGNvbnRlbnROb2RlLT5yZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRpbmdFbGVtZW50
KCkpOwotICAgICAgICAgICAgICAgIHJlZ2lvbkVsZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJh
Z21lbnQtPmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKG1fcGFyZW50Rmxv
d1RocmVhZC0+b2JqZWN0SW5GbG93UmVnaW9uKGNvbnRlbnROb2RlLT5yZW5kZXJlcigpLCAmbmFt
ZWRGbG93RnJhZ21lbnQpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdt
ZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHJlZ2lvbkVsZW1lbnRz
LmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBXZWJLaXROYW1lZEZsb3c6OmdldFJlZ2lvbnMoKQogCiAgICAgY29uc3QgUmVu
ZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9IG1fcGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVn
aW9uTGlzdCgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmVuZGVyUmVnaW9uIDogcmVnaW9uTGlz
dCkgewotICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7CisgICAgICAg
IGNvbnN0IGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOwogICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1l
bnRzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCiAgICAgICAgIC8vIFRoZXkgd2lsbCBi
ZSBpbmNsdWRlZCB3aGVuIHdlIHdpbGwgcHJvcGVybHkgc3VwcG9ydCB0aGUgUmVnaW9uIGludGVy
ZmFjZQogICAgICAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtcmVnaW9ucy8jdGhl
LXJlZ2lvbi1pbnRlcmZhY2UKLSAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1BzZXVk
b0VsZW1lbnRSZWdpb24oKSkKKyAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LmlzUHNldWRv
RWxlbWVudFJlZ2lvbigpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VSVChu
YW1lZEZsb3dGcmFnbWVudC0+Z2VuZXJhdGluZ0VsZW1lbnQoKSk7Ci0gICAgICAgIHJlZ2lvbkVs
ZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRpbmdFbGVtZW50KCkpOwor
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGluZ0VsZW1lbnQoKSk7Cisg
ICAgICAgIHJlZ2lvbkVsZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGlu
Z0VsZW1lbnQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFN0YXRpY0VsZW1lbnRMaXN0OjphZG9w
dChyZWdpb25FbGVtZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCmluZGV4IDlmOTNhODQ2YzI0OWRmYTIzMWMxNTA5NGFiZTMzMWIwZmM5NDU3ODcuLjgwYTA2
ZjkwM2ZlMzMzMWVmMzM4MGJiMDkyZjU5ZmRhZTUzYTMxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xOTEyLDkgKzE5MTIsOSBAQCBzdGF0aWMgYm9v
bCBpc0ZyYW1lRWxlbWVudChjb25zdCBOb2RlKiBuKQogICAgIGlmICghbikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigpOwot
ICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgIGlmICghaXM8
UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRn
ZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgV2lk
Z2V0KiB3aWRnZXQgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7
CiAgICAgcmV0dXJuIHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDM0NTQyYWRiNDBiODA5N2Zm
NGFiM2E4ZTdmNmU5YzY5M2I5NDBlMTAuLjQ5NzhhMGNhNDg4YzQ1ZTdkMGYwZjk2ZjA3NWMzY2Zl
MDNhMWQ4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAt
NTUsMTcgKzU1LDE4IEBAIFBhc3NSZWZQdHI8SFRNTEVtYmVkRWxlbWVudD4gSFRNTEVtYmVkRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MRW1iZWRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJz
ZXIpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZpbmRXaWRnZXRSZW5kZXJl
cihjb25zdCBOb2RlKiBuKSAKK3N0YXRpYyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0
UmVuZGVyZXIoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCisg
ICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGRvCi0gICAgICAgICAgICBuID0g
bi0+cGFyZW50Tm9kZSgpOwotICAgICAgICB3aGlsZSAobiAmJiAhbi0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAg
IHdoaWxlIChub2RlICYmICFpczxIVE1MT2JqZWN0RWxlbWVudD4oKm5vZGUpKTsKKyAgICB9CiAK
LSAgICBpZiAobiAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkp
Ci0gICAgICAgIHJldHVybiB0b1JlbmRlcldpZGdldChuLT5yZW5kZXJlcigpKTsKKyAgICBpZiAo
bm9kZSAmJiBpczxSZW5kZXJXaWRnZXQ+KG5vZGUtPnJlbmRlcmVyKCkpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pihub2RlLT5yZW5kZXJlcigpKTsKIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBSZW5kZXJXaWRnZXQqIEhUTUxFbWJlZEVs
ZW1lbnQ6OnJlbmRlcldpZGdldExvYWRpbmdQbHVnaW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCmluZGV4IDUyMDQ3MjY0OTQzNWE4ZjVi
YTczZTZjNmEzZWEwNjE2ZGVhYmE2MDIuLmE4NWU3OWRkMGQ2MjA3YTE4Zjk2OWI1NjYwOTk1ZTRj
M2NmNjJiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVu
dC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBIVE1MRnJhbWVP
d25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkKLSAgICAsIG1fY29udGVudEZyYW1lKDApCisgICAgLCBtX2NvbnRlbnRGcmFtZShu
dWxscHRyKQogICAgICwgbV9zYW5kYm94RmxhZ3MoU2FuZGJveE5vbmUpCiB7CiB9CkBAIC00Myw5
ICs0Myw5IEBAIFJlbmRlcldpZGdldCogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpyZW5kZXJXaWRn
ZXQoKSBjb25zdAogewogICAgIC8vIEhUTUxPYmplY3RFbGVtZW50IGFuZCBIVE1MRW1iZWRFbGVt
ZW50IG1heSByZXR1cm4gYXJiaXRyYXJ5IHJlbmRlcmVycwogICAgIC8vIHdoZW4gdXNpbmcgZmFs
bGJhY2sgY29udGVudC4KLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzV2lk
Z2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlcldpZGdldChyZW5k
ZXJlcigpKTsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIoKSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRl
cmVyKCkpOwogfQogCiB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2V0Q29udGVudEZyYW1l
KEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmlu
ZGV4IDFmYTkwZWIzMjk5OGFkMmRjZmJhMDY3ZDk5M2RlYmEyNmUyNjFhNzIuLjFkYWFiMThiOTNj
OGQ1MTk4NDc5M2IyNjllYWE5NTY4ODA1YjcwYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcApAQCAtNDI0NSw4ICs0MjQ1LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllclNpemVDaGFuZ2VkKE1lZGlhUGxheWVyKikKIAogYm9vbCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQoTWVkaWFQbGF5
ZXIqKQogewotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVmlkZW8oKSkKLSAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnZpZXcoKS5jb21wb3NpdG9yKCkuY2FuQWNjZWxlcmF0
ZVZpZGVvUmVuZGVyaW5nKHRvUmVuZGVyVmlkZW8oKnJlbmRlcmVyKCkpKTsKKyAgICBpZiAoaXM8
UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dmll
dygpLmNvbXBvc2l0b3IoKS5jYW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcoZG93bmNhc3Q8UmVu
ZGVyVmlkZW8+KCpyZW5kZXJlcigpKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAppbmRleCBmMmFhYzFjNDZjNDQ1ZDRjNmVm
OTEwNDc5ZDEwZDk2ZTM1ZTkyMWY1Li45NDUyMTBlZTRmOGU1NDM5MmFjMGFmZDkxNWY1NDQ1ODZi
YzlkYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKQEAgLTIy
MCw5ICsyMjAsOSBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5n
ZSgpCiAKIFJlbmRlck1ldGVyKiBIVE1MTWV0ZXJFbGVtZW50OjpyZW5kZXJNZXRlcigpIGNvbnN0
CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNNZXRlcigpKQotICAgICAg
ICByZXR1cm4gdG9SZW5kZXJNZXRlcihyZW5kZXJlcigpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJN
ZXRlcihkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PigqdXNlckFnZW50U2hhZG93Um9vdCgpKS5m
aXJzdCgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaXM8UmVuZGVyTWV0ZXI+KHJlbmRlcmVyKCkp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KHJlbmRlcmVyKCkpOworICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJNZXRlcj4oZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4o
KnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkuZmlyc3QoKS0+cmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQg
SFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiBy
b290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRleCAzYTgx
OWRiMjExMGNiYTQ2MTRlYjA2MzMyNGNlNGU0NDYxYjQ3NzVhLi4yZDE3ZTdiOTgyMjg0OTRiZDlj
Yjk5NTNmMGRjYmVkYmI5ZWE1MzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmNwcApAQCAtMjc1LDkgKzI3NSw5IEBAIGJvb2wgSFRNTFBsdWdJbkVsZW1lbnQ6OnN1
cHBvcnRzRm9jdXMoKSBjb25zdAogICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodXNlRmFsbGJhY2tD
b250ZW50KCkgfHwgIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3Qo
KSkKKyAgICBpZiAodXNlRmFsbGJhY2tDb250ZW50KCkgfHwgIWlzPFJlbmRlckVtYmVkZGVkT2Jq
ZWN0PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhdG9S
ZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlcigpKS0+aXNQbHVnaW5VbmF2YWlsYWJsZSgpOwor
ICAgIHJldHVybiAhZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcigpKS5p
c1BsdWdpblVuYXZhaWxhYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCmlu
ZGV4IGMxZWMyNTcxNzE4YjhmY2ZhODZmYzI5OTA3OGRjNTg1MjE5ZDlmNmQuLmI2MDA4NWRmOWU1
MjJkZWYyMzFlOWNjY2IwOTU2ZWFlNmE0NzI3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtMTQ1LDkgKzE0NSw3IEBAIFJlbmRlckVt
YmVkZGVkT2JqZWN0KiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVj
dCgpIGNvbnN0CiB7CiAgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhUTUxFbWJlZEVsZW1l
bnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzCiAgICAgLy8gd2hlbiB1c2luZyBmYWxs
YmFjayBjb250ZW50LgotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNFbWJl
ZGRlZE9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5kZXJFbWJl
ZGRlZE9iamVjdChyZW5kZXJlcigpKTsKKyAgICByZXR1cm4gaXM8UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVy
KCkpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojppc0ltYWdl
VHlwZSgpCkBAIC02OTMsNyArNjkxLDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpz
dWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgYXV0byYgcmVuZGVyZXIgPSB0b1JlbmRlckVtYmVkZGVk
T2JqZWN0KCp0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0
PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqdGhpcy0+cmVuZGVyZXIoKSk7CiAgICAgTGF5b3V0UmVj
dCBjb250ZW50UmVjdCA9IHJlbmRlcmVyLmNvbnRlbnRCb3hSZWN0KCk7CiAgICAgaW50IGNvbnRl
bnRXaWR0aCA9IGNvbnRlbnRSZWN0LndpZHRoKCk7CiAgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBj
b250ZW50UmVjdC5oZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0Vs
ZW1lbnQuY3BwCmluZGV4IDk4MzcxMjQ2OWUyZmUzMDk3MWNkOGUyYmViZWViZDAyNzU2NDQ4NWUu
LmY1MGZmYzBjZDI4YTllZGRkMWMzNTMwZTEwNzM0MjNmNjBmMWI1ZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcApAQCAtNzIsOSArNzIsOSBAQCBib29s
IEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9k
ZSYgY2hpbGQpIGNvbnN0CiAKIFJlbmRlclByb2dyZXNzKiBIVE1MUHJvZ3Jlc3NFbGVtZW50Ojpy
ZW5kZXJQcm9ncmVzcygpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJl
cigpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJQcm9ncmVzcyhkZXNjZW5kYW50c09mVHlwZTxFbGVt
ZW50PigqdXNlckFnZW50U2hhZG93Um9vdCgpKS5maXJzdCgpLT5yZW5kZXJlcigpKTsKKyAgICBp
ZiAoaXM8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJQcm9ncmVzcz4oZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oKnVzZXJBZ2VudFNoYWRvd1Jv
b3QoKSkuZmlyc3QoKS0+cmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKaW5kZXgg
YjIyMDg3YjRjMDgwOTMxN2ZjMGFmZTQ5YTQ3OWQ2Nzc5OTE1MmUyMi4uZWQwZjYyMjJiNDliMjUz
MDFlNmFkNGZhZjM2MzkwZmI0NGU3N2VhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1
bWVudC5jcHAKQEAgLTE1NSwxMSArMTU1LDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVudFBhcnNlcj4g
UGx1Z2luRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiAKIFdpZGdldCogUGx1Z2luRG9jdW1lbnQ6
OnBsdWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKG1fcGx1Z2luRWxlbWVudCAmJiBtX3BsdWdpbkVs
ZW1lbnQtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luRWxlbWVudC0+cmVu
ZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyRW1i
ZWRkZWRPYmplY3QobV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKS0+d2lkZ2V0KCk7Ci0gICAg
fQotICAgIHJldHVybiAwOworICAgIGlmIChtX3BsdWdpbkVsZW1lbnQgJiYgbV9wbHVnaW5FbGVt
ZW50LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KCptX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpLndpZGdldCgpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiB2b2lkIFBsdWdpbkRvY3VtZW50OjpzZXRQbHVnaW5FbGVtZW50KFBh
c3NSZWZQdHI8SFRNTFBsdWdJbkVsZW1lbnQ+IGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMjcxZjA2YTM0
NTlkZTIzMDU4MzFkMThlNDA4ZDk5NzNkYTM3ZGMyMy4uNGM3YmQ3NWEzM2RmN2Y5NWZiYzk3MThi
ZGU1NjcyNDg4ZTAwZDM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtODcyLDggKzg3Miw4IEBAIHZvaWQgTWVkaWFD
b250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuaW5wdXRFdmVudCAmJiB0aW1l
ICE9IG1lZGlhQ29udHJvbGxlcigpLT5jdXJyZW50VGltZSgpKQogICAgICAgICBtZWRpYUNvbnRy
b2xsZXIoKS0+c2V0Q3VycmVudFRpbWUodGltZSk7CiAKLSAgICBSZW5kZXJTbGlkZXIqIHNsaWRl
ciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRlcmVyKCkpOwotICAgIGlmIChzbGlkZXIgJiYgc2xpZGVy
LT5pbkRyYWdNb2RlKCkpCisgICAgUmVuZGVyU2xpZGVyJiBzbGlkZXIgPSBkb3duY2FzdDxSZW5k
ZXJTbGlkZXI+KCpyZW5kZXJlcigpKTsKKyAgICBpZiAoc2xpZGVyLmluRHJhZ01vZGUoKSkKICAg
ICAgICAgbV9jb250cm9scy0+dXBkYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7CiB9CiAKQEAgLTEz
MzcsOSArMTMzNyw5IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6dXBkYXRlU2l6ZXMoYm9vbCBmb3JjZVVwZGF0ZSkKICAgICBpZiAobV90ZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbikKICAgICAgICAgdmlkZW9Cb3ggPSBtX3RleHRUcmFja1JlcHJlc2VudGF0aW9u
LT5ib3VuZHMoKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCkgfHwgIW1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNWaWRlbygpKQorICAgICAgICBp
ZiAoIWlzPFJlbmRlclZpZGVvPihtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2aWRlb0JveCA9IHRvUmVuZGVyVmlkZW8oKm1lZGlhRWxlbWVu
dC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKKyAgICAgICAgdmlkZW9Cb3ggPSBkb3duY2FzdDxS
ZW5kZXJWaWRlbz4oKm1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkudmlkZW9Cb3goKTsKICAgICB9
CiAKICAgICBpZiAoIWZvcmNlVXBkYXRlICYmIG1fdmlkZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0Jv
eCkKQEAgLTEzNjMsMTQgKzEzNjMsMTQgQEAgUGFzc1JlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW4KIAogICAg
IGRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBhdXRvIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIXJlbmRl
cmVyLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChyZW5kZXJlciktPmxheWVyKCk7
CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dD4oKnJlbmRlcmVyKS5sYXllcigpOwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAx
OwogICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCBl
OTgzZjA3ZTFlZGIwMjY5ZTZiYjY3NzliYTJlMzYwMDUzMjA3OTI3Li5mMGNlZjQwZGI1ZTBlZjVl
NjczYjdmOGY0YmYyNzY0YTE0MTBlOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCiB7
CiAgICAgaWYgKHJlbmRlcmVyLT5oYXNMYXllcigpKSB7Ci0gICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHRvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdChyZW5kZXJlciktPmxheWVyKCksIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckxheWVy
TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKSwgbGF5ZXJzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IDg0ZDQ5MjIxMDUzMjdiOTZkYTk0NGQ4ZGIwZDMzOTFmMjE1NzJjOTIuLmUxNGQx
ZmE3MDFmYTExYjUxMGM0NGNlZGUyYTA0ZDUwYWVkZjUyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8o
Tm9kZSogbm9kZSkKICAgICB9CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBjb250YWluaW5nRmxv
d1RocmVhZCA9IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYg
KGNvbnRhaW5pbmdGbG93VGhyZWFkICYmIGNvbnRhaW5pbmdGbG93VGhyZWFkLT5pc1JlbmRlck5h
bWVkRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oY29u
dGFpbmluZ0Zsb3dUaHJlYWQpKSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNv
bnRlbnRGbG93SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGNvbnRl
bnRGbG93SW5mby0+c2V0U3RyaW5nKCJuYW1lIiwgdG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQoY29u
dGFpbmluZ0Zsb3dUaHJlYWQpLT5mbG93VGhyZWFkTmFtZSgpKTsKKyAgICAgICAgY29udGVudEZs
b3dJbmZvLT5zZXRTdHJpbmcoIm5hbWUiLCBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+
KCpjb250YWluaW5nRmxvd1RocmVhZCkuZmxvd1RocmVhZE5hbWUoKSk7CiAgICAgICAgIGVsZW1l
bnRJbmZvLT5zZXRPYmplY3QoImNvbnRlbnRGbG93SW5mbyIsIGNvbnRlbnRGbG93SW5mby5yZWxl
YXNlKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAK
aW5kZXggOGExNjE0MmE0NDA4NWZiYjM0MzYyMjc3NzdjYWE2M2QyOGJkYzk0Yi4uNWMzNzc4OTFi
NjQyNmQ1YmI1ZTdlOTQzZjQ2MTg4OGY2YjlhMTEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
U3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0zMjgsMTAgKzMyOCwxMCBAQCBGcmFtZSogU3ViZnJhbWVM
b2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQmIG93bmVyRWxlbWVudCwg
Y29uc3QgVQogICAgIC8vIEZJWE1FOiBDYW4gd2UgcmVtb3ZlIHRoaXMgZW50aXJlbHk/IG1faXND
b21wbGV0ZSBub3JtYWxseSBnZXRzIHNldCB0byBmYWxzZSB3aGVuIGEgbG9hZCBpcyBjb21taXR0
ZWQuCiAgICAgZnJhbWUtPmxvYWRlcigpLnN0YXJ0ZWQoKTsKICAgIAotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJl
ciA9IG93bmVyRWxlbWVudC5yZW5kZXJlcigpOwogICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1l
LT52aWV3KCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1dpZGdldCgpICYmIHZp
ZXcpCi0gICAgICAgIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+c2V0V2lkZ2V0KHZpZXcpOwor
ICAgIGlmIChpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSAmJiB2aWV3KQorICAgICAgICBkb3du
Y2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikuc2V0V2lkZ2V0KHZpZXcpOwogICAgIAogICAg
IG1fZnJhbWUubG9hZGVyKCkuY2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAppbmRleCA4YjhmNjNjYmY1NzM3Njk5NWFkMWY1M2Y0N2I0YTFlOTE4NGVjMjNj
Li41ZGRjYTQyMmJhNGQ2NTkxMTc1ZTMxZjUxNzg1ZGQyMzNkOGMzYmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcApAQCAtNzM1LDE3ICs3MzUsMTcgQEAgUmVuZGVyV2lkZ2V0KiBGcmFtZTo6b3duZXJS
ZW5kZXJlcigpIGNvbnN0CiB7CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQgPSBtX293bmVyRWxlbWVudDsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgYXV0byBvYmplY3QgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8qIG9iamVjdCA9IG93bmVyRWxlbWVudC0+cmVu
ZGVyZXIoKTsKICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBJZiA8b2JqZWN0PiBpcyBldmVyIGZpeGVkIHRv
IGRpc2Fzc29jaWF0ZSBpdHNlbGYgZnJvbSBmcmFtZXMKICAgICAvLyB0aGF0IGl0IGhhcyBzdGFy
dGVkIGJ1dCBjYW5jZWxlZCwgdGhlbiB0aGlzIGNhbiB0dXJuIGludG8gYW4gQVNTRVJUCiAgICAg
Ly8gc2luY2UgbV9vd25lckVsZW1lbnQgd291bGQgYmUgMCB3aGVuIHRoZSBsb2FkIGlzIGNhbmNl
bGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU4
NQotICAgIGlmICghb2JqZWN0LT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gdG9SZW5kZXJXaWRnZXQob2JqZWN0KTsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4o
Km9iamVjdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KG9iamVjdCk7CiB9CiAKIEZyYW1lKiBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQo
Y29uc3QgV2lkZ2V0KiB3aWRnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZjc4
OTBkNDVjMjk4YzhmM2FkNDY0YzZkZmYzZjk0ODhiZDNmZWZjZS4uMzMwMjVhMDU2YzM0YmU1NmM5
NmFhNjBmNDM1MDllOTBkZGY1ZjRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAt
MTIzNyw3ICsxMjM3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJl
ZSkKIAogICAgICAgICBhdXRvU2l6ZUlmRW5hYmxlZCgpOwogCi0gICAgICAgIG1fbmVlZHNGdWxs
UmVwYWludCA9ICFzdWJ0cmVlICYmIChtX2ZpcnN0TGF5b3V0IHx8IHRvUmVuZGVyVmlldygqcm9v
dCkucHJpbnRpbmcoKSk7CisgICAgICAgIG1fbmVlZHNGdWxsUmVwYWludCA9ICFzdWJ0cmVlICYm
IChtX2ZpcnN0TGF5b3V0IHx8IGRvd25jYXN0PFJlbmRlclZpZXc+KCpyb290KS5wcmludGluZygp
KTsKIAogICAgICAgICBpZiAoIXN1YnRyZWUpIHsKICAgICAgICAgICAgIFNjcm9sbGJhck1vZGUg
aE1vZGU7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wg
YWxsb3dTdWJ0cmVlKQogICAgICAgICBpZiAoc3VidHJlZSkKICAgICAgICAgICAgIHJvb3QtPnZp
ZXcoKS5wb3BMYXlvdXRTdGF0ZSgqcm9vdCk7CiAKLSAgICAgICAgbV9sYXlvdXRSb290ID0gMDsK
KyAgICAgICAgbV9sYXlvdXRSb290ID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBDbG9zZSBibG9j
ayBoZXJlIHRvIGVuZCB0aGUgc2NvcGUgb2YgY2hhbmdlU2NoZWR1bGluZ0VuYWJsZWQgYW5kIGxh
eW91dFN0YXRlRGlzYWJsZXIuCiAgICAgfQpAQCAtMTMzNCw3ICsxMzM0LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZSkKIAogICAgIGJvb2wgbmVlZGVkRnVsbFJl
cGFpbnQgPSBtX25lZWRzRnVsbFJlcGFpbnQ7CiAKLSAgICBpZiAoIXN1YnRyZWUgJiYgIXRvUmVu
ZGVyVmlldygqcm9vdCkucHJpbnRpbmcoKSkKKyAgICBpZiAoIXN1YnRyZWUgJiYgIWRvd25jYXN0
PFJlbmRlclZpZXc+KCpyb290KS5wcmludGluZygpKQogICAgICAgICBhZGp1c3RWaWV3U2l6ZSgp
OwogCiAgICAgbV9sYXlvdXRQaGFzZSA9IEluUG9zdExheW91dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCmluZGV4IDk0ODNmOTNiMzdlYjlkMDA1YzNhOGM5
YmNhZTZjZGNkMThkZWVjMTcuLjc1MGI4OGExNTU0MmQ3Zjc3YTVmZmM0YTkxNTJjNGRjZGFmNmFh
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcApAQCAt
NjEsMTAgKzYxLDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCiBi
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91
dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgotICAgIFJlbmRlck9iamVjdCogdGFy
Z2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigp
IDogMDsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAgIFJlbmRl
ck9iamVjdCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgp
LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRU
b1dpZGdldCh0b1JlbmRlcldpZGdldCh0YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCku
d2lkZ2V0KCkpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2
ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0KaW5kZXggODM3YTdhOTI0OGM3MDI4MWUxOWU4NDM2
NWE4MDllOGZlODBmNDAxYi4uMDJmMDk1YjQxMGJmMmUwOGNhZDVkOWQ2ZDIzNjUyZDFlYWRhMjkz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQpAQCAtMTY5
LDE1ICsxNjksMTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAvLyBGaWd1cmUgb3V0
IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgYXV0byB0YXJnZXQgPSBldmVu
dC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiBudWxscHRy
OwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgYXV0byogdGFy
Z2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigp
IDogbnVsbHB0cjsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRG91YmxlLWNsaWNrIGV2ZW50cyBkb24ndCBleGlzdCBp
biBDb2NvYS4gU2luY2UgcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoKSB3aWxsCiAg
ICAgLy8ganVzdCBwYXNzIGN1cnJlbnRFdmVudCBkb3duIHRvIHRoZSB3aWRnZXQsIHdlIGRvbid0
IHdhbnQgdG8gY2FsbCBpdCBmb3IgZXZlbnRzIHRoYXQKICAgICAvLyBkb24ndCBjb3JyZXNwb25k
IHRvIENvY29hIGV2ZW50cy4gVGhlIG1vdXNlZG93bi91cHMgd2lsbCBoYXZlIGFscmVhZHkgYmVl
biBwYXNzZWQgb24gYXMKICAgICAvLyBwYXJ0IG9mIHRoZSBwcmVzc2VkL3JlbGVhc2VkIGhhbmRs
aW5nLgotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdl
dCh0YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkud2lkZ2V0KCkpOwogfQogCiBib29s
IEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lk
Z2V0KiByZW5kZXJXaWRnZXQpCkBAIC0zNjMsMTMgKzM2MywxMyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmIGV2ZQogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAg
ICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICAgICAgYXV0byog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJX
aWRnZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7
CisgICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJl
bmRlcmVyKS53aWRnZXQoKTsKICAgICAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlz
RnJhbWVWaWV3KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldChyZW5k
ZXJlcikpKQorICAgICAgICAgICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dChkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgbV9tb3VzZURvd25XYXNJblN1YmZyYW1lID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCmluZGV4IDQyYWJjMzg4NWEzMGVmNWI5NDA4MzE3Y2I3ZjcwNGUxMjE5Nzg4
YWYuLjhiZTlmMjJhYzk5MWFhZDk3MzY2ODVjNjU2MWRiMDBiZmU0ZWY2ZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTE0MywxNSArMTQzLDE1IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCiBib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRv
IHNlbmQgdGhlIGV2ZW50IHRvLgotICAgIGF1dG8gdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgp
ID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogbnVsbHB0cjsKLSAgICBpZiAoIXRh
cmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAgIGF1dG8qIHRhcmdldCA9IGV2ZW50LnRh
cmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IG51bGxwdHI7Cisg
ICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHRhcmdldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIERvdWJsZS1jbGljayBldmVudHMgZG9uJ3QgZXhpc3QgaW4gQ29jb2EuIFNpbmNl
IHBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KCkgd2lsbAogICAgIC8vIGp1c3QgcGFz
cyBjdXJyZW50RXZlbnQgZG93biB0byB0aGUgd2lkZ2V0LCB3ZSBkb24ndCB3YW50IHRvIGNhbGwg
aXQgZm9yIGV2ZW50cyB0aGF0CiAgICAgLy8gZG9uJ3QgY29ycmVzcG9uZCB0byBDb2NvYSBldmVu
dHMuIFRoZSBtb3VzZWRvd24vdXBzIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gcGFzc2VkIG9uIGFz
CiAgICAgLy8gcGFydCBvZiB0aGUgcHJlc3NlZC9yZWxlYXNlZCBoYW5kbGluZy4KLSAgICByZXR1
cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lk
Z2V0KCkpOworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lk
Z2V0KQpAQCAtMzYxLDEzICszNjEsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7CiAgICAgICAgICAgICBpZiAo
IW5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlcmVyIHx8
ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKKyAgICAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJl
cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgV2lkZ2V0KiB3
aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOworICAgICAgICAgICAg
V2lkZ2V0KiB3aWRnZXQgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0
KCk7CiAgICAgICAgICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghcGFzc1dpZGdl
dE1vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpKSkKKyAgICAg
ICAgICAgIGlmICghcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PihyZW5kZXJlcikpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZSA9IHRydWU7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTc4NSwxMSArNzg1LDExIEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZv
ckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQogICAgIGlmICghZXZlbnRUYXJnZXQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIFJlbmRlckVsZW1lbnQqIHRhcmdl
dCA9IGV2ZW50VGFyZ2V0LT5yZW5kZXJlcigpOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQt
PmlzV2lkZ2V0KCkpCisgICAgYXV0byogdGFyZ2V0ID0gZXZlbnRUYXJnZXQtPnJlbmRlcmVyKCk7
CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHRhcmdldCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHJldHVybiB0b1JlbmRlcldpZGdldCh0YXJnZXQpLT53aWRnZXQoKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKTsKIH0K
IAogc3RhdGljIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdGb3JFdmVudFRhcmdldChFbGVtZW50KiBl
dmVudFRhcmdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuY3BwCmluZGV4IGRiZTRkMDExMTQ5MzgxODMzMjU5ZDUyZWE5NjRhZTdjOWY5ZTY3NDguLjlm
ZTY3ZDIyZmQ5MmUyNmY3NTM4N2JiMmE0OTI0NzE1OTZjZDM4OTEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcApAQCAtMzAxLDExICszMDEsMTAg
QEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9tRm9ybShFdmFzX09iamVj
dCogb2JqZWN0LCBjb25zdCBDb250cm9sU3QKIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5RWRq
ZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiBlZGplLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwg
Rm9ybVR5cGUgdHlwZSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAodHlwZSA9PSBT
bGlkZXJWZXJ0aWNhbCB8fCB0eXBlID09IFNsaWRlckhvcml6b250YWwpIHsKLSAgICAgICAgaWYg
KCFvYmplY3QuaXNTbGlkZXIoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJTbGlkZXI+KG9iamVj
dCkpCiAgICAgICAgICAgICByZXR1cm47IC8vIHByb2JhYmx5IGhhdmUgLXdlYmtpdC1hcHBlYXJh
bmNlOiBzbGlkZXIuLgogCi0gICAgICAgIGNvbnN0IFJlbmRlclNsaWRlciogcmVuZGVyU2xpZGVy
ID0gdG9SZW5kZXJTbGlkZXIoJm9iamVjdCk7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gcmVuZGVyU2xpZGVyLT5lbGVtZW50KCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0ID0gZG93bmNhc3Q8UmVuZGVyU2xpZGVyPihvYmplY3QpLmVsZW1lbnQoKTsKICAgICAg
ICAgZG91YmxlIHZhbHVlUmFuZ2UgPSBpbnB1dC5tYXhpbXVtKCkgLSBpbnB1dC5taW5pbXVtKCk7
CiAKICAgICAgICAgT3duUHRyPEVkamVfTWVzc2FnZV9GbG9hdF9TZXQ+IG1zZyA9IGFkb3B0UHRy
KHN0YXRpY19jYXN0PEVkamVfTWVzc2FnZV9GbG9hdF9TZXQqPig6Om9wZXJhdG9yIG5ldyAoc2l6
ZW9mKEVkamVfTWVzc2FnZV9GbG9hdF9TZXQpICsgc2l6ZW9mKGRvdWJsZSkpKSk7CkBAIC0zMjMs
NyArMzIyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRXZhc19P
YmplY3QqIGVkamUsIGNvbnN0IFJlbmRlck9iamVjdCYgb2IKICAgICAgICAgbXNnLT52YWxbMV0g
PSAoaW5wdXQudmFsdWVBc051bWJlcigpIC0gaW5wdXQubWluaW11bSgpKSAvIHZhbHVlUmFuZ2U7
CiAgICAgICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2VuZChlZGplLCBFREpFX01FU1NBR0VfRkxP
QVRfU0VULCAwLCBtc2cuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQcm9ncmVzc0Jh
cikgewotICAgICAgICBjb25zdCBSZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSB0b1Jl
bmRlclByb2dyZXNzKG9iamVjdCk7CisgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNz
ID0gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KG9iamVjdCk7CiAKICAgICAgICAgaW50IG1heCA9
IHJlY3Qud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHZhbHVlID0gcmVuZGVyUHJvZ3Jlc3MucG9z
aXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRl
eCAzNTQ3OTBjZjM5MmExODM3ZWFiNzQ1YjA4NmI4MDIwZmQ3Y2JlZWNkLi41YzU5Mzc4MGQ3ODY0
ZjUxZTVhMDc1YTE5YzkxMmQwNWY1MjcyZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCkBAIC0yNDgsOCArMjQ4LDggQEAgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAKIHN0YXRpYyBjb25z
dCBGb250JiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJU
ZXh0JiByZW5kZXJlcikKIHsKLSAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiByZW5k
ZXJlci5pc0NvbWJpbmVUZXh0KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQm
IHRleHRDb21iaW5lUmVuZGVyZXIgPSB0b1JlbmRlckNvbWJpbmVUZXh0KHJlbmRlcmVyKTsKKyAg
ICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVu
ZGVyZXIpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHRleHRDb21iaW5lUmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpOwogICAgICAgICBpZiAodGV4dENvbWJp
bmVSZW5kZXJlci5pc0NvbWJpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGV4dENvbWJpbmVS
ZW5kZXJlci50ZXh0Q29tYmluZUZvbnQoKTsKICAgICB9CkBAIC00NTQsMTAgKzQ1NCwxMCBAQCBi
b29sIElubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBib29sJgogICAgIGlmICghY29udGFpbmluZ0Jsb2NrLT5pc1J1YnlC
YXNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBUaGlzIHRleHQgaXMgbm90IGluc2lkZSBh
IHJ1YnkgYmFzZSwgc28gaXQgZG9lcyBub3QgaGF2ZSBydWJ5IHRleHQgb3ZlciBpdC4KIAotICAg
IGlmICghY29udGFpbmluZ0Jsb2NrLT5wYXJlbnQoKS0+aXNSdWJ5UnVuKCkpCisgICAgaWYgKCFp
czxSZW5kZXJSdWJ5UnVuPigqY29udGFpbmluZ0Jsb2NrLT5wYXJlbnQoKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOyAvLyBDYW5ub3QgZ2V0IHRoZSBydWJ5IHRleHQuCiAKLSAgICBSZW5kZXJSdWJ5
VGV4dCogcnVieVRleHQgPSB0b1JlbmRlclJ1YnlSdW4oY29udGFpbmluZ0Jsb2NrLT5wYXJlbnQo
KSktPnJ1YnlUZXh0KCk7CisgICAgUmVuZGVyUnVieVRleHQqIHJ1YnlUZXh0ID0gZG93bmNhc3Q8
UmVuZGVyUnVieVJ1bj4oKmNvbnRhaW5pbmdCbG9jay0+cGFyZW50KCkpLnJ1YnlUZXh0KCk7CiAK
ICAgICAvLyBUaGUgZW1waGFzaXMgbWFya3Mgb3ZlciBhcmUgc3VwcHJlc3NlZCBvbmx5IGlmIHRo
ZXJlIGlzIGEgcnVieSB0ZXh0IGJveCBhbmQgaXQgbm90IGVtcHR5LgogICAgIHJldHVybiAhcnVi
eVRleHQgfHwgIXJ1YnlUZXh0LT5oYXNMaW5lcygpOwpAQCAtNTE5LDcgKzUxOSw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwKICAgICBib3hPcmlnaW4ubW92ZUJ5KGxvY2FsUGFpbnRPZmZzZXQp
OwogICAgIEZsb2F0UmVjdCBib3hSZWN0KGJveE9yaWdpbiwgRmxvYXRTaXplKGxvZ2ljYWxXaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKIAotICAgIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5l
ZFRleHQgPSBsaW5lU3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiByZW5kZXJlcigpLmlzQ29tYmlu
ZVRleHQoKSAmJiB0b1JlbmRlckNvbWJpbmVUZXh0KHJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSA/
ICZ0b1JlbmRlckNvbWJpbmVUZXh0KHJlbmRlcmVyKCkpIDogMDsKKyAgICBSZW5kZXJDb21iaW5l
VGV4dCogY29tYmluZWRUZXh0ID0gbGluZVN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVu
ZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0
PihyZW5kZXJlcigpKS5pc0NvbWJpbmVkKCkgPyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+
KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsKIAogICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIWlzSG9y
aXpvbnRhbCgpICYmICFjb21iaW5lZFRleHQ7CiAgICAgaWYgKHNob3VsZFJvdGF0ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IDE4ZjUxZTA0N2JlYWQ5NjNk
MGY0MDc1NTA1OTZjOTY3ZmYzNzFjNDguLjE3ZDA2MDE1YjAwZmU2Mzg0OGQ5ZDcyMzExYTAyMTYx
Mjc2ZTBhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApAQCAt
MTEyLDggKzExMiw4IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShzdGQ6OnVuaXF1ZV9wdHI8
TGF5b3V0U3RhdGU+IG5leHQsIFJlbmRlckJveCogcmVuZGVyZXIsCiAgICAgbV9sYXlvdXREZWx0
YVlTYXR1cmF0ZWQgPSBtX25leHQtPm1fbGF5b3V0RGVsdGFZU2F0dXJhdGVkOwogI2VuZGlmCiAK
LSAgICBpZiAobGluZUdyaWQoKSAmJiAobGluZUdyaWQoKS0+c3R5bGUoKS53cml0aW5nTW9kZSgp
ID09IHJlbmRlcmVyLT5zdHlsZSgpLndyaXRpbmdNb2RlKCkpICYmIHJlbmRlcmVyLT5pc1JlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZChyZW5kZXJlciktPmNvbXB1dGVMaW5lR3JpZFBhZ2luYXRpb25PcmlnaW4oKnRoaXMp
OworICAgIGlmIChsaW5lR3JpZCgpICYmIChsaW5lR3JpZCgpLT5zdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gcmVuZGVyZXItPnN0eWxlKCkud3JpdGluZ01vZGUoKSkgJiYgaXM8UmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkPigqcmVuZGVyZXIpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ+KCpyZW5kZXJlcikuY29tcHV0ZUxpbmVHcmlkUGFnaW5hdGlvbk9y
aWdpbigqdGhpcyk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IGdyaWQgdG8gdHJhY2ssIHRo
ZW4gYWRkIGl0IHRvIG91ciBzZXQuCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmxpbmVHcmlk
KCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZCgpICYmIGlzPFJlbmRlckJsb2NrRmxv
dz4oKnJlbmRlcmVyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IDJkOGNkY2IxZmRmMWVkZTg4YWJkYzc4NjYwZDE3MGQ2ODllZTkwNGYuLjdkZTE4MWM4Mzdh
ODFiY2UxOWExZDU5Yjg0YTFmNGRkYmU5NWFlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtNzA1LDggKzcwNSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNv
bGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyQmxvY2sq
IGNoCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hpbGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoY2hpbGRGbG93VGhyZWFkICYmIGNoaWxk
Rmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAgICAgdG9SZW5kZXJO
YW1lZEZsb3dUaHJlYWQoY2hpbGRGbG93VGhyZWFkKS0+cmVtb3ZlRmxvd0NoaWxkSW5mbyhjaGls
ZCk7CisgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oY2hpbGRGbG93VGhyZWFkKSkK
KyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqY2hpbGRGbG93VGhyZWFk
KS5yZW1vdmVGbG93Q2hpbGRJbmZvKGNoaWxkKTsKIAogICAgIHBhcmVudC5yZW1vdmVDaGlsZElu
dGVybmFsKCpjaGlsZCwgY2hpbGQtPmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnRO
b3RpZnlDaGlsZHJlbik7CiAgICAgY2hpbGQtPm1vdmVBbGxDaGlsZHJlblRvKCZwYXJlbnQsIG5l
eHRTaWJsaW5nLCBjaGlsZC0+aGFzTGF5ZXIoKSk7CkBAIC0xMjY4LDggKzEyNjgsOCBAQCBib29s
IFJlbmRlckJsb2NrOjpzaW1wbGlmaWVkTGF5b3V0KCkKIAogICAgIC8vIE1ha2Ugc3VyZSBhIGZv
cmNlZCBicmVhayBpcyBhcHBsaWVkIGFmdGVyIHRoZSBjb250ZW50IGlmIHdlIGFyZSBhIGZsb3cg
dGhyZWFkIGluIGEgc2ltcGxpZmllZCBsYXlvdXQuCiAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBz
aXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1o
ZWlnaHQgcmVnaW9uIHJlY2VpdmluZyBjb250ZW50LgotICAgIGlmIChpc1JlbmRlckZsb3dUaHJl
YWQoKSkKLSAgICAgICAgdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJD
b250ZW50KGNsaWVudExvZ2ljYWxCb3R0b20oKSk7CisgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJl
YWQ+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLmFw
cGx5QnJlYWtBZnRlckNvbnRlbnQoY2xpZW50TG9naWNhbEJvdHRvbSgpKTsKIAogICAgIC8vIExh
eSBvdXQgb3VyIHBvc2l0aW9uZWQgb2JqZWN0cyBpZiBvdXIgcG9zaXRpb25lZCBjaGlsZCBiaXQg
aXMgc2V0LgogICAgIC8vIEFsc28sIGlmIGFuIGFic29sdXRlIHBvc2l0aW9uIGVsZW1lbnQgaW5z
aWRlIGEgcmVsYXRpdmUgcG9zaXRpb25lZCBjb250YWluZXIgbW92ZXMsIGFuZCB0aGUgYWJzb2x1
dGUgZWxlbWVudCBoYXMgYSBmaXhlZCBwb3NpdGlvbgpAQCAtMTU4MCw3ICsxNTgwLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgICAgIGJvb2wgZGlkQ2xpcFRvUmVnaW9uID0g
ZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwot
ICAgICAgICAgICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBuYW1lZEZsb3dGcmFn
bWVudCAmJiBwYWludEluZm8ucGFpbnRDb250YWluZXItPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFk
KCkpIHsKKyAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiBpczxSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ+KHBhaW50SW5mby5wYWludENvbnRhaW5lcikpIHsKICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGJveCBnb2VzIGJleW9uZCB0aGUgY3VycmVudCByZWdpb24sIHRoZW4gbWFr
ZSBzdXJlIG5vdCB0byBvdmVyZmxvdyB0aGUgcmVnaW9uLgogICAgICAgICAgICAgICAgIC8vIFRo
aXMgKG92ZXJmbG93aW5nIHJlZ2lvbiBYIGFsdG91Z2ggYWxzbyBmcmFnbWVudGVkIHRvIHJlZ2lv
biBYKzEpIGNvdWxkIGhhcHBlbiB3aGVuIG9uZSBvZiB0aGlzIGJveCdzIGNoaWxkcmVuCiAgICAg
ICAgICAgICAgICAgLy8gb3ZlcmZsb3dzIHJlZ2lvbiBYIGFuZCBpcyBhbiB1bnNwbGl0dGFibGUg
ZWxlbWVudCAobGlrZSBhbiBpbWFnZSkuCkBAIC0xNTg5LDcgKzE1ODksNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2ZmcwogICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAgICAgICAgICAgICAgICAgZGlkQ2xpcFRvUmVnaW9uID0gdHJ1ZTsKIAotICAgICAgICAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKHBhaW50
SW5mby5wYWludENvbnRhaW5lciktPmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxv
d0ZyYWdtZW50KCp0aGlzLCAqbmFtZWRGbG93RnJhZ21lbnQpKTsKKyAgICAgICAgICAgICAgICBw
YWludEluZm8uY29udGV4dC0+Y2xpcChkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpw
YWludEluZm8ucGFpbnRDb250YWluZXIpLmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVk
Rmxvd0ZyYWdtZW50KCp0aGlzLCAqbmFtZWRGbG93RnJhZ21lbnQpKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBhaW50T2Zmc2V0
KTsKQEAgLTE4OTgsOSArMTg5OCw5IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25H
YXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByCiAgICAgfQog
ICAgIAogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgIGlmIChwYWludEluZm8gJiYgbmFt
ZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93
VGhyZWFkKCkpIHsKKyAgICBpZiAocGFpbnRJbmZvICYmIG5hbWVkRmxvd0ZyYWdtZW50ICYmIGlz
PFJlbmRlckZsb3dUaHJlYWQ+KCpwYWludEluZm8tPnBhaW50Q29udGFpbmVyKSkgewogICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGFjdHVhbGx5IGZsb3dlZCBpbnRv
IHRoZSByZWdpb24gYmVpbmcgcGFpbnRlZC4KLSAgICAgICAgaWYgKCF0b1JlbmRlckZsb3dUaHJl
YWQocGFpbnRJbmZvLT5wYWludENvbnRhaW5lciktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICAgICAgaWYgKCFkb3duY2FzdDxS
ZW5kZXJGbG93VGhyZWFkPigqcGFpbnRJbmZvLT5wYWludENvbnRhaW5lcikub2JqZWN0U2hvdWxk
RnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTI0NDIsNyArMjQ0Miw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1CiAgICAgTGF5b3V0U2l6ZSBsb2NhbE9mZnNldCA9IHRvTGF5b3V0U2l6
ZShhZGp1c3RlZExvY2F0aW9uKTsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQg
PSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gZmxvd1RocmVhZCA/IHRvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKSA6IG51bGxwdHI7CisgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gZmxvd1RocmVhZCA/IGRvd25j
YXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkp
IDogbnVsbHB0cjsKICAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJjaGluZyBpbnNpZGUgYSByZWdp
b24sIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQKICAgICAvLyBpcyBiZWluZyBmcmFnbWVudGVkIGlu
dG8gdGhpcyByZWdpb24uCiAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFmbG93VGhyZWFk
LT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVu
dCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IDkxOTdhOWJiZTI4YTk3M2I1ZDQ1ZjE3Yjk3YzRlM2U1ZDMzZDUzYzguLmNmMDU5MDA0ZjUwM2E5
YjJkZmM0OTMwMWExZDAwMzJkOTc5NzEyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC01MDEsOCArNTAxLDggQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEgKIAogICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUg
ZmxvdyB0aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhl
IGNvbnRlbnQuCiAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNv
cnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgcmVnaW9uIHJlY2Vpdmlu
ZyBjb250ZW50LgotICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgdG9SZW5k
ZXJGbG93VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KG9sZENsaWVudEFmdGVy
RWRnZSk7CisgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkKKyAgICAgICAgZG93
bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLmFwcGx5QnJlYWtBZnRlckNvbnRlbnQob2xk
Q2xpZW50QWZ0ZXJFZGdlKTsKIAogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICBMYXlv
dXRVbml0IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKQEAgLTI4MjYsOCArMjgyNiw4IEBA
IGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExh
eW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldDsKLSAgICBpZiAo
aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9MYXlvdXRTaXpl
KHRvUmVuZGVyVmlldygqdGhpcykuZnJhbWVWaWV3KCkuc2Nyb2xsUG9zaXRpb24oKSk7CisgICAg
aWYgKGlzPFJlbmRlclZpZXc+KCp0aGlzKSkKKyAgICAgICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0
b0xheW91dFNpemUoZG93bmNhc3Q8UmVuZGVyVmlldz4oKnRoaXMpLmZyYW1lVmlldygpLnNjcm9s
bFBvc2l0aW9uKCkpOwogCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGF1dG8gYmVnaW4gPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOwpAQCAtMzcyNCw4ICszNzI0LDggQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYgcmVs
YXlvdXRDaGlsZHIKICAgICAgICAgZmxvd1RocmVhZC0+c2V0Q29sdW1uSGVpZ2h0QXZhaWxhYmxl
KHN0ZDo6bWF4PExheW91dFVuaXQ+KGNvbHVtbkhlaWdodCwgMCkpOwogICAgICAgICBpZiAob2xk
SGVpZ2h0QXZhaWxhYmxlICE9IGZsb3dUaHJlYWQtPmNvbHVtbkhlaWdodEF2YWlsYWJsZSgpKQog
ICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChpc1Jl
bmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpOworICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyRmxv
d1RocmVhZD4oKnRoaXMpKSB7CisgICAgICAgIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQg
PSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqdGhpcyk7CiAKICAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYSBoYWNrIHRvIGFsd2F5cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHBhZ2UgbG9naWNh
bCBoZWlnaHQsIGlmIHNhaWQgaGVpZ2h0CiAgICAgICAgIC8vIGlzIGtub3duLiBUaGUgcGFnZSBs
b2dpY2FsIGhlaWdodCB0aGluZyBpbiBMYXlvdXRTdGF0ZSBpcyBtZWFuaW5nbGVzcyBmb3IgZmxv
dwpAQCAtMzczNiw5ICszNzM2LDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFn
aW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYgcmVsYXlvdXRDaGlsZHIKICAgICAgICAg
Ly8gaXQncyB1bmtub3duLCB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlIHBhZ2luYXRpb24gY29kZSBm
cm9tIGFzc3VtaW5nIHBhZ2UgYnJlYWtzIGV2ZXJ5d2hlcmUKICAgICAgICAgLy8gYW5kIHRoZXJl
YnkgZWF0aW5nIGV2ZXJ5IHRvcCBtYXJnaW4uIEl0IHNob3VsZCBiZSB0cml2aWFsIHRvIGNsZWFu
IHVwIGFuZCBnZXQgcmlkIG9mIHRoaXMKICAgICAgICAgLy8gaGFjayBvbmNlIHRoZSBvbGQgbXVs
dGljb2wgaW1wbGVtZW50YXRpb24gaXMgZ29uZS4KLSAgICAgICAgcGFnZUxvZ2ljYWxIZWlnaHQg
PSBmbG93VGhyZWFkLT5pc1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSA/IExheW91dFVuaXQoMSkg
OiBMYXlvdXRVbml0KDApOworICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGZsb3dUaHJlYWQu
aXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgPyBMYXlvdXRVbml0KDEpIDogTGF5b3V0VW5pdCgw
KTsKIAotICAgICAgICBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBmbG93VGhyZWFkLT5wYWdl
TG9naWNhbFNpemVDaGFuZ2VkKCk7CisgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9
IGZsb3dUaHJlYWQucGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRl
eCA0ZjRhOWY1MTczNDE4YjAwM2Q3MDEwNWRkNTJkNzEyOTQ0MDA1NDNlLi4wM2FmYzE1YWE1NjY2
MDUzYzg5ZDk1Y2ZlODY2ZDg2NWNhNGI4YTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNzM0LDcgKzczNCw3IEBAIEJp
ZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zv
clNlZ21lbnQoUm9vdElubGluZUJvCiAgICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGhGb3JUZXh0
UnVuKGxpbmVCb3gsIHJ1biwgJnJlbmRlclRleHQsIHRvdGFsTG9naWNhbFdpZHRoLCBsaW5lSW5m
bywgdGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgd29yZE1lYXN1cmVtZW50
cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBib29sIGVuY291bnRlcmVkSnVzdGlm
aWVkUnVieSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KHJ1bi0+
cmVuZGVyZXIoKSkgJiYgdGV4dEFsaWduID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3Bh
Y2VSdW4gJiYgdG9SZW5kZXJSdWJ5UnVuKHJ1bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKSkgewor
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KHJ1bi0+cmVuZGVyZXIoKSkgJiYgdGV4
dEFsaWduID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4gJiYgZG93bmNhc3Q8
UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5QmFzZSgpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byogcnVieUJhc2UgPSBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRl
cmVyKCkpLnJ1YnlCYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJ1YnlCYXNlLT5maXJzdFJv
b3RCb3goKSAmJiAhcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5uZXh0Um9vdEJveCgpICYmIHJ1
bi0+cmVuZGVyZXIoKS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoYXV0byogbGVhZkNoaWxkID0gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgp
LT5maXJzdExlYWZDaGlsZCgpOyBsZWFmQ2hpbGQ7IGxlYWZDaGlsZCA9IGxlYWZDaGlsZC0+bmV4
dExlYWZDaGlsZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IDUxZmQ3ZDUyZDg5NjMzOGJlNzY1MmNjM2E1NDMyNWM1ZGM5NzQ5OTAuLmU5YjcxYzJiOGM1OGRi
Mjk2ZjI4ZmYzZTI1MmVlMTA1ODY4MDI2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCkBAIC04MDQsOSArODA0LDkgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJCbG9jayogbmV4dFNjcm9sbEJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKG5leHRTY3JvbGxCbG9jayAmJiBuZXh0U2Nyb2xs
QmxvY2stPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPihuZXh0U2Nyb2xsQmxvY2spKSB7CiAgICAgICAgIEFTU0VSVChzdGFydEJv
eCk7Ci0gICAgICAgIG5leHRTY3JvbGxCbG9jayA9IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG5l
eHRTY3JvbGxCbG9jayktPmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3god2hlZWxFdmVu
dEFic29sdXRlUG9pbnQsICpzdGFydEJveCk7CisgICAgICAgIG5leHRTY3JvbGxCbG9jayA9IGRv
d25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm5leHRTY3JvbGxCbG9jaykuZnJhZ21lbnRG
cm9tQWJzb2x1dGVQb2ludEFuZEJveCh3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCwgKnN0YXJ0Qm94
KTsKICAgICB9CiAKICAgICBpZiAobmV4dFNjcm9sbEJsb2NrICYmICFuZXh0U2Nyb2xsQmxvY2st
PmlzUmVuZGVyVmlldygpKQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAgYm9vbCBSZW5kZXJCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQKICAgICB9CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBm
bG93VGhyZWFkID8gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50
UmVnaW9uKCkpIDogbnVsbHB0cjsKKyAgICBSZW5kZXJSZWdpb24qIHJlZ2lvblRvVXNlID0gZmxv
d1RocmVhZCA/IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihmbG93VGhyZWFkLT5j
dXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsKIAogICAgIC8vIElmIHRoZSBib3ggaXMgbm90IGNv
bnRhaW5lZCBieSB0aGlzIHJlZ2lvbiB0aGVyZSdzIG5vIHBvaW50IGluIGdvaW5nIGZ1cnRoZXIu
CiAgICAgaWYgKHJlZ2lvblRvVXNlICYmICFmbG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVu
dEluRmxvd1JlZ2lvbih0aGlzLCByZWdpb25Ub1VzZSkpCkBAIC0xNjQwLDcgKzE2NDAsNyBAQCB2
b2lkIFJlbmRlckJveDo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3Qg
SW50UmVjdCopCiBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnZShXcmFw
cGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzLCBib29sIGRyYXdpbmdC
YWNrZ3JvdW5kKQogewogICAgIExheW91dFJlY3QgcmVuZGVyZXJSZWN0OwotICAgIFJlbmRlckJv
eCogbGF5ZXJSZW5kZXJlciA9IDA7CisgICAgUmVuZGVyQm94KiBsYXllclJlbmRlcmVyID0gbnVs
bHB0cjsKIAogICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJMYXllciA9IGxheWVyczsgY3Vy
TGF5ZXI7IGN1ckxheWVyID0gY3VyTGF5ZXItPm5leHQoKSkgewogICAgICAgICBpZiAoY3VyTGF5
ZXItPmltYWdlKCkgJiYgaW1hZ2UgPT0gY3VyTGF5ZXItPmltYWdlKCktPmRhdGEoKSAmJiBjdXJM
YXllci0+aW1hZ2UoKS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKSkg
ewpAQCAtMTY1MCw4ICsxNjUwLDggQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3Rz
Rm9ySW1hZ2UoV3JhcHBlZEltYWdlUHRyIGltYWdlLCBjb25zdCBGaWxsTGF5ZXIKICAgICAgICAg
ICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
IGxheWVyUmVuZGVyZXIgPSAmdmlldygpOwogCi0gICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcncgPSB0b1JlbmRlclZpZXcoKmxheWVyUmVuZGVyZXIpLmZyYW1lVmlldygpLmNvbnRlbnRz
V2lkdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByaCA9IHRvUmVuZGVyVmll
dygqbGF5ZXJSZW5kZXJlcikuZnJhbWVWaWV3KCkuY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBydyA9IGRvd25jYXN0PFJlbmRlclZpZXc+KCpsYXllclJl
bmRlcmVyKS5mcmFtZVZpZXcoKS5jb250ZW50c1dpZHRoKCk7CisgICAgICAgICAgICAgICAgICAg
IExheW91dFVuaXQgcmggPSBkb3duY2FzdDxSZW5kZXJWaWV3PigqbGF5ZXJSZW5kZXJlcikuZnJh
bWVWaWV3KCkuY29udGVudHNIZWlnaHQoKTsKIAogICAgICAgICAgICAgICAgICAgICByZW5kZXJl
clJlY3QgPSBMYXlvdXRSZWN0KC1sYXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAtbGF5ZXJSZW5kZXJlci0+bWFyZ2luVG9wKCksCkBAIC0xNjY0LDcg
KzE2NjQsNyBAQCBib29sIFJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnZShXcmFw
cGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXllcgogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSBnZW9tZXRyeTsKLSAgICAgICAgICAgIGxh
eWVyUmVuZGVyZXItPmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KDAsIGN1ckxheWVy
LCByZW5kZXJlclJlY3QsIGdlb21ldHJ5KTsKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmNh
bGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KG51bGxwdHIsIGN1ckxheWVyLCByZW5kZXJl
clJlY3QsIGdlb21ldHJ5KTsKICAgICAgICAgICAgIGlmIChnZW9tZXRyeS5oYXNOb25Mb2NhbEdl
b21ldHJ5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBpbmN1ciB0aGUgY29z
dHMgb2YgY29tcHV0aW5nIHRoZSBwYWludENvbnRhaW5lciBmb3IgcmVuZGVyZXJzIHdpdGggZml4
ZWQgYmFja2dyb3VuZHMKICAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBnZXQgdGhlIHJp
Z2h0IGRlc3RSZWN0LCBqdXN0IHJlcGFpbnQgdGhlIGVudGlyZSByZW5kZXJlci4KQEAgLTE5NTgs
NyArMTk1OCw3IEBAIHZvaWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluCiAgICAgaWYgKCFjb250YWluZXIt
PmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIHx8ICFmaXhlZFBvc2l0aW9uZWRXaXRoTmFt
ZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQp
OwogICAgIGVsc2UKLSAgICAgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKHRvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdChjb250YWluZXIpLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2Fz
Rml4ZWQpOworICAgICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIoZG93bmNhc3Q8
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oY29udGFpbmVyKSwgdHJhbnNmb3JtU3RhdGUsIG1vZGUs
IHdhc0ZpeGVkKTsKIH0KIAogY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnB1c2hNYXBw
aW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0
b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdApAQCAtMzA5NywxNSAr
MzA5NywxNSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAgICAgICBjb25zdCBSZW5kZXJC
bG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jayk7CiAgICAg
ICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBudWxscHRyOwogICAgICAgICBpZiAo
IXJlZ2lvbikgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93
VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dUaHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVu
dExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJG
bG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiAhY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3Jp
dGluZ01vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckZsb3dUaHJl
YWQ+KCpjb250YWluaW5nQmxvY2spLmNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0UmVnaW9uKCk7
CiAgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkgewogICAgICAgICAgICAgICAg
IExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gY2Iub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpOwogICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi5yZWdp
b25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGNiUmVn
aW9uKQogICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5m
byhjYlJlZ2lvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYm
IGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2Nr
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoZmxvd1Ro
cmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluaW5nQmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFp
bmluZ0Jsb2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwog
ICAgICAgICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Js
b2NrUmVnaW9uKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvbWJpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q29tYmluZVRleHQuaAppbmRleCBkNDI5MzI5MmUyYjY4MDFlZDc2MWFlM2RmMDFiYjIxNTgzZDhm
ZmQ3Li5hNTk1OGQ0MDg0MjNiY2Y4OGY3MjE1NTJjOWMzNDQxMGVjYWYyNjVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaApAQCAtNTcsOCArNTcsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9uZWVkc0ZvbnRVcGRhdGUgOiAxOwogfTsKIAotUkVOREVS
X09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckNvbWJpbmVUZXh0LCBpc0NvbWJpbmVUZXh0KCkpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJf
T0JKRUNUKFJlbmRlckNvbWJpbmVUZXh0LCBpc0NvbWJpbmVUZXh0KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNGNhMGUwYmY3ZjA4ZjA4MTk0MjQ3
ZWZkNzg2Mjg3MDNlYzY2MmEwNy4uZDk5NTI2NjE4YzQ4YzFmYWFhNjQ5N2VhNjQxNTMxZTRmNDg0
ZjBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAt
MjU2LDcgKzI1Niw3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50OjphZGp1c3RTdHls
ZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAgICAgIC8vIFRleHQg
bm9kZXMgc2hhcmUgc3R5bGUgd2l0aCB0aGVpciBwYXJlbnRzIGJ1dCB0cmFuc2Zvcm1zIGRvbid0
IGFwcGx5IHRvIHRoZW0sCiAgICAgICAgIC8vIGhlbmNlIHRoZSAhaXNUZXh0KCkgY2hlY2suCiAg
ICAgICAgIC8vIEZJWE1FOiB3aGVuIHRyYW5zZm9ybXMgYXJlIHRha2VuIGludG8gYWNjb3VudCBm
b3Igb3ZlcmZsb3csIHdlIHdpbGwgbmVlZCB0byBkbyBhIGxheW91dC4KLSAgICAgICAgaWYgKCFo
YXNMYXllcigpIHx8ICF0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPmlz
Q29tcG9zaXRlZCgpKSB7CisgICAgICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCBhdCBsZWFzdCBTaW1wbGlmaWVkTGF5b3V0LCBi
dXQgaWYgUG9zaXRpb25lZE1vdmVtZW50T25seSBpcyBhbHJlYWR5IHNldAogICAgICAgICAgICAg
Ly8gdGhlbiB3ZSBhY3R1YWxseSBuZWVkIFNpbXBsaWZpZWRMYXlvdXRBbmRQb3NpdGlvbmVkTW92
ZW1lbnQuCiAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpCkBAIC0yNzIsMTQgKzI3MiwxNCBA
QCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyRWxlbWVudDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCB1bnNpZwogICAgIC8vIElmIG9wYWNpdHkgY2hhbmdlZCwgYW5k
IHdlIGFyZSBub3QgY29tcG9zaXRlZCwgbmVlZCB0byByZXBhaW50IChhbHNvCiAgICAgLy8gaWdu
b3JpbmcgdGV4dCBub2RlcykKICAgICBpZiAoY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgJiBD
b250ZXh0U2Vuc2l0aXZlUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGlmICghaGFzTGF5ZXIo
KSB8fCAhdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT5pc0NvbXBvc2l0
ZWQoKSkKKyAgICAgICAgaWYgKCFoYXNMYXllcigpIHx8ICFkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpCiAgICAgICAgICAgICBk
aWZmID0gU3R5bGVEaWZmZXJlbmNlUmVwYWludExheWVyOwogICAgICAgICBlbHNlIGlmIChkaWZm
IDwgU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllcikKICAgICAgICAgICAgIGRpZmYgPSBT
dHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyOwogICAgIH0KIAogICAgIGlmICgoY29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMgJiBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlGaWx0ZXIpICYm
IGhhc0xheWVyKCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpOworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIg
PSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKTsKICAgICAg
ICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVkKCkgfHwgbGF5ZXItPnBhaW50c1dpdGhGaWx0ZXJz
KCkpCiAgICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlUmVwYWludExheWVyOwogICAg
ICAgICBlbHNlIGlmIChkaWZmIDwgU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllcikKQEAg
LTI5MCw3ICsyOTAsNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyRWxlbWVudDo6YWRqdXN0U3R5
bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCB1bnNpZwogICAgIC8vIHN0eWxlIGNo
YW5naW5nLCBzaW5jZSBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgZGVjaWRlIHRvIGNvbXBvc2l0
ZSB0aGVzZSBlbGVtZW50cy4gV2hlbiB0aGUKICAgICAvLyBsYXllciBzdGF0dXMgb2Ygb25lIG9m
IHRoZXNlIGVsZW1lbnRzIGNoYW5nZXMsIHdlIG5lZWQgdG8gZm9yY2UgYSBsYXlvdXQuCiAgICAg
aWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwgJiYgaXNSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KCkpIHsKLSAgICAgICAgaWYgKGhhc0xheWVyKCkgIT0gdG9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KHRoaXMpLT5yZXF1aXJlc0xheWVyKCkpCisgICAgICAgIGlmIChoYXNMYXllcigpICE9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5yZXF1aXJlc0xheWVyKCkpCiAg
ICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OwogICAgIH0KIApAQCAtNjU4
LDcgKzY1OCw3IEBAIHN0YXRpYyB2b2lkIGFkZExheWVycyhSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFCiAgICAgICAgICAgICBiZWZvcmVD
aGlsZCA9IG5ld09iamVjdC0+cGFyZW50KCktPmZpbmROZXh0TGF5ZXIocGFyZW50TGF5ZXIsIG5l
d09iamVjdCk7CiAgICAgICAgICAgICBuZXdPYmplY3QgPSBudWxscHRyOwogICAgICAgICB9Ci0g
ICAgICAgIHBhcmVudExheWVyLT5hZGRDaGlsZCh0b1JlbmRlckxheWVyTW9kZWxPYmplY3QocmVu
ZGVyZXIpLmxheWVyKCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcGFyZW50TGF5ZXItPmFkZENo
aWxkKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBi
ZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY4Miw3ICs2ODIsNyBA
QCB2b2lkIFJlbmRlckVsZW1lbnQ6OnJlbW92ZUxheWVycyhSZW5kZXJMYXllciogcGFyZW50TGF5
ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChoYXNMYXllcigpKSB7Ci0gICAgICAgIHBh
cmVudExheWVyLT5yZW1vdmVDaGlsZCh0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxh
eWVyKCkpOworICAgICAgICBwYXJlbnRMYXllci0+cmVtb3ZlQ2hpbGQoZG93bmNhc3Q8UmVuZGVy
TGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojptb3ZlTGF5ZXJzKFJl
bmRlckxheWVyKiBvbGRQYXJlbnQsIFJlbmRlckxheWVyKiBuZXdQYXJlbnQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChoYXNMYXllcigpKSB7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKTsKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMp
LmxheWVyKCk7CiAgICAgICAgIEFTU0VSVChvbGRQYXJlbnQgPT0gbGF5ZXItPnBhcmVudCgpKTsK
ICAgICAgICAgaWYgKG9sZFBhcmVudCkKICAgICAgICAgICAgIG9sZFBhcmVudC0+cmVtb3ZlQ2hp
bGQobGF5ZXIpOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpzZXRO
ZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUK
ICAgICBzZXROZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dEJpdCh0cnVlKTsKICAgICBtYXJr
Q29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dCgpOwogICAgIGlmIChoYXNMYXllcigpKSB7Ci0gICAg
ICAgIGlmIChvbGRTdHlsZSAmJiBzdHlsZSgpLmRpZmZSZXF1aXJlc0xheWVyUmVwYWludCgqb2xk
U3R5bGUsIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+aXNDb21wb3Np
dGVkKCkpKQorICAgICAgICBpZiAob2xkU3R5bGUgJiYgc3R5bGUoKS5kaWZmUmVxdWlyZXNMYXll
clJlcGFpbnQoKm9sZFN0eWxlLCBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhp
cykubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpKQogICAgICAgICAgICAgc2V0TGF5ZXJOZWVkc0Z1
bGxSZXBhaW50KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldExheWVyTmVlZHNGdWxs
UmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwpAQCAtMTMzMSwxMCArMTMzMSwx
MCBAQCBib29sIFJlbmRlckVsZW1lbnQ6OnJlcGFpbnRGb3JQYXVzZWRJbWFnZUFuaW1hdGlvbnNJ
Zk5lZWRlZChjb25zdCBJbnRSZWN0JiB2aXNpYgogCiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIFJl
bmRlckVsZW1lbnQ6OnJlbmRlck5hbWVkRmxvd1RocmVhZFdyYXBwZXIoKQogewotICAgIGF1dG8g
cmVuZGVyZXIgPSB0aGlzOwotICAgIHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNBbm9u
eW1vdXNCbG9jaygpICYmICFyZW5kZXJlci0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKKyAg
ICBhdXRvKiByZW5kZXJlciA9IHRoaXM7CisgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKnJlbmRl
cmVyKSkKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgcmV0dXJu
IHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpID8gdG9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQocmVuZGVyZXIpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaXM8UmVu
ZGVyTmFtZWRGbG93VGhyZWFkPihyZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ+KHJlbmRlcmVyKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgUmVuZGVyRWxlbWVudDo6aGFz
Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogbykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKaW5kZXggODNjN2Mz
NzI5MTA2MjM5OWM5OGQ4MmE2NjhlMzJhZGUwNzEyZWU3Yi4uMTRmMGEzOGVkOTYzYzk1NjE1MmE4
OWIyYjNlNTAxM2MyZTBiNDE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmgKQEAgLTEwMSw4ICsxMDEsNiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBtX3VuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb247CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZ
UEVfQ0FTVFMoUmVuZGVyRW1iZWRkZWRPYmplY3QsIGlzRW1iZWRkZWRPYmplY3QoKSkKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpF
Q1QoUmVuZGVyRW1iZWRkZWRPYmplY3QsIGlzRW1iZWRkZWRPYmplY3QoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCBkMmIwMDgwYTk2MmQx
N2E5OTAzMDM3ZjgxZDQwMTY2Y2MwOGVlZWU3Li40YmUyODY5ZjY1YzgyY2IwNzIwOTg5ODQyODAz
YjgxNDE4YWQyNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgpAQCAtMTUwLDggKzE1MSw4IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
dmFsaWRhdGVSZWdpb25zKCkKICAgICAgICAgICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGF1
dG8taGVpZ2h0IHJlZ2lvbnMgd2UgY2FuJ3QgYXNzdW1lIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9n
aWNhbEhlaWdodCB0byBiZSB0cnVlIGluIHRoZSBmaXJzdCBwaGFzZQogICAgICAgICAgICAgICAg
IC8vIGJlY2F1c2UgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbnMgZG9uJ3QgaGF2ZSB0aGVpciBoZWln
aHQgY29tcHV0ZWQgeWV0LgogICAgICAgICAgICAgICAgIGlmIChpbk1lYXN1cmVDb250ZW50TGF5
b3V0UGhhc2UoKSAmJiByZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
dG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pOwotICAgICAgICAgICAgICAgICAgICBu
YW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVkRmxvd0ZyYWdtZW50
LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgbmFt
ZWRGbG93RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lv
bik7CisgICAgICAgICAgICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0
b0hlaWdodChuYW1lZEZsb3dGcmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0ID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMTcsNyArMjE4LDcgQEAgdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjpsYXlvdXQoKQogYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXNDb21wb3NpdGluZ1Jl
Z2lvbkRlc2NlbmRhbnQoKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdp
b25MaXN0KSB7Ci0gICAgICAgIGlmICh0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbikt
PmxheWVyT3duZXIoKS5sYXllcigpLT5oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoKSkKKyAgICAg
ICAgaWYgKGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5sYXllck93
bmVyKCkubGF5ZXIoKS0+aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0MCwxMiArMjQxLDEyIEBAIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIoUmVu
ZGVyTGF5ZXImCiAgICAgICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwog
ICAgICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7CiAgICAgICAgIGlmIChn
ZXRSZWdpb25SYW5nZUZvckJveChjaGlsZExheWVyLnJlbmRlckJveCgpLCBzdGFydFJlZ2lvbiwg
ZW5kUmVnaW9uKSkKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KHN0YXJ0UmVnaW9uKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudD4oc3RhcnRSZWdpb24pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhpcyB3aGVuIHdlJ2xsIGhhdmUgcmVnaW9uIHJhbmdlcyBmb3IgaW5saW5lcyBhcyB3ZWxsLgog
ICAgIExheW91dFBvaW50IGZsb3dUaHJlYWRPZmZzZXQgPSBmbG9vcmVkTGF5b3V0UG9pbnQoY2hp
bGRMYXllci5yZW5kZXJlcigpLmxvY2FsVG9Db250YWluZXJQb2ludChMYXlvdXRQb2ludCgpLCB0
aGlzLCBBcHBseUNvbnRhaW5lckZsaXApKTsKLSAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZWdpb25BdEJsb2NrT2Zmc2V0KDAsIGZsaXBGb3JXcml0aW5nTW9kZShpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZmxvd1RocmVhZE9mZnNldC55KCkgOiBmbG93VGhyZWFkT2Zm
c2V0LngoKSksIHRydWUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ+KHJlZ2lvbkF0QmxvY2tPZmZzZXQoMCwgZmxpcEZvcldyaXRpbmdNb2RlKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93VGhyZWFkT2Zmc2V0LnkoKSA6IGZsb3dUaHJlYWRPZmZz
ZXQueCgpKSwgdHJ1ZSkpOwogfQogCiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxv
d1RocmVhZDo6Y2FjaGVkUmVnaW9uRm9yQ29tcG9zaXRlZExheWVyKFJlbmRlckxheWVyJiBjaGls
ZExheWVyKSBjb25zdApAQCAtNzEzLDggKzcxNCw4IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyQm94KiBi
CiAgICAgICAgICAgICBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IHRydWU7CiAKICAgICAgICAgaWYg
KCEoaW5zaWRlT2xkUmVnaW9uUmFuZ2UgJiYgaW5zaWRlTmV3UmVnaW9uUmFuZ2UpKSB7Ci0gICAg
ICAgICAgICBpZiAocmVnaW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpCi0gICAgICAg
ICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5jbGVhck9iamVjdFN0
eWxlSW5SZWdpb24oYm94KTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudD4oKnJlZ2lvbikpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihib3gpOwogICAgICAg
ICAgICAgaWYgKHJlZ2lvbi0+cmVuZGVyQm94UmVnaW9uSW5mbyhib3gpKQogICAgICAgICAgICAg
ICAgIHJlZ2lvbi0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwogICAgICAgICB9CkBA
IC05NzgsMTAgKzk3OSwxMCBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmluaXRpYWxpemVSZWdp
b25zQ29tcHV0ZWRBdXRvSGVpZ2h0KFJlbmRlclJlZ2lvbiogc3RhcnRSZQogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKGF1dG8gcmVnaW9uSXRlciA9IHN0YXJ0UmVnaW9uID8gbV9yZWdpb25M
aXN0LmZpbmQoc3RhcnRSZWdpb24pIDogbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVn
aW9uTGlzdC5lbmQoKTsgcmVnaW9uSXRlciAhPSBlbmQ7ICsrcmVnaW9uSXRlcikgewotICAgICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpyZWdpb25JdGVyOwotICAgICAgICBpZiAocmVnaW9u
LT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJl
Z2lvbik7Ci0gICAgICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVp
Z2h0KG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAg
UmVuZGVyUmVnaW9uJiByZWdpb24gPSAqKnJlZ2lvbkl0ZXI7CisgICAgICAgIGlmIChyZWdpb24u
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgeworICAgICAgICAgICAgYXV0byYgbmFtZWRGbG93RnJh
Z21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uKTsKKyAgICAg
ICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZsb3dG
cmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTEwMjAsNyArMTAyMSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zs
b3dUaHJlYWRQb3J0aW9uUmVjdChjb25zdCBSZW5kZXJSZWdpb24qIGxhCiAgICAgZm9yIChhdXRv
JiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBlbXB0
eSBhdXRvLWhlaWdodCByZWdpb24sIGNsZWFyIHRoZSBjb21wdXRlZEF1dG9IZWlnaHQgdmFsdWUu
CiAgICAgICAgIGlmIChlbXB0eVJlZ2lvbnNTZWdtZW50ICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2lj
YWxIZWlnaHQoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9u
KS0+Y2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgpOwog
CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9IHN0
ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSAt
IGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRl
bnQoKSk7CkBAIC0xMDgyLDI0ICsxMDgzLDI0IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRk
Rm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0CiAg
ICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiA9IG9mZnNldEJyZWFrSW5G
bG93VGhyZWFkIC0gY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZDsKIAogICAgIGlmIChy
ZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChy
ZWdpb24pOworICAgICAgICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKIAogICAgICAgICAvLyBBIGZvcmNlZCBicmVh
ayBjYW4gYXBwZWFyIG9ubHkgaW4gYW4gYXV0by1oZWlnaHQgcmVnaW9uIHRoYXQgZGlkbid0IGhh
dmUgYSBmb3JjZWQgYnJlYWsgYmVmb3JlLgogICAgICAgICAvLyBUaGlzIEFTU0VSVCBpcyBhIGdv
b2QtZW5vdWdoIGhldXJpc3RpYyB0byB2ZXJpZnkgdGhlIGFib3ZlIGNvbmRpdGlvbi4KLSAgICAg
ICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpID09IG5h
bWVkRmxvd0ZyYWdtZW50LT5jb21wdXRlZEF1dG9IZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVChu
YW1lZEZsb3dGcmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpID09IG5hbWVkRmxvd0ZyYWdt
ZW50LmNvbXB1dGVkQXV0b0hlaWdodCgpKTsKIAotICAgICAgICBtYXBUb1VzZS5zZXQoYnJlYWtD
aGlsZCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBtYXBUb1VzZS5zZXQoYnJlYWtDaGls
ZCwgJm5hbWVkRmxvd0ZyYWdtZW50KTsKIAogICAgICAgICBoYXNDb21wdXRlZEF1dG9IZWlnaHQg
PSB0cnVlOwogCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBoZWlnaHQgcHJldGVuZGlu
ZyB0aGF0IHRoZSBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiBpcyB0aGUgbG9naWNhbEhlaWdo
dCBmb3IgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbi4KLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25D
b21wdXRlZEF1dG9IZWlnaHQgPSBuYW1lZEZsb3dGcmFnbWVudC0+Y29uc3RyYWluQ29udGVudEJv
eExvZ2ljYWxIZWlnaHRCeU1pbk1heChvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbik7CisgICAg
ICAgIExheW91dFVuaXQgcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gbmFtZWRGbG93RnJhZ21l
bnQuY29uc3RyYWluQ29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChvZmZzZXRCcmVha0lu
Q3VycmVudFJlZ2lvbik7CiAKICAgICAgICAgLy8gVGhlIG5ldyBoZWlnaHQgb2YgdGhpcyByZWdp
b24gbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsIHZhbHVlLCB0aGUgbWF4IGhl
aWdodC4gQSBmb3JjZWQgYnJlYWsgaXMgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgaW5pdGlh
bAogICAgICAgICAvLyBoZWlnaHQgb2YgYW4gYXV0by1oZWlnaHQgcmVnaW9uIGJlc2lkZXMgY29u
dGVudCBlbmRpbmcuCi0gICAgICAgIEFTU0VSVChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0g
bmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBBU1NF
UlQocmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0IDw9IG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VM
b2dpY2FsSGVpZ2h0KCkpOwogCi0gICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21wdXRl
ZEF1dG9IZWlnaHQocmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0KTsKKyAgICAgICAgbmFtZWRGbG93
RnJhZ21lbnQuc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7
CiAKICAgICAgICAgY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZCArPSByZWdpb25Db21w
dXRlZEF1dG9IZWlnaHQ7CiAgICAgfSBlbHNlCkBAIC0xNDA5LDkgKzE0MTAsOSBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNPdmVyZmxvd0Zyb21DaGlsZChjb25zdCBSZW5kZXJC
b3gqIGJveCwgY29uc3QgUgogICAgICAgICAvLyBJbiBvcmRlciB0byBiZWhhdmUgaW4gYSBzaW1p
bGFyIG1hbm5lciB0byB0aGUgbm9uLXJlZ2lvbnMgY2FzZSwgY29udGVudCBvdmVyZmxvd2luZyB0
aGUgYm94CiAgICAgICAgIC8vIGZsb3dlZCBpbnRvIHRoZSByZWdpb24gbXVzdCBiZSBwYWludGVk
IG9uIHRvcCBvZiB0aGUgcmVnaW9uJ3MgcGFkZGluZyBhbmQgdGhlIGJveCdzIG1hcmdpbi4KICAg
ICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1zdHls
ZS8yMDE0SmFuLzAwODkuaHRtbAotICAgICAgICBpZiAoYm94LT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpib3gpKSB7
CiAgICAgICAgICAgICBBU1NFUlQoYm94ID09IHRoaXMpOwotICAgICAgICAgICAgUmVuZGVyQmxv
Y2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVn
aW9uKS0+ZnJhZ21lbnRDb250YWluZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdyYg
ZnJhZ21lbnRDb250YWluZXIgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJl
Z2lvbikuZnJhZ21lbnRDb250YWluZXIoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgc3BhY2lu
Z0FmdGVyTGF5b3V0ID0gZnJhZ21lbnRDb250YWluZXIucGFkZGluZ0FmdGVyKCkgKyBjaGlsZC0+
bWFyZ2luQWZ0ZXIoKTsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50Q29udGFpbmVyLnNjcm9sbHNPdmVyZmxv
d1koKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKaW5k
ZXggODRkMDM1NmQ5YmQ0ZGFkMjc5YTg3NzZmNmIzMWZjZjM5MGE1ZWE4Yy4uNjIzZWJmYTIxNjEx
NDUwNDA2OGY5NTIzYzdiYzc5NGUzYmMwNTAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oCkBAIC0zNzYsOCArMzc2LDYgQEAgcHJvdGVjdGVkOgogICAg
IGJvb2wgbV9sYXllcnNUb1JlZ2lvbk1hcHBpbmdzRGlydHkgOiAxOwogfTsKIAotUkVOREVSX09C
SkVDVF9UWVBFX0NBU1RTKFJlbmRlckZsb3dUaHJlYWQsIGlzUmVuZGVyRmxvd1RocmVhZCgpKQot
CiAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdn
aW5nLgogI2lmbmRlZiBOREVCVUcKIHRlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJl
bmRlclJlZ2lvbio+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IDA4ZjdiNTQ3M2VhMGE3M2ZjYTVjMmM0YzEyZTlmZGVlNWU3NTkyNDcuLjJhMDZhNTFlZjVj
ZjI5NWIyZWY4OGEyMjE3MGE0ZWZhYWJmYTE0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMTQ5Nyw3ICsxNDk3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2V0RmlsdGVyQmFja2VuZE5lZWRzUmVwYWludGluZ0luUmVjdChjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KQogICAgIH0KICAgICAKICAgICBpZiAocGFyZW50TGF5ZXItPmlzUm9vdExheWVyKCkpIHsK
LSAgICAgICAgdG9SZW5kZXJWaWV3KHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5yZXBhaW50Vmll
d1JlY3RhbmdsZShwYXJlbnRMYXllclJlY3QpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJWaWV3
PihwYXJlbnRMYXllci0+cmVuZGVyZXIoKSkucmVwYWludFZpZXdSZWN0YW5nbGUocGFyZW50TGF5
ZXJSZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE2NTIsNyArMTY1Miw3
IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gYnJlYWsg
dXAgdGhlIHRyYW5zZm9ybWVkIGV4dGVudCBhY3Jvc3Mgb3VyIGNvbHVtbnMuCiAgICAgICAgIC8v
IFNwbGl0IG91ciBib3ggdXAgaW50byB0aGUgYWN0dWFsIGZyYWdtZW50IGJveGVzIHRoYXQgcmVu
ZGVyIGluIHRoZSBjb2x1bW5zL3BhZ2VzIGFuZCB1bml0ZSB0aG9zZSB0b2dldGhlciB0bwogICAg
ICAgICAvLyBnZXQgb3VyIHRydWUgYm91bmRpbmcgYm94LgotICAgICAgICBSZW5kZXJGbG93VGhy
ZWFkJiBlbmNsb3NpbmdGbG93VGhyZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRpb25M
YXllci0+cmVuZGVyZXIoKSk7CisgICAgICAgIGF1dG8mIGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSBk
b3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkpOwog
ICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdGbG93VGhyZWFkLmZyYWdtZW50c0JvdW5kaW5nQm94
KHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdC5tb3ZlKHBhZ2luYXRpb25MYXllci0+b2Zmc2V0RnJv
bUFuY2VzdG9yKHJvb3RMYXllcikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTk5MCw4
ICsxOTkwLDggQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11bGF0ZU9m
ZnNldFRvd2FyZHNBbmNlc3Rvcihjb25zdCBSZW5kZXJMYXkKIAogICAgIGlmIChhZGp1c3RGb3JD
b2x1bW5zID09IFJlbmRlckxheWVyOjpBZGp1c3RGb3JDb2x1bW5zKSB7CiAgICAgICAgIGlmIChS
ZW5kZXJMYXllciogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAg
IGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5pc1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSB0b1JlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZChwYXJlbnRMYXllci0+cmVuZGVyZXIoKSkucGh5c2ljYWxUcmFu
c2xhdGlvbkZyb21GbG93VG9SZWdpb24obG9jYXRpb24pOworICAgICAgICAgICAgaWYgKGlzPFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpKSB7Cisg
ICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBkb3duY2FzdDxSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ+KHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5waHlzaWNhbFRyYW5z
bGF0aW9uRnJvbUZsb3dUb1JlZ2lvbihsb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKHJl
Z2lvbikKICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ubW92ZUJ5KHJlZ2lvbi0+dG9wTGVm
dExvY2F0aW9uKCkgKyAtcGFyZW50TGF5ZXItPnJlbmRlckJveCgpLT50b3BMZWZ0TG9jYXRpb24o
KSk7CiAgICAgICAgICAgICB9CkBAIC00MzA0LDcgKzQzMDQsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRl
ckxheWVyKgogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZGluZ0JveEluRmxvd1RocmVhZCA9IGxh
eWVyQm91bmRpbmdCb3ggPyAqbGF5ZXJCb3VuZGluZ0JveCA6IGJvdW5kaW5nQm94KHBhZ2luYXRp
b25MYXllciwgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIpOwogICAgIGxheWVyQm91bmRpbmdC
b3hJbkZsb3dUaHJlYWQuaW50ZXJzZWN0KGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLnJlY3Qo
KSk7CiAgICAgCi0gICAgUmVuZGVyRmxvd1RocmVhZCYgZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRv
UmVuZGVyRmxvd1RocmVhZChwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkpOworICAgIGF1dG8m
IGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihwYWdpbmF0
aW9uTGF5ZXItPnJlbmRlcmVyKCkpOwogICAgIFJlbmRlckxheWVyKiBwYXJlbnRQYWdpbmF0aW9u
TGF5ZXIgPSBwYWdpbmF0aW9uTGF5ZXItPnBhcmVudCgpLT5lbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXJJblN1YnRyZWUocm9vdExheWVyLCBpbmNsdXNpb25Nb2RlKTsKICAgICBMYXllckZyYWdtZW50
cyBhbmNlc3RvckZyYWdtZW50czsKICAgICBpZiAocGFyZW50UGFnaW5hdGlvbkxheWVyKSB7CkBA
IC00NjI3LDcgKzQ2MjcsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mCiAgICAgQVNTRVJUKGlz
U2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSk7
CiAgICAgQVNTRVJUKCFyZW5kZXJlcigpLnZpZXcoKS5uZWVkc0xheW91dCgpKTsKIAotICAgIExh
eW91dFJlY3QgaGl0VGVzdEFyZWEgPSBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSA/IHRv
UmVuZGVyRmxvd1RocmVhZCgmcmVuZGVyZXIoKSktPnZpc3VhbE92ZXJmbG93UmVjdCgpIDogcmVu
ZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJl
YSA9IGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpID8gZG93bmNhc3Q8UmVuZGVyRmxvd1Ro
cmVhZD4ocmVuZGVyZXIoKSkudmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiByZW5kZXJlcigpLnZpZXco
KS5kb2N1bWVudFJlY3QoKTsKICAgICBpZiAoIXJlcXVlc3QuaWdub3JlQ2xpcHBpbmcoKSkKICAg
ICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAKQEAg
LTQ2MzcsNyArNDYzNyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgLy8gcmV0
dXJuIG91cnNlbHZlcy4gV2UgZG8gdGhpcyBzbyBtb3VzZSBldmVudHMgY29udGludWUgZ2V0dGlu
ZyBkZWxpdmVyZWQgYWZ0ZXIgYSBkcmFnIGhhcyAKICAgICAgICAgLy8gZXhpdGVkIHRoZSBXZWJW
aWV3LCBhbmQgc28gaGl0IHRlc3Rpbmcgb3ZlciBhIHNjcm9sbGJhciBoaXRzIHRoZSBjb250ZW50
IGRvY3VtZW50LgogICAgICAgICBpZiAoIXJlcXVlc3QuaXNDaGlsZEZyYW1lSGl0VGVzdCgpICYm
IChyZXF1ZXN0LmFjdGl2ZSgpIHx8IHJlcXVlc3QucmVsZWFzZSgpKSAmJiBpc1Jvb3RMYXllcigp
KSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0
b1JlbmRlclZpZXcocmVuZGVyZXIoKSkuZmxpcEZvcldyaXRpbmdNb2RlKGhpdFRlc3RMb2NhdGlv
bi5wb2ludCgpKSk7CisgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBkb3duY2FzdDxSZW5kZXJWaWV3PihyZW5kZXJlcigpKS5mbGlwRm9yV3JpdGluZ01v
ZGUoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkpKTsKICAgICAgICAgICAgIGluc2lkZUxheWVyID0g
dGhpczsKICAgICAgICAgfQogICAgIH0KQEAgLTQ2NzUsNyArNDY3NSw3IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRmxvd1RocmVhZEFuY2VzdG9yKCkgY29uc3QKIAogYm9v
bCBSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJS
ZWdpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1JlbmRlckZsb3dUaHJl
YWQoKSAmJiB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSkuY29sbGVjdHNHcmFwaGljc0xh
eWVyc1VuZGVyUmVnaW9ucygpOworICAgIHJldHVybiBpczxSZW5kZXJGbG93VGhyZWFkPihyZW5k
ZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5kZXJlcigpKS5jb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCk7CiB9CiAKIC8vIENvbXB1dGUgdGhlIHotb2Zm
c2V0IG9mIHRoZSBwb2ludCBpbiB0aGUgdHJhbnNmb3JtU3RhdGUuCkBAIC01NjYyLDcgKzU2NjIs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0JveChjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5bwogICAgICAgICAvLyBnZXQgb3VyIHRydWUgYm91
bmRpbmcgYm94LgogICAgICAgICByZXN1bHQubW92ZShjaGlsZExheWVyLT5vZmZzZXRGcm9tQW5j
ZXN0b3IocGFnaW5hdGlvbkxheWVyKSk7CiAKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCYgZW5j
bG9zaW5nRmxvd1RocmVhZCA9IHRvUmVuZGVyRmxvd1RocmVhZChwYWdpbmF0aW9uTGF5ZXItPnJl
bmRlcmVyKCkpOworICAgICAgICBhdXRvJiBlbmNsb3NpbmdGbG93VGhyZWFkID0gZG93bmNhc3Q8
UmVuZGVyRmxvd1RocmVhZD4ocGFnaW5hdGlvbkxheWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAg
cmVzdWx0ID0gZW5jbG9zaW5nRmxvd1RocmVhZC5mcmFnbWVudHNCb3VuZGluZ0JveChyZXN1bHQp
OwogICAgICAgICAKICAgICAgICAgY2hpbGRMYXllciA9IHBhZ2luYXRpb25MYXllcjsKQEAgLTU5
NzAsNyArNTk3MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Wk9yZGVyTGlzdHMoKQogCiAg
ICAgaWYgKCFyZW5kZXJlcigpLmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICBp
ZiAoaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0g
ICAgICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQocmVuZGVyZXIoKSkuc2V0TmVlZHNMYXllclRv
UmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsb3dU
aHJlYWQ+KHJlbmRlcmVyKCkpLnNldE5lZWRzTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzVXBkYXRlKCk7
CiAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7
CiAgICAgICAgIGlmIChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFi
bGVkKCkpCiAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2V0U2hvdWxkUmVldmFsdWF0ZUNvbXBv
c2l0aW5nQWZ0ZXJMYXlvdXQoKTsKQEAgLTU5OTQsNyArNTk5NCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmRpcnR5Tm9ybWFsRmxvd0xpc3QoKQogCiAgICAgaWYgKCFyZW5kZXJlcigpLmRvY3VtZW50
QmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICBpZiAoaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dy
YXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICB0b1JlbmRlckZsb3dUaHJl
YWQocmVuZGVyZXIoKSkuc2V0TmVlZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLnNldE5lZWRz
TGF5ZXJUb1JlZ2lvbk1hcHBpbmdzVXBkYXRlKCk7CiAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRD
b21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7CiAgICAgICAgIGlmIChhY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkpCiAgICAgICAgICAgICBjb21wb3Np
dG9yKCkuc2V0U2hvdWxkUmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMDM0
ZGJjZTIyZjEyNTk4N2IyYjdmNTEwNGM3ODVhY2NkNGU4Y2FkMC4uMmU4YmVmZDJlMDZmYmQ5NWQz
YmE1NzJjYTYxY2VkMDg2ZDkwY2EyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJQbHVn
aW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJl
bmRlckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKQEAgLTQ2OSw5ICs0NzAsOSBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiAKIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigp
LmlzV2lkZ2V0KCkpCisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3Np
dG9yID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcih0b1Jl
bmRlcldpZGdldCgmcmVuZGVyZXIoKSkpKSB7CisgICAgaWYgKFJlbmRlckxheWVyQ29tcG9zaXRv
ciogaW5uZXJDb21wb3NpdG9yID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZUNvbnRlbnRz
Q29tcG9zaXRvcigmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkpIHsKICAgICAg
ICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgICAgIGlu
bmVyQ29tcG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRpb24oZmxvb3JlZEludFBvaW50
KGNvbnRlbnRzQm94KCkubG9jYXRpb24oKSkpOwogICAgIH0KQEAgLTU5OCw4ICs1OTksOCBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAgICAgICAgIGxh
eWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogI2VuZGlmCi0gICAgaWYgKHJlbmRlcmVy
KCkuaXNXaWRnZXQoKSkKLSAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpwYXJlbnRGcmFtZUNvbnRlbnRMYXllcnModG9SZW5kZXJXaWRnZXQoJnJlbmRl
cmVyKCkpKTsKKyAgICBpZiAoaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkKKyAgICAgICAg
bGF5ZXJDb25maWdDaGFuZ2VkID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRGcmFtZUNv
bnRlbnRMYXllcnMoJmRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIoKSkpOwogCiAgICAg
cmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlZDsKIH0KQEAgLTE2NzUsMjEgKzE2NzYsMjEgQEAgYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50c0NoaWxkcmVuKCkgY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCitzdGF0aWMgYm9vbCBpc1Jlc3RhcnRlZFBsdWdpbihSZW5kZXJPYmplY3QmIHJl
bmRlcmVyKQogewotICAgIGlmICghcmVuZGVyZXItPmlzRW1iZWRkZWRPYmplY3QoKSkKKyAgICBp
ZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihyZW5kZXJl
ci0+bm9kZSgpKTsKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpLmZyYW1lT3duZXJFbGVtZW50KCk7CiAg
ICAgaWYgKCFpczxIVE1MUGx1Z0luRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBkb3duY2FzdDxIVE1MUGx1Z0luRWxlbWVudD4oKmVsZW1lbnQp
LmlzUmVzdGFydGVkUGx1Z2luKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVt
ZW50PihlbGVtZW50KS5pc1Jlc3RhcnRlZFBsdWdpbigpOwogfQogCi1zdGF0aWMgYm9vbCBpc0Nv
bXBvc2l0ZWRQbHVnaW4oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBib29sIGlzQ29t
cG9zaXRlZFBsdWdpbihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5k
ZXJlci0+aXNFbWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVy
ZXIpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisgICAgcmV0dXJuIGlzPFJlbmRl
ckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q+KHJlbmRlcmVyKS5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiB9CiAKIC8vIEEg
InNpbXBsZSBjb250YWluZXIgbGF5ZXIiIGlzIGEgUmVuZGVyTGF5ZXIgd2hpY2ggaGFzIG5vIHZp
c2libGUgY29udGVudCB0byByZW5kZXIuCkBAIC0xNjk3LDcgKzE2OTgsNyBAQCBzdGF0aWMgYm9v
bCBpc0NvbXBvc2l0ZWRQbHVnaW4oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIC8vIFRoaXMgaXMg
YSB1c2VmdWwgb3B0aW1pemF0aW9uLCBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBhdm9pZCBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUuCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNTaW1wbGVD
b250YWluZXJDb21wb3NpdGluZ0xheWVyKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5p
c1JlbmRlclJlcGxhY2VkKCkgJiYgKCFpc0NvbXBvc2l0ZWRQbHVnaW4oJnJlbmRlcmVyKCkpIHx8
IGlzUmVzdGFydGVkUGx1Z2luKCZyZW5kZXJlcigpKSkpCisgICAgaWYgKHJlbmRlcmVyKCkuaXNS
ZW5kZXJSZXBsYWNlZCgpICYmICghaXNDb21wb3NpdGVkUGx1Z2luKHJlbmRlcmVyKCkpIHx8IGlz
UmVzdGFydGVkUGx1Z2luKHJlbmRlcmVyKCkpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKHBhaW50c0JveERlY29yYXRpb25zKCkgfHwgcGFpbnRzQ2hpbGRyZW4oKSkKQEAgLTE4
MDMsMTIgKzE4MDQsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRl
ZENvbnRlbnQoYm9vbCBpc1NpbXBsZUNvbnRhaW5lcikgY29uc3QKICAgICAvLyBGSVhNRTogd2Ug
Y291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgdGhlIGltYWdlLCB2aWRlbyBvciBjYW52YXMgaXMg
a25vd24gdG8gZmlsbCB0aGUgYm9yZGVyIGJveCBlbnRpcmVseSwKICAgICAvLyBhbmQgc2V0IGJh
Y2tncm91bmQgY29sb3Igb24gdGhlIGxheWVyIGluIHRoYXQgY2FzZSwgaW5zdGVhZCBvZiBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nLgogI2lmIEVOQUJMRShWSURFTykKLSAg
ICBpZiAocmVuZGVyZXIoKS5pc1ZpZGVvKCkgJiYgdG9SZW5kZXJWaWRlbyhyZW5kZXJlcigpKS5z
aG91bGREaXNwbGF5VmlkZW8oKSkKKyAgICBpZiAoaXM8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkp
ICYmIGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5kZXJlcigpKS5zaG91bGREaXNwbGF5VmlkZW8o
KSkKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzQm94RGVjb3JhdGlvbnNPckJhY2tn
cm91bmQoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotICAgIGlmIChyZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYgY2FudmFzQ29t
cG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29udGVudHMpCisg
ICAgaWYgKGlzPFJlbmRlckhUTUxDYW52YXM+KHJlbmRlcmVyKCkpICYmIGNhbnZhc0NvbXBvc2l0
aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzKQogICAgICAg
ICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKaW5kZXggOWQ1MDEyZmY3ZTlmYzU5NWYxMDBlMTA0ZTUwZWNmODlmYWVmOGNk
My4uNDA5MDRiZThkOTViNDNmY2ZjZTM2ZWM0MzViNGUwYjk5MzU1ZWU4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTk0
MywxMCArOTQzLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5n
KFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICAvLyBp
dHMgcmVwbGljYSBHcmFwaGljc0xheWVyLiBJbiBwcmFjdGljZSB0aGlzIHNob3VsZCBuZXZlciBo
YXBwZW4gYmVjYXVzZSByZWZsZWN0ZWUgYW5kIHJlZmxlY3Rpb24gCiAgICAgICAgICAgICAvLyBh
cmUgYm90aCBlaXRoZXIgY29tcG9zaXRlZCwgb3Igbm90IGNvbXBvc2l0ZWQuCiAgICAgICAgICAg
ICBpZiAobGF5ZXIuaXNSZWZsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJMYXll
ciogc291cmNlTGF5ZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QobGF5ZXIucmVuZGVyZXIo
KS5wYXJlbnQoKSktPmxheWVyKCk7CisgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIHNvdXJj
ZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKmxheWVyLnJlbmRlcmVy
KCkucGFyZW50KCkpLmxheWVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyQmFj
a2luZyogYmFja2luZyA9IHNvdXJjZUxheWVyLT5iYWNraW5nKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwbGljYUxheWVyKCkgPT0g
bGF5ZXIuYmFja2luZygpLT5ncmFwaGljc0xheWVyKCkpOwotICAgICAgICAgICAgICAgICAgICBi
YWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRCeUxheWVyKDApOworICAgICAg
ICAgICAgICAgICAgICBiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRCeUxh
eWVyKG51bGxwdHIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtOTY2
LDE0ICs5NjYsMTQgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmco
UmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICB9CiAgICAgCiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIGlmIChsYXllckNoYW5nZWQgJiYgbGF5ZXIucmVuZGVyZXIoKS5p
c1ZpZGVvKCkpIHsKKyAgICBpZiAobGF5ZXJDaGFuZ2VkICYmIGlzPFJlbmRlclZpZGVvPihsYXll
ci5yZW5kZXJlcigpKSkgewogICAgICAgICAvLyBJZiBpdCdzIGEgdmlkZW8sIGdpdmUgdGhlIG1l
ZGlhIHBsYXllciBhIGNoYW5jZSB0byBob29rIHVwIHRvIHRoZSBsYXllci4KLSAgICAgICAgdG9S
ZW5kZXJWaWRlbyhsYXllci5yZW5kZXJlcigpKS5hY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCgpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJWaWRlbz4obGF5ZXIucmVuZGVyZXIoKSku
YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKICAgICB9CiAjZW5kaWYKIAotICAg
IGlmIChsYXllckNoYW5nZWQgJiYgbGF5ZXIucmVuZGVyZXIoKS5pc1dpZGdldCgpKSB7Ci0gICAg
ICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3NpdG9yID0gZnJhbWVDb250ZW50
c0NvbXBvc2l0b3IodG9SZW5kZXJXaWRnZXQoJmxheWVyLnJlbmRlcmVyKCkpKTsKKyAgICBpZiAo
bGF5ZXJDaGFuZ2VkICYmIGlzPFJlbmRlcldpZGdldD4obGF5ZXIucmVuZGVyZXIoKSkpIHsKKyAg
ICAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNvbnRl
bnRzQ29tcG9zaXRvcigmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSk7
CiAgICAgICAgIGlmIChpbm5lckNvbXBvc2l0b3IgJiYgaW5uZXJDb21wb3NpdG9yLT5pbkNvbXBv
c2l0aW5nTW9kZSgpKQogICAgICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT51cGRhdGVSb290TGF5
ZXJBdHRhY2htZW50KCk7CiAgICAgfQpAQCAtMTE3NSw3ICsxMTc1LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXll
ciogYW5jZXN0b3IKICAgICBsYXllci51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKIAogICAg
IGlmIChsYXllci5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lv
bnMoKSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkJiBmbG93VGhyZWFkID0gdG9SZW5kZXJG
bG93VGhyZWFkKGxheWVyLnJlbmRlcmVyKCkpOworICAgICAgICBhdXRvJiBmbG93VGhyZWFkID0g
ZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4obGF5ZXIucmVuZGVyZXIoKSk7CiAgICAgICAgIGxh
eWVyLnNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmbG93VGhyZWFkLmhhc0NvbXBvc2l0aW5n
UmVnaW9uRGVzY2VuZGFudCgpKTsKIAogICAgICAgICAvLyBCZWZvcmUgcmV0dXJuaW5nLCB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgbGlzdHMgb2YgYWxsIGNoaWxkIGxheWVycy4gVGhpcyBpcyByZXF1
aXJlZCBiZWNhdXNlLApAQCAtMTU0OCw4ICsxNTQ4LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJMYXllciYgbGF5ZXIsIFZl
Y3QKIAogICAgIGlmIChsYXllckJhY2tpbmcpIHsKICAgICAgICAgYm9vbCBwYXJlbnRlZCA9IGZh
bHNlOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc1dpZGdldCgpKQotICAgICAgICAg
ICAgcGFyZW50ZWQgPSBwYXJlbnRGcmFtZUNvbnRlbnRMYXllcnModG9SZW5kZXJXaWRnZXQoJmxh
eWVyLnJlbmRlcmVyKCkpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlcldpZGdldD4obGF5ZXIucmVu
ZGVyZXIoKSkpCisgICAgICAgICAgICBwYXJlbnRlZCA9IHBhcmVudEZyYW1lQ29udGVudExheWVy
cygmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSk7CiAKICAgICAgICAg
aWYgKCFwYXJlbnRlZCkKICAgICAgICAgICAgIGxheWVyQmFja2luZy0+cGFyZW50Rm9yU3VibGF5
ZXJzKCktPnNldENoaWxkcmVuKGxheWVyQ2hpbGRyZW4pOwpAQCAtMjA5MCwxMSArMjA5MCwxMSBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bmVlZHNUb0JlQ29tcG9zaXRlZChjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlcgogLy8gc3RhdGljCiBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
ciwgUmVuZGVyTGF5ZXI6OlZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKiB2
aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbikgY29uc3QKIHsKLSAgICBhdXRv
IHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSAmbGF5
ZXIucmVuZGVyZXIoKTsKIAogICAgIC8vIFRoZSBjb21wb3NpdGluZyBzdGF0ZSBvZiBhIHJlZmxl
Y3Rpb24gc2hvdWxkIG1hdGNoIHRoYXQgb2YgaXRzIHJlZmxlY3RlZCBsYXllci4KICAgICBpZiAo
bGF5ZXIuaXNSZWZsZWN0aW9uKCkpCi0gICAgICAgIHJlbmRlcmVyID0gdG9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0KHJlbmRlcmVyLT5wYXJlbnQoKSk7IC8vIFRoZSBSZW5kZXJSZXBsaWNhJ3MgcGFy
ZW50IGlzIHRoZSBvYmplY3QgYmVpbmcgcmVmbGVjdGVkLgorICAgICAgICByZW5kZXJlciA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyLT5wYXJlbnQoKSk7IC8vIFRo
ZSBSZW5kZXJSZXBsaWNhJ3MgcGFyZW50IGlzIHRoZSBvYmplY3QgYmVpbmcgcmVmbGVjdGVkLgog
CiAgICAgLy8gVGhlIHJvb3QgbGF5ZXIgYWx3YXlzIGhhcyBhIGNvbXBvc2l0aW5nIGxheWVyLCBi
dXQgaXQgbWF5IG5vdCBoYXZlIGJhY2tpbmcuCiAgICAgcmV0dXJuIHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JUcmFuc2Zvcm0oKnJlbmRlcmVyKQpAQCAtMjE4Myw5ICsyMTgzLDkgQEAgQ29tcG9zaXRp
bmdSZWFzb25zIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhc29uc0ZvckNvbXBvc2l0aW5nKGNv
bnN0IFJlbmRlckxheWUKICAgICBpZiAoIWxheWVyLmlzQ29tcG9zaXRlZCgpKQogICAgICAgICBy
ZXR1cm4gcmVhc29uczsKIAotICAgIGF1dG8gcmVuZGVyZXIgPSAmbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBhdXRvKiByZW5kZXJlciA9ICZsYXllci5yZW5kZXJlcigpOwogICAgIGlmIChsYXllci5p
c1JlZmxlY3Rpb24oKSkKLSAgICAgICAgcmVuZGVyZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QocmVuZGVyZXItPnBhcmVudCgpKTsKKyAgICAgICAgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlci0+cGFyZW50KCkpOwogCiAgICAgaWYgKHJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oKnJlbmRlcmVyKSkKICAgICAgICAgcmVhc29ucyB8
PSBDb21wb3NpdGluZ1JlYXNvbjNEVHJhbnNmb3JtOwpAQCAtMjQ1MCw4ICsyNDUwLDggQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JWaWRlbyhSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JgogICAgIGlmICghKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENo
cm9tZUNsaWVudDo6VmlkZW9UcmlnZ2VyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVO
QUJMRShWSURFTykKLSAgICBpZiAocmVuZGVyZXIuaXNWaWRlbygpKSB7Ci0gICAgICAgIFJlbmRl
clZpZGVvJiB2aWRlbyA9IHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIpOworICAgIGlmIChpczxSZW5k
ZXJWaWRlbz4ocmVuZGVyZXIpKSB7CisgICAgICAgIGF1dG8mIHZpZGVvID0gZG93bmNhc3Q8UmVu
ZGVyVmlkZW8+KHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuICh2aWRlby5yZXF1aXJlc0ltbWVk
aWF0ZUNvbXBvc2l0aW5nKCkgfHwgdmlkZW8uc2hvdWxkRGlzcGxheVZpZGVvKCkpICYmIGNhbkFj
Y2VsZXJhdGVWaWRlb1JlbmRlcmluZyh2aWRlbyk7CiAgICAgfQogI2Vsc2UKQEAgLTI0ODQsMTMg
KzI0ODQsMTMgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JQbHVnaW4oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICBpZiAoIShtX2NvbXBvc2l0
aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OlBsdWdpblRyaWdnZXIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIGNvbXBvc2l0ZSA9IHJlbmRlcmVyLmlzRW1iZWRkZWRPYmpl
Y3QoKSAmJiB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KCZyZW5kZXJlciktPmFsbG93c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKKyAgICBib29sIGNvbXBvc2l0ZSA9IGlzPFJlbmRlckVtYmVkZGVk
T2JqZWN0PihyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRl
cmVyKS5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAgICAgaWYgKCFjb21wb3NpdGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fcmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0
ZXJMYXlvdXQgPSB0cnVlOwogICAgIAotICAgIFJlbmRlcldpZGdldCYgcGx1Z2luUmVuZGVyZXIg
PSAqdG9SZW5kZXJXaWRnZXQoJnJlbmRlcmVyKTsKKyAgICBSZW5kZXJXaWRnZXQmIHBsdWdpblJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcik7CiAgICAgLy8gSWYgd2Ug
Y2FuJ3QgcmVsaWFibHkga25vdyB0aGUgc2l6ZSBvZiB0aGUgcGx1Z2luIHlldCwgZG9uJ3QgY2hh
bmdlIGNvbXBvc2l0aW5nIHN0YXRlLgogICAgIGlmIChwbHVnaW5SZW5kZXJlci5uZWVkc0xheW91
dCgpKQogICAgICAgICByZXR1cm4gcGx1Z2luUmVuZGVyZXIuaGFzTGF5ZXIoKSAmJiBwbHVnaW5S
ZW5kZXJlci5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKTsKQEAgLTI1MDIsMTAgKzI1MDIsMTAgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4o
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JGcmFtZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
cikgY29uc3QKIHsKLSAgICBpZiAoIXJlbmRlcmVyLmlzV2lkZ2V0KCkpCisgICAgaWYgKCFpczxS
ZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVu
ZGVyV2lkZ2V0JiBmcmFtZVJlbmRlcmVyID0gKnRvUmVuZGVyV2lkZ2V0KCZyZW5kZXJlcik7Cisg
ICAgYXV0byYgZnJhbWVSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIp
OwogCiAgICAgaWYgKCFmcmFtZVJlbmRlcmVyLnJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCAyMDk5MDQyMDIzMzU2MDNlYjVkZTBj
YjJkOWIwODA0ZmQ1NGIzODk4Li42Y2YwZmRjMGM5ODE5OWQyZjAwNzRjY2RlMzdiZmRkZDQxMGNm
ZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmgKQEAgLTY5LDggKzY5LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2xh
eWVyV2FzU2VsZlBhaW50aW5nOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRl
ckxheWVyTW9kZWxPYmplY3QsIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCgpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LCBpc1JlbmRlckxheWVyTW9kZWxPYmplY3QoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBlOGVjNWVmN2EyNTIw
ZjkzZWFlMTgzMzNkMWYxN2MxMGQyOWE5NDhmLi5kMGUzZmU1ZDI5NDcxMmIyMjJjNDljNzNiMjgz
YTNmNjdlMDYwZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVh
ay5oCkBAIC05Myw4ICs5Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzV0JSOwogfTsKIAot
UkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckxpbmVCcmVhaywgaXNMaW5lQnJlYWsoKSkK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRF
Ul9PQkpFQ1QoUmVuZGVyTGluZUJyZWFrLCBpc0xpbmVCcmVhaygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWV0ZXIuaAppbmRleCBhNjMyNTBlYTBhZmViOTllMThjZWU4YTI1Y2Q1OWY2
NTcxN2FmNjQ2Li5jNmUyNjBhZWRlOWFhOTJjZmFkYTg2ZmRhMmQ5ZjZmMWEyMzIzMmVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaApAQCAtNDcsOCArNDcsNiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJvcGFnYXRp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiB9OwogCi1SRU5ERVJfT0JKRUNU
X1RZUEVfQ0FTVFMoUmVuZGVyTWV0ZXIsIGlzTWV0ZXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTWV0ZXIs
IGlzTWV0ZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAKaW5kZXggZDIwY2IwM2RhY2RmYjg4NjY2MGExYzgy
NDM2ZTIwNjkxY2Y0MzY4Mi4uNjViYzAyY2JhOWQzN2YwM2Y4NTc4NDVjMjQ4NmVmZmUwYzZhNDdi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZC5jcHAKQEAgLTcyLDggKzcyLDggQEAgY29uc3QgY2hhciogUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjpyZW5kZXJOYW1lKCkgY29uc3QKIFJlbmRlck11bHRpQ29s
dW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZpcnN0TXVsdGlDb2x1bW5TZXQo
KSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBzaWJsaW5nID0gbmV4dFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKHNpYmxpbmctPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHNpYmxpbmcpOworICAgICAgICBpZiAoaXM8UmVuZGVy
TXVsdGlDb2x1bW5TZXQ+KCpzaWJsaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNldD4oc2libGluZyk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRy
OwogfQpAQCAtODEsOCArODEsOCBAQCBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkOjpmaXJzdE11bHRpQ29sdW1uU2V0KCkgY29uc3QKIFJlbmRlck11bHRp
Q29sdW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Omxhc3RNdWx0aUNvbHVtblNl
dCgpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBtdWx0aUNvbHVt
bkJsb2NrRmxvdygpLT5sYXN0Q2hpbGQoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnBy
ZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc1JlbmRlck11bHRpQ29s
dW1uU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJNdWx0aUNvbHVtblNldChzaWJs
aW5nKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc2libGluZykpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHNpYmxpbmcp
OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEyNCw4ICsxMjQsOCBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bGF5b3V0KCkKICAgICBtX2luTGF5b3V0ID0g
dHJ1ZTsKICAgICBtX2xhc3RTZXRXb3JrZWRPbiA9IG51bGxwdHI7CiAgICAgaWYgKFJlbmRlckJv
eCogZmlyc3QgPSBmaXJzdENvbHVtblNldE9yU3Bhbm5lcigpKSB7Ci0gICAgICAgIGlmIChmaXJz
dC0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKSB7Ci0gICAgICAgICAgICBtX2xhc3RTZXRXb3Jr
ZWRPbiA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoZmlyc3QpOworICAgICAgICBpZiAoaXM8UmVu
ZGVyTXVsdGlDb2x1bW5TZXQ+KCpmaXJzdCkpIHsKKyAgICAgICAgICAgIG1fbGFzdFNldFdvcmtl
ZE9uID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KGZpcnN0KTsKICAgICAgICAgICAg
IG1fbGFzdFNldFdvcmtlZE9uLT5iZWdpbkZsb3codGhpcyk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xOTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmV2YWN1
YXRlQW5kRGVzdHJveSgpCiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRS
ZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKIHsKLSAgICBSZW5kZXJN
dWx0aUNvbHVtblNldCogY29sdW1uU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChyZW5kZXJS
ZWdpb24pOworICAgIGF1dG8qIGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1u
U2V0PihyZW5kZXJSZWdpb24pOwogICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNldCogbmV4dFNl
dCA9IGNvbHVtblNldC0+bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CiAgICAgICAgIFJl
bmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQobmV4dFNldCk7
CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX3JlZ2lvbkxpc3QuZW5kKCkpOwpAQCAtMzY3LDM2ICsz
NjcsMzYgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWREZXNj
ZW5kYW50SW5zZXJ0ZWQoUmVuZGVyT2JqZWN0KiBkZXMKICAgICAgICAgcmV0dXJuOwogICAgIFJl
bmRlck9iamVjdCogc3VidHJlZVJvb3QgPSBkZXNjZW5kYW50OwogICAgIGZvciAoOyBkZXNjZW5k
YW50OyBkZXNjZW5kYW50ID0gKGRlc2NlbmRhbnQgPyBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRl
cihzdWJ0cmVlUm9vdCkgOiBudWxscHRyKSkgewotICAgICAgICBpZiAoZGVzY2VuZGFudC0+aXNS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpKSB7CisgICAgICAgIGlmIChpczxS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKmRlc2NlbmRhbnQpKSB7CiAgICAg
ICAgICAgICAvLyBBIHNwYW5uZXIncyBwbGFjZWhvbGRlciBoYXMgYmVlbiBpbnNlcnRlZC4gVGhl
IGFjdHVhbCBzcGFubmVyIHJlbmRlcmVyIGlzIG1vdmVkIGZyb20KICAgICAgICAgICAgIC8vIHdo
ZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBvY2N1ciAoaWYgaXQgd2VyZW4ndCBhIHNwYW5uZXIpIHRv
IGJlY29taW5nIGEgc2libGluZyBvZiB0aGUKICAgICAgICAgICAgIC8vIGNvbHVtbiBzZXRzLgot
ICAgICAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBsYWNlaG9s
ZGVyID0gdG9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihkZXNjZW5kYW50KTsK
LSAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlci0+Zmxvd1RocmVhZCgpICE9IHRoaXMpIHsKKyAg
ICAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyJiBwbGFjZWhvbGRl
ciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2Vu
ZGFudCk7CisgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIuZmxvd1RocmVhZCgpICE9IHRoaXMp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzbid0IG91ciBzcGFubmVyISBJdCBzaGlmdGVk
IGhlcmUgZnJvbSBhbiBhbmNlc3RvciBtdWx0aWNvbHVtbiBibG9jay4gSXQncyBnb2luZyB0byBl
bmQgdXAKICAgICAgICAgICAgICAgICAvLyBiZWNvbWluZyBvdXIgc3Bhbm5lciBpbnN0ZWFkLCBi
dXQgZm9yIGl0IHRvIGRvIHRoYXQgd2UgZmlyc3QgaGF2ZSB0byBudWtlIHRoZSBvcmlnaW5hbCBz
cGFubmVyLAogICAgICAgICAgICAgICAgIC8vIGFuZCBnZXQgdGhlIHNwYW5uZXIgY29udGVudCBi
YWNrIGludG8gdGhpcyBmbG93IHRocmVhZC4KLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHNw
YW5uZXIgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpOworICAgICAgICAgICAgICAgIFJlbmRlckJv
eCogc3Bhbm5lciA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgYWZ0ZXIgdGhlIHBsYWNlaG9sZGVyLCBidXQgZG9uJ3Qg
bGV0IGEgbm90aWZpY2F0aW9uIGhhcHBlbi4KICAgICAgICAgICAgICAgICBnU2hpZnRpbmdTcGFu
bmVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGFuY2VzdG9yQmxv
Y2sgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpzcGFubmVyLT5wYXJlbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgYW5jZXN0b3JCbG9jay5tb3ZlQ2hpbGRUbyhwbGFjZWhvbGRlci0+cGFyZW50
Qm94KCksIHNwYW5uZXIsIHBsYWNlaG9sZGVyLT5uZXh0U2libGluZygpLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICBhbmNlc3RvckJsb2NrLm1vdmVDaGlsZFRvKHBsYWNlaG9sZGVyLnBhcmVudEJv
eCgpLCBzcGFubmVyLCBwbGFjZWhvbGRlci5uZXh0U2libGluZygpLCB0cnVlKTsKICAgICAgICAg
ICAgICAgICBnU2hpZnRpbmdTcGFubmVyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBudWtlIHRoZSBwbGFjZWhvbGRlciwgc2luY2UgdGhl
IGFuY2VzdG9yIGFscmVhZHkgbG9zdCB0aGUgbWFwcGluZyB0byBpdCB3aGVuCiAgICAgICAgICAg
ICAgICAgLy8gd2Ugc2hpZnRlZCB0aGUgcGxhY2Vob2xkZXIgZG93biBpbnRvIHRoaXMgZmxvdyB0
aHJlYWQuCiAgICAgICAgICAgICAgICAgYW5jZXN0b3JCbG9jay5tdWx0aUNvbHVtbkZsb3dUaHJl
YWQoKS0+aGFuZGxlU3Bhbm5lclJlbW92YWwoc3Bhbm5lcik7Ci0gICAgICAgICAgICAgICAgcGxh
Y2Vob2xkZXItPmRlc3Ryb3koKTsKKyAgICAgICAgICAgICAgICBwbGFjZWhvbGRlci5kZXN0cm95
KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHByb2Nlc3Mg
dGhlIHNwYW5uZXIuCiAgICAgICAgICAgICAgICAgZGVzY2VuZGFudCA9IHByb2Nlc3NQb3NzaWJs
ZVNwYW5uZXJEZXNjZW5kYW50KHN1YnRyZWVSb290LCBzcGFubmVyKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKCFtX3NwYW5uZXJNYXAuZ2V0KHBsYWNlaG9sZGVyLT5zcGFubmVyKCkpKTsKLSAgICAgICAg
ICAgIG1fc3Bhbm5lck1hcC5hZGQocGxhY2Vob2xkZXItPnNwYW5uZXIoKSwgcGxhY2Vob2xkZXIp
OwotICAgICAgICAgICAgQVNTRVJUKCFwbGFjZWhvbGRlci0+Zmlyc3RDaGlsZCgpKTsgLy8gVGhl
cmUgc2hvdWxkIGJlIG5vIGNoaWxkcmVuIGhlcmUsIGJ1dCBpZiB0aGVyZSBhcmUsIHdlIG91Z2h0
IHRvIHNraXAgdGhlbS4KKyAgICAgICAgICAgIEFTU0VSVCghbV9zcGFubmVyTWFwLmdldChwbGFj
ZWhvbGRlci5zcGFubmVyKCkpKTsKKyAgICAgICAgICAgIG1fc3Bhbm5lck1hcC5hZGQocGxhY2Vo
b2xkZXIuc3Bhbm5lcigpLCAmcGxhY2Vob2xkZXIpOworICAgICAgICAgICAgQVNTRVJUKCFwbGFj
ZWhvbGRlci5maXJzdENoaWxkKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gY2hpbGRyZW4gaGVy
ZSwgYnV0IGlmIHRoZXJlIGFyZSwgd2Ugb3VnaHQgdG8gc2tpcCB0aGVtLgogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00MjgsMTIgKzQyOCwxMiBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZFJlbGF0aXZlV2lsbEJlUmVt
b3ZlZChSZW5kZXJPYmplY3QqCiAgICAgaWYgKG1fYmVpbmdFdmFjdWF0ZWQpCiAgICAgICAgIHJl
dHVybjsKICAgICBpbnZhbGlkYXRlUmVnaW9ucygpOwotICAgIGlmIChyZWxhdGl2ZS0+aXNSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpKSB7CisgICAgaWYgKGlzPFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqcmVsYXRpdmUpKSB7CiAgICAgICAgIC8vIFJl
bW92ZSB0aGUgbWFwIGVudHJ5IGZvciB0aGlzIHNwYW5uZXIsIGJ1dCBsZWF2ZSB0aGUgYWN0dWFs
IHNwYW5uZXIgcmVuZGVyZXIgYWxvbmUuIEFsc28KICAgICAgICAgLy8ga2VlcCB0aGUgcmVmZXJl
bmNlIHRvIHRoZSBzcGFubmVyLCBzaW5jZSB0aGUgcGxhY2Vob2xkZXIgbWF5IGJlIGFib3V0IHRv
IGJlIHJlLWluc2VydGVkCiAgICAgICAgIC8vIGluIHRoZSB0cmVlLgogICAgICAgICBBU1NFUlQo
cmVsYXRpdmUtPmlzRGVzY2VuZGFudE9mKHRoaXMpKTsKLSAgICAgICAgbV9zcGFubmVyTWFwLnJl
bW92ZSh0b1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKHJlbGF0aXZlKS0+c3Bh
bm5lcigpKTsKKyAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZShkb3duY2FzdDxSZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKnJlbGF0aXZlKS5zcGFubmVyKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChyZWxhdGl2ZS0+c3R5bGUoKS5jb2x1bW5TcGFuKCkg
PT0gQ29sdW1uU3BhbkFsbCkgewpAQCAtNDQ5LDIxICs0NDksMjEgQEAgdm9pZCBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRSZWxhdGl2ZVdpbGxCZVJlbW92ZWQoUmVuZGVy
T2JqZWN0KgogCiB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxvd1RocmVhZERl
c2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCogZGVzY2VuZGFudCkKIHsKLSAgICBpZiAoIWRl
c2NlbmRhbnQtPmlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkKKyAgICBp
ZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqZGVzY2VuZGFudCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
ciogcGxhY2Vob2xkZXIgPSB0b1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKGRl
c2NlbmRhbnQpOwotICAgIFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBwbGFjZWhvbGRlci0+Y29u
dGFpbmluZ0Jsb2NrKCk7CisgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKmRlc2NlbmRhbnQpOworICAgIFJlbmRlckJs
b2NrKiBjb250YWluZXIgPSBwbGFjZWhvbGRlci5jb250YWluaW5nQmxvY2soKTsKIAotICAgIGZv
ciAoUmVuZGVyQm94KiBwcmV2ID0gcHJldmlvdXNDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2Yo
cGxhY2Vob2xkZXItPnNwYW5uZXIoKSk7IHByZXY7IHByZXYgPSBwcmV2aW91c0NvbHVtblNldE9y
U3Bhbm5lclNpYmxpbmdPZihwcmV2KSkgewotICAgICAgICBpZiAocHJldi0+aXNSZW5kZXJNdWx0
aUNvbHVtblNldCgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHByZXYp
LT5lbmRGbG93KGNvbnRhaW5lciwgcGxhY2Vob2xkZXItPmxvZ2ljYWxUb3AoKSk7CisgICAgZm9y
IChSZW5kZXJCb3gqIHByZXYgPSBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihw
bGFjZWhvbGRlci5zcGFubmVyKCkpOyBwcmV2OyBwcmV2ID0gcHJldmlvdXNDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YocHJldikpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1u
U2V0PigqcHJldikpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0
PigqcHJldikuZW5kRmxvdyhjb250YWluZXIsIHBsYWNlaG9sZGVyLmxvZ2ljYWxUb3AoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoUmVuZGVyQm94
KiBuZXh0ID0gbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihwbGFjZWhvbGRlci0+c3Bh
bm5lcigpKTsgbmV4dDsgbmV4dCA9IG5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV4
dCkpIHsKLSAgICAgICAgaWYgKG5leHQtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkgewotICAg
ICAgICAgICAgbV9sYXN0U2V0V29ya2VkT24gPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KG5leHQp
OworICAgIGZvciAoUmVuZGVyQm94KiBuZXh0ID0gbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxp
bmdPZihwbGFjZWhvbGRlci5zcGFubmVyKCkpOyBuZXh0OyBuZXh0ID0gbmV4dENvbHVtblNldE9y
U3Bhbm5lclNpYmxpbmdPZihuZXh0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1
bW5TZXQ+KCpuZXh0KSkgeworICAgICAgICAgICAgbV9sYXN0U2V0V29ya2VkT24gPSBkb3duY2Fz
dDxSZW5kZXJNdWx0aUNvbHVtblNldD4obmV4dCk7CiAgICAgICAgICAgICBtX2xhc3RTZXRXb3Jr
ZWRPbi0+YmVnaW5GbG93KGNvbnRhaW5lcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6OmluaXRpYWxMb2dpY2FsV2lkdGgoKSBjb25zdAogCiB2b2lkIFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZDo6c2V0UGFnZUJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5
b3V0VW5pdCBvZmZzZXQsIExheW91dFVuaXQgc3BhY2VTaG9ydGFnZSkKIHsKLSAgICBpZiAoUmVu
ZGVyTXVsdGlDb2x1bW5TZXQqIG11bHRpY29sU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChy
ZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKKyAgICBpZiAoYXV0byogbXVsdGlj
b2xTZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9ja09mZnNl
dChibG9jaywgb2Zmc2V0KSkpCiAgICAgICAgIG11bHRpY29sU2V0LT5yZWNvcmRTcGFjZVNob3J0
YWdlKHNwYWNlU2hvcnRhZ2UpOwogfQogCiB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6dXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlv
dXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBtaW5IZWlnaHQpCiB7Ci0gICAgaWYgKFJlbmRlck11
bHRpQ29sdW1uU2V0KiBtdWx0aWNvbFNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQocmVnaW9u
QXRCbG9ja09mZnNldChibG9jaywgb2Zmc2V0KSkpCisgICAgaWYgKGF1dG8qIG11bHRpY29sU2V0
ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxv
Y2ssIG9mZnNldCkpKQogICAgICAgICBtdWx0aWNvbFNldC0+dXBkYXRlTWluaW11bUNvbHVtbkhl
aWdodChtaW5IZWlnaHQpOwogfQogCkBAIC01MzQsMTIgKzUzNCwxMiBAQCB2b2lkIFJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94
KiBib3gsIFJlbgogICAgIC8vIGV4YWN0IHNhbWUgZmxvdyB0aHJlYWQgcG9zaXRpb24sIHdoaWNo
IG1lYW5zIHRoYXQgc29tZSBwYXJ0cyBvZiB0aGUgY29kZSBtYXkgYmVsaWV2ZSB0aGF0IGEKICAg
ICAvLyBnaXZlbiBib3ggbGl2ZXMgaW4gc2V0cyB0aGF0IGl0IGRvZXNuJ3QgcmVhbGx5IGxpdmUg
aW4uIE1ha2Ugc29tZSBhZGp1c3RtZW50cyBoZXJlIGFuZAogICAgIC8vIGluY2x1ZGUgc3VjaCBz
ZXRzIGlmIHRoZXkgYXJlIGFkamFjZW50IHRvIHRoZSBzdGFydCBhbmQvb3IgZW5kIHJlZ2lvbnMu
Ci0gICAgZm9yIChSZW5kZXJNdWx0aUNvbHVtblNldCogY29sdW1uU2V0ID0gdG9SZW5kZXJNdWx0
aUNvbHVtblNldChzdGFydFJlZ2lvbiktPnByZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCk7
IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5wcmV2aW91c1NpYmxpbmdNdWx0aUNv
bHVtblNldCgpKSB7CisgICAgZm9yIChSZW5kZXJNdWx0aUNvbHVtblNldCogY29sdW1uU2V0ID0g
ZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpzdGFydFJlZ2lvbikucHJldmlvdXNTaWJs
aW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPnBy
ZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKICAgICAgICAgaWYgKGNvbHVtblNldC0+
bG9naWNhbEhlaWdodEluRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IHN0YXJ0UmVnaW9uID0gY29sdW1uU2V0OwogICAgIH0KLSAgICBmb3IgKFJlbmRlck11bHRpQ29s
dW1uU2V0KiBjb2x1bW5TZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KHN0YXJ0UmVnaW9uKS0+
bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVtblNldCA9IGNvbHVt
blNldC0+bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CisgICAgZm9yIChSZW5kZXJNdWx0
aUNvbHVtblNldCogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpz
dGFydFJlZ2lvbikubmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVt
blNldCA9IGNvbHVtblNldC0+bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CiAgICAgICAg
IGlmIChjb2x1bW5TZXQtPmxvZ2ljYWxIZWlnaHRJbkZsb3dUaHJlYWQoKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBlbmRSZWdpb24gPSBjb2x1bW5TZXQ7CkBAIC01NTAsNyArNTUwLDcg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW4KIAogYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5
b3V0VW5pdCBvZmZzZXQsIFJlbmRlckJveCogLypicmVha0NoaWxkKi8sIGJvb2wgLyppc0JlZm9y
ZSovLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQpCiB7Ci0gICAgaWYgKFJlbmRl
ck11bHRpQ29sdW1uU2V0KiBtdWx0aWNvbFNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQocmVn
aW9uQXRCbG9ja09mZnNldChibG9jaywgb2Zmc2V0KSkpIHsKKyAgICBpZiAoYXV0byogbXVsdGlj
b2xTZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9ja09mZnNl
dChibG9jaywgb2Zmc2V0KSkpIHsKICAgICAgICAgbXVsdGljb2xTZXQtPmFkZEZvcmNlZEJyZWFr
KG9mZnNldCk7CiAgICAgICAgIGlmIChvZmZzZXRCcmVha0FkanVzdG1lbnQpCiAgICAgICAgICAg
ICAqb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gcGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zm
c2V0KSA/IHBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCwgSW5jbHVk
ZVBhZ2VCb3VuZGFyeSkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCk7CkBAIC02ODksNyArNjg5
LDcgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om1hcEZyb21G
bG93VG9SZWdpb24oVHJhbnNmb3JtU3RhdGUmIHQKIExheW91dFNpemUgUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1JlZ2lvbihj
b25zdCBSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbiwgY29uc3QgTGF5b3V0VW5pdCBsb2dpY2Fs
T2Zmc2V0KSBjb25zdAogewogICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2hpY2ggbXVsdGljb2x1
bW4gc2V0IHdlIGhpdCwgd2UgbmVlZCB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbGF0aW9u
IG9mZnNldCBmb3IgdGhlIGNvbHVtbi4KLSAgICBjb25zdCBSZW5kZXJNdWx0aUNvbHVtblNldCog
Y29sdW1uU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNldChyZW5kZXJSZWdpb24pOworICAgIGNv
bnN0IGF1dG8qIGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZW5k
ZXJSZWdpb24pOwogICAgIExheW91dFBvaW50IHRyYW5zbGF0aW9uT2Zmc2V0ID0gY29sdW1uU2V0
LT5jb2x1bW5UcmFuc2xhdGlvbkZvck9mZnNldChsb2dpY2FsT2Zmc2V0KTsKICAgICAKICAgICAv
LyBOb3cgd2Uga25vdyBob3cgd2Ugd2FudCB0aGUgcmVjdCB0byBiZSB0cmFuc2xhdGVkIGludG8g
dGhlIHJlZ2lvbi4gQXQgdGhpcyBwb2ludCB3ZSdyZSBjb252ZXJ0aW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgKaW5k
ZXggNTEzZDMxZDkyN2YwNzFlYzhhYzVkYTk4ZDU1NzVlMDA3MmFlNjVkYS4uMDIyM2M5ODJjNzIw
YzM3ZTY3NTk0YTA3OGU5YzljODBjMGVjMTQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaApAQCAtMTU4LDggKzE1
OCw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgZ1NoaWZ0aW5nU3Bhbm5lcjsKIH07CiAK
LVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQsIGlz
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZCwgaXNSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCmluZGV4IGEzY2M2
ZTc3MDdjY2JiYjFhYWY3NzE5ZTQ1Njk1ODkwZmJiZmM5MTYuLjI0OGI5NDg5ZTg2NDU2NzEzNTU4
YmU2MTVhYjA5YzM2MWRkNWFlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcApAQCAtNTEsOCArNTEsOCBAQCBSZW5kZXJNdWx0aUNv
bHVtblNldDo6UmVuZGVyTXVsdGlDb2x1bW5TZXQoUmVuZGVyRmxvd1RocmVhZCYgZmxvd1RocmVh
ZCwgUGFzc1JlZgogUmVuZGVyTXVsdGlDb2x1bW5TZXQqIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpu
ZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlck9iamVj
dCogc2libGluZyA9IG5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc1JlbmRlck11bHRpQ29sdW1u
U2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJNdWx0aUNvbHVtblNldChzaWJsaW5n
KTsKKyAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc2libGluZykpCisgICAg
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHNpYmxpbmcpOwog
ICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTYwLDggKzYwLDggQEAgUmVuZGVyTXVs
dGlDb2x1bW5TZXQqIFJlbmRlck11bHRpQ29sdW1uU2V0OjpuZXh0U2libGluZ011bHRpQ29sdW1u
U2V0KCkgY29uc3QKIFJlbmRlck11bHRpQ29sdW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtblNldDo6
cHJldmlvdXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBzaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBz
aWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGluZy0+aXNSZW5k
ZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyTXVsdGlDb2x1
bW5TZXQoc2libGluZyk7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnNp
YmxpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0
PihzaWJsaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCmluZGV4IGY5MzBiNzdiZmZk
NzBmZjk1N2RmNzljMjlhODFjNDQ1YWMzZmVjNTguLjI3Y2E3MzdjMzhkODJhY2U0ZGY0YzU2NzUy
OTlkMWZmYjU2ZTM3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNldC5oCkBAIC0yMjUsOCArMjI1LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
Q29udGVudFJ1biwgMT4gbV9jb250ZW50UnVuczsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9D
QVNUUyhSZW5kZXJNdWx0aUNvbHVtblNldCwgaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09C
SkVDVChSZW5kZXJNdWx0aUNvbHVtblNldCwgaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIuaAppbmRleCBjYWFjMmU3YmRkYTc0N2FiZWU5MmVjYzdhOGU3
NDIxNTQ3ODIzMTc1Li5mMWE1Yjg4NDczYjg0YWY1YThhYjI1YzNiZDMzZTQ3YWIzYjQ3YWUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaApAQCAtNTUsOCArNTUsNiBAQCBwcml2YXRlOgog
ICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9mbG93VGhyZWFkOwogfTsKIAotUkVO
REVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVy
LCBpc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRl
ck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLCBpc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmNwcAppbmRleCBkMmZmODg1NjE1ODRlMTk2MDkyZWM2Mjg2YWQy
ZTRkMmE2NWU3MzY2Li5iNTA4NDM1ZDMwMTE3NzNhM2JmM2U1NzRiZDU2OTE5NGVjZGQ5OGE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudC5jcHAKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpjaGVja1JlZ2lvblN0eWxlKCkKICAgICBpZiAoIWlzUHNldWRvRWxlbWVudCgpKQogICAgICAg
ICBjdXN0b21SZWdpb25TdHlsZSA9IHZpZXcoKS5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5jaGVja1JlZ2lvblN0eWxlKGdlbmVyYXRpbmdFbGVtZW50KCkpOwogICAgIHNldEhhc0N1
c3RvbVJlZ2lvblN0eWxlKGN1c3RvbVJlZ2lvblN0eWxlKTsKLSAgICB0b1JlbmRlck5hbWVkRmxv
d1RocmVhZChtX2Zsb3dUaHJlYWQpLT5jaGVja1JlZ2lvbnNXaXRoU3R5bGluZygpOworICAgIGRv
d25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm1fZmxvd1RocmVhZCkuY2hlY2tSZWdpb25z
V2l0aFN0eWxpbmcoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CkBAIC00ODksNyArNDg5LDcgQEAgdm9p
ZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0
eWxlKCkKIAogUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
bmFtZWRGbG93VGhyZWFkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQoZmxvd1RocmVhZCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPihmbG93VGhyZWFkKCkpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50Ojp2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaAppbmRleCAzMzBmMzBjYWU0OGZm
ZGI3N2MyNTRmMDgyYTlmYWJiY2IxZGExMjczLi5jNWVmYjMyNDk0YzM4MWE2MmY4NDU3MWFmMTc3
YTY0NDZiM2MxZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gcGFy
ZW50IHJlbmRlcmVyIGluc3RlYWQuCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGF0IHJl
bmRlcmVyIGhvbGRpbmcgdGhlIGxheWVyLgogICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2Fubm90
IGJlIG51bGwgYmVjYXVzZSBDU1MgUmVnaW9ucyBjcmVhdGUgU3RhY2tpbmcgQ29udGV4dHMgKHdo
aWNoIG1lYW5zIHRoZXkgY3JlYXRlIGxheWVycykuCi0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgbGF5ZXJPd25lcigpIGNvbnN0IHsgcmV0dXJuICp0b1JlbmRlckxheWVyTW9kZWxPYmplY3Qo
cGFyZW50KCkpOyB9CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgbGF5ZXJPd25lcigpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpwYXJlbnQoKSk7
IH0KIAogICAgIGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hh
c0N1c3RvbVJlZ2lvblN0eWxlOyB9CiAgICAgdm9pZCBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CkBAIC0xNjMsOCArMTYzLDYgQEAgcHJpdmF0ZToKICAgICBM
YXlvdXRVbml0IG1fY29tcHV0ZWRBdXRvSGVpZ2h0OwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBF
X0NBU1RTKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19S
RU5ERVJfT0JKRUNUKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBpc1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCmluZGV4IDVjYmNmZmQ1Y2NlNmQyMThlYTQxYzRiNGNmOGVlNWM4ZDg2Njk4
ZTEuLjE3NGM4Y2U1NGFjOTVlZTgyYTc1MDUzODM5ZTdkMTkyODcxZDA0ZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC04
NSw3ICs4NSw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjbGVhckNvbnRlbnRFbGVt
ZW50cygpCiAKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjp1cGRhdGVXcml0aW5nTW9kZSgp
CiB7Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZpcnN0RnJhZ21lbnQgPSB0b1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KG1fcmVnaW9uTGlzdC5maXJzdCgpKTsKKyAgICBhdXRvKiBmaXJz
dEZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KG1fcmVnaW9uTGlz
dC5maXJzdCgpKTsKICAgICBpZiAoIWZpcnN0RnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IGZpcnN0RnJhZ21lbnQtPnN0eWxlKCkud3Jp
dGluZ01vZGUoKSkKQEAgLTIwMyw3ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBhZGRGcmFnbWVudFRv
TGlzdChSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0LCBSZW5kZXJOYW1lZEZsb3dGcmFnbQog
ICAgIGVsc2UgewogICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWdpb24gImdyZWF0ZXIiIHRo
YW4gcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuCiAgICAgICAgIGF1dG8gaXQgPSByZWdpb25MaXN0
LmJlZ2luKCk7Ci0gICAgICAgIHdoaWxlIChpdCAhPSByZWdpb25MaXN0LmVuZCgpICYmICFjb21w
YXJlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRzKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCB0b1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCppdCkpKQorICAgICAgICB3aGlsZSAoaXQgIT0gcmVnaW9u
TGlzdC5lbmQoKSAmJiAhY29tcGFyZVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50cyhyZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCwgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCppdCkpKQog
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgcmVnaW9uTGlzdC5pbnNlcnRCZWZvcmUoaXQsIHJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICB9CkBAIC0yMzAsMTggKzIzMCwxOCBAQCB2b2lk
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6YWRkUmVnaW9uVG9UaHJlYWQoUmVuZGVyUmVnaW9uKiBy
ZW5kZXJSZWdpb24pCiAgICAgQVNTRVJUKHJlbmRlclJlZ2lvbik7CiAgICAgQVNTRVJUKCFyZW5k
ZXJSZWdpb24tPmlzVmFsaWQoKSk7CiAKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJl
Z2lvbik7CisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOwog
ICAgIHJlc2V0TWFya0ZvckRlc3RydWN0aW9uKCk7CiAKLSAgICBpZiAocmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpICYmIHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+ZGVwZW5kc09uKHRoaXMpKSB7CisgICAgaWYg
KHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpICYmIHJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhp
cykpIHsKICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGludmFsaWQgcmVnaW9ucyBpcyBpcnJlbGV2
YW50LgotICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LmFkZChyZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCk7CisgICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QuYWRkKCZyZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCk7CiAgICAgICAgIC8vIFJlZ2lzdGVyIG91cnNlbGYgdG8gZ2V0IGEgbm90aWZpY2F0
aW9uIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMuCi0gICAgICAgIHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQuYWRkKHRo
aXMpOworICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJl
YWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQuYWRkKHRoaXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYWRkRnJhZ21lbnRUb05hbWVkRmxvd1RocmVhZChyZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCk7CisgICAgYWRkRnJhZ21lbnRUb05hbWVkRmxvd1RocmVhZCgmcmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQpOwogCiAgICAgaW52YWxpZGF0ZVJlZ2lvbnMoKTsKIH0KQEAgLTI1MCwyMiAr
MjUwLDIyIEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVSZWdpb25Gcm9tVGhy
ZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQogewogICAgIEFTU0VSVChyZW5kZXJSZWdp
b24pOwogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pOwotICAgIGlmIChy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCkpIHsKLSAgICAg
ICAgaWYgKCFyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9pbnZhbGlkUmVnaW9uTGlzdC5jb250YWlucyhyZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCkpOwotICAgICAgICAgICAgbV9pbnZhbGlkUmVnaW9uTGlzdC5yZW1vdmUocmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQpOwotICAgICAgICAgICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnBh
cmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5yZW1vdmUodGhpcyk7
CisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0g
ZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOworICAgIGlm
IChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSkgeworICAg
ICAgICBpZiAoIXJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1faW52YWxpZFJlZ2lvbkxpc3QuY29udGFpbnMoJnJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KSk7CisgICAgICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LnJlbW92ZSgmcmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICAgICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJUaHJlYWRzU2V0LnJlbW92ZSh0aGlz
KTsKICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgcmVnaW9ucyByZWN0
YW5nbGVzLiBUaGUgcmVtb3ZlZCByZWdpb24KICAgICAgICAgICAgIC8vIHdhcyBub3QgdGFrZW4g
aW50byBhY2NvdW50LiBKdXN0IHJldHVybiBoZXJlLgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIHJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQocmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKKyAgICAgICAgcmVtb3ZlRGVw
ZW5kZW5jeU9uRmxvd1RocmVhZChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZs
b3dUaHJlYWQoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOwotICAgIGJvb2wgd2FzRmlyc3QgPSBtX3JlZ2lvbkxp
c3QuZmlyc3QoKSA9PSByZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKLSAgICBtX3JlZ2lvbkxpc3Qu
cmVtb3ZlKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICBBU1NFUlQobV9yZWdpb25MaXN0
LmNvbnRhaW5zKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgIGJvb2wgd2FzRmlyc3Qg
PSBtX3JlZ2lvbkxpc3QuZmlyc3QoKSA9PSAmcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CisgICAg
bV9yZWdpb25MaXN0LnJlbW92ZSgmcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOwogCiAgICAgaWYg
KGNhbkJlRGVzdHJveWVkKCkpCiAgICAgICAgIHNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwpAQCAt
Mzc3LDcgKzM3Nyw3IEBAIExheW91dFJlY3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZWNvcmF0
aW9uc0NsaXBSZWN0Rm9yQm94SW5OYW1lZEZsb3dGcmFnbWVudChjCiAKIFJlbmRlckJsb2NrKiBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmZyYWdtZW50RnJvbVJlbmRlckJveEFzUmVuZGVyQmxvY2so
UmVuZGVyQm94KiByZW5kZXJCb3gsIGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50LCBjb25z
dCBSZW5kZXJCb3gmIGZsb3dlZEJveCkKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQocmVuZGVyQm94KS0+ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveChhYnNvbHV0
ZVBvaW50LCBmbG93ZWRCb3gpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ+KCpyZW5kZXJCb3gpLmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3goYWJzb2x1
dGVQb2ludCwgZmxvd2VkQm94KTsKIH0KIAogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveChjb25zdCBJ
bnRQb2ludCYgYWJzb2x1dGVQb2ludCwgY29uc3QgUmVuZGVyQm94JiBmbG93ZWRCb3gpCkBAIC0z
ODgsMTMgKzM4OCwxMyBAQCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjpmcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KAogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0
YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmcmFnbWVudCA9IHRvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKml0ZXIpOwotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdt
ZW50Q29udGFpbmVyID0gZnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyKCk7CisgICAgICAgIGF1
dG8mIGZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCoqaXRlcik7
CisgICAgICAgIFJlbmRlckJsb2NrRmxvdyYgZnJhZ21lbnRDb250YWluZXIgPSBmcmFnbWVudC5m
cmFnbWVudENvbnRhaW5lcigpOwogICAgICAgICBJbnRSZWN0IGZyYWdtZW50QWJzb2x1dGVSZWN0
KHJvdW5kZWRJbnRQb2ludChmcmFnbWVudENvbnRhaW5lci5sb2NhbFRvQWJzb2x1dGUoKSksIHJv
dW5kZWRJbnRTaXplKGZyYWdtZW50Q29udGFpbmVyLnBhZGRpbmdCb3hSZWN0KCkuc2l6ZSgpKSk7
CiAgICAgICAgIGlmIChmcmFnbWVudEFic29sdXRlUmVjdC5jb250YWlucyhhYnNvbHV0ZVBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgICAgIHJldHVybiAmZnJh
Z21lbnQ7CiAgICAgICAgIAotICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kUmVnaW9uKQorICAg
ICAgICBpZiAoJmZyYWdtZW50ID09IGVuZFJlZ2lvbikKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAKQEAgLTQzMCwxMyArNDMwLDEzIEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpjaGVja0ludmFsaWRSZWdpb25zKCkKIHsKICAgICBWZWN0b3I8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqPiBuZXdWYWxpZEZyYWdtZW50czsKICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1faW52
YWxpZFJlZ2lvbkxpc3QpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVk
Rmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pOworICAgICAg
ICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50PigqcmVnaW9uKTsKICAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29uIGEgcmVnaW9uIHdvdWxk
IGJlIGludmFsaWQgaXMgYmVjYXVzZSBpdCBoYXMgYSBwYXJlbnQgZmxvdyB0aHJlYWQuCi0gICAg
ICAgIEFTU0VSVCghbmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSAmJiBuYW1lZEZsb3dGcmFn
bWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCkpOwotICAgICAgICBpZiAobmFtZWRGbG93RnJh
Z21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhpcykpCisgICAgICAg
IEFTU0VSVCghbmFtZWRGbG93RnJhZ21lbnQuaXNWYWxpZCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50
LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKKyAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50
LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhpcykpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBuZXdWYWxpZEZyYWdtZW50cy5hcHBlbmQobmFtZWRGbG93RnJh
Z21lbnQpOworICAgICAgICBuZXdWYWxpZEZyYWdtZW50cy5hcHBlbmQoJm5hbWVkRmxvd0ZyYWdt
ZW50KTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50IDogbmV3VmFs
aWRGcmFnbWVudHMpIHsKQEAgLTgwMyw3ICs4MDMsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6Y2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKQogewogICAgIGJvb2wgaGFzUmVnaW9uc1dp
dGhTdHlsaW5nID0gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiByZWdpb24gOiBtX3JlZ2lv
bkxpc3QpIHsKLSAgICAgICAgaWYgKHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+
aGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkgeworICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpIHsKICAgICAg
ICAgICAgIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtODE2LDcgKzgxNiw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqCiAg
ICAgLy8gQ2xlYXIgdGhlIHN0eWxlcyBmb3IgdGhlIG9iamVjdCBpbiB0aGUgcmVnaW9ucy4KICAg
ICAvLyBGSVhNRTogUmVnaW9uIHN0eWxpbmcgaXMgbm90IGNvbXB1dGVkIG9ubHkgZm9yIHRoZSBy
ZWdpb24gcmFuZ2Ugb2YgdGhlIG9iamVjdCBzbyB0aGlzIGlzIHdoeSB3ZSBuZWVkIHRvIHdhbGsg
dGhlIHdob2xlIGNoYWluLgogICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KQot
ICAgICAgICB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbiktPmNsZWFyT2JqZWN0U3R5
bGVJblJlZ2lvbihvYmplY3QpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudD4oKnJlZ2lvbikuY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CiB9CiAKIHZv
aWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlck9iamVj
dCogY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
VGhyZWFkLmgKaW5kZXggZDgyNzEzYTI0ZTk2ODkzMDA1N2NkY2I2NjNjZTE5OWIxZTM0MjBiOC4u
MWIwZTc5NDA1MzZmNzA4NDA0OTI5N2E1N2JkNTE1OTZkZDFkODdiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaApAQCAtMTU5LDggKzE1
OSw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX2Zsb3dDb250ZW50Qm90dG9tOwogfTsK
IAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlck5hbWVkRmxvd1RocmVhZCwgaXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTmFtZWRGbG93VGhyZWFkLCBpc1Jl
bmRlck5hbWVkRmxvd1RocmVhZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCA4ODgwZGRlODRhYTk3N2M0MzY0MmJiYzQ3MDkxNzEyNzg4YjkwMmJmLi5h
YmJjMmI0NjMzMjRlOTIwZDllYzk3OGM3NDZhMDk2N2JjZWMwYjZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNTY5LDEzICs1NjksMTMgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OmNsZWFyTmVlZHNMYXlvdXQoKQogCiBzdGF0aWMgdm9pZCBzY2hlZHVsZVJl
bGF5b3V0Rm9yU3VidHJlZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJl
bmRlcmVyLmlzUmVuZGVyVmlldygpKSB7CisgICAgaWYgKCFpczxSZW5kZXJWaWV3PihyZW5kZXJl
cikpIHsKICAgICAgICAgaWYgKCFyZW5kZXJlci5pc1Jvb3RlZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2NoZWR1bGVSZWxheW91
dE9mU3VidHJlZShyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdG9SZW5k
ZXJWaWV3KHJlbmRlcmVyKS5mcmFtZVZpZXcoKS5zY2hlZHVsZVJlbGF5b3V0KCk7CisgICAgZG93
bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIpLmZyYW1lVmlldygpLnNjaGVkdWxlUmVsYXlvdXQo
KTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6Om1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0
KGJvb2wgc2NoZWR1bGVSZWxheW91dCwgUmVuZGVyRWxlbWVudCogbmV3Um9vdCkKQEAgLTY3Nywx
MyArNjc3LDEzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjppbnZhbGlkYXRlQ29udGFpbmVyUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpCiB2b2lkIFJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxS
ZXBhaW50KCkKIHsKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgdG9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT5zZXRSZXBhaW50U3RhdHVzKE5lZWRzRnVsbFJlcGFp
bnQpOworICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigp
LT5zZXRSZXBhaW50U3RhdHVzKE5lZWRzRnVsbFJlcGFpbnQpOwogfQogCiB2b2lkIFJlbmRlck9i
amVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
KCkKIHsKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgdG9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KHRoaXMpLT5sYXllcigpLT5zZXRSZXBhaW50U3RhdHVzKE5lZWRzRnVsbFJlcGFpbnRGb3JQ
b3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOworICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KCp0aGlzKS5sYXllcigpLT5zZXRSZXBhaW50U3RhdHVzKE5lZWRzRnVsbFJlcGFpbnRG
b3JQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOwogfQogCiBSZW5kZXJCbG9jayogUmVuZGVyT2Jq
ZWN0Ojpjb250YWluaW5nQmxvY2soKSBjb25zdApAQCAtMTIzNyw4ICsxMjM3LDggQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiByZXBhaW50Q28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZXBh
aW50Q29udGFpbmVyLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICB0b1JlbmRlckZs
b3dUaHJlYWQocmVwYWludENvbnRhaW5lciktPnJlcGFpbnRSZWN0YW5nbGVJblJlZ2lvbnMocik7
CisgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpyZXBhaW50Q29udGFpbmVyKSkgeworICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqcmVwYWludENvbnRhaW5lcikucmVwYWlu
dFJlY3RhbmdsZUluUmVnaW9ucyhyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTYy
NCw4ICsxNjI0LDggQEAgQ29sb3IgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25FbXBoYXNpc01hcmtD
b2xvcigpIGNvbnN0CiBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgUmVuZGVyT2JqZWN0OjpzZWxlY3Rp
b25Sb290KCkgY29uc3QKIHsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChmbG93VGhyZWFkICYmIGZsb3dUaHJl
YWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAqdG9SZW5kZXJO
YW1lZEZsb3dUaHJlYWQoZmxvd1RocmVhZCk7CisgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1Ro
cmVhZD4oZmxvd1RocmVhZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ+KCpmbG93VGhyZWFkKTsKIAogICAgIHJldHVybiB2aWV3KCk7CiB9CkBAIC0xNzYx
LDcgKzE3NjEsNyBAQCBib29sIFJlbmRlck9iamVjdDo6c2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNv
bnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lcgogI2lmIEVOQUJMRSgzRF9SRU5E
RVJJTkcpCiAgICAgLy8gaGFzVHJhbnNmb3JtKCkgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG9iamVj
dCBoYXMgdHJhbnNmb3JtLCB0cmFuc2Zvcm0tc3R5bGUgb3IgcGVyc3BlY3RpdmUuIFdlIGp1c3Qg
Y2FyZSBhYm91dCB0cmFuc2Zvcm0sCiAgICAgLy8gc28gY2hlY2sgdGhlIGxheWVyJ3MgdHJhbnNm
b3JtIGRpcmVjdGx5LgotICAgIHJldHVybiAoaGFzTGF5ZXIoKSAmJiB0b1JlbmRlckxheWVyTW9k
ZWxPYmplY3QodGhpcyktPmxheWVyKCktPnRyYW5zZm9ybSgpKSB8fCAoY29udGFpbmVyT2JqZWN0
ICYmIGNvbnRhaW5lck9iamVjdC0+c3R5bGUoKS5oYXNQZXJzcGVjdGl2ZSgpKTsKKyAgICByZXR1
cm4gKGhhc0xheWVyKCkgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMp
LmxheWVyKCktPnRyYW5zZm9ybSgpKSB8fCAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9i
amVjdC0+c3R5bGUoKS5oYXNQZXJzcGVjdGl2ZSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGNvbnRhaW5lck9iamVjdCk7CiAgICAgcmV0dXJuIGhhc1RyYW5zZm9ybSgpOwpAQCAtMTc3Mywx
NCArMTc3MywxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lck9iamVjdAogICAgIHRyYW5zZm9ybS5tYWtl
SWRlbnRpdHkoKTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9mZnNldEluQ29udGFpbmVyLndp
ZHRoKCksIG9mZnNldEluQ29udGFpbmVyLmhlaWdodCgpKTsKICAgICBSZW5kZXJMYXllciogbGF5
ZXI7Ci0gICAgaWYgKGhhc0xheWVyKCkgJiYgKGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KHRoaXMpLT5sYXllcigpKSAmJiBsYXllci0+dHJhbnNmb3JtKCkpCisgICAgaWYgKGhhc0xh
eWVyKCkgJiYgKGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMp
LmxheWVyKCkpICYmIGxheWVyLT50cmFuc2Zvcm0oKSkKICAgICAgICAgdHJhbnNmb3JtLm11bHRp
cGx5KGxheWVyLT5jdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIAogI2lmIEVOQUJMRSgzRF9SRU5E
RVJJTkcpCiAgICAgaWYgKGNvbnRhaW5lck9iamVjdCAmJiBjb250YWluZXJPYmplY3QtPmhhc0xh
eWVyKCkgJiYgY29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLmhhc1BlcnNwZWN0aXZlKCkpIHsKICAg
ICAgICAgLy8gUGVycHNlY3RpdmUgb24gdGhlIGNvbnRhaW5lciBhZmZlY3RzIHVzLCBzbyB3ZSBo
YXZlIHRvIGZhY3RvciBpdCBpbiBoZXJlLgogICAgICAgICBBU1NFUlQoY29udGFpbmVyT2JqZWN0
LT5oYXNMYXllcigpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbiA9IHRv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdChjb250YWluZXJPYmplY3QpLT5sYXllcigpLT5wZXJzcGVj
dGl2ZU9yaWdpbigpOworICAgICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZlT3JpZ2luID0gZG93
bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKmNvbnRhaW5lck9iamVjdCkubGF5ZXIoKS0+
cGVyc3BlY3RpdmVPcmlnaW4oKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJz
cGVjdGl2ZU1hdHJpeDsKICAgICAgICAgcGVyc3BlY3RpdmVNYXRyaXguYXBwbHlQZXJzcGVjdGl2
ZShjb250YWluZXJPYmplY3QtPnN0eWxlKCkucGVyc3BlY3RpdmUoKSk7CkBAIC0xODU4LDE1ICsx
ODU4LDE1IEBAIExheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqLCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUCiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojpp
c1Jvb3RlZChSZW5kZXJWaWV3KiogdmlldykgY29uc3QKIHsKLSAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIG8gPSB0aGlzOwotICAgIHdoaWxlIChvLT5wYXJlbnQoKSkKLSAgICAgICAgbyA9IG8tPnBh
cmVudCgpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzOworICAgIHdo
aWxlIChyZW5kZXJlci0+cGFyZW50KCkpCisgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBh
cmVudCgpOwogCi0gICAgaWYgKCFvLT5pc1JlbmRlclZpZXcoKSkKKyAgICBpZiAoIWlzPFJlbmRl
clZpZXc+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh2aWV3
KQotICAgICAgICAqdmlldyA9ICZjb25zdF9jYXN0PFJlbmRlclZpZXcmPih0b1JlbmRlclZpZXco
Km8pKTsKKyAgICAgICAgKnZpZXcgPSBjb25zdF9jYXN0PFJlbmRlclZpZXcqPihkb3duY2FzdDxS
ZW5kZXJWaWV3PihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTk5LDcg
KzE5OTksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICAvLyBi
ZSBtb3ZlZCBpbnRvIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95LgogICAgIGlmIChoYXNM
YXllcigpKSB7CiAgICAgICAgIHNldEhhc0xheWVyKGZhbHNlKTsKLSAgICAgICAgdG9SZW5kZXJM
YXllck1vZGVsT2JqZWN0KHRoaXMpLT5kZXN0cm95TGF5ZXIoKTsKKyAgICAgICAgZG93bmNhc3Q8
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmRlc3Ryb3lMYXllcigpOwogICAgIH0KIAog
ICAgIGNsZWFyTGF5b3V0Um9vdElmTmVlZGVkKCk7CkBAIC0yMTMyLDcgKzIxMzIsNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogCiBib29sIFJlbmRl
ck9iamVjdDo6aXNDb21wb3NpdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzTGF5ZXIoKSAm
JiB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPmlzQ29tcG9zaXRlZCgp
OworICAgIHJldHVybiBoYXNMYXllcigpICYmIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KCp0aGlzKS5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKTsKIH0KIAogYm9vbCBSZW5kZXJPYmpl
Y3Q6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZp
bHRlcikKQEAgLTI1NzksNyArMjU3OSw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0CiBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSBjb25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93
VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQorICAgIGlmICghaXM8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPihmbG93VGhyZWFkKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAvLyBGSVhNRTogT25jZSByZWdpb25zIGFyZSBmdWxseSBpbnRlZ3JhdGVkIHdpdGggdGhlIGNv
bXBvc2l0aW5nIHN5c3RlbSB3ZSBzaG91bGQgdW5jb21tZW50IHRoaXMgYXNzZXJ0LgpAQCAtMjU4
Nyw3ICsyNTg3LDcgQEAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKICAgICAvLyBhIGxheWVyIHdpdGhv
dXQga25vd2luZyB0aGUgY29udGFpbmluZyByZWdpb24gaW4gYWR2YW5jZS4KICAgICAvLyBBU1NF
UlQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpICYmIGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdp
b24oKS0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKIAotICAgIHJldHVybiB0b1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSk7CisgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihmbG93VGhyZWFkLT5jdXJyZW50
UmVnaW9uKCkpOwogfQogCiBSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCmluZGV4IGUyOWU0OTJlOGFjMDUzMzc1ODcyNjY1ODMwYWNlZDgyMjE4NDBj
MmMuLmQ3ZDMxOTgxYTJmZmY5M2JmYjQ0ZjM3NThlNTg0YjYzNDNiY2FkMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTExMjIsMTAgKzExMjIsNiBAQCBpbmxp
bmUgYm9vbCBSZW5kZXJPYmplY3Q6OmJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKCkKICAg
ICByZXR1cm4gbV9iaXRmaWVsZHMuYm94RGVjb3JhdGlvblN0YXRlKCkgPT0gSGFzQm94RGVjb3Jh
dGlvbnNBbmRCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZDsKIH0KIAotLy8gRklYTUU6IFJl
bW92ZSB0aGlzIG1hY3JvIGFuZCB1c2UgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JK
RUNUKCkgaW5zdGVhZC4KLSNkZWZpbmUgUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRvVmFsdWVUeXBlTmFt
ZSwgUmVuZGVyT2JqZWN0LCByZW5kZXJlciwgaXM8VG9WYWx1ZVR5cGVOYW1lPigqcmVuZGVyZXIp
LCBpczxUb1ZhbHVlVHlwZU5hbWU+KHJlbmRlcmVyKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChUb1ZhbHVl
VHlwZU5hbWUsIHByZWRpY2F0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJv
Z3Jlc3MuaAppbmRleCA4NmU4NzY1NGEzN2U4MWRkMDMwMWU2ZjQxNTIxNmJjNGM2NjMzMTU2Li5l
ODI0ZjFhNTQxOTdiMjdlYWI2YjNkMDFjNTMzNjcwN2ExN2NkNzk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaApAQCAtNTgsOCArNTgsNiBAQCBwcml2YXRlOgog
ICAgIFRpbWVyPFJlbmRlclByb2dyZXNzPiBtX2FuaW1hdGlvblRpbWVyOwogfTsKIAotUkVOREVS
X09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlclByb2dyZXNzLCBpc1Byb2dyZXNzKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNU
KFJlbmRlclByb2dyZXNzLCBpc1Byb2dyZXNzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieS5jcHAKaW5kZXggZjAyYWJjMGRhOTVhNzhhODRkYTZmZjE5Y2M3MDEwMTYyNTAwOTc4
MS4uZDJlMDhkNDBhZjZhMzBhMzQyMjFhMzI2ODQxMzkzNDYwNWFmNWM0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIHN0YXRpYyBS
ZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYg
cnVieSkKIHN0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5kZXJFbGVt
ZW50KiBydWJ5KQogewogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQo
KTsKLSAgICBpZiAoY2hpbGQgJiYgIWNoaWxkLT5pc1J1YnlSdW4oKSkKKyAgICBpZiAoY2hpbGQg
JiYgIWlzPFJlbmRlclJ1YnlSdW4+KCpjaGlsZCkpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOwotICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigp
IHx8IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2so
cnVieSkpOwotICAgIHJldHVybiBjaGlsZCAmJiBjaGlsZC0+aXNSdWJ5UnVuKCkgPyB0b1JlbmRl
clJ1YnlSdW4oY2hpbGQpIDogMDsKKyAgICBBU1NFUlQoIWNoaWxkIHx8IGlzPFJlbmRlclJ1YnlS
dW4+KCpjaGlsZCkgfHwgY2hpbGQtPmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkID09IHJ1YnlC
ZWZvcmVCbG9jayhydWJ5KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KGNo
aWxkKTsKIH0KIAogc3RhdGljIGlubGluZSBSZW5kZXJSdWJ5UnVuJiBmaW5kUnVieVJ1blBhcmVu
dChSZW5kZXJPYmplY3QmIGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5jcHAKaW5kZXggM2U1MzkyOTljZWI2N2UzZDRjOTQzMDY2MDE0NzNjYmNmNjlkOTI0
MS4uMzEzMjk5ODU2ZDFjZTZhMzhmMWJkYTE3MTRjYmY2ZTIwNDcwMzM3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCkBAIC0xMzEsOSArMTMxLDcgQEAg
dm9pZCBSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRv
QmFzZSwgUmVuZGVyT2JqZWN0KiBiZWYKIFJlbmRlclJ1YnlSdW4qIFJlbmRlclJ1YnlCYXNlOjpy
dWJ5UnVuKCkgY29uc3QKIHsKICAgICBBU1NFUlQocGFyZW50KCkpOwotICAgIEFTU0VSVChwYXJl
bnQoKS0+aXNSdWJ5UnVuKCkpOwotCi0gICAgcmV0dXJuICZ0b1JlbmRlclJ1YnlSdW4oKnBhcmVu
dCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocGFyZW50KCkpOwogfQog
CiBFVGV4dEFsaWduIFJlbmRlclJ1YnlCYXNlOjp0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIC8q
IGVuZHNXaXRoU29mdEJyZWFrICovKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uY3BwCmluZGV4IDE1MjRhZDM4MzYyMDkyMDRhNDZhZmRlNWE2ZDUyMDQxMTVh
NTc3MTcuLmM1YWE0MDNhNGQ1ZjdlOWExZTVlYmJmNjdmY2Y5YWI4MDlhM2FkMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKQEAgLTE2MywxNSArMTYzLDE1
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyUnVieVJ1bjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
JiBjaGlsZCkKICAgICBpZiAoIWJlaW5nRGVzdHJveWVkKCkgJiYgIWRvY3VtZW50QmVpbmdEZXN0
cm95ZWQoKSAmJiBjaGlsZC5pc1J1YnlUZXh0KCkpIHsKICAgICAgICAgUmVuZGVyUnVieUJhc2Uq
IGJhc2UgPSBydWJ5QmFzZSgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJpZ2h0TmVpZ2hib3Vy
ID0gbmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKGJhc2UgJiYgcmlnaHROZWlnaGJvdXIgJiYg
cmlnaHROZWlnaGJvdXItPmlzUnVieVJ1bigpKSB7CisgICAgICAgIGlmIChiYXNlICYmIGlzPFJl
bmRlclJ1YnlSdW4+KHJpZ2h0TmVpZ2hib3VyKSkgewogICAgICAgICAgICAgLy8gUnVieSBydW4g
d2l0aG91dCBhIGJhc2UgY2FuIGhhcHBlbiBvbmx5IGF0IHRoZSBmaXJzdCBydW4uCi0gICAgICAg
ICAgICBSZW5kZXJSdWJ5UnVuKiByaWdodFJ1biA9IHRvUmVuZGVyUnVieVJ1bihyaWdodE5laWdo
Ym91cik7Ci0gICAgICAgICAgICBpZiAocmlnaHRSdW4tPmhhc1J1YnlCYXNlKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJSdWJ5QmFzZSogcmlnaHRCYXNlID0gcmlnaHRSdW4tPnJ1YnlCYXNl
U2FmZSgpOworICAgICAgICAgICAgUmVuZGVyUnVieVJ1biYgcmlnaHRSdW4gPSBkb3duY2FzdDxS
ZW5kZXJSdWJ5UnVuPigqcmlnaHROZWlnaGJvdXIpOworICAgICAgICAgICAgaWYgKHJpZ2h0UnVu
Lmhhc1J1YnlCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJSdWJ5QmFzZSogcmlnaHRC
YXNlID0gcmlnaHRSdW4ucnVieUJhc2VTYWZlKCk7CiAgICAgICAgICAgICAgICAgLy8gQ29sbGVj
dCBhbGwgY2hpbGRyZW4gaW4gYSBzaW5nbGUgYmFzZSwgdGhlbiBzd2FwIHRoZSBiYXNlcy4KICAg
ICAgICAgICAgICAgICByaWdodEJhc2UtPm1lcmdlQ2hpbGRyZW5XaXRoQmFzZShiYXNlKTsKLSAg
ICAgICAgICAgICAgICBtb3ZlQ2hpbGRUbyhyaWdodFJ1biwgYmFzZSk7Ci0gICAgICAgICAgICAg
ICAgcmlnaHRSdW4tPm1vdmVDaGlsZFRvKHRoaXMsIHJpZ2h0QmFzZSk7CisgICAgICAgICAgICAg
ICAgbW92ZUNoaWxkVG8oJnJpZ2h0UnVuLCBiYXNlKTsKKyAgICAgICAgICAgICAgICByaWdodFJ1
bi5tb3ZlQ2hpbGRUbyh0aGlzLCByaWdodEJhc2UpOwogICAgICAgICAgICAgICAgIC8vIFRoZSBu
b3cgZW1wdHkgcnVieSBiYXNlIHdpbGwgYmUgcmVtb3ZlZCBiZWxvdy4KICAgICAgICAgICAgICAg
ICBBU1NFUlQoIXJ1YnlCYXNlKCktPmZpcnN0Q2hpbGQoKSk7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAppbmRleCBmZGYzODFmZDlmYjVlZjBi
NjhkOTNlNTczM2EyNjc0YmE3ZmNlOTM4Li5kOWRjZTRmNzhhNmVlNWUzNGNhNzY5OWVjNGMxMDEz
YTVmNjhjN2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eVJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKQEAg
LTc3LDggKzc3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJB
bm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayopIHsgfQogfTsKIAotUkVOREVSX09CSkVDVF9UWVBF
X0NBU1RTKFJlbmRlclJ1YnlSdW4sIGlzUnVieVJ1bigpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJSdWJ5UnVu
LCBpc1J1YnlSdW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAppbmRl
eCBkYThhYzdhYjg2Nzc0OTg0ODA0MTE1YmQ3ZjU4NjY5OGYxMmRjMjkxLi44NmRhMjI1YTAzMGY4
MmVjMzVhMGFlM2M1ZWNkY2IxNDE2NjQ3Zjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5oCkBAIC01MSw4ICs1MSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpIG92ZXJyaWRlOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRl
clNsaWRlciwgaXNTbGlkZXIoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyU2xpZGVyLCBpc1NsaWRlcigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IGFiNDJkNTRhNDBlMjNk
YmYyYjgyYTZhMTQ1YmVkYmQ1ODE3ZTk2YjUuLjg1N2RlNjczZDZhMDZjNGE1MGNhYTE1YWYwMjQw
OGJiODdiMzVjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAg
LTQzOCw4ICs0MzgsOCBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheQogCiBBTFdBWVNfSU5MSU5F
IGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGludCBzdGFy
dCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYg
aXNDb21iaW5lVGV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21i
aW5lVGV4dCA9IHRvUmVuZGVyQ29tYmluZVRleHQoKnRoaXMpOworICAgIGlmIChzdHlsZS5oYXNU
ZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcykpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJpbmVUZXh0ID0gZG93bmNhc3Q8UmVuZGVyQ29t
YmluZVRleHQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGNvbWJpbmVUZXh0LmlzQ29tYmluZWQoKSkK
ICAgICAgICAgICAgIHJldHVybiBjb21iaW5lVGV4dC5jb21iaW5lZFRleHRXaWR0aChmKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCBj
NTk4NzVhNjVmMzQ3YzcwOTY2ZDk4OTJmZmFkNWFiNWM2ZjM1YmM5Li5jZDYzMjk1OTI3MTZkM2Ix
NzhhZTEzNDhhZjg2MTA3OGE4MWFhODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTE2MjAsNyArMTYyMCw3IEBAIGRvdWJsZSBSZW5kZXJUaGVt
ZUd0azo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNv
bnN0CiBJbnRSZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQog
ewogICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxCYXJSZWN0KTsKLSAgICBjb25zdCBSZW5k
ZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRlck9iamVj
dCk7CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9n
cmVzcz4ocmVuZGVyT2JqZWN0KTsKICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1pbmF0
ZSgpKSB7CiAgICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkg
KiByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpOwogICAgICAgICBpZiAocmVuZGVyT2JqZWN0LnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gUlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCmluZGV4IGE3ZGJlODU3MzI5ZDFjNjY3ZTI3ZjE0YWM5M2U3NDM5NTM0MzQ2
ZWIuLmVkNTE2NWViYjZmM2RlNzc2OTA1OTFiZWE5YTFjYmZlZTZkNDJlMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTg0OSw3ICs4NDksNyBAQCBk
b3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdAogCiBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNz
QmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyZXIuaXNQcm9ncmVz
cygpKQorICAgIGlmICghaXM8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBjb25zdCBpbnQgcHJvZ3Jlc3NCYXJIZWlnaHQgPSA5OwpAQCAtODk3
LDcgKzg5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAKICAgICBjb250ZXh0LT5maWxs
UmVjdChGbG9hdFJlY3QocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24sIHJlY3Qu
d2lkdGgoKSwgdXBwZXJHcmFkaWVudEhlaWdodCkpOwogCi0gICAgY29uc3QgUmVuZGVyUHJvZ3Jl
c3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlcmVyKTsKKyAgICBj
b25zdCBhdXRvJiByZW5kZXJQcm9ncmVzcyA9IGRvd25jYXN0PFJlbmRlclByb2dyZXNzPihyZW5k
ZXJlcik7CiAgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAgICAg
ICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9
IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSwgMC4wLCAxLjApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDY3NzMxYjRmZjc2NWQ1M2Yw
YzBmMTk4ZjVhYjBjMTNmMmRhZDI1OGYuLmU3ODViZWQyOGVjZGJiODU4NmU2ZGIzYjVlOWU0OTE3
NWZkMjliNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
QEAgLTk2NywxMiArOTY3LDEyIEBAIEludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYgcmVuZGVyTWV0ZXIsIGNvbnN0CiAKIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAg
IGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKKyAgICBpZiAoIWlzPFJlbmRlck1ldGVyPihy
ZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogCi0gICAgTlNM
ZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVy
KHJlbmRlck9iamVjdCkpOworICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJ
bmRpY2F0b3JGb3IoZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KHJlbmRlck9iamVjdCkpOwogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
CiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3IocmVu
ZGVyT2JqZWN0KV07CkBAIC0xMTE1LDEzICsxMTE1LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVuCiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LmlzUHJvZ3Jlc3MoKSkKKyAg
ICBpZiAoIWlzPFJlbmRlclByb2dyZXNzPihyZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91
bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IGNvbnRyb2xTaXplRm9yRm9udChyZW5kZXJPYmplY3Quc3R5bGUoKSk7CiAKLSAgICBjb25zdCBS
ZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVy
T2JqZWN0KTsKKyAgICBjb25zdCBhdXRvJiByZW5kZXJQcm9ncmVzcyA9IGRvd25jYXN0PFJlbmRl
clByb2dyZXNzPihyZW5kZXJPYmplY3QpOwogICAgIEhJVGhlbWVUcmFja0RyYXdJbmZvIHRyYWNr
SW5mbzsKICAgICB0cmFja0luZm8udmVyc2lvbiA9IDA7CiAgICAgaWYgKGNvbnRyb2xTaXplID09
IE5TUmVndWxhckNvbnRyb2xTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVNhZmFyaS5jcHAKaW5kZXggZjNkYzVhNTE5ZTQ1ZGVlOGEyMTZhMWJiMjZkODlmZTA1
NjQ4ZjQ0MS4uODY1MjIxMzk4NzJiNmRmYjUzZjEzNTMxM2YwY2VkYjMwNmFhMjExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCkBAIC0xMjE2
LDEwICsxMjE2LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWV0ZXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50CiB7CiAgICAgLy8gTk9URTog
VGhpcyByb3V0aW5lIGlzIGZvciB0ZXN0aW5nIG9ubHkuIEl0IHNob3VsZCBiZSBmbGVzaGVkIG91
dCB3aXRoIGEgcmVhbCBDRy1iYXNlZCBpbXBsZW1lbnRhdGlvbi4KICAgICAvLyBSaWdodCBub3cg
aXQgdXNlcyBhIHNsaWRlciwgd2l0aCB0aGUgdGh1bWIgcG9zaXRpb25lZCBhdCB0aGUgbWV0ZXIg
cG9pbnQuCi0gICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQorICAgIGlmICghaXM8UmVu
ZGVyTWV0ZXI+KHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRN
TE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRl
ckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8UmVu
ZGVyTWV0ZXI+KHJlbmRlck9iamVjdCkubWV0ZXJFbGVtZW50KCk7CiAKICAgICBpbnQgcmVtYWlu
aW5nID0gc3RhdGljX2Nhc3Q8aW50PigoMS4wIC0gZWxlbWVudC0+dmFsdWVSYXRpbygpKSAqIHN0
YXRpY19jYXN0PGRvdWJsZT4ocmVjdC5zaXplKCkud2lkdGgoKSkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRleCA0MGNlNTI5NmY0MGU1NzI1ODc4
NTMxYzljNDc4ZGM3ZDE5OTNkYTE0Li5hZGI0NjMyNTM5ZjIxOTgwNWEyOWRiNGI4MDVlNWQzNWMw
ZTkzM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAK
QEAgLTExNzUsMTAgKzExNzUsMTAgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXpl
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm8KIAogYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQorICAgIGlmICghaXM8UmVuZGVyTWV0ZXI+
KHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTE1ldGVyRWxl
bWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQo
KTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+
KHJlbmRlck9iamVjdCkubWV0ZXJFbGVtZW50KCk7CiAKICAgICBUaGVtZURhdGEgdGhlbWUgPSBn
ZXRUaGVtZURhdGEocmVuZGVyT2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDI0ZjA3YTQ3OTIxZGJjNzQzNmM4ZjY3YzFiZmI5
NDFhOGQ1ODY5YzguLjY4OTg3OTBiZTM0ZjRkMzFlMzUwMDg3NTM4OGRiOWVhNTc3YWQyYmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTY1
Miw4ICs2NTIsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclJlZ2lvbkxpc3QoY29uc3QgUmVu
ZGVyUmVnaW9uTGlzdCYgZmxvd1RocmVhZFJlZ2lvbkxpc3QsCiAKICAgICAgICAgRWxlbWVudCog
Z2VuZXJhdGluZ0VsZW1lbnQgPSByZW5kZXJSZWdpb24tPmdlbmVyYXRpbmdFbGVtZW50KCk7CiAg
ICAgICAgIGlmIChnZW5lcmF0aW5nRWxlbWVudCkgewotICAgICAgICAgICAgYm9vbCBpc1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50ID0gcmVuZGVyUmVnaW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KCk7Ci0gICAgICAgICAgICBpZiAoaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAmJiB0b1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbiktPmhhc0N1c3RvbVJlZ2lvblN0eWxl
KCkpCisgICAgICAgICAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBpczxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lvbik7CisgICAgICAgICAgICBpZiAoaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAmJiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dD4oKnJlbmRlclJlZ2lvbikuaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkKICAgICAgICAgICAgICAg
ICB0cyA8PCAiIHJlZ2lvbiBzdHlsZTogMSI7CiAgICAgICAgICAgICBpZiAocmVuZGVyUmVnaW9u
LT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgICAgIHRzIDw8ICIgaGFzQXV0
b0xvZ2ljYWxIZWlnaHQiOwpAQCAtODAyLDggKzgwMiw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5
ZXJzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllCiAgICAgCiAgICAgLy8gQWx0b3VnaCB0aGUgUmVuZGVyRmxvd1RocmVhZCByZXF1aXJlcyBh
IGxheWVyLCBpdCBpcyBub3QgY29sbGVjdGVkIGJ5IGl0cyBwYXJlbnQsCiAgICAgLy8gc28gd2Ug
aGF2ZSB0byB0cmVhdCBpdCBhcyBhIHNwZWNpYWwgY2FzZS4KLSAgICBpZiAobC0+cmVuZGVyZXIo
KS5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgd3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKHRz
LCB0b1JlbmRlclZpZXcobC0+cmVuZGVyZXIoKSksIHJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3Qs
IGluZGVudCwgYmVoYXZpb3IpOworICAgIGlmIChpczxSZW5kZXJWaWV3PihsLT5yZW5kZXJlcigp
KSkKKyAgICAgICAgd3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKHRzLCBkb3duY2FzdDxSZW5k
ZXJWaWV3PihsLT5yZW5kZXJlcigpKSwgcm9vdExheWVyLCBwYWludERpcnR5UmVjdCwgaW5kZW50
LCBiZWhhdmlvcik7CiB9CiAKIHN0YXRpYyBTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZGUqIG5vZGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCmluZGV4IDU0YWUzZjA1YmExMGY5
NTE0MTdmZDY2OWM5NjRjNDAxMmRhMjg3MjUuLmVhNjA4ZWM4MTY2MGJiMDQ3NzE1YzM5MmVjNGNk
NzRjMGY3NTY3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWRlby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCkBAIC05
MCw4ICs5MCw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0U2l6ZSBtX2NhY2hlZEltYWdlU2l6ZTsK
IH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJWaWRlbywgaXNWaWRlbygpKQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVS
X09CSkVDVChSZW5kZXJWaWRlbywgaXNWaWRlbygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCmluZGV4IDc2NDIyOTEwZTNiMWU5YWNjOGZkY2ViZWNkMzkyNTBhZmJlYTNm
ZDcuLjUxNjA5MjZlMDQ2Mjc4MzU4OWQ4MDI3MGQ4ZGExNGVjYzkyNjIxM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTY2LDExICs2NiwxMSBAQCBzdHJ1Y3Qg
U2VsZWN0aW9uSXRlcmF0b3IgewogICAgIAogICAgIHZvaWQgY2hlY2tGb3JTcGFubmVyKCkKICAg
ICB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50IHx8ICFtX2N1cnJlbnQtPmlzUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50KSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBsYWNlaG9sZGVy
ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihtX2N1cnJlbnQpOwotICAg
ICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQocGxhY2Vob2xkZXIpOwotICAgICAgICBtX2N1cnJl
bnQgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpOworICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9
IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50
KTsKKyAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7CisgICAgICAg
IG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKICAgICB9CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50KCkKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIFJlbmRlclZpZXc6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbXBvc2l0ZWQoUmVuZGVyRWxlbWVudCogb2Jq
ZWN0KQogewotICAgIHJldHVybiBvYmplY3QtPmhhc0xheWVyKCkgJiYgdG9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0KG9iamVjdCktPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOworICAgIHJldHVybiBv
YmplY3QtPmhhc0xheWVyKCkgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKm9i
amVjdCkubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBy
ZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZChSZW5kZXJFbGVtZW50KiByb290T2JqZWN0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggODNhYmU3MmE2Nzc1MWM0YjUwMzM5
ZjQyYTE1NzA2OWIyZTM1ZjlhNS4uMjk2ZmY1NjgxNGY3OWEzNjQxMTc1NDQ3Yzc2NDE5ZDg0NDdk
YmZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0zNjksOCArMzY5
LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJl
bmRlclZpZXcsIGlzUmVuZGVyVmlldygpKQotCiAvLyBTdGFjay1iYXNlZCBjbGFzcyB0byBhc3Np
c3Qgd2l0aCBMYXlvdXRTdGF0ZSBwdXNoL3BvcAogY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXlvdXRTdGF0ZU1haW50YWluZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCmluZGV4IGIyN2FlOWFlM2NmYjBjNWVm
MzAyZDFjNTFjNjkxNmJmYWQ1NzY3MGMuLmE1NTU3OGEzMjNkY2RlOTk3M2Q2MGFjMmNhNTcyNzhi
OTk0MzJkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKQEAgLTEw
NCw4ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIHJl
Y3RhbmdsZSBuZWVkcyB0byByZW1haW4gY29ycmVjdCBhZnRlciBzY3JvbGxpbmcsIHNvIGl0IGlz
IHN0b3JlZCBpbiBjb250ZW50IHZpZXcgY29vcmRpbmF0ZXMsIGFuZCBub3QgY2xpcHBlZCB0byB3
aW5kb3cuCiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyV2lkZ2V0LCBpc1dp
ZGdldCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfUkVOREVSX09CSkVDVChSZW5kZXJXaWRnZXQsIGlzV2lkZ2V0KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVI
ZWFkZXJzLmgKaW5kZXggYjY0Yzc2NDRjNjk4MjAyOTYyMWUwODQzZDRiZTgxNGYxMjc0MzkzMC4u
NTNmMDFjMWY4YThhMzhkMThkYjUwNTMxMzA5NmVkZDgzNzUzNGUyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGlu
ZUhlYWRlcnMuaApAQCAtNTk0LDggKzU5NCw4IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4
dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAg
ICAgaWYgKG1fYXV0b1dyYXAgJiYgIVJlbmRlclN0eWxlOjphdXRvV3JhcChtX2xhc3RXUykgJiYg
bV9pZ25vcmluZ1NwYWNlcykKICAgICAgICAgY29tbWl0TGluZUJyZWFrQXRDdXJyZW50V2lkdGgo
cmVuZGVyVGV4dCk7CiAKLSAgICBpZiAocmVuZGVyVGV4dC5zdHlsZSgpLmhhc1RleHRDb21iaW5l
KCkgJiYgbV9jdXJyZW50LnJlbmRlcmVyKCktPmlzQ29tYmluZVRleHQoKSAmJiAhdG9SZW5kZXJD
b21iaW5lVGV4dCgqbV9jdXJyZW50LnJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSkgewotICAgICAg
ICBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVJlbmRlcmVyID0gdG9SZW5kZXJDb21iaW5lVGV4
dCgqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgIGlmIChyZW5kZXJUZXh0LnN0eWxlKCkuaGFz
VGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKm1fY3VycmVudC5yZW5kZXJl
cigpKSAmJiAhZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KCptX2N1cnJlbnQucmVuZGVyZXIo
KSkuaXNDb21iaW5lZCgpKSB7CisgICAgICAgIGF1dG8mIGNvbWJpbmVSZW5kZXJlciA9IGRvd25j
YXN0PFJlbmRlckNvbWJpbmVUZXh0PigqbV9jdXJyZW50LnJlbmRlcmVyKCkpOwogICAgICAgICBj
b21iaW5lUmVuZGVyZXIuY29tYmluZVRleHQoKTsKICAgICAgICAgLy8gVGhlIGxlbmd0aCBvZiB0
aGUgcmVuZGVyZXIncyB0ZXh0IG1heSBoYXZlIGNoYW5nZWQuIEluY3JlbWVudCBzdGFsZSBpdGVy
YXRvciBwb3NpdGlvbnMKICAgICAgICAgaWYgKGl0ZXJhdG9ySXNCZXlvbmRFbmRPZlJlbmRlckNv
bWJpbmVUZXh0KG1fbGluZUJyZWFrLCBjb21iaW5lUmVuZGVyZXIpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKaW5kZXggYzc3NGE1ODY2Njc2MDE3
Yjk0ODY2MDllNWVhNjA2ODgzYjhkMzk5NS4uYjY4NTdiNmY0MzdhZDUyNmE1ODcxYThmNDAyYzQ3
MmYwYjc2NTg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVh
a2VyLmNwcApAQCAtNjcsOSArNjcsOSBAQCB2b2lkIExpbmVCcmVha2VyOjpza2lwTGVhZGluZ1do
aXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgTGluZUluZm8mCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LmlzRmxvYXRpbmcoKSkKICAgICAgICAg
ICAgIG1fYmxvY2sucG9zaXRpb25OZXdGbG9hdE9uTGluZShtX2Jsb2NrLmluc2VydEZsb2F0aW5n
T2JqZWN0KGRvd25jYXN0PFJlbmRlckJveD4ob2JqZWN0KSksIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7Ci0gICAgICAgIGVsc2UgaWYgKG9iamVjdC5pc1RleHQo
KSAmJiBvYmplY3Quc3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIG9iamVjdC5pc0NvbWJpbmVU
ZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0KS5pc0NvbWJpbmVkKCkpIHsKLSAg
ICAgICAgICAgIHRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0KS5jb21iaW5lVGV4dCgpOwotICAg
ICAgICAgICAgaWYgKHRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0KS5pc0NvbWJpbmVkKCkpCisg
ICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlckNvbWJpbmVUZXh0PihvYmplY3QpICYmIG9iamVjdC5z
dHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgIWRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0Pihv
YmplY3QpLmlzQ29tYmluZWQoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQ29tYmlu
ZVRleHQ+KG9iamVjdCkuY29tYmluZVRleHQoKTsKKyAgICAgICAgICAgIGlmIChkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5pc0NvbWJpbmVkKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgcmVzb2x2ZXIuaW5jcmVtZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMTQ4ZDNjMjNlMzA0NTQxZTRmODNiYzI1
ZWRiOWZlNTE2NTVkN2NmMy4uYTg1MjE3YmQzMDA0ZDA3YzY0NGQ5NjU1YWI2OTBkMDRmODVlMjZi
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjIyMCwxNCArMjIyMCwx
MyBAQCBib29sIEludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1
cmVkKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzRW1iZWRkZWRPYmplY3QoKSkgeworICAgIGF1dG8qIHJl
bmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVk
T2JqZWN0PihyZW5kZXJlcikpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZW5kZXJFbWJlZGRlZE9iamVjdCog
ZW1iZWQgPSB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKTsKLSAgICByZXR1cm4gZW1i
ZWQtPmlzUmVwbGFjZW1lbnRPYnNjdXJlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJF
bWJlZGRlZE9iamVjdD4oKnJlbmRlcmVyKS5pc1JlcGxhY2VtZW50T2JzY3VyZWQoKTsKIH0KICAg
ICAKIGJvb2wgSW50ZXJuYWxzOjppc1BsdWdpblNuYXBzaG90dGVkKEVsZW1lbnQqIGVsZW1lbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IGYy
NGRmZDI3YjQzNTllNTA5MmU2MTAxMjJmNWEzMGFhZmRiNDMwZDIuLjM5NmU2MWViNmJhZTg2ZDc0
YmNkYzU4ZDZjZTY3NzVhOWZiM2Y3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0K
QEAgLTQzMCwxMCArNDMwLDggQEAgLSAodm9pZClzZW5kTW9kaWZpZXJFdmVudFdpdGhLZXlDb2Rl
OihpbnQpa2V5Q29kZSBjaGFyYWN0ZXI6KGNoYXIpY2hhcmFjdGVyCiAKIC0gKHZvaWQpcGx1Z2lu
SG9zdERpZWQKIHsKLSAgICBpZiAoX2VsZW1lbnQtPnJlbmRlcmVyKCkgJiYgX2VsZW1lbnQtPnJl
bmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSkgewotICAgICAgICBSZW5kZXJFbWJlZGRlZE9i
amVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KF9lbGVtZW50LT5yZW5kZXJl
cigpKTsKLSAgICAgICAgcmVuZGVyZXItPnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVkKTsKLSAgICB9CisgICAgaWYgKGlzPFJl
bmRlckVtYmVkZGVkT2JqZWN0PihfZWxlbWVudC0+cmVuZGVyZXIoKSkpCisgICAgICAgIGRvd25j
YXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqX2VsZW1lbnQtPnJlbmRlcmVyKCkpLnNldFBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVk
KTsKIAogICAgIF9wbHVnaW5MYXllciA9IG5pbDsKICAgICBfcHJveHkgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CmluZGV4IDk5ODU5NGZhZDI1Mzg2OWQ1YWM3NzZiNDc0NGU2NzI0MThiM2QwNzEuLmI5MTQ0ZmJh
ZjhkN2YxNDI2MDRhMzVkN2RmZDY1YjVjY2MwMDE3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KQEAgLTI5MCwx
MSArMjkwLDExIEBAIC0gKHZvaWQpcmVzdGFydFRpbWVycwogCiAtIChOU1JlY3QpX3dpbmRvd0Ns
aXBSZWN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5kZXJl
cigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gX2VsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAKLSAgICByZXR1cm4gdG9S
ZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aW5kb3dDbGlwUmVjdCgpOworICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2luZG93Q2xpcFJlY3QoKTsKIH0KIAogLSAo
TlNSZWN0KXZpc2libGVSZWN0CkBAIC04NzQsMTMgKzg3NCwxMyBAQCAtICh2b2lkKWludmFsaWRh
dGVQbHVnaW5Db250ZW50UmVjdDooTlNSZWN0KXJlY3QKIAogLSAoTlNSZWN0KWFjdHVhbFZpc2li
bGVSZWN0SW5XaW5kb3cKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gX2VsZW1lbnQt
PnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBfZWxlbWVudC0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIAogICAgIElu
dFJlY3Qgd2lkZ2V0UmVjdCA9IHJlbmRlcmVyLT5waXhlbFNuYXBwZWRBYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKICAgICB3aWRnZXRSZWN0ID0gcmVuZGVyZXItPnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb250ZW50c1RvV2luZG93KHdpZGdldFJlY3QpOwotICAgIHJldHVybiBpbnRlcnNlY3Rp
b24odG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aW5kb3dDbGlwUmVjdCgpLCB3aWRnZXRSZWN0
KTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRl
cmVyKS53aW5kb3dDbGlwUmVjdCgpLCB3aWRnZXRSZWN0KTsKIH0KIAogLSAoQ0FMYXllciAqKXBs
dWdpbkxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IGM1ZjllM2FkMzVkZjg3OWU5YWYzNGU0OGI2
MGI1N2FhNGJlZjI4OTMuLjJlNDNlZjg1NzI5Y2ZmYTE4Y2NkYTA1NDhhZWFmZmFmNDcyZWRmY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC0xOTYyLDggKzE5NjIsOCBAQCBQYXNzUmVmUHRyPFdpZGdl
dD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXpl
LCBIVE1MUAogICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CiAgICAgICAgIGlmIChXS1Nob3VsZEJs
b2NrUGx1Z2luKFtwbHVnaW5QYWNrYWdlIGJ1bmRsZUlkZW50aWZpZXJdLCBbcGx1Z2luUGFja2Fn
ZSBidW5kbGVWZXJzaW9uXSkpIHsKICAgICAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9y
QmxvY2tlZFBsdWdJblZlcnNpb247Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIo
KS0+aXNFbWJlZGRlZE9iamVjdCgpKQotICAgICAgICAgICAgICAgIHRvUmVuZGVyRW1iZWRkZWRP
YmplY3QoZWxlbWVudC0+cmVuZGVyZXIoKSktPnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29u
KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb24pOworICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIoKSkpCisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCplbGVtZW50LT5y
ZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9i
amVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNs
YXNzXV0pCiAgICAgICAgICAgICAgICAgdmlldyA9IHBsdWdpblZpZXcobV93ZWJGcmFtZS5nZXQo
KSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlLCBhdHRyaWJ1dGVLZXlzLCBraXQo
cGFyYW1WYWx1ZXMpLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIGxvYWRNYW51YWxseSk7CkBAIC0y
MDY3LDggKzIwNjcsOCBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcwogICAgIGlmIChwbHVnaW5Q
YWNrYWdlKSB7CiAgICAgICAgIGlmIChXS1Nob3VsZEJsb2NrUGx1Z2luKFtwbHVnaW5QYWNrYWdl
IGJ1bmRsZUlkZW50aWZpZXJdLCBbcGx1Z2luUGFja2FnZSBidW5kbGVWZXJzaW9uXSkpIHsKICAg
ICAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQmxvY2tlZFBsdWdJblZlcnNpb247Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVjdCgpKQot
ICAgICAgICAgICAgICAgIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QoZWxlbWVudC0+cmVuZGVyZXIo
KSktPnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJ
bnNlY3VyZVBsdWdpblZlcnNpb24pOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckVtYmVkZGVk
T2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIoKSkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCplbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJz
aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICAgICAgICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDAyMDgwNzEwN2U0ZGI5MzgxMjIxMWU3OWZk
ODNmM2M4ZmQwNzZkNzguLmYzMzU5Yjg5OWU0ZDZhMGRkNjQwYmM0OGYwODE0ZTRlMTkxZGFjMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKQEAgLTE0NjYsMTYgKzE0NjYsMTIgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5Qcm9jZXNz
Q3Jhc2hlZCgpCiB7CiAgICAgbV9wbHVnaW5Qcm9jZXNzSGFzQ3Jhc2hlZCA9IHRydWU7CiAKLSAg
ICBpZiAoIW1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSkK
KyAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihtX3BsdWdpbkVsZW1lbnQtPnJlbmRl
cmVyKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsdWdpbkVsZW1lbnQtPnNldE5lZWRz
U3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogCi0gICAgUmVuZGVyRW1iZWRkZWRP
YmplY3QqIHJlbmRlcmVyID0gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChtX3BsdWdpbkVsZW1lbnQt
PnJlbmRlcmVyKCkpOwotICAgIHJlbmRlcmVyLT5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7CisgICAgZG93bmNhc3Q8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KCptX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpLnNldFBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVk
KTsKICAgICAKICAgICBXaWRnZXQ6OmludmFsaWRhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5NjU5ZjBkNTRlOWIzNjc1NjY2
MmJhNmY3NDgzNThiN2Y1ODQ1MjQxLi5lZmY3ZDA1YTk2MjNhOGVjNTE1YzUyNzVjZDQ0ODFlYWUw
NmFlNDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCkBAIC02NTQsMTEgKzY1NCwxMSBAQCBQYXNzUmVmUHRyPFBsdWdpbj4gV2ViUGFnZTo6Y3Jl
YXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdQogCiAgICAg
aWYgKGlzQmxvY2tlZFBsdWdpbikgewogICAgICAgICBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKHBsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRk
ZWRPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlck9i
amVjdCA9IHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSk7
Ci0gICAgICAgICAgICByZW5kZXJPYmplY3QtPnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29u
V2l0aERlc2NyaXB0aW9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNp
b24sIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRP
YnNjdXJlZCA9IHJlbmRlck9iamVjdC0+aXNSZXBsYWNlbWVudE9ic2N1cmVkKCk7Ci0gICAgICAg
ICAgICByZW5kZXJPYmplY3QtPnNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNIaWRkZW4o
cmVwbGFjZW1lbnRPYnNjdXJlZCk7CisgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVj
dD4oKnBsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5k
ZXJPYmplY3QgPSBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKnBsdWdpbkVsZW1lbnQt
PnJlbmRlcmVyKCkpOworICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnNldFBsdWdpblVuYXZhaWxh
YmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3Vy
ZVBsdWdpblZlcnNpb24sIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pOworICAgICAgICAgICAg
cmVwbGFjZW1lbnRPYnNjdXJlZCA9IHJlbmRlck9iamVjdC5pc1JlcGxhY2VtZW50T2JzY3VyZWQo
KTsKKyAgICAgICAgICAgIHJlbmRlck9iamVjdC5zZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRv
cklzSGlkZGVuKHJlcGxhY2VtZW50T2JzY3VyZWQpOwogICAgICAgICB9CiAKICAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbihw
YXJhbWV0ZXJzLm1pbWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgZnJhbWVVUkxTdHJp
bmcsIHBhZ2VVUkxTdHJpbmcsIHJlcGxhY2VtZW50T2JzY3VyZWQpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240095</attachid>
            <date>2014-10-19 19:57:37 -0700</date>
            <delta_ts>2014-10-19 20:42:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137845-20141019195742.patch</filename>
            <type>text/plain</type>
            <size>158347</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uMDc3ZTdlMjViNjk2YjhhMmZhMzA3MWUxNzRjNDk5
Y2E1YjZmMWUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNC0xMC0xNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5kCisg
ICAgICAgIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpwcm9ncmVzc0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjptZXRlckVsZW1lbnQpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZXRGb3JBdHRh
Y2htZW50Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojp2aXNpYmxlUG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zm
c2V0KToKKyAgICAgICAgKiBkb20vV2ViS2l0TmFtZWRGbG93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdE5hbWVkRmxvdzo6b3ZlcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRO
YW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3c6OmdldFJlZ2lvbnNCeUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0TmFtZWRGbG93OjpnZXRSZWdpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdpZGdldFJl
bmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlcldpZGdl
dCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6
cmVuZGVyTWV0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQ
bHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpyZW5kZXJQcm9ncmVzcyk6CisgICAgICAg
ICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Eb2N1
bWVudDo6cGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlU2l6ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmpl
Y3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om93bmVyUmVuZGVy
ZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZl
bnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50
VG9TdWJmcmFtZSk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50
VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JFdmVudFRhcmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFRvVXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0
ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0RmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhl
aWdodENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmFkanVzdFN0eWxl
RGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphZGRMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVsZW1lbnQ6Om1vdmVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6cmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omhh
c0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjpyZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lvbnND
b21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRGaWx0ZXJC
YWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zcGFy
ZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZU9mZnNldFRvd2FyZHNB
bmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJz
VW5kZXJSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdldFJl
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWluZXJDb21wb3NpdGluZ0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlk
ZW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5l
QnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Omxhc3RNdWx0aUNv
bHVtblNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OmFkZFJlZ2lvblRvVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDo6Zmxvd1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRSZWxhdGl2ZVdpbGxC
ZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp1cGRhdGVNaW5pbXVtUGFnZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lv
blJhbmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1Jl
Z2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cHJldmlvdXNTaWJs
aW5nTXVsdGlDb2x1bW5TZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
blNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdp
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bmFt
ZWRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6dXBkYXRlV3JpdGluZ01vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6YWRkRnJhZ21lbnRUb0xpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21SZW5k
ZXJCb3hBc1JlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2Jq
ZWN0Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjaGVkdWxlUmVsYXlvdXRGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVt
ZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludFVzaW5n
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9v
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNob3VsZFVzZVRyYW5zZm9ybUZy
b21Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSb290
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUHJvZ3Jlc3MuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpsYXN0UnVieVJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpydWJ5UnVu
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jl
c3NSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclJlZ2lvbkxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJWaWRlby5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDb21wb3NpdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmg6CisgICAgICAgIChXZWJD
b3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lw
TGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRv
ck9ic2N1cmVkKToKKwogMjAxNC0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBm
cm9tIFBsYXRmb3JtIHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBlN2ZhMTE2NWM4MGNm
OWE4OTMwYjJkNDliZmE1NjRlMTkwZDk0ZjI0Li41YWI4YzQ2MjVlNzEzYWFkNDVkMzU5MDJhODVj
Y2QyM2UyYTk0YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMTAt
MTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGZvciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4NDUK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVc2UgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGZvciBhbGwgcmVtYWluaW5nIFJlbmRlck9iamVjdCBzdWJjbGFzc2Vz
IGFuZCAKKyAgICAgICAgY2xlYW4gdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCisKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAg
ICgtW1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyBwbHVnaW5Ib3N0RGllZF0pOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBfd2luZG93Q2xpcFJlY3RdKToKKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93XSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKwogMjAxNC0xMC0xNyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggZm9y
IDMyLWJpdCBZb3NlbWl0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNmYTA5ZWY3MTFkYjc1NjU4YWRiZTYzNWVj
N2E3MjhhOThkOGZkYzIuLmY5YTkwYTQyYWJhMTViYjQzN2VhOTA5NTI3NTFkNTVkMjRmNGM3NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMC0xNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9y
IGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9y
IGFsbCByZW1haW5pbmcgUmVuZGVyT2JqZWN0IHN1YmNsYXNzZXMgYW5kIAorICAgICAgICBjbGVh
biB1cCB0aGUgc3Vycm91bmRpbmcgY29kZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luUHJv
Y2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKwogMjAxNC0xMC0xOSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBmcm9tIFBsYXRmb3JtIHRvIFdlYktpdDIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcAppbmRleCBiNTJiZjc4NTkyYmU0NmQ0M2I1YmI4NTVj
ZmI4Nzk5NmI0ODEzODFhLi5hYWZhN2YzOTUwMTJmYTgwYjBiNGQ1NjE2NjZiYTFlMmI5ZGFlNDJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCkBAIC0xMjIsMTkgKzEyMiwxOSBAQCBm
bG9hdCBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6Om1pblZhbHVlRm9yUmFuZ2UoKSBj
b25zdAogCiBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0
b3I6OnByb2dyZXNzRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyLT5pc1By
b2dyZXNzKCkpCisgICAgaWYgKCFpczxSZW5kZXJQcm9ncmVzcz4oKm1fcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9SZW5kZXJQcm9ncmVzcyht
X3JlbmRlcmVyKS0+cHJvZ3Jlc3NFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clByb2dyZXNzPigqbV9yZW5kZXJlcikucHJvZ3Jlc3NFbGVtZW50KCk7CiB9CiAKICNpZiBFTkFC
TEUoTUVURVJfRUxFTUVOVCkKIEhUTUxNZXRlckVsZW1lbnQqIEFjY2Vzc2liaWxpdHlQcm9ncmVz
c0luZGljYXRvcjo6bWV0ZXJFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXIt
PmlzTWV0ZXIoKSkKKyAgICBpZiAoIWlzPFJlbmRlck1ldGVyPigqbV9yZW5kZXJlcikpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvUmVuZGVyTWV0ZXIobV9yZW5kZXJl
ciktPm1ldGVyRWxlbWVudCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNZXRlcj4oKm1f
cmVuZGVyZXIpLm1ldGVyRWxlbWVudCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDc2OWE1NjJkMmIwMTBkNmFkYTRhNzJiNjk3YTZiMDY5NGY0MDk1ZmMuLmNhMjJlY2M2
MjQwY2I0MzNjYjFhODU3MjUxOWQ5ZWY0MjIwYzgxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtMTM4Nyw5ICsxMzg3LDkgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVz
dGltYXRlZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAgICAgCiBpbnQgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6bGF5b3V0Q291bnQoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlci0+
aXNSZW5kZXJWaWV3KCkpCisgICAgaWYgKCFpczxSZW5kZXJWaWV3PigqbV9yZW5kZXJlcikpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclZpZXcoKm1fcmVuZGVyZXIpLmZy
YW1lVmlldygpLmxheW91dENvdW50KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+
KCptX3JlbmRlcmVyKS5mcmFtZVZpZXcoKS5sYXlvdXRDb3VudCgpOwogfQogCiBTdHJpbmcgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCgpIGNvbnN0CkBAIC0xNzYzLDcgKzE3NjMsNyBA
QCBXaWRnZXQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OndpZGdldEZvckF0dGFjaG1lbnRW
aWV3KCkgY29uc3QKIHsKICAgICBpZiAoIWlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobV9yZW5kZXJlciktPndpZGdldCgp
OworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCptX3JlbmRlcmVyKS53aWRnZXQo
KTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGEgY3Jvc3MtcGxhdGZvcm0gdmVyc2lv
biBvZiAtIChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuZ2UuIEl0IHJldHVy
bnMKQEAgLTE5OTYsMTEgKzE5OTYsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW4KICAgICAg
ICAgcG9pbnRSZXN1bHQgPSByZXN1bHQubG9jYWxQb2ludCgpOwogCiAgICAgICAgIC8vIGRvbmUg
aWYgaGl0IHNvbWV0aGluZyBvdGhlciB0aGFuIGEgd2lkZ2V0Ci0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzV2lkZ2V0KCkpCisgICAgICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIp
KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gZGVzY2VuZCBpbnRvIHdpZGdldCAo
RlJBTUUsIElGUkFNRSwgT0JKRUNULi4uKQotICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVu
ZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0g
ZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpZGdldCgpOwogICAgICAgICBpZiAo
IWlzPEZyYW1lVmlldz4od2lkZ2V0KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBGcmFt
ZSYgZnJhbWUgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCp3aWRnZXQpLmZyYW1lKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCA4ZjY3NmYwNjFlNTA3N2FhMDdiYzA4ZDA2ZmQ1OTljNDZjZGZh
NmQyLi4wYWU0ODc2OTgxYjJiMmQ0MmQ0ZDE0YmIyY2FiZDc3MDU2YmRkZmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTMyNywxMCArMzI3LDEwIEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdl
dEZvckVsZW1lbnQoRWxlbWVudCogZm9jdXNlZEVsZW1lbnQpCiB7CiAgICAgaWYgKCFmb2N1c2Vk
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZW5kZXJlciA9IGZv
Y3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVy
LT5pc1dpZGdldCgpKQorICAgIGF1dG8qIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1lbnQtPnJlbmRl
cmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0
KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnJlbmRlcmVyKS53aWRnZXQo
KTsKIH0KIAogc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlKiBub2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggODA1NjEyZTJkMTdmMzU4N2VjODMxODFlMzIzZmE0NGMz
YmM5NGQwMi4uOWNjOTU3NmJkNmFkYWQwMTZjMTc5OGI0YTYxODEyNzZjN2ZkNWY5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xMTU2LDcgKzExNTYsNyBAQCB2b2lkIFBvc2l0aW9uOjpn
ZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHBy
aW1hcnlEaQogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5y
ZW5kZXJlcigpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgIGlubGluZUJv
eCA9ICFjYXJldE9mZnNldCA/IHRvUmVuZGVyTGluZUJyZWFrKHJlbmRlcmVyKS0+aW5saW5lQm94
V3JhcHBlcigpIDogbnVsbHB0cjsKKyAgICAgICAgaW5saW5lQm94ID0gIWNhcmV0T2Zmc2V0ID8g
ZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpLmlubGluZUJveFdyYXBwZXIoKSA6
IG51bGxwdHI7CiAgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewogICAg
ICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIp
OwogICAgICAgICB0ZXh0UmVuZGVyZXIuZW5zdXJlTGluZUJveGVzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXROYW1lZEZsb3cuY3BwCmluZGV4IDM5NWM4ODk0NzVkYTY1NWY3YWQyOWYwYTY0Mzk1
ZjI4ZDQzOTlmZTkuLjUxZGZjMGI5Yzg4MWU3MmYxMWM4ZDgxZWMxMTUzMDlmZWRjYmM1NWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCkBAIC03Miw4ICs3Miw4IEBAIGJv
b2wgV2ViS2l0TmFtZWRGbG93OjpvdmVyc2V0KCkgY29uc3QKICAgICBpZiAoIW1fcGFyZW50Rmxv
d1RocmVhZCB8fCAhbV9wYXJlbnRGbG93VGhyZWFkLT5oYXNSZWdpb25zKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChtX3BhcmVudEZsb3dUaHJlYWQt
Pmxhc3RSZWdpb24oKSk7Ci0gICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50LT5yZWdpb25PdmVy
c2V0U3RhdGUoKSA9PSBSZWdpb25PdmVyc2V0OworICAgIGNvbnN0IGF1dG8mIG5hbWVkRmxvd0Zy
YWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCptX3BhcmVudEZsb3dU
aHJlYWQtPmxhc3RSZWdpb24oKSk7CisgICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50LnJlZ2lv
bk92ZXJzZXRTdGF0ZSgpID09IFJlZ2lvbk92ZXJzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpbkZsb3dUaHJlYWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKiBmbG93VGhyZWFkKQpAQCAtMTA0LDE0ICsxMDQsMTQgQEAgaW50IFdlYktpdE5hbWVkRmxv
dzo6Zmlyc3RFbXB0eVJlZ2lvbkluZGV4KCkgY29uc3QKIAogICAgIGludCBjb3VudE5vblBzZXVk
b1JlZ2lvbnMgPSAtMTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlbmRlclJlZ2lvbiA6IHJlZ2lv
bkxpc3QpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pOworICAg
ICAgICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKICAgICAgICAgLy8gRklYTUU6IFBzZXVkby1l
bGVtZW50cyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0LgogICAgICAgICAvLyBUaGV5IHdp
bGwgYmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxsIHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBp
bnRlcmZhY2UKICAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMv
I3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC0+aXNQ
c2V1ZG9FbGVtZW50UmVnaW9uKCkpCisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1Bz
ZXVkb0VsZW1lbnRSZWdpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb3Vu
dE5vblBzZXVkb1JlZ2lvbnMrKzsKLSAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5yZWdp
b25PdmVyc2V0U3RhdGUoKSA9PSBSZWdpb25FbXB0eSkKKyAgICAgICAgKytjb3VudE5vblBzZXVk
b1JlZ2lvbnM7CisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5yZWdpb25PdmVyc2V0U3Rh
dGUoKSA9PSBSZWdpb25FbXB0eSkKICAgICAgICAgICAgIHJldHVybiBjb3VudE5vblBzZXVkb1Jl
Z2lvbnM7CiAgICAgfQogICAgIHJldHVybiAtMTsKQEAgLTEzNSwxNSArMTM1LDE1IEBAIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IFdlYktpdE5hbWVkRmxvdzo6Z2V0UmVnaW9uc0J5Q29udGVudChOb2Rl
KiBjb250ZW50Tm9kZSkKICAgICBpZiAoaW5GbG93VGhyZWFkKGNvbnRlbnROb2RlLT5yZW5kZXJl
cigpLCBtX3BhcmVudEZsb3dUaHJlYWQpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxp
c3QmIHJlZ2lvbkxpc3QgPSBtX3BhcmVudEZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsK
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZW5kZXJSZWdpb24gOiByZWdpb25MaXN0KSB7Ci0g
ICAgICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21l
bnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7CisgICAgICAgICAg
ICBjb25zdCBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBQc2V1ZG8t
ZWxlbWVudHMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KICAgICAgICAgICAgIC8vIFRo
ZXkgd2lsbCBiZSBpbmNsdWRlZCB3aGVuIHdlIHdpbGwgcHJvcGVybHkgc3VwcG9ydCB0aGUgUmVn
aW9uIGludGVyZmFjZQogICAgICAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nz
LXJlZ2lvbnMvI3RoZS1yZWdpb24taW50ZXJmYWNlCi0gICAgICAgICAgICBpZiAobmFtZWRGbG93
RnJhZ21lbnQtPmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQorICAgICAgICAgICAgaWYgKG5hbWVk
Rmxvd0ZyYWdtZW50LmlzUHNldWRvRWxlbWVudFJlZ2lvbigpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fcGFyZW50Rmxvd1RocmVhZC0+b2JqZWN0SW5GbG93
UmVnaW9uKGNvbnRlbnROb2RlLT5yZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRpbmdFbGVtZW50
KCkpOwotICAgICAgICAgICAgICAgIHJlZ2lvbkVsZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJh
Z21lbnQtPmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKG1fcGFyZW50Rmxv
d1RocmVhZC0+b2JqZWN0SW5GbG93UmVnaW9uKGNvbnRlbnROb2RlLT5yZW5kZXJlcigpLCAmbmFt
ZWRGbG93RnJhZ21lbnQpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdt
ZW50LmdlbmVyYXRpbmdFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHJlZ2lvbkVsZW1lbnRz
LmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBXZWJLaXROYW1lZEZsb3c6OmdldFJlZ2lvbnMoKQogCiAgICAgY29uc3QgUmVu
ZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9IG1fcGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVn
aW9uTGlzdCgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmVuZGVyUmVnaW9uIDogcmVnaW9uTGlz
dCkgewotICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbik7CisgICAgICAg
IGNvbnN0IGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOwogICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1l
bnRzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCiAgICAgICAgIC8vIFRoZXkgd2lsbCBi
ZSBpbmNsdWRlZCB3aGVuIHdlIHdpbGwgcHJvcGVybHkgc3VwcG9ydCB0aGUgUmVnaW9uIGludGVy
ZmFjZQogICAgICAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtcmVnaW9ucy8jdGhl
LXJlZ2lvbi1pbnRlcmZhY2UKLSAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1BzZXVk
b0VsZW1lbnRSZWdpb24oKSkKKyAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LmlzUHNldWRv
RWxlbWVudFJlZ2lvbigpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VSVChu
YW1lZEZsb3dGcmFnbWVudC0+Z2VuZXJhdGluZ0VsZW1lbnQoKSk7Ci0gICAgICAgIHJlZ2lvbkVs
ZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQtPmdlbmVyYXRpbmdFbGVtZW50KCkpOwor
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGluZ0VsZW1lbnQoKSk7Cisg
ICAgICAgIHJlZ2lvbkVsZW1lbnRzLmFwcGVuZCgqbmFtZWRGbG93RnJhZ21lbnQuZ2VuZXJhdGlu
Z0VsZW1lbnQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFN0YXRpY0VsZW1lbnRMaXN0OjphZG9w
dChyZWdpb25FbGVtZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCmluZGV4IDlmOTNhODQ2YzI0OWRmYTIzMWMxNTA5NGFiZTMzMWIwZmM5NDU3ODcuLjgwYTA2
ZjkwM2ZlMzMzMWVmMzM4MGJiMDkyZjU5ZmRhZTUzYTMxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xOTEyLDkgKzE5MTIsOSBAQCBzdGF0aWMgYm9v
bCBpc0ZyYW1lRWxlbWVudChjb25zdCBOb2RlKiBuKQogICAgIGlmICghbikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigpOwot
ICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgIGlmICghaXM8
UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRn
ZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgV2lk
Z2V0KiB3aWRnZXQgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7
CiAgICAgcmV0dXJuIHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDM0NTQyYWRiNDBiODA5N2Zm
NGFiM2E4ZTdmNmU5YzY5M2I5NDBlMTAuLjU5MzgxNzNiOTY4MmIzZGQxZmQ5YzQ5YWNkYjAyYjFk
ZTI5OTZiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAt
NTUsMTcgKzU1LDE4IEBAIFBhc3NSZWZQdHI8SFRNTEVtYmVkRWxlbWVudD4gSFRNTEVtYmVkRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MRW1iZWRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJz
ZXIpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZpbmRXaWRnZXRSZW5kZXJl
cihjb25zdCBOb2RlKiBuKSAKK3N0YXRpYyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0
UmVuZGVyZXIoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCi0g
ICAgICAgIGRvCi0gICAgICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAgICB3aGls
ZSAobiAmJiAhbi0+aGFzVGFnTmFtZShvYmplY3RUYWcpKTsKKyAgICBpZiAoIW5vZGUtPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgfSB3aGlsZSAobm9kZSAmJiAhaXM8SFRNTE9iamVjdEVsZW1lbnQ+KCpu
b2RlKSk7CisgICAgfQogCi0gICAgaWYgKG4gJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJl
cigpLT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobi0+cmVuZGVy
ZXIoKSk7CisgICAgaWYgKG5vZGUgJiYgaXM8UmVuZGVyV2lkZ2V0Pihub2RlLT5yZW5kZXJlcigp
KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4obm9kZS0+cmVuZGVyZXIo
KSk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogUmVuZGVyV2lk
Z2V0KiBIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRnZXRMb2FkaW5nUGx1Z2luKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAppbmRleCA1
MjA0NzI2NDk0MzVhOGY1YmE3M2U2YzZhM2VhMDYxNmRlYWJhNjAyLi5hODVlNzlkZDBkNjIwN2Ex
OGY5NjliNTY2MDk5NWU0YzNjZjYyYjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2NvbnRlbnRGcmFtZSgwKQorICAgICwg
bV9jb250ZW50RnJhbWUobnVsbHB0cikKICAgICAsIG1fc2FuZGJveEZsYWdzKFNhbmRib3hOb25l
KQogewogfQpAQCAtNDMsOSArNDMsOSBAQCBSZW5kZXJXaWRnZXQqIEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6cmVuZGVyV2lkZ2V0KCkgY29uc3QKIHsKICAgICAvLyBIVE1MT2JqZWN0RWxlbWVudCBh
bmQgSFRNTEVtYmVkRWxlbWVudCBtYXkgcmV0dXJuIGFyYml0cmFyeSByZW5kZXJlcnMKICAgICAv
LyB3aGVuIHVzaW5nIGZhbGxiYWNrIGNvbnRlbnQuCi0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFy
ZW5kZXJlcigpLT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9S
ZW5kZXJXaWRnZXQocmVuZGVyZXIoKSk7CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHJlbmRl
cmVyKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyV2lkZ2V0PihyZW5kZXJlcigpKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnNldENvbnRlbnRGcmFtZShGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCAxZmE5MGViMzI5OThhZDJkY2ZiYTA2N2Q5OTNkZWJhMjZlMjYx
YTcyLi4xZGFhYjE4YjkzYzhkNTE5ODQ3OTNiMjY5ZWFhOTU2ODgwNWI3MGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTQyNDUsOCArNDI0NSw4IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJTaXplQ2hhbmdlZChNZWRpYVBsYXllciop
CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKE1lZGlhUGxheWVyKikKIHsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5pc1ZpZGVvKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlcigpLT52aWV3KCkuY29tcG9zaXRv
cigpLmNhbkFjY2VsZXJhdGVWaWRlb1JlbmRlcmluZyh0b1JlbmRlclZpZGVvKCpyZW5kZXJlcigp
KSk7CisgICAgaWYgKGlzPFJlbmRlclZpZGVvPihyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmVyKCktPnZpZXcoKS5jb21wb3NpdG9yKCkuY2FuQWNjZWxlcmF0ZVZpZGVvUmVuZGVy
aW5nKGRvd25jYXN0PFJlbmRlclZpZGVvPigqcmVuZGVyZXIoKSkpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKaW5kZXggZjJh
YWMxYzQ2YzQ0NWQ0YzZlZjkxMDQ3OWQxMGQ5NmUzNWU5MjFmNS4uOTQ1MjEwZWU0ZjhlNTQzOTJh
YzBhZmQ5MTVmNTQ0NTg2YmM5ZGI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWV0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVs
ZW1lbnQuY3BwCkBAIC0yMjAsOSArMjIwLDkgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRF
bGVtZW50U3RhdGVDaGFuZ2UoKQogCiBSZW5kZXJNZXRlciogSFRNTE1ldGVyRWxlbWVudDo6cmVu
ZGVyTWV0ZXIoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
TWV0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyTWV0ZXIocmVuZGVyZXIoKSk7Ci0gICAg
cmV0dXJuIHRvUmVuZGVyTWV0ZXIoZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oKnVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoKSkuZmlyc3QoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGlzPFJlbmRlck1l
dGVyPihyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1ldGVyPihy
ZW5kZXJlcigpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWV0ZXI+KGRlc2NlbmRhbnRz
T2ZUeXBlPEVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFkb3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVy
KCkpOwogfQogCiB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCogcm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAKaW5kZXggM2E4MTlkYjIxMTBjYmE0NjE0ZWIwNjMzMjRjZTRlNDQ2MWI0Nzc1YS4uMmQx
N2U3Yjk4MjI4NDk0YmQ5Y2I5OTUzZjBkY2JlZGJiOWVhNTM4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAgLTI3NSw5ICsyNzUsOSBAQCBib29sIEhUTUxQ
bHVnSW5FbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKICAgICBpZiAoSFRNTEZyYW1lT3du
ZXJFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKHVzZUZhbGxiYWNrQ29udGVudCgpIHx8ICFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5p
c0VtYmVkZGVkT2JqZWN0KCkpCisgICAgaWYgKHVzZUZhbGxiYWNrQ29udGVudCgpIHx8ICFpczxS
ZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gIXRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIoKSktPmlzUGx1Z2lu
VW5hdmFpbGFibGUoKTsKKyAgICByZXR1cm4gIWRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0
PigqcmVuZGVyZXIoKSkuaXNQbHVnaW5VbmF2YWlsYWJsZSgpOwogfQogCiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcAppbmRleCBjMWVjMjU3MTcxOGI4ZmNmYTg2ZmMyOTkwNzhkYzU4NTIxOWQ5
ZjZkLi5iNjAwODVkZjllNTIyZGVmMjMxZTljY2NiMDk1NmVhZTZhNDcyNzQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTE0NSw5ICsx
NDUsNyBAQCBSZW5kZXJFbWJlZGRlZE9iamVjdCogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVu
ZGVyRW1iZWRkZWRPYmplY3QoKSBjb25zdAogewogICAgIC8vIEhUTUxPYmplY3RFbGVtZW50IGFu
ZCBIVE1MRW1iZWRFbGVtZW50IG1heSByZXR1cm4gYXJiaXRyYXJ5IHJlbmRlcmVycwogICAgIC8v
IHdoZW4gdXNpbmcgZmFsbGJhY2sgY29udGVudC4KLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJl
bmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIGlzPFJl
bmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVtYmVkZGVk
T2JqZWN0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6aXNJbWFnZVR5cGUoKQpAQCAtNjkzLDcgKzY5MSw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IFVSTCYg
dXJsKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGF1dG8mIHJlbmRlcmVyID0g
dG9SZW5kZXJFbWJlZGRlZE9iamVjdCgqdGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKnRoaXMtPnJlbmRlcmVyKCkp
OwogICAgIExheW91dFJlY3QgY29udGVudFJlY3QgPSByZW5kZXJlci5jb250ZW50Qm94UmVjdCgp
OwogICAgIGludCBjb250ZW50V2lkdGggPSBjb250ZW50UmVjdC53aWR0aCgpOwogICAgIGludCBj
b250ZW50SGVpZ2h0ID0gY29udGVudFJlY3QuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCA5ODM3MTI0NjllMmZlMzA5NzFjZDhlMmJl
YmVlYmQwMjc1NjQ0ODVlLi5mNTBmZmMwY2QyOGE5ZWRkZDFjMzUzMGUxMDczNDIzZjYwZjFiNWQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTcy
LDkgKzcyLDkgQEAgYm9vbCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKGNvbnN0IE5vZGUmIGNoaWxkKSBjb25zdAogCiBSZW5kZXJQcm9ncmVzcyogSFRNTFBy
b2dyZXNzRWxlbWVudDo6cmVuZGVyUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmlzUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVy
UHJvZ3Jlc3MocmVuZGVyZXIoKSk7Ci0gICAgcmV0dXJuIHRvUmVuZGVyUHJvZ3Jlc3MoZGVzY2Vu
ZGFudHNPZlR5cGU8RWxlbWVudD4oKnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkuZmlyc3QoKS0+cmVu
ZGVyZXIoKSk7CisgICAgaWYgKGlzPFJlbmRlclByb2dyZXNzPihyZW5kZXJlcigpKSkKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclByb2dyZXNzPihyZW5kZXJlcigpKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KCp1
c2VyQWdlbnRTaGFkb3dSb290KCkpLmZpcnN0KCktPnJlbmRlcmVyKCkpOwogfQogCiB2b2lkIEhU
TUxQcm9ncmVzc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuY3BwCmluZGV4IGIyMjA4N2I0YzA4MDkzMTdmYzBhZmU0OWE0NzlkNjc3OTkxNTJlMjIu
LmVkMGY2MjIyYjQ5YjI1MzAxZTZhZDRmYWYzNjM5MGZiNDRlNzdlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC0xNTUsMTEgKzE1NSw5IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnRQYXJzZXI+IFBsdWdpbkRvY3VtZW50OjpjcmVhdGVQYXJzZXIoKQogCiBXaWRnZXQq
IFBsdWdpbkRvY3VtZW50OjpwbHVnaW5XaWRnZXQoKQogewotICAgIGlmIChtX3BsdWdpbkVsZW1l
bnQgJiYgbV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3Bs
dWdpbkVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSk7Ci0gICAgICAgIHJl
dHVybiB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KG1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkt
PndpZGdldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBpZiAobV9wbHVnaW5FbGVtZW50
ICYmIG1fcGx1Z2luRWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqbV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKS53aWRn
ZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBQbHVnaW5Eb2N1bWVudDo6c2V0
UGx1Z2luRWxlbWVudChQYXNzUmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBlbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
CmluZGV4IDI3MWYwNmEzNDU5ZGUyMzA1ODMxZDE4ZTQwOGQ5OTczZGEzN2RjMjMuLjRjN2JkNzVh
MzNkZjdmOTVmYmM5NzE4YmRlNTY3MjQ4OGUwMGQzNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTg3Miw4ICs4NzIs
OCBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmlu
cHV0RXZlbnQgJiYgdGltZSAhPSBtZWRpYUNvbnRyb2xsZXIoKS0+Y3VycmVudFRpbWUoKSkKICAg
ICAgICAgbWVkaWFDb250cm9sbGVyKCktPnNldEN1cnJlbnRUaW1lKHRpbWUpOwogCi0gICAgUmVu
ZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKTsKLSAgICBpZiAo
c2xpZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQorICAgIFJlbmRlclNsaWRlciYgc2xpZGVy
ID0gZG93bmNhc3Q8UmVuZGVyU2xpZGVyPigqcmVuZGVyZXIoKSk7CisgICAgaWYgKHNsaWRlci5p
bkRyYWdNb2RlKCkpCiAgICAgICAgIG1fY29udHJvbHMtPnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxh
eSgpOwogfQogCkBAIC0xMzM3LDkgKzEzMzcsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVNpemVzKGJvb2wgZm9yY2VVcGRhdGUpCiAgICAgaWYg
KG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb24pCiAgICAgICAgIHZpZGVvQm94ID0gbV90ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbi0+Ym91bmRzKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghbWVk
aWFFbGVtZW50LT5yZW5kZXJlcigpIHx8ICFtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmlzVmlk
ZW8oKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJWaWRlbz4obWVkaWFFbGVtZW50LT5yZW5kZXJl
cigpKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmlkZW9Cb3ggPSB0b1JlbmRlclZp
ZGVvKCptZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpLnZpZGVvQm94KCk7CisgICAgICAgIHZpZGVv
Qm94ID0gZG93bmNhc3Q8UmVuZGVyVmlkZW8+KCptZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpLnZp
ZGVvQm94KCk7CiAgICAgfQogCiAgICAgaWYgKCFmb3JjZVVwZGF0ZSAmJiBtX3ZpZGVvRGlzcGxh
eVNpemUgPT0gdmlkZW9Cb3gpCkBAIC0xMzYzLDE0ICsxMzYzLDE0IEBAIFBhc3NSZWZQdHI8SW1h
Z2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a1JlcHJlc2VuCiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgYXV0byBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgaWYgKCFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QocmVu
ZGVyZXIpLT5sYXllcigpOworICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKIAogICAgIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yID0gMTsKICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5jcHAKaW5kZXggZTk4M2YwN2UxZWRiMDI2OWU2YmI2Nzc5YmEyZTM2MDA1MzIwNzkyNy4u
ZjBjZWY0MGRiNWUwZWY1ZTY3M2I3ZjhmNGJmMjc2NGExNDEwZTliNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC0x
MjksNyArMTI5LDcgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJzRm9yTm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKIHZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5
ZXI+PiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkgewotICAgICAg
ICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCB0b1Jl
bmRlckxheWVyTW9kZWxPYmplY3QocmVuZGVyZXIpLT5sYXllcigpLCBsYXllcnMpOworICAgICAg
ICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCBkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA4NGQ0OTIyMTA1MzI3Yjk2ZGE5NDRkOGRiMGQzMzkx
ZjIxNTcyYzkyLi5lMTRkMWZhNzAxZmExMWI1MTBjNDRjZWRlMmEwNGQ1MGFlZGY1MjZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC03MjIs
OSArNzIyLDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgUmVuZGVyRmxvd1RocmVh
ZCogY29udGFpbmluZ0Zsb3dUaHJlYWQgPSByZW5kZXJlci0+Zmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpOwotICAgIGlmIChjb250YWluaW5nRmxvd1RocmVhZCAmJiBjb250YWluaW5nRmxvd1Ro
cmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgIGlmIChpczxSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ+KGNvbnRhaW5pbmdGbG93VGhyZWFkKSkgewogICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjb250ZW50Rmxvd0luZm8gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBjb250ZW50Rmxvd0luZm8tPnNldFN0cmluZygibmFtZSIsIHRvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKGNvbnRhaW5pbmdGbG93VGhyZWFkKS0+Zmxvd1RocmVhZE5hbWUoKSk7Cisg
ICAgICAgIGNvbnRlbnRGbG93SW5mby0+c2V0U3RyaW5nKCJuYW1lIiwgZG93bmNhc3Q8UmVuZGVy
TmFtZWRGbG93VGhyZWFkPigqY29udGFpbmluZ0Zsb3dUaHJlYWQpLmZsb3dUaHJlYWROYW1lKCkp
OwogICAgICAgICBlbGVtZW50SW5mby0+c2V0T2JqZWN0KCJjb250ZW50Rmxvd0luZm8iLCBjb250
ZW50Rmxvd0luZm8ucmVsZWFzZSgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3Vi
ZnJhbWVMb2FkZXIuY3BwCmluZGV4IDhhMTYxNDJhNDQwODVmYmIzNDM2MjI3Nzc3Y2FhNjNkMjhi
ZGM5NGIuLjVjMzc3ODkxYjY0MjZkNWJiNWU3ZTk0M2Y0NjE4ODhmNmI5YTExMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApAQCAtMzI4LDEwICszMjgsMTAgQEAg
RnJhbWUqIFN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50
JiBvd25lckVsZW1lbnQsIGNvbnN0IFUKICAgICAvLyBGSVhNRTogQ2FuIHdlIHJlbW92ZSB0aGlz
IGVudGlyZWx5PyBtX2lzQ29tcGxldGUgbm9ybWFsbHkgZ2V0cyBzZXQgdG8gZmFsc2Ugd2hlbiBh
IGxvYWQgaXMgY29tbWl0dGVkLgogICAgIGZyYW1lLT5sb2FkZXIoKS5zdGFydGVkKCk7CiAgICAK
LSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb3duZXJFbGVtZW50LnJlbmRlcmVyKCk7Cisg
ICAgYXV0byogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+
aXNXaWRnZXQoKSAmJiB2aWV3KQotICAgICAgICB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPnNl
dFdpZGdldCh2aWV3KTsKKyAgICBpZiAoaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikgJiYgdmll
dykKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIpLnNldFdpZGdldCh2
aWV3KTsKICAgICAKICAgICBtX2ZyYW1lLmxvYWRlcigpLmNoZWNrQ2FsbEltcGxpY2l0Q2xvc2Uo
KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggOGI4ZjYzY2JmNTczNzY5OTVhZDFmNTNm
NDdiNGExZTkxODRlYzIzYy4uNWRkY2E0MjJiYTRkNjU5MTE3NWUzMWY1MTc4NWRkMjMzZDhjM2Jh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTczNSwxNyArNzM1LDE3IEBAIFJlbmRlcldpZGdl
dCogRnJhbWU6Om93bmVyUmVuZGVyZXIoKSBjb25zdAogewogICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50ID0gbV9vd25lckVsZW1lbnQ7CiAgICAgaWYgKCFvd25lckVsZW1l
bnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGF1dG8gb2JqZWN0ID0gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvKiBvYmplY3QgPSBv
d25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogSWYgPG9iamVjdD4g
aXMgZXZlciBmaXhlZCB0byBkaXNhc3NvY2lhdGUgaXRzZWxmIGZyb20gZnJhbWVzCiAgICAgLy8g
dGhhdCBpdCBoYXMgc3RhcnRlZCBidXQgY2FuY2VsZWQsIHRoZW4gdGhpcyBjYW4gdHVybiBpbnRv
IGFuIEFTU0VSVAogICAgIC8vIHNpbmNlIG1fb3duZXJFbGVtZW50IHdvdWxkIGJlIDAgd2hlbiB0
aGUgbG9hZCBpcyBjYW5jZWxlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg1ODUKLSAgICBpZiAoIW9iamVjdC0+aXNXaWRnZXQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG9iamVjdCk7CisgICAgaWYgKCFp
czxSZW5kZXJXaWRnZXQ+KCpvYmplY3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihvYmplY3QpOwogfQogCiBGcmFtZSogRnJhbWU6
OmZyYW1lRm9yV2lkZ2V0KGNvbnN0IFdpZGdldCogd2lkZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IGY3ODkwZDQ1YzI5OGM4ZjNhZDQ2NGM2ZGZmM2Y5NDg4YmQzZmVmY2UuLjMz
MDI1YTA1NmMzNGJlNTZjOTZhYTYwZjQzNTA5ZTkwZGRmNWY0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQo
Ym9vbCBhbGxvd1N1YnRyZWUpCiAKICAgICAgICAgYXV0b1NpemVJZkVuYWJsZWQoKTsKIAotICAg
ICAgICBtX25lZWRzRnVsbFJlcGFpbnQgPSAhc3VidHJlZSAmJiAobV9maXJzdExheW91dCB8fCB0
b1JlbmRlclZpZXcoKnJvb3QpLnByaW50aW5nKCkpOworICAgICAgICBtX25lZWRzRnVsbFJlcGFp
bnQgPSAhc3VidHJlZSAmJiAobV9maXJzdExheW91dCB8fCBkb3duY2FzdDxSZW5kZXJWaWV3Pigq
cm9vdCkucHJpbnRpbmcoKSk7CiAKICAgICAgICAgaWYgKCFzdWJ0cmVlKSB7CiAgICAgICAgICAg
ICBTY3JvbGxiYXJNb2RlIGhNb2RlOwpAQCAtMTMyNSw3ICsxMzI1LDcgQEAgdm9pZCBGcmFtZVZp
ZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZSkKICAgICAgICAgaWYgKHN1YnRyZWUpCiAgICAg
ICAgICAgICByb290LT52aWV3KCkucG9wTGF5b3V0U3RhdGUoKnJvb3QpOwogCi0gICAgICAgIG1f
bGF5b3V0Um9vdCA9IDA7CisgICAgICAgIG1fbGF5b3V0Um9vdCA9IG51bGxwdHI7CiAKICAgICAg
ICAgLy8gQ2xvc2UgYmxvY2sgaGVyZSB0byBlbmQgdGhlIHNjb3BlIG9mIGNoYW5nZVNjaGVkdWxp
bmdFbmFibGVkIGFuZCBsYXlvdXRTdGF0ZURpc2FibGVyLgogICAgIH0KQEAgLTEzMzQsNyArMTMz
NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAKICAgICBi
b29sIG5lZWRlZEZ1bGxSZXBhaW50ID0gbV9uZWVkc0Z1bGxSZXBhaW50OwogCi0gICAgaWYgKCFz
dWJ0cmVlICYmICF0b1JlbmRlclZpZXcoKnJvb3QpLnByaW50aW5nKCkpCisgICAgaWYgKCFzdWJ0
cmVlICYmICFkb3duY2FzdDxSZW5kZXJWaWV3Pigqcm9vdCkucHJpbnRpbmcoKSkKICAgICAgICAg
YWRqdXN0Vmlld1NpemUoKTsKIAogICAgIG1fbGF5b3V0UGhhc2UgPSBJblBvc3RMYXlvdXQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAppbmRleCA5NDgzZjkz
YjM3ZWI5ZDAwNWMzYThjOWJjYWU2Y2RjZDE4ZGVlYzE3Li43NTBiODhhMTU1NDJkN2Y3N2E1ZmZj
NGE5MTUyYzRkY2RhZjZhYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9F
dmVudEhhbmRsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHAKQEAgLTYxLDEwICs2MSwxMCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNE
b2N1bWVudFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewog
ICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBS
ZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5v
ZGUoKS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRn
ZXQoKSkKKyAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2
ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CisgICAgaWYgKCFpczxSZW5k
ZXJXaWRnZXQ+KHRhcmdldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFz
c01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkp
OworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChkb3duY2FzdDxSZW5kZXJX
aWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NX
aWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tCmluZGV4IDgzN2E3YTky
NDhjNzAyODFlMTllODQzNjVhODA5ZThmZTgwZjQwMWIuLjAyZjA5NWI0MTBiZjJlMDhjYWQ1ZDlk
NmQyMzY1MmQxZWFkYTI5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2
ZW50SGFuZGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRs
ZXJJT1MubW0KQEAgLTE2OSwxNSArMTY5LDE1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0Rv
Y3VtZW50VmlldygpCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50
VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CiAg
ICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgotICAgIGF1
dG8gdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5k
ZXJlcigpIDogbnVsbHB0cjsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgp
KQorICAgIGF1dG8qIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5v
ZGUoKS0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHRh
cmdldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIERvdWJsZS1jbGljayBldmVu
dHMgZG9uJ3QgZXhpc3QgaW4gQ29jb2EuIFNpbmNlIHBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRv
V2lkZ2V0KCkgd2lsbAogICAgIC8vIGp1c3QgcGFzcyBjdXJyZW50RXZlbnQgZG93biB0byB0aGUg
d2lkZ2V0LCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgaXQgZm9yIGV2ZW50cyB0aGF0CiAgICAgLy8g
ZG9uJ3QgY29ycmVzcG9uZCB0byBDb2NvYSBldmVudHMuIFRoZSBtb3VzZWRvd24vdXBzIHdpbGwg
aGF2ZSBhbHJlYWR5IGJlZW4gcGFzc2VkIG9uIGFzCiAgICAgLy8gcGFydCBvZiB0aGUgcHJlc3Nl
ZC9yZWxlYXNlZCBoYW5kbGluZy4KLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRn
ZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOworICAgIHJldHVybiBwYXNzTW91
c2VEb3duRXZlbnRUb1dpZGdldChkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdl
dCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRv
V2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQpAQCAtMzYzLDEzICszNjMsMTMgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50
YXJnZXROb2RlKCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKKyAg
ICAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAg
IGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5k
ZXJlciktPndpZGdldCgpOworICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXdpZGdl
dCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmICghcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9S
ZW5kZXJXaWRnZXQocmVuZGVyZXIpKSkKKyAgICAgICAgICAgIGlmICghcGFzc1dpZGdldE1vdXNl
RG93bkV2ZW50VG9XaWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG1fbW91c2VEb3duV2FzSW5T
dWJmcmFtZSA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCA0MmFiYzM4ODVhMzBlZjViOTQwODMx
N2NiN2Y3MDRlMTIxOTc4OGFmLi44YmU5ZjIyYWM5OTFhYWQ5NzM2Njg1YzY1NjFkYjAwYmZlNGVm
NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC0x
NDMsMTUgKzE0MywxNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQog
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8vIEZpZ3VyZSBv
dXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBhdXRvIHRhcmdldCA9IGV2
ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IG51bGxw
dHI7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICBhdXRvKiB0
YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVy
KCkgOiBudWxscHRyOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEb3VibGUtY2xpY2sgZXZlbnRzIGRvbid0IGV4aXN0
IGluIENvY29hLiBTaW5jZSBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCgpIHdpbGwK
ICAgICAvLyBqdXN0IHBhc3MgY3VycmVudEV2ZW50IGRvd24gdG8gdGhlIHdpZGdldCwgd2UgZG9u
J3Qgd2FudCB0byBjYWxsIGl0IGZvciBldmVudHMgdGhhdAogICAgIC8vIGRvbid0IGNvcnJlc3Bv
bmQgdG8gQ29jb2EgZXZlbnRzLiBUaGUgbW91c2Vkb3duL3VwcyB3aWxsIGhhdmUgYWxyZWFkeSBi
ZWVuIHBhc3NlZCBvbiBhcwogICAgIC8vIHBhcnQgb2YgdGhlIHByZXNzZWQvcmVsZWFzZWQgaGFu
ZGxpbmcuCi0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lk
Z2V0KHRhcmdldCktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQoZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKSk7CiB9CiAKIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJX
aWRnZXQqIHJlbmRlcldpZGdldCkKQEAgLTM2MSwxMyArMzYxLDEzIEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXZlCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwog
ICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICAgICAg
aWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCisgICAgICAgICAgICBhdXRv
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAoIWlzPFJlbmRl
cldpZGdldD4ocmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQo
KTsKKyAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pigq
cmVuZGVyZXIpLndpZGdldCgpOwogICAgICAgICAgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+
aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHJl
bmRlcmVyKSkpCisgICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBtX21vdXNlRG93bldhc0luU3ViZnJhbWUgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03ODUsMTEgKzc4NSwxMSBAQCBzdGF0aWMg
V2lkZ2V0KiB3aWRnZXRGb3JFdmVudFRhcmdldChFbGVtZW50KiBldmVudFRhcmdldCkKICAgICBp
ZiAoIWV2ZW50VGFyZ2V0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBSZW5k
ZXJFbGVtZW50KiB0YXJnZXQgPSBldmVudFRhcmdldC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXRh
cmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAgIGF1dG8qIHRhcmdldCA9IGV2ZW50VGFy
Z2V0LT5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQodGFy
Z2V0KS0+d2lkZ2V0KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdl
dCkud2lkZ2V0KCk7CiB9CiAKIHN0YXRpYyBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3Rm9yRXZlbnRU
YXJnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1JlbmRlclRoZW1lRWZsLmNwcAppbmRleCBkYmU0ZDAxMTE0OTM4MTgzMzI1OWQ1MmVhOTY0
YWU3YzlmOWU2NzQ4Li45ZmU2N2QyMmZkOTJlMjZmNzUzODdiYjJhNDkyNDcxNTk2Y2QzODkxIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKQEAg
LTMwMSwxMSArMzAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5RWRqZVN0YXRlRnJv
bUZvcm0oRXZhc19PYmplY3QqIG9iamVjdCwgY29uc3QgQ29udHJvbFN0CiB2b2lkIFJlbmRlclRo
ZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFdmFzX09iamVjdCogZWRqZSwgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKHR5cGUgPT0gU2xpZGVyVmVydGljYWwgfHwgdHlwZSA9PSBTbGlkZXJIb3Jpem9udGFs
KSB7Ci0gICAgICAgIGlmICghb2JqZWN0LmlzU2xpZGVyKCkpCisgICAgICAgIGlmICghaXM8UmVu
ZGVyU2xpZGVyPihvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBwcm9iYWJseSBoYXZl
IC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVyLi4KIAotICAgICAgICBjb25zdCBSZW5kZXJTbGlk
ZXIqIHJlbmRlclNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKCZvYmplY3QpOwotICAgICAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dCA9IHJlbmRlclNsaWRlci0+ZWxlbWVudCgpOworICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PFJlbmRlclNsaWRlcj4ob2JqZWN0KS5l
bGVtZW50KCk7CiAgICAgICAgIGRvdWJsZSB2YWx1ZVJhbmdlID0gaW5wdXQubWF4aW11bSgpIC0g
aW5wdXQubWluaW11bSgpOwogCiAgICAgICAgIE93blB0cjxFZGplX01lc3NhZ2VfRmxvYXRfU2V0
PiBtc2cgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXRfU2V0Kj4oOjpv
cGVyYXRvciBuZXcgKHNpemVvZihFZGplX01lc3NhZ2VfRmxvYXRfU2V0KSArIHNpemVvZihkb3Vi
bGUpKSkpOwpAQCAtMzIzLDcgKzMyMiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5RWRq
ZVJUTFN0YXRlKEV2YXNfT2JqZWN0KiBlZGplLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iCiAgICAg
ICAgIG1zZy0+dmFsWzFdID0gKGlucHV0LnZhbHVlQXNOdW1iZXIoKSAtIGlucHV0Lm1pbmltdW0o
KSkgLyB2YWx1ZVJhbmdlOwogICAgICAgICBlZGplX29iamVjdF9tZXNzYWdlX3NlbmQoZWRqZSwg
RURKRV9NRVNTQUdFX0ZMT0FUX1NFVCwgMCwgbXNnLmdldCgpKTsKICAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gUHJvZ3Jlc3NCYXIpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRl
clByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvYmplY3QpOworICAgICAgICBjb25zdCBhdXRv
JiByZW5kZXJQcm9ncmVzcyA9IGRvd25jYXN0PFJlbmRlclByb2dyZXNzPihvYmplY3QpOwogCiAg
ICAgICAgIGludCBtYXggPSByZWN0LndpZHRoKCk7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IHJl
bmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKaW5kZXggMzU0NzkwY2YzOTJhMTgzN2VhYjc0NWIwODZiODAyMGZkN2NiZWVj
ZC4uNWM1OTM3ODBkNzg2NGY1MWU1YTA3NWExOWM5MTJkMDVmNTI3MmY4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMjQ4LDggKzI0OCw4IEBAIFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUo
KQogCiBzdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKHN0eWxlLmhhc1RleHRD
b21iaW5lKCkgJiYgcmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlckNvbWJpbmVUZXh0JiB0ZXh0Q29tYmluZVJlbmRlcmVyID0gdG9SZW5kZXJDb21iaW5lVGV4
dChyZW5kZXJlcik7CisgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVy
Q29tYmluZVRleHQ+KHJlbmRlcmVyKSkgeworICAgICAgICBjb25zdCBhdXRvJiB0ZXh0Q29tYmlu
ZVJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKTsKICAgICAg
ICAgaWYgKHRleHRDb21iaW5lUmVuZGVyZXIuaXNDb21iaW5lZCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRleHRDb21iaW5lUmVuZGVyZXIudGV4dENvbWJpbmVGb250KCk7CiAgICAgfQpAQCAtNDU0
LDEwICs0NTQsMTAgQEAgYm9vbCBJbmxpbmVUZXh0Qm94OjplbXBoYXNpc01hcmtFeGlzdHNBbmRJ
c0Fib3ZlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCYKICAgICBpZiAoIWNvbnRhaW5p
bmdCbG9jay0+aXNSdWJ5QmFzZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhpcyB0ZXh0
IGlzIG5vdCBpbnNpZGUgYSBydWJ5IGJhc2UsIHNvIGl0IGRvZXMgbm90IGhhdmUgcnVieSB0ZXh0
IG92ZXIgaXQuCiAKLSAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+cGFyZW50KCktPmlzUnVieVJ1
bigpKQorICAgIGlmICghaXM8UmVuZGVyUnVieVJ1bj4oKmNvbnRhaW5pbmdCbG9jay0+cGFyZW50
KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQ2Fubm90IGdldCB0aGUgcnVieSB0ZXh0Lgog
Ci0gICAgUmVuZGVyUnVieVRleHQqIHJ1YnlUZXh0ID0gdG9SZW5kZXJSdWJ5UnVuKGNvbnRhaW5p
bmdCbG9jay0+cGFyZW50KCkpLT5ydWJ5VGV4dCgpOworICAgIFJlbmRlclJ1YnlUZXh0KiBydWJ5
VGV4dCA9IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KCpjb250YWluaW5nQmxvY2stPnBhcmVudCgp
KS5ydWJ5VGV4dCgpOwogCiAgICAgLy8gVGhlIGVtcGhhc2lzIG1hcmtzIG92ZXIgYXJlIHN1cHBy
ZXNzZWQgb25seSBpZiB0aGVyZSBpcyBhIHJ1YnkgdGV4dCBib3ggYW5kIGl0IG5vdCBlbXB0eS4K
ICAgICByZXR1cm4gIXJ1YnlUZXh0IHx8ICFydWJ5VGV4dC0+aGFzTGluZXMoKTsKQEAgLTUxOSw3
ICs1MTksNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgYm94T3JpZ2luLm1vdmVCeShs
b2NhbFBhaW50T2Zmc2V0KTsKICAgICBGbG9hdFJlY3QgYm94UmVjdChib3hPcmlnaW4sIEZsb2F0
U2l6ZShsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgpKSk7CiAKLSAgICBSZW5kZXJDb21i
aW5lVGV4dCogY29tYmluZWRUZXh0ID0gbGluZVN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgcmVu
ZGVyZXIoKS5pc0NvbWJpbmVUZXh0KCkgJiYgdG9SZW5kZXJDb21iaW5lVGV4dChyZW5kZXJlcigp
KS5pc0NvbWJpbmVkKCkgPyAmdG9SZW5kZXJDb21iaW5lVGV4dChyZW5kZXJlcigpKSA6IDA7Cisg
ICAgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCA9IGxpbmVTdHlsZS5oYXNUZXh0Q29t
YmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5lZCgpID8gJmRvd25jYXN0PFJl
bmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7CiAKICAgICBib29sIHNob3Vs
ZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAhY29tYmluZWRUZXh0OwogICAgIGlmIChzaG91
bGRSb3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAppbmRleCAx
OGY1MWUwNDdiZWFkOTYzZDBmNDA3NTUwNTk2Yzk2N2ZmMzcxYzQ4Li4xN2QwNjAxNWIwMGZlNjM4
NDhkOWQ3MjMxMWEwMjE2MTI3NmUwYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRTdGF0ZS5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUo
c3RkOjp1bmlxdWVfcHRyPExheW91dFN0YXRlPiBuZXh0LCBSZW5kZXJCb3gqIHJlbmRlcmVyLAog
ICAgIG1fbGF5b3V0RGVsdGFZU2F0dXJhdGVkID0gbV9uZXh0LT5tX2xheW91dERlbHRhWVNhdHVy
YXRlZDsKICNlbmRpZgogCi0gICAgaWYgKGxpbmVHcmlkKCkgJiYgKGxpbmVHcmlkKCktPnN0eWxl
KCkud3JpdGluZ01vZGUoKSA9PSByZW5kZXJlci0+c3R5bGUoKS53cml0aW5nTW9kZSgpKSAmJiBy
ZW5kZXJlci0+aXNSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKSkKLSAgICAgICAgdG9SZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQocmVuZGVyZXIpLT5jb21wdXRlTGluZUdyaWRQYWdpbmF0
aW9uT3JpZ2luKCp0aGlzKTsKKyAgICBpZiAobGluZUdyaWQoKSAmJiAobGluZUdyaWQoKS0+c3R5
bGUoKS53cml0aW5nTW9kZSgpID09IHJlbmRlcmVyLT5zdHlsZSgpLndyaXRpbmdNb2RlKCkpICYm
IGlzPFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKnJlbmRlcmVyKSkKKyAgICAgICAgZG93
bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPigqcmVuZGVyZXIpLmNvbXB1dGVMaW5l
R3JpZFBhZ2luYXRpb25PcmlnaW4oKnRoaXMpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBn
cmlkIHRvIHRyYWNrLCB0aGVuIGFkZCBpdCB0byBvdXIgc2V0LgogICAgIGlmIChyZW5kZXJlci0+
c3R5bGUoKS5saW5lR3JpZCgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUdyaWQoKSAmJiBp
czxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAppbmRleCAyZDhjZGNiMWZkZjFlZGU4OGFiZGM3ODY2MGQxNzBkNjg5ZWU5
MDRmLi43ZGUxODFjODM3YTgxYmNlMTlhMWQ1OWI4NGExZjRkZGJlOTVhZWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTcwNSw4ICs3MDUsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrJiBwYXJl
bnQsIFJlbmRlckJsb2NrKiBjaAogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNoaWxkRmxvd1RocmVh
ZCA9IGNoaWxkLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGNoaWxkRmxv
d1RocmVhZCAmJiBjaGlsZEZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCi0g
ICAgICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGNoaWxkRmxvd1RocmVhZCktPnJlbW92ZUZs
b3dDaGlsZEluZm8oY2hpbGQpOworICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGNo
aWxkRmxvd1RocmVhZCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4o
KmNoaWxkRmxvd1RocmVhZCkucmVtb3ZlRmxvd0NoaWxkSW5mbyhjaGlsZCk7CiAKICAgICBwYXJl
bnQucmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hpbGQsIGNoaWxkLT5oYXNMYXllcigpID8gTm90aWZ5
Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwogICAgIGNoaWxkLT5tb3ZlQWxsQ2hpbGRy
ZW5UbygmcGFyZW50LCBuZXh0U2libGluZywgY2hpbGQtPmhhc0xheWVyKCkpOwpAQCAtMTI2OCw4
ICsxMjY4LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCgpCiAKICAgICAv
LyBNYWtlIHN1cmUgYSBmb3JjZWQgYnJlYWsgaXMgYXBwbGllZCBhZnRlciB0aGUgY29udGVudCBp
ZiB3ZSBhcmUgYSBmbG93IHRocmVhZCBpbiBhIHNpbXBsaWZpZWQgbGF5b3V0LgogICAgIC8vIFRo
aXMgZW5zdXJlcyB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0bHkgY29tcHV0ZWQgZm9y
IHRoZSBsYXN0IGF1dG8taGVpZ2h0IHJlZ2lvbiByZWNlaXZpbmcgY29udGVudC4KLSAgICBpZiAo
aXNSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+
YXBwbHlCcmVha0FmdGVyQ29udGVudChjbGllbnRMb2dpY2FsQm90dG9tKCkpOworICAgIGlmIChp
czxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckZsb3dU
aHJlYWQ+KCp0aGlzKS5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KGNsaWVudExvZ2ljYWxCb3R0b20o
KSk7CiAKICAgICAvLyBMYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMgaWYgb3VyIHBvc2l0
aW9uZWQgY2hpbGQgYml0IGlzIHNldC4KICAgICAvLyBBbHNvLCBpZiBhbiBhYnNvbHV0ZSBwb3Np
dGlvbiBlbGVtZW50IGluc2lkZSBhIHJlbGF0aXZlIHBvc2l0aW9uZWQgY29udGFpbmVyIG1vdmVz
LCBhbmQgdGhlIGFic29sdXRlIGVsZW1lbnQgaGFzIGEgZml4ZWQgcG9zaXRpb24KQEAgLTE1ODAs
NyArMTU4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgICAgICAgICBib29sIGRp
ZENsaXBUb1JlZ2lvbiA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKTsKLSAgICAgICAgICAgIGlmIChwYWludEluZm8ucGFpbnRDb250YWluZXIg
JiYgbmFtZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQg
JiYgaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihwYWludEluZm8ucGFpbnRDb250YWluZXIpKSB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBib3ggZ29lcyBiZXlvbmQgdGhlIGN1cnJlbnQg
cmVnaW9uLCB0aGVuIG1ha2Ugc3VyZSBub3QgdG8gb3ZlcmZsb3cgdGhlIHJlZ2lvbi4KICAgICAg
ICAgICAgICAgICAvLyBUaGlzIChvdmVyZmxvd2luZyByZWdpb24gWCBhbHRvdWdoIGFsc28gZnJh
Z21lbnRlZCB0byByZWdpb24gWCsxKSBjb3VsZCBoYXBwZW4gd2hlbiBvbmUgb2YgdGhpcyBib3gn
cyBjaGlsZHJlbgogICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93cyByZWdpb24gWCBhbmQgaXMg
YW4gdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGxpa2UgYW4gaW1hZ2UpLgpAQCAtMTU4OSw3ICsxNTg5
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwogICAgICAgICAgICAgICAgIGRpZENsaXBUb1JlZ2lvbiA9IHRydWU7
CiAKLSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcCh0b1JlbmRlck5hbWVk
Rmxvd1RocmVhZChwYWludEluZm8ucGFpbnRDb250YWluZXIpLT5kZWNvcmF0aW9uc0NsaXBSZWN0
Rm9yQm94SW5OYW1lZEZsb3dGcmFnbWVudCgqdGhpcywgKm5hbWVkRmxvd0ZyYWdtZW50KSk7Cisg
ICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZG93bmNhc3Q8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPigqcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKS5kZWNvcmF0aW9uc0NsaXBS
ZWN0Rm9yQm94SW5OYW1lZEZsb3dGcmFnbWVudCgqdGhpcywgKm5hbWVkRmxvd0ZyYWdtZW50KSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7CkBAIC0xODk4LDkgKzE4OTgsOSBAQCBHYXBSZWN0cyBSZW5kZXJC
bG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQ
b2ludCYgcgogICAgIH0KICAgICAKICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRG
bG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLSAgICBpZiAo
cGFpbnRJbmZvICYmIG5hbWVkRmxvd0ZyYWdtZW50ICYmIHBhaW50SW5mby0+cGFpbnRDb250YWlu
ZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKHBhaW50SW5mbyAmJiBuYW1lZEZs
b3dGcmFnbWVudCAmJiBpczxSZW5kZXJGbG93VGhyZWFkPigqcGFpbnRJbmZvLT5wYWludENvbnRh
aW5lcikpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjdXJyZW50IG9iamVjdCBpcyBhY3R1
YWxseSBmbG93ZWQgaW50byB0aGUgcmVnaW9uIGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGlmICgh
dG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFpbnRDb250YWluZXIpLT5vYmplY3RTaG91
bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCisgICAgICAg
IGlmICghZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnBhaW50SW5mby0+cGFpbnRDb250YWlu
ZXIpLm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdt
ZW50KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yNDQyLDcgKzI0
NDIsNyBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91dFNpemUgbG9jYWxPZmZz
ZXQgPSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CiAKICAgICBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGZsb3dUaHJlYWQgPyB0b1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxs
cHRyOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGZs
b3dUaHJlYWQgPyBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oZmxvd1RocmVhZC0+
Y3VycmVudFJlZ2lvbigpKSA6IG51bGxwdHI7CiAgICAgLy8gSWYgd2UgYXJlIG5vdyBzZWFyY2hp
bmcgaW5zaWRlIGEgcmVnaW9uLCBtYWtlIHN1cmUgdGhpcyBlbGVtZW50CiAgICAgLy8gaXMgYmVp
bmcgZnJhZ21lbnRlZCBpbnRvIHRoaXMgcmVnaW9uLgogICAgIGlmIChuYW1lZEZsb3dGcmFnbWVu
dCAmJiAhZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywg
bmFtZWRGbG93RnJhZ21lbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcAppbmRleCA5MTk3YTliYmUyOGE5NzNiNWQ0NWYxN2I5N2M0ZTNlNWQzM2Q1M2M4
Li5jZjA1OTAwNGY1MDNhOWIyZGZjNDkzMDFhMWQwMDMyZDk3OTcxMjI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtNTAxLDggKzUwMSw4IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxICiAKICAgICAvLyBCZWZvcmUgdXBkYXRpbmcgdGhlIGZp
bmFsIHNpemUgb2YgdGhlIGZsb3cgdGhyZWFkIG1ha2Ugc3VyZSBhIGZvcmNlZCBicmVhayBpcyBh
cHBsaWVkIGFmdGVyIHRoZSBjb250ZW50LgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgc2l6ZSBp
bmZvcm1hdGlvbiBpcyBjb3JyZWN0bHkgY29tcHV0ZWQgZm9yIHRoZSBsYXN0IGF1dG8taGVpZ2h0
IHJlZ2lvbiByZWNlaXZpbmcgY29udGVudC4KLSAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkp
Ci0gICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+YXBwbHlCcmVha0FmdGVyQ29udGVu
dChvbGRDbGllbnRBZnRlckVkZ2UpOworICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPigqdGhp
cykpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKS5hcHBseUJyZWFr
QWZ0ZXJDb250ZW50KG9sZENsaWVudEFmdGVyRWRnZSk7CiAKICAgICB1cGRhdGVMb2dpY2FsSGVp
Z2h0KCk7CiAgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CkBAIC0y
ODI2LDggKzI4MjYsOCBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdEZsb2F0cyhjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRP
ZmZzZXQ7Ci0gICAgaWYgKGlzUmVuZGVyVmlldygpKQotICAgICAgICBhZGp1c3RlZExvY2F0aW9u
ICs9IHRvTGF5b3V0U2l6ZSh0b1JlbmRlclZpZXcoKnRoaXMpLmZyYW1lVmlldygpLnNjcm9sbFBv
c2l0aW9uKCkpOworICAgIGlmIChpczxSZW5kZXJWaWV3PigqdGhpcykpCisgICAgICAgIGFkanVz
dGVkTG9jYXRpb24gKz0gdG9MYXlvdXRTaXplKGRvd25jYXN0PFJlbmRlclZpZXc+KCp0aGlzKS5m
cmFtZVZpZXcoKS5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBh
dXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKQEAgLTM3MjQsOCArMzcyNCw4
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0
Q2hhbmdlKGJvb2wmIHJlbGF5b3V0Q2hpbGRyCiAgICAgICAgIGZsb3dUaHJlYWQtPnNldENvbHVt
bkhlaWdodEF2YWlsYWJsZShzdGQ6Om1heDxMYXlvdXRVbml0Pihjb2x1bW5IZWlnaHQsIDApKTsK
ICAgICAgICAgaWYgKG9sZEhlaWdodEF2YWlsYWJsZSAhPSBmbG93VGhyZWFkLT5jb2x1bW5IZWln
aHRBdmFpbGFibGUoKSkKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwotICAg
IH0gZWxzZSBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkgeworICAgICAgICBSZW5kZXJGbG93VGhy
ZWFkJiBmbG93VGhyZWFkID0gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpOwogCiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byBhbHdheXMgbWFrZSBzdXJlIHdlIGhh
dmUgYSBwYWdlIGxvZ2ljYWwgaGVpZ2h0LCBpZiBzYWlkIGhlaWdodAogICAgICAgICAvLyBpcyBr
bm93bi4gVGhlIHBhZ2UgbG9naWNhbCBoZWlnaHQgdGhpbmcgaW4gTGF5b3V0U3RhdGUgaXMgbWVh
bmluZ2xlc3MgZm9yIGZsb3cKQEAgLTM3MzYsOSArMzczNiw5IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKGJvb2wmIHJlbGF5b3V0
Q2hpbGRyCiAgICAgICAgIC8vIGl0J3MgdW5rbm93biwgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBw
YWdpbmF0aW9uIGNvZGUgZnJvbSBhc3N1bWluZyBwYWdlIGJyZWFrcyBldmVyeXdoZXJlCiAgICAg
ICAgIC8vIGFuZCB0aGVyZWJ5IGVhdGluZyBldmVyeSB0b3AgbWFyZ2luLiBJdCBzaG91bGQgYmUg
dHJpdmlhbCB0byBjbGVhbiB1cCBhbmQgZ2V0IHJpZCBvZiB0aGlzCiAgICAgICAgIC8vIGhhY2sg
b25jZSB0aGUgb2xkIG11bHRpY29sIGltcGxlbWVudGF0aW9uIGlzIGdvbmUuCi0gICAgICAgIHBh
Z2VMb2dpY2FsSGVpZ2h0ID0gZmxvd1RocmVhZC0+aXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkg
PyBMYXlvdXRVbml0KDEpIDogTGF5b3V0VW5pdCgwKTsKKyAgICAgICAgcGFnZUxvZ2ljYWxIZWln
aHQgPSBmbG93VGhyZWFkLmlzUGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpID8gTGF5b3V0VW5pdCgx
KSA6IExheW91dFVuaXQoMCk7CiAKLSAgICAgICAgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0g
Zmxvd1RocmVhZC0+cGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpOworICAgICAgICBwYWdlTG9naWNh
bEhlaWdodENoYW5nZWQgPSBmbG93VGhyZWFkLnBhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKaW5kZXggNGY0YTlmNTE3MzQxOGIwMDNkNzAxMDVkZDUyZDcxMjk0NDAwNTQz
ZS4uMDNhZmMxNWFhNTY2NjA1M2M4OWQ5NWNmZTg2NmQ4NjVjYTRiOGEzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTcz
NCw3ICs3MzQsNyBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmVCbwogICAgICAgICAgICAgc2V0TG9n
aWNhbFdpZHRoRm9yVGV4dFJ1bihsaW5lQm94LCBydW4sICZyZW5kZXJUZXh0LCB0b3RhbExvZ2lj
YWxXaWR0aCwgbGluZUluZm8sIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUs
IHdvcmRNZWFzdXJlbWVudHMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYm9vbCBl
bmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpICYmIHRleHRBbGlnbiA9PSBKVVNUSUZZICYmIHJ1
biAhPSB0cmFpbGluZ1NwYWNlUnVuICYmIHRvUmVuZGVyUnVieVJ1bihydW4tPnJlbmRlcmVyKCkp
LnJ1YnlCYXNlKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJSdWJ5UnVuPihydW4tPnJl
bmRlcmVyKCkpICYmIHRleHRBbGlnbiA9PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNl
UnVuICYmIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHJ1bi0+cmVuZGVyZXIoKSkucnVieUJhc2Uo
KSkgewogICAgICAgICAgICAgICAgIGF1dG8qIHJ1YnlCYXNlID0gZG93bmNhc3Q8UmVuZGVyUnVi
eVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5QmFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChy
dWJ5QmFzZS0+Zmlyc3RSb290Qm94KCkgJiYgIXJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+bmV4
dFJvb3RCb3goKSAmJiBydW4tPnJlbmRlcmVyKCkuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGxlYWZDaGlsZCA9IHJ1YnlCYXNl
LT5maXJzdFJvb3RCb3goKS0+Zmlyc3RMZWFmQ2hpbGQoKTsgbGVhZkNoaWxkOyBsZWFmQ2hpbGQg
PSBsZWFmQ2hpbGQtPm5leHRMZWFmQ2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAppbmRleCA1MWZkN2Q1MmQ4OTYzMzhiZTc2NTJjYzNhNTQzMjVjNWRjOTc0OTkw
Li5lOWI3MWMyYjhjNThkYjI5NmYyOGZmM2UyNTJlZTEwNTg2ODAyNjkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtODA0LDkgKzgwNCw5IEBAIGJvb2wgUmVuZGVy
Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVuZGVyQmxvY2sqIG5l
eHRTY3JvbGxCbG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChuZXh0U2Nyb2xsQmxv
Y2sgJiYgbmV4dFNjcm9sbEJsb2NrLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAg
aWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4obmV4dFNjcm9sbEJsb2NrKSkgewogICAgICAg
ICBBU1NFUlQoc3RhcnRCb3gpOwotICAgICAgICBuZXh0U2Nyb2xsQmxvY2sgPSB0b1JlbmRlck5h
bWVkRmxvd1RocmVhZChuZXh0U2Nyb2xsQmxvY2spLT5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50
QW5kQm94KHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50LCAqc3RhcnRCb3gpOworICAgICAgICBuZXh0
U2Nyb2xsQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpuZXh0U2Nyb2xs
QmxvY2spLmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3god2hlZWxFdmVudEFic29sdXRl
UG9pbnQsICpzdGFydEJveCk7CiAgICAgfQogCiAgICAgaWYgKG5leHRTY3JvbGxCbG9jayAmJiAh
bmV4dFNjcm9sbEJsb2NrLT5pc1JlbmRlclZpZXcoKSkKQEAgLTExNjYsNyArMTE2Niw3IEBAIGJv
b2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAgICAgfQogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvblRvVXNlID0gZmxvd1RocmVhZCA/IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxv
d1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKSA6IG51bGxwdHI7CisgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Ub1VzZSA9IGZsb3dUaHJlYWQgPyBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dD4oZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKSA6IG51bGxwdHI7CiAKICAgICAvLyBJZiB0
aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyByZWdpb24gdGhlcmUncyBubyBwb2ludCBp
biBnb2luZyBmdXJ0aGVyLgogICAgIGlmIChyZWdpb25Ub1VzZSAmJiAhZmxvd1RocmVhZC0+b2Jq
ZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcmVnaW9uVG9Vc2UpKQpAQCAtMTY0
MCw3ICsxNjQwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQ
dHIgaW1hZ2UsIGNvbnN0IEludFJlY3QqKQogYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJl
Y3RzRm9ySW1hZ2UoV3JhcHBlZEltYWdlUHRyIGltYWdlLCBjb25zdCBGaWxsTGF5ZXIqIGxheWVy
cywgYm9vbCBkcmF3aW5nQmFja2dyb3VuZCkKIHsKICAgICBMYXlvdXRSZWN0IHJlbmRlcmVyUmVj
dDsKLSAgICBSZW5kZXJCb3gqIGxheWVyUmVuZGVyZXIgPSAwOworICAgIFJlbmRlckJveCogbGF5
ZXJSZW5kZXJlciA9IG51bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyTGF5
ZXIgPSBsYXllcnM7IGN1ckxheWVyOyBjdXJMYXllciA9IGN1ckxheWVyLT5uZXh0KCkpIHsKICAg
ICAgICAgaWYgKGN1ckxheWVyLT5pbWFnZSgpICYmIGltYWdlID09IGN1ckxheWVyLT5pbWFnZSgp
LT5kYXRhKCkgJiYgY3VyTGF5ZXItPmltYWdlKCktPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKSkpIHsKQEAgLTE2NTAsOCArMTY1MCw4IEBAIGJvb2wgUmVuZGVyQm94Ojpy
ZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgRmls
bExheWVyCiAgICAgICAgICAgICAgICAgaWYgKGRyYXdpbmdSb290QmFja2dyb3VuZCkgewogICAg
ICAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gJnZpZXcoKTsKIAotICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHJ3ID0gdG9SZW5kZXJWaWV3KCpsYXllclJlbmRlcmVyKS5mcmFt
ZVZpZXcoKS5jb250ZW50c1dpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
cmggPSB0b1JlbmRlclZpZXcoKmxheWVyUmVuZGVyZXIpLmZyYW1lVmlldygpLmNvbnRlbnRzSGVp
Z2h0KCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcncgPSBkb3duY2FzdDxSZW5k
ZXJWaWV3PigqbGF5ZXJSZW5kZXJlcikuZnJhbWVWaWV3KCkuY29udGVudHNXaWR0aCgpOworICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJoID0gZG93bmNhc3Q8UmVuZGVyVmlldz4oKmxh
eWVyUmVuZGVyZXIpLmZyYW1lVmlldygpLmNvbnRlbnRzSGVpZ2h0KCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXJSZWN0ID0gTGF5b3V0UmVjdCgtbGF5ZXJSZW5kZXJlci0+bWFyZ2lu
TGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgLWxheWVyUmVuZGVyZXItPm1hcmdpblRv
cCgpLApAQCAtMTY2NCw3ICsxNjY0LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJl
Y3RzRm9ySW1hZ2UoV3JhcHBlZEltYWdlUHRyIGltYWdlLCBjb25zdCBGaWxsTGF5ZXIKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkgZ2VvbWV0cnk7
Ci0gICAgICAgICAgICBsYXllclJlbmRlcmVyLT5jYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9t
ZXRyeSgwLCBjdXJMYXllciwgcmVuZGVyZXJSZWN0LCBnZW9tZXRyeSk7CisgICAgICAgICAgICBs
YXllclJlbmRlcmVyLT5jYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShudWxscHRyLCBj
dXJMYXllciwgcmVuZGVyZXJSZWN0LCBnZW9tZXRyeSk7CiAgICAgICAgICAgICBpZiAoZ2VvbWV0
cnkuaGFzTm9uTG9jYWxHZW9tZXRyeSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gUmF0aGVyIHRo
YW4gaW5jdXIgdGhlIGNvc3RzIG9mIGNvbXB1dGluZyB0aGUgcGFpbnRDb250YWluZXIgZm9yIHJl
bmRlcmVycyB3aXRoIGZpeGVkIGJhY2tncm91bmRzCiAgICAgICAgICAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZ2V0IHRoZSByaWdodCBkZXN0UmVjdCwganVzdCByZXBhaW50IHRoZSBlbnRpcmUgcmVu
ZGVyZXIuCkBAIC0xOTU4LDcgKzE5NTgsNyBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbgogICAg
IGlmICghY29udGFpbmVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSB8fCAhZml4ZWRQ
b3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICBjb250YWlu
ZXItPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUs
IG1vZGUsIHdhc0ZpeGVkKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRhaW5lci0+bWFwTG9jYWxU
b0NvbnRhaW5lcih0b1JlbmRlckxheWVyTW9kZWxPYmplY3QoY29udGFpbmVyKSwgdHJhbnNmb3Jt
U3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKKyAgICAgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29u
dGFpbmVyKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGNvbnRhaW5lciksIHRyYW5z
Zm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7CiB9CiAKIGNvbnN0IFJlbmRlck9iamVjdCogUmVu
ZGVyQm94OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29u
c3QKQEAgLTMwOTcsMTUgKzMwOTcsMTUgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW8KICAgICAg
ICAgY29uc3QgUmVuZGVyQmxvY2smIGNiID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250YWlu
aW5nQmxvY2spOwogICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gbnVsbHB0
cjsKICAgICAgICAgaWYgKCFyZWdpb24pIHsKLSAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxv
Y2stPmlzUmVuZGVyRmxvd1RocmVhZCgpICYmICFjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5n
TW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFkKGNvbnRhaW5p
bmdCbG9jayktPmNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0UmVnaW9uKCk7CisgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKmNvbnRhaW5pbmdCbG9jaykgJiYgIWNoZWNrRm9y
UGVycGVuZGljdWxhcldyaXRpbmdNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbFdpZHRo
T2ZGaXJzdFJlZ2lvbigpOwogICAgICAgICAgICAgaWYgKGlzV3JpdGluZ01vZGVSb290KCkpIHsK
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLm9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNi
UmVnaW9uID0gY2IucmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGlmIChjYlJlZ2lvbikKICAgICAgICAgICAgICAgICAgICAgYm94SW5mbyA9IGNiLnJl
bmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHJlZ2lvbiAmJiBmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09
IGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICB9
IGVsc2UgaWYgKGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFp
bmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5k
ZXJSZWdpb24qIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLmNsYW1wVG9TdGFydEFuZEVuZFJl
Z2lvbnMocmVnaW9uKTsKICAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJCb3hSZWdpb25J
bmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKaW5kZXggZDQyOTMyOTJlMmI2ODAxZWQ3NjFh
ZTNkZjAxYmIyMTU4M2Q4ZmZkNy4uYTU5NThkNDA4NDIzYmNmODhmNzIxNTUyYzljMzQ0MTBlY2Fm
MjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVU
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgK
QEAgLTU3LDggKzU3LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVlZHNGb250VXBkYXRlIDog
MTsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJDb21iaW5lVGV4dCwgaXND
b21iaW5lVGV4dCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJDb21iaW5lVGV4dCwgaXNDb21iaW5lVGV4dCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IDRjYTBl
MGJmN2YwOGYwODE5NDI0N2VmZDc4NjI4NzAzZWM2NjJhMDcuLmQ5OTUyNjYxOGM0OGMxZmFhYTY0
OTdlYTY0MTUzMWU0ZjQ4NGYwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyRWxl
bWVudDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCB1bnNpZwog
ICAgICAgICAvLyBUZXh0IG5vZGVzIHNoYXJlIHN0eWxlIHdpdGggdGhlaXIgcGFyZW50cyBidXQg
dHJhbnNmb3JtcyBkb24ndCBhcHBseSB0byB0aGVtLAogICAgICAgICAvLyBoZW5jZSB0aGUgIWlz
VGV4dCgpIGNoZWNrLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB0cmFuc2Zvcm1zIGFyZSB0YWtl
biBpbnRvIGFjY291bnQgZm9yIG92ZXJmbG93LCB3ZSB3aWxsIG5lZWQgdG8gZG8gYSBsYXlvdXQu
Ci0gICAgICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRo
aXMpLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICBpZiAoIWhhc0xheWVyKCkg
fHwgIWRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpLT5pc0Nv
bXBvc2l0ZWQoKSkgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgYXQgbGVhc3QgU2lt
cGxpZmllZExheW91dCwgYnV0IGlmIFBvc2l0aW9uZWRNb3ZlbWVudE9ubHkgaXMgYWxyZWFkeSBz
ZXQKICAgICAgICAgICAgIC8vIHRoZW4gd2UgYWN0dWFsbHkgbmVlZCBTaW1wbGlmaWVkTGF5b3V0
QW5kUG9zaXRpb25lZE1vdmVtZW50LgogICAgICAgICAgICAgaWYgKCFoYXNMYXllcigpKQpAQCAt
MjcyLDE0ICsyNzIsMTQgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6OmFkanVzdFN0
eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWcKICAgICAvLyBJZiBvcGFj
aXR5IGNoYW5nZWQsIGFuZCB3ZSBhcmUgbm90IGNvbXBvc2l0ZWQsIG5lZWQgdG8gcmVwYWludCAo
YWxzbwogICAgIC8vIGlnbm9yaW5nIHRleHQgbm9kZXMpCiAgICAgaWYgKGNvbnRleHRTZW5zaXRp
dmVQcm9wZXJ0aWVzICYgQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5T3BhY2l0eSkgewotICAgICAg
ICBpZiAoIWhhc0xheWVyKCkgfHwgIXRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5
ZXIoKS0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhZG93bmNh
c3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPmlzQ29tcG9zaXRlZCgp
KQogICAgICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllcjsKICAgICAg
ICAgZWxzZSBpZiAoZGlmZiA8IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIpCiAgICAg
ICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllcjsKICAgICB9CiAK
ICAgICBpZiAoKGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzICYgQ29udGV4dFNlbnNpdGl2ZVBy
b3BlcnR5RmlsdGVyKSAmJiBoYXNMYXllcigpKSB7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKTsKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMp
LmxheWVyKCk7CiAgICAgICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRlZCgpIHx8IGxheWVyLT5w
YWludHNXaXRoRmlsdGVycygpKQogICAgICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJl
cGFpbnRMYXllcjsKICAgICAgICAgZWxzZSBpZiAoZGlmZiA8IFN0eWxlRGlmZmVyZW5jZVJlY29t
cG9zaXRlTGF5ZXIpCkBAIC0yOTAsNyArMjkwLDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVs
ZW1lbnQ6OmFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWcK
ICAgICAvLyBzdHlsZSBjaGFuZ2luZywgc2luY2UgaXQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlIGRl
Y2lkZSB0byBjb21wb3NpdGUgdGhlc2UgZWxlbWVudHMuIFdoZW4gdGhlCiAgICAgLy8gbGF5ZXIg
c3RhdHVzIG9mIG9uZSBvZiB0aGVzZSBlbGVtZW50cyBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGZvcmNl
IGEgbGF5b3V0LgogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUVxdWFsICYmIGlzUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChoYXNMYXllcigpICE9IHRvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+cmVxdWlyZXNMYXllcigpKQorICAgICAgICBpZiAo
aGFzTGF5ZXIoKSAhPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykucmVx
dWlyZXNMYXllcigpKQogICAgICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZUxheW91dDsK
ICAgICB9CiAKQEAgLTY1OCw3ICs2NTgsNyBAQCBzdGF0aWMgdm9pZCBhZGRMYXllcnMoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlckxheWVyKiBwYXJlbnRMYXllciwgUmVuZGVyRQogICAg
ICAgICAgICAgYmVmb3JlQ2hpbGQgPSBuZXdPYmplY3QtPnBhcmVudCgpLT5maW5kTmV4dExheWVy
KHBhcmVudExheWVyLCBuZXdPYmplY3QpOwogICAgICAgICAgICAgbmV3T2JqZWN0ID0gbnVsbHB0
cjsKICAgICAgICAgfQotICAgICAgICBwYXJlbnRMYXllci0+YWRkQ2hpbGQodG9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0KHJlbmRlcmVyKS5sYXllcigpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHBh
cmVudExheWVyLT5hZGRDaGlsZChkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5k
ZXJlcikubGF5ZXIoKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC02ODIsNyArNjgyLDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpyZW1vdmVMYXllcnMoUmVuZGVy
TGF5ZXIqIHBhcmVudExheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaGFzTGF5ZXIo
KSkgewotICAgICAgICBwYXJlbnRMYXllci0+cmVtb3ZlQ2hpbGQodG9SZW5kZXJMYXllck1vZGVs
T2JqZWN0KHRoaXMpLT5sYXllcigpKTsKKyAgICAgICAgcGFyZW50TGF5ZXItPnJlbW92ZUNoaWxk
KGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjk2LDcgKzY5Niw3IEBAIHZvaWQgUmVuZGVyRWxlbWVu
dDo6bW92ZUxheWVycyhSZW5kZXJMYXllciogb2xkUGFyZW50LCBSZW5kZXJMYXllciogbmV3UGFy
ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaGFzTGF5ZXIoKSkgewotICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxheWVy
KCk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpOwogICAgICAgICBBU1NFUlQob2xkUGFyZW50ID09IGxh
eWVyLT5wYXJlbnQoKSk7CiAgICAgICAgIGlmIChvbGRQYXJlbnQpCiAgICAgICAgICAgICBvbGRQ
YXJlbnQtPnJlbW92ZUNoaWxkKGxheWVyKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBAIHZvaWQgUmVu
ZGVyRWxlbWVudDo6c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlCiAgICAgc2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRCaXQo
dHJ1ZSk7CiAgICAgbWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoKTsKICAgICBpZiAoaGFz
TGF5ZXIoKSkgewotICAgICAgICBpZiAob2xkU3R5bGUgJiYgc3R5bGUoKS5kaWZmUmVxdWlyZXNM
YXllclJlcGFpbnQoKm9sZFN0eWxlLCB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QodGhpcyktPmxh
eWVyKCktPmlzQ29tcG9zaXRlZCgpKSkKKyAgICAgICAgaWYgKG9sZFN0eWxlICYmIHN0eWxlKCku
ZGlmZlJlcXVpcmVzTGF5ZXJSZXBhaW50KCpvbGRTdHlsZSwgZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSkKICAgICAgICAgICAg
IHNldExheWVyTmVlZHNGdWxsUmVwYWludCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
ZXRMYXllck5lZWRzRnVsbFJlcGFpbnRGb3JQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKQEAg
LTEzMzEsMTAgKzEzMzEsMTAgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpyZXBhaW50Rm9yUGF1c2Vk
SW1hZ2VBbmltYXRpb25zSWZOZWVkZWQoY29uc3QgSW50UmVjdCYgdmlzaWIKIAogUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKiBSZW5kZXJFbGVtZW50OjpyZW5kZXJOYW1lZEZsb3dUaHJlYWRXcmFwcGVy
KCkKIHsKLSAgICBhdXRvIHJlbmRlcmVyID0gdGhpczsKLSAgICB3aGlsZSAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhcmVuZGVyZXItPmlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkKCkpCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzOworICAgIHdoaWxlIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFpczxSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ+KCpyZW5kZXJlcikpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpOwotICAgIHJldHVybiByZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKHJlbmRlcmVyKSA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4ocmVuZGVyZXIpID8gZG93bmNhc3Q8
UmVuZGVyTmFtZWRGbG93VGhyZWFkPihyZW5kZXJlcikgOiBudWxscHRyOwogfQogCiBib29sIFJl
bmRlckVsZW1lbnQ6Omhhc0NvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5oCmluZGV4IDgzYzdjMzcyOTEwNjIzOTljOThkODJhNjY4ZTMyYWRlMDcxMmVlN2IuLjE0ZjBh
MzhlZDk2M2M5NTYxNTJhODliMmIzZTUwMTNjMmUwYjQxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC0xMDEsOCArMTAxLDYgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV91bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uOwogfTsKIAot
UkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckVtYmVkZGVkT2JqZWN0LCBpc0VtYmVkZGVk
T2JqZWN0KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlckVtYmVkZGVkT2JqZWN0LCBpc0VtYmVkZGVkT2JqZWN0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5k
ZXggZDJiMDA4MGE5NjJkMTdhOTkwMzAzN2Y4MWQ0MDE2NmNjMDhlZWVlNy4uNGJlMjg2OWY2NWM4
MmNiMDcyMDk4OTg0MjgwM2I4MTQxOGFkMjQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE1MCw4ICsxNTEsOCBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygpCiAgICAgICAgICAgICAgICAgLy8gQWxz
bywgaWYgd2UgaGF2ZSBhdXRvLWhlaWdodCByZWdpb25zIHdlIGNhbid0IGFzc3VtZSBtX3JlZ2lv
bnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgdG8gYmUgdHJ1ZSBpbiB0aGUgZmlyc3QgcGhhc2UK
ICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGRvbid0
IGhhdmUgdGhlaXIgaGVpZ2h0IGNvbXB1dGVkIHlldC4KICAgICAgICAgICAgICAgICBpZiAoaW5N
ZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdo
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1l
ZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQtPnNldENvbXB1dGVkQXV0b0hlaWdodChu
YW1lZEZsb3dGcmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KCpyZWdpb24pOworICAgICAgICAgICAgICAgICAgICBuYW1lZEZsb3dGcmFnbWVu
dC5zZXRDb21wdXRlZEF1dG9IZWlnaHQobmFtZWRGbG93RnJhZ21lbnQubWF4UGFnZUxvZ2ljYWxI
ZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNh
bEhlaWdodCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjE3LDcgKzIxOCw3IEBA
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6
aGFzQ29tcG9zaXRpbmdSZWdpb25EZXNjZW5kYW50KCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8m
IHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewotICAgICAgICBpZiAodG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZWdpb24pLT5sYXllck93bmVyKCkubGF5ZXIoKS0+aGFzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50KCkpCisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4o
KnJlZ2lvbikubGF5ZXJPd25lcigpLmxheWVyKCktPmhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNDAsMTIgKzI0MSwxMiBA
QCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uRm9yQ29t
cG9zaXRlZExheWVyKFJlbmRlckxheWVyJgogICAgICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVn
aW9uID0gbnVsbHB0cjsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRy
OwogICAgICAgICBpZiAoZ2V0UmVnaW9uUmFuZ2VGb3JCb3goY2hpbGRMYXllci5yZW5kZXJCb3go
KSwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChzdGFydFJlZ2lvbik7CisgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KHN0YXJ0UmVnaW9uKTsKICAgICB9CiAKICAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSdsbCBoYXZlIHJlZ2lvbiByYW5nZXMgZm9yIGlu
bGluZXMgYXMgd2VsbC4KICAgICBMYXlvdXRQb2ludCBmbG93VGhyZWFkT2Zmc2V0ID0gZmxvb3Jl
ZExheW91dFBvaW50KGNoaWxkTGF5ZXIucmVuZGVyZXIoKS5sb2NhbFRvQ29udGFpbmVyUG9pbnQo
TGF5b3V0UG9pbnQoKSwgdGhpcywgQXBwbHlDb250YWluZXJGbGlwKSk7Ci0gICAgcmV0dXJuIHRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uQXRCbG9ja09mZnNldCgwLCBmbGlwRm9yV3Jp
dGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRPZmZzZXQueSgp
IDogZmxvd1RocmVhZE9mZnNldC54KCkpLCB0cnVlKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50PihyZWdpb25BdEJsb2NrT2Zmc2V0KDAsIGZsaXBGb3JXcml0
aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvd1RocmVhZE9mZnNldC55KCkg
OiBmbG93VGhyZWFkT2Zmc2V0LngoKSksIHRydWUpKTsKIH0KIAogUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqIFJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZFJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcihS
ZW5kZXJMYXllciYgY2hpbGRMYXllcikgY29uc3QKQEAgLTcxMyw4ICs3MTQsOCBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlckJveCogYgogICAgICAgICAgICAgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSB0cnVl
OwogCiAgICAgICAgIGlmICghKGluc2lkZU9sZFJlZ2lvblJhbmdlICYmIGluc2lkZU5ld1JlZ2lv
blJhbmdlKSkgewotICAgICAgICAgICAgaWYgKHJlZ2lvbi0+aXNSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpKQotICAgICAgICAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9u
KS0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJveCk7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5jbGVhck9iamVjdFN0eWxlSW5SZWdp
b24oYm94KTsKICAgICAgICAgICAgIGlmIChyZWdpb24tPnJlbmRlckJveFJlZ2lvbkluZm8oYm94
KSkKICAgICAgICAgICAgICAgICByZWdpb24tPnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oYm94
KTsKICAgICAgICAgfQpAQCAtOTc4LDEwICs5NzksMTAgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
Ojppbml0aWFsaXplUmVnaW9uc0NvbXB1dGVkQXV0b0hlaWdodChSZW5kZXJSZWdpb24qIHN0YXJ0
UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvIHJlZ2lvbkl0ZXIgPSBzdGFydFJl
Z2lvbiA/IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlzdC5iZWdp
bigpLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IHJlZ2lvbkl0ZXIgIT0gZW5kOyArK3JlZ2lv
bkl0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqcmVnaW9uSXRlcjsKLSAg
ICAgICAgaWYgKHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudChyZWdpb24pOwotICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQtPnNl
dENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZsb3dGcmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWln
aHQoKSk7CisgICAgICAgIFJlbmRlclJlZ2lvbiYgcmVnaW9uID0gKipyZWdpb25JdGVyOworICAg
ICAgICBpZiAocmVnaW9uLmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGF1
dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+
KHJlZ2lvbik7CisgICAgICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC5zZXRDb21wdXRlZEF1dG9I
ZWlnaHQobmFtZWRGbG93RnJhZ21lbnQubWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0xMDIwLDcgKzEwMjEsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgUmVuZGVyUmVnaW9uKiBs
YQogICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7CiAgICAgICAgIC8vIElm
IHdlIGZpbmQgYW4gZW1wdHkgYXV0by1oZWlnaHQgcmVnaW9uLCBjbGVhciB0aGUgY29tcHV0ZWRB
dXRvSGVpZ2h0IHZhbHVlLgogICAgICAgICBpZiAoZW1wdHlSZWdpb25zU2VnbWVudCAmJiByZWdp
b24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0b1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KHJlZ2lvbiktPmNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7CisgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuY2xlYXJDb21wdXRl
ZEF1dG9IZWlnaHQoKTsKIAogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9
IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxv
Z2ljYWxIZWlnaHQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PihSZW5kZXJGbG93VGhyZWFkOjptYXhM
b2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFs
bEZsb3dUaHJlYWRDb250ZW50KCkpOwpAQCAtMTA4MiwyNCArMTA4MywyNCBAQCBib29sIFJlbmRl
ckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
aywgTGF5b3V0VW5pdAogICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24g
PSBvZmZzZXRCcmVha0luRmxvd1RocmVhZCAtIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJl
YWQ7CiAKICAgICBpZiAocmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAg
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQocmVnaW9uKTsKKyAgICAgICAgYXV0byYgbmFtZWRGbG93RnJhZ21lbnQg
PSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbik7CiAKICAgICAgICAg
Ly8gQSBmb3JjZWQgYnJlYWsgY2FuIGFwcGVhciBvbmx5IGluIGFuIGF1dG8taGVpZ2h0IHJlZ2lv
biB0aGF0IGRpZG4ndCBoYXZlIGEgZm9yY2VkIGJyZWFrIGJlZm9yZS4KICAgICAgICAgLy8gVGhp
cyBBU1NFUlQgaXMgYSBnb29kLWVub3VnaCBoZXVyaXN0aWMgdG8gdmVyaWZ5IHRoZSBhYm92ZSBj
b25kaXRpb24uCi0gICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+bWF4UGFnZUxvZ2lj
YWxIZWlnaHQoKSA9PSBuYW1lZEZsb3dGcmFnbWVudC0+Y29tcHV0ZWRBdXRvSGVpZ2h0KCkpOwor
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQubWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSA9
PSBuYW1lZEZsb3dGcmFnbWVudC5jb21wdXRlZEF1dG9IZWlnaHQoKSk7CiAKLSAgICAgICAgbWFw
VG9Vc2Uuc2V0KGJyZWFrQ2hpbGQsIG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgbWFwVG9V
c2Uuc2V0KGJyZWFrQ2hpbGQsICZuYW1lZEZsb3dGcmFnbWVudCk7CiAKICAgICAgICAgaGFzQ29t
cHV0ZWRBdXRvSGVpZ2h0ID0gdHJ1ZTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSByZWdpb24g
aGVpZ2h0IHByZXRlbmRpbmcgdGhhdCB0aGUgb2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24gaXMg
dGhlIGxvZ2ljYWxIZWlnaHQgZm9yIHRoZSBhdXRvLWhlaWdodCByZWdpb24uCi0gICAgICAgIExh
eW91dFVuaXQgcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gbmFtZWRGbG93RnJhZ21lbnQtPmNv
bnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5NYXgob2Zmc2V0QnJlYWtJbkN1cnJl
bnRSZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA9
IG5hbWVkRmxvd0ZyYWdtZW50LmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5N
YXgob2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24pOwogCiAgICAgICAgIC8vIFRoZSBuZXcgaGVp
Z2h0IG9mIHRoaXMgcmVnaW9uIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbCB2
YWx1ZSwgdGhlIG1heCBoZWlnaHQuIEEgZm9yY2VkIGJyZWFrIGlzIHRoZSBvbmx5IHdheSB0byBj
aGFuZ2UgdGhlIGluaXRpYWwKICAgICAgICAgLy8gaGVpZ2h0IG9mIGFuIGF1dG8taGVpZ2h0IHJl
Z2lvbiBiZXNpZGVzIGNvbnRlbnQgZW5kaW5nLgotICAgICAgICBBU1NFUlQocmVnaW9uQ29tcHV0
ZWRBdXRvSGVpZ2h0IDw9IG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgp
KTsKKyAgICAgICAgQVNTRVJUKHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA8PSBuYW1lZEZsb3dG
cmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKIAotICAgICAgICBuYW1lZEZsb3dGcmFn
bWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7Cisg
ICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChyZWdpb25Db21w
dXRlZEF1dG9IZWlnaHQpOwogCiAgICAgICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJl
YWQgKz0gcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0OwogICAgIH0gZWxzZQpAQCAtMTQwOSw5ICsx
NDEwLDkgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hp
bGQoY29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IFIKICAgICAgICAgLy8gSW4gb3JkZXIgdG8g
YmVoYXZlIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIG5vbi1yZWdpb25zIGNhc2UsIGNvbnRl
bnQgb3ZlcmZsb3dpbmcgdGhlIGJveAogICAgICAgICAvLyBmbG93ZWQgaW50byB0aGUgcmVnaW9u
IG11c3QgYmUgcGFpbnRlZCBvbiB0b3Agb2YgdGhlIHJlZ2lvbidzIHBhZGRpbmcgYW5kIHRoZSBi
b3gncyBtYXJnaW4uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVz
L1B1YmxpYy93d3ctc3R5bGUvMjAxNEphbi8wMDg5Lmh0bWwKLSAgICAgICAgaWYgKGJveC0+aXNS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPigqYm94KSkgewogICAgICAgICAgICAgQVNTRVJUKGJveCA9PSB0aGlzKTsKLSAgICAg
ICAgICAgIFJlbmRlckJsb2NrRmxvdyYgZnJhZ21lbnRDb250YWluZXIgPSB0b1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KHJlZ2lvbiktPmZyYWdtZW50Q29udGFpbmVyKCk7CisgICAgICAgICAgICBS
ZW5kZXJCbG9ja0Zsb3cmIGZyYWdtZW50Q29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ+KCpyZWdpb24pLmZyYWdtZW50Q29udGFpbmVyKCk7CiAgICAgICAgICAgICBM
YXlvdXRVbml0IHNwYWNpbmdBZnRlckxheW91dCA9IGZyYWdtZW50Q29udGFpbmVyLnBhZGRpbmdB
ZnRlcigpICsgY2hpbGQtPm1hcmdpbkFmdGVyKCk7CiAgICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudENvbnRhaW5l
ci5zY3JvbGxzT3ZlcmZsb3dZKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5oCmluZGV4IDg0ZDAzNTZkOWJkNGRhZDI3OWE4Nzc2ZjZiMzFmY2YzOTBhNWVh
OGMuLjYyM2ViZmEyMTYxMTQ1MDQwNjhmOTUyM2M3YmM3OTRlM2JjMDUwMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApAQCAtMzc2LDggKzM3Niw2IEBA
IHByb3RlY3RlZDoKICAgICBib29sIG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5IDogMTsK
IH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJGbG93VGhyZWFkLCBpc1JlbmRl
ckZsb3dUaHJlYWQoKSkKLQogLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSBQT0RJbnRlcnZh
bFRyZWUgZm9yIGRlYnVnZ2luZy4KICNpZm5kZWYgTkRFQlVHCiB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmFsdWVUb1N0cmluZzxSZW5kZXJSZWdpb24qPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCAwOGY3YjU0NzNlYTBhNzNmY2E1YzJjNGMxMmU5ZmRlZTVlNzU5
MjQ3Li4yYTA2YTUxZWY1Y2YyOTViMmVmODhhMjIxNzBhNGVmYWFiZmExNGFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0OTcsNyArMTQ5Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNldEZpbHRlckJhY2tlbmROZWVkc1JlcGFpbnRpbmdJblJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCkKICAgICB9CiAgICAgCiAgICAgaWYgKHBhcmVudExheWVyLT5p
c1Jvb3RMYXllcigpKSB7Ci0gICAgICAgIHRvUmVuZGVyVmlldyhwYXJlbnRMYXllci0+cmVuZGVy
ZXIoKSkucmVwYWludFZpZXdSZWN0YW5nbGUocGFyZW50TGF5ZXJSZWN0KTsKKyAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVmlldz4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnJlcGFpbnRWaWV3UmVj
dGFuZ2xlKHBhcmVudExheWVyUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC0xNjUyLDcgKzE2NTIsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZQogICAgICAgICAvLyBX
ZSBoYXZlIHRvIGJyZWFrIHVwIHRoZSB0cmFuc2Zvcm1lZCBleHRlbnQgYWNyb3NzIG91ciBjb2x1
bW5zLgogICAgICAgICAvLyBTcGxpdCBvdXIgYm94IHVwIGludG8gdGhlIGFjdHVhbCBmcmFnbWVu
dCBib3hlcyB0aGF0IHJlbmRlciBpbiB0aGUgY29sdW1ucy9wYWdlcyBhbmQgdW5pdGUgdGhvc2Ug
dG9nZXRoZXIgdG8KICAgICAgICAgLy8gZ2V0IG91ciB0cnVlIGJvdW5kaW5nIGJveC4KLSAgICAg
ICAgUmVuZGVyRmxvd1RocmVhZCYgZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRvUmVuZGVyRmxvd1Ro
cmVhZChwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBhdXRvJiBlbmNsb3Np
bmdGbG93VGhyZWFkID0gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocGFnaW5hdGlvbkxheWVy
LT5yZW5kZXJlcigpKTsKICAgICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nRmxvd1RocmVhZC5mcmFn
bWVudHNCb3VuZGluZ0JveChyZXN1bHQpOwogICAgICAgICByZXN1bHQubW92ZShwYWdpbmF0aW9u
TGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE5OTAsOCArMTk5MCw4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5
ZXIqIGFjY3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5CiAKICAg
ICBpZiAoYWRqdXN0Rm9yQ29sdW1ucyA9PSBSZW5kZXJMYXllcjo6QWRqdXN0Rm9yQ29sdW1ucykg
ewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyID0gbGF5ZXItPnBhcmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaXNSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVn
aW9uID0gdG9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQocGFyZW50TGF5ZXItPnJlbmRlcmVy
KCkpLnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVnaW9uKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KHBhcmVudExheWVyLT5y
ZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gZG93
bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPihwYXJlbnRMYXllci0+cmVuZGVyZXIo
KSkucGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9SZWdpb24obG9jYXRpb24pOwogICAgICAg
ICAgICAgICAgIGlmIChyZWdpb24pCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLm1vdmVC
eShyZWdpb24tPnRvcExlZnRMb2NhdGlvbigpICsgLXBhcmVudExheWVyLT5yZW5kZXJCb3goKS0+
dG9wTGVmdExvY2F0aW9uKCkpOwogICAgICAgICAgICAgfQpAQCAtNDMwNCw3ICs0MzA0LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21l
bnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRpbmdCb3hJ
bkZsb3dUaHJlYWQgPSBsYXllckJvdW5kaW5nQm94ID8gKmxheWVyQm91bmRpbmdCb3ggOiBib3Vu
ZGluZ0JveChwYWdpbmF0aW9uTGF5ZXIsIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVyKTsKICAg
ICBsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkLmludGVyc2VjdChiYWNrZ3JvdW5kUmVjdElu
Rmxvd1RocmVhZC5yZWN0KCkpOwogICAgIAotICAgIFJlbmRlckZsb3dUaHJlYWQmIGVuY2xvc2lu
Z0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQocGFnaW5hdGlvbkxheWVyLT5yZW5kZXJl
cigpKTsKKyAgICBhdXRvJiBlbmNsb3NpbmdGbG93VGhyZWFkID0gZG93bmNhc3Q8UmVuZGVyRmxv
d1RocmVhZD4ocGFnaW5hdGlvbkxheWVyLT5yZW5kZXJlcigpKTsKICAgICBSZW5kZXJMYXllciog
cGFyZW50UGFnaW5hdGlvbkxheWVyID0gcGFnaW5hdGlvbkxheWVyLT5wYXJlbnQoKS0+ZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKHJvb3RMYXllciwgaW5jbHVzaW9uTW9kZSk7CiAg
ICAgTGF5ZXJGcmFnbWVudHMgYW5jZXN0b3JGcmFnbWVudHM7CiAgICAgaWYgKHBhcmVudFBhZ2lu
YXRpb25MYXllcikgewpAQCAtNDYyNyw3ICs0NjI3LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JgogICAgIEFTU0VSVChpc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCkpOwogICAgIEFTU0VSVCghcmVuZGVyZXIoKS52aWV3KCkubmVlZHNMYXlv
dXQoKSk7CiAKLSAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gaXNPdXRPZkZsb3dSZW5kZXJG
bG93VGhyZWFkKCkgPyB0b1JlbmRlckZsb3dUaHJlYWQoJnJlbmRlcmVyKCkpLT52aXN1YWxPdmVy
Zmxvd1JlY3QoKSA6IHJlbmRlcmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgpOworICAgIExheW91
dFJlY3QgaGl0VGVzdEFyZWEgPSBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSA/IGRvd25j
YXN0PFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLnZpc3VhbE92ZXJmbG93UmVjdCgpIDog
cmVuZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCk7CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9y
ZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNp
YmxlUmVjdCkpOwogCkBAIC00NjM3LDcgKzQ2MzcsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRU
ZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
CiAgICAgICAgIC8vIHJldHVybiBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgc28gbW91c2UgZXZlbnRz
IGNvbnRpbnVlIGdldHRpbmcgZGVsaXZlcmVkIGFmdGVyIGEgZHJhZyBoYXMgCiAgICAgICAgIC8v
IGV4aXRlZCB0aGUgV2ViVmlldywgYW5kIHNvIGhpdCB0ZXN0aW5nIG92ZXIgYSBzY3JvbGxiYXIg
aGl0cyB0aGUgY29udGVudCBkb2N1bWVudC4KICAgICAgICAgaWYgKCFyZXF1ZXN0LmlzQ2hpbGRG
cmFtZUhpdFRlc3QoKSAmJiAocmVxdWVzdC5hY3RpdmUoKSB8fCByZXF1ZXN0LnJlbGVhc2UoKSkg
JiYgaXNSb290TGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgdG9SZW5kZXJWaWV3KHJlbmRlcmVyKCkpLmZsaXBGb3JXcml0aW5nTW9k
ZShoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSkpOworICAgICAgICAgICAgcmVuZGVyZXIoKS51cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIoKSku
ZmxpcEZvcldyaXRpbmdNb2RlKGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpKSk7CiAgICAgICAgICAg
ICBpbnNpZGVMYXllciA9IHRoaXM7CiAgICAgICAgIH0KICAgICB9CkBAIC00Njc1LDcgKzQ2NzUs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0Zsb3dUaHJlYWRBbmNlc3Rv
cigpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFw
aGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCku
aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgdG9SZW5kZXJGbG93VGhyZWFkKHJlbmRlcmVyKCkpLmNv
bGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKTsKKyAgICByZXR1cm4gaXM8UmVuZGVy
Rmxvd1RocmVhZD4ocmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVu
ZGVyZXIoKSkuY29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpOwogfQogCiAvLyBD
b21wdXRlIHRoZSB6LW9mZnNldCBvZiB0aGUgcG9pbnQgaW4gdGhlIHRyYW5zZm9ybVN0YXRlLgpA
QCAtNTY2Miw3ICs1NjYyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3go
Y29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW8KICAgICAgICAgLy8g
Z2V0IG91ciB0cnVlIGJvdW5kaW5nIGJveC4KICAgICAgICAgcmVzdWx0Lm1vdmUoY2hpbGRMYXll
ci0+b2Zmc2V0RnJvbUFuY2VzdG9yKHBhZ2luYXRpb25MYXllcikpOwogCi0gICAgICAgIFJlbmRl
ckZsb3dUaHJlYWQmIGVuY2xvc2luZ0Zsb3dUaHJlYWQgPSB0b1JlbmRlckZsb3dUaHJlYWQocGFn
aW5hdGlvbkxheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgYXV0byYgZW5jbG9zaW5nRmxvd1Ro
cmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KHBhZ2luYXRpb25MYXllci0+cmVuZGVy
ZXIoKSk7CiAgICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0Zsb3dUaHJlYWQuZnJhZ21lbnRzQm91
bmRpbmdCb3gocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIGNoaWxkTGF5ZXIgPSBwYWdpbmF0
aW9uTGF5ZXI7CkBAIC01OTcwLDcgKzU5NzAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVpP
cmRlckxpc3RzKCkKIAogICAgIGlmICghcmVuZGVyZXIoKS5kb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkpIHsKICAgICAgICAgaWYgKGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1Vu
ZGVyUmVnaW9ucygpKQotICAgICAgICAgICAgdG9SZW5kZXJGbG93VGhyZWFkKHJlbmRlcmVyKCkp
LnNldE5lZWRzTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzVXBkYXRlKCk7CisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5kZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25N
YXBwaW5nc1VwZGF0ZSgpOwogICAgICAgICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOwogICAgICAgICBpZiAoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92
ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQogICAgICAgICAgICAgY29tcG9zaXRvcigpLnNldFNob3Vs
ZFJlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0KCk7CkBAIC01OTk0LDcgKzU5OTQsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eU5vcm1hbEZsb3dMaXN0KCkKIAogICAgIGlmICghcmVu
ZGVyZXIoKS5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKICAgICAgICAgaWYgKGlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICAgICAg
dG9SZW5kZXJGbG93VGhyZWFkKHJlbmRlcmVyKCkpLnNldE5lZWRzTGF5ZXJUb1JlZ2lvbk1hcHBp
bmdzVXBkYXRlKCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5k
ZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1VwZGF0ZSgpOwogICAgICAgICBj
b21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwogICAgICAgICBp
ZiAoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQogICAg
ICAgICAgICAgY29tcG9zaXRvcigpLnNldFNob3VsZFJlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVy
TGF5b3V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCmluZGV4IDAzNGRiY2UyMmYxMjU5ODdiMmI3ZjUxMDRjNzg1YWNjZDRlOGNhZDAuLjJl
OGJlZmQyZTA2ZmJkOTVkM2JhNTcyY2E2MWNlZDA4NmQ5MGNhMjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVySFRNTENh
bnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCkBAIC00NjksOSArNDcwLDkg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogCiB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKQogewotICAg
IGlmICghcmVuZGVyZXIoKS5pc1dpZGdldCgpKQorICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pihy
ZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChSZW5kZXJMYXllckNvbXBvc2l0
b3IqIGlubmVyQ29tcG9zaXRvciA9IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50
c0NvbXBvc2l0b3IodG9SZW5kZXJXaWRnZXQoJnJlbmRlcmVyKCkpKSkgeworICAgIGlmIChSZW5k
ZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoJmRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVy
ZXIoKSkpKSB7CiAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlU2l6
ZSgpOwogICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZUxvY2F0aW9u
KGZsb29yZWRJbnRQb2ludChjb250ZW50c0JveCgpLmxvY2F0aW9uKCkpKTsKICAgICB9CkBAIC01
OTgsOCArNTk5LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRp
b24oKQogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0KICNlbmRpZgot
ICAgIGlmIChyZW5kZXJlcigpLmlzV2lkZ2V0KCkpCi0gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdl
ZCA9IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKHRvUmVu
ZGVyV2lkZ2V0KCZyZW5kZXJlcigpKSk7CisgICAgaWYgKGlzPFJlbmRlcldpZGdldD4ocmVuZGVy
ZXIoKSkpCisgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRl
cmVyKCkpKTsKIAogICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZWQ7CiB9CkBAIC0xNjc1LDIx
ICsxNjc2LDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludHNDaGlsZHJlbigpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBpc1Jlc3RhcnRlZFBsdWdp
bihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4o
UmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0VtYmVkZGVk
T2JqZWN0KCkpCisgICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7CisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKS5mcmFtZU93
bmVyRWxlbWVudCgpOwogICAgIGlmICghaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFBsdWdJbkVs
ZW1lbnQ+KCplbGVtZW50KS5pc1Jlc3RhcnRlZFBsdWdpbigpOworICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudD4oZWxlbWVudCkuaXNSZXN0YXJ0ZWRQbHVnaW4oKTsKIH0KIAot
c3RhdGljIGJvb2wgaXNDb21wb3NpdGVkUGx1Z2luKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitz
dGF0aWMgYm9vbCBpc0NvbXBvc2l0ZWRQbHVnaW4oUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsK
LSAgICByZXR1cm4gcmVuZGVyZXItPmlzRW1iZWRkZWRPYmplY3QoKSAmJiB0b1JlbmRlckVtYmVk
ZGVkT2JqZWN0KHJlbmRlcmVyKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAg
IHJldHVybiBpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJl
bmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikuYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpOwogfQogCiAvLyBBICJzaW1wbGUgY29udGFpbmVyIGxheWVyIiBpcyBhIFJlbmRlckxheWVy
IHdoaWNoIGhhcyBubyB2aXNpYmxlIGNvbnRlbnQgdG8gcmVuZGVyLgpAQCAtMTY5Nyw3ICsxNjk4
LDcgQEAgc3RhdGljIGJvb2wgaXNDb21wb3NpdGVkUGx1Z2luKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiAvLyBUaGlzIGlzIGEgdXNlZnVsIG9wdGltaXphdGlvbiwgYmVjYXVzZSBpdCBhbGxvd3Mg
dXMgdG8gYXZvaWQgYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlLgogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OmlzU2ltcGxlQ29udGFpbmVyQ29tcG9zaXRpbmdMYXllcigpIGNvbnN0CiB7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpICYmICghaXNDb21wb3NpdGVkUGx1Z2lu
KCZyZW5kZXJlcigpKSB8fCBpc1Jlc3RhcnRlZFBsdWdpbigmcmVuZGVyZXIoKSkpKQorICAgIGlm
IChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSAmJiAoIWlzQ29tcG9zaXRlZFBsdWdpbihy
ZW5kZXJlcigpKSB8fCBpc1Jlc3RhcnRlZFBsdWdpbihyZW5kZXJlcigpKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmIChwYWludHNCb3hEZWNvcmF0aW9ucygpIHx8IHBhaW50c0No
aWxkcmVuKCkpCkBAIC0xODAzLDEyICsxODA0LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb250YWluc1BhaW50ZWRDb250ZW50KGJvb2wgaXNTaW1wbGVDb250YWluZXIpIGNvbnN0CiAg
ICAgLy8gRklYTUU6IHdlIGNvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIHRoZSBpbWFnZSwgdmlk
ZW8gb3IgY2FudmFzIGlzIGtub3duIHRvIGZpbGwgdGhlIGJvcmRlciBib3ggZW50aXJlbHksCiAg
ICAgLy8gYW5kIHNldCBiYWNrZ3JvdW5kIGNvbG9yIG9uIHRoZSBsYXllciBpbiB0aGF0IGNhc2Us
IGluc3RlYWQgb2YgYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZy4KICNpZiBF
TkFCTEUoVklERU8pCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNWaWRlbygpICYmIHRvUmVuZGVyVmlk
ZW8ocmVuZGVyZXIoKSkuc2hvdWxkRGlzcGxheVZpZGVvKCkpCisgICAgaWYgKGlzPFJlbmRlclZp
ZGVvPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkuc2hv
dWxkRGlzcGxheVZpZGVvKCkpCiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc0JveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAocmVuZGVyZXIoKS5pc0NhbnZh
cygpICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNM
YXllckNvbnRlbnRzKQorICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcigpKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykKICAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIuaGFzQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDlkNTAxMmZmN2U5ZmM1OTVmMTAwZTEw
NGU1MGVjZjg5ZmFlZjhjZDMuLjQwOTA0YmU4ZDk1YjQzZmNmY2UzNmVjNDM1YjRlMGI5OTM1NWVl
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCkBAIC05NDMsMTAgKzk0MywxMCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUgog
ICAgICAgICAgICAgLy8gaXRzIHJlcGxpY2EgR3JhcGhpY3NMYXllci4gSW4gcHJhY3RpY2UgdGhp
cyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgcmVmbGVjdGVlIGFuZCByZWZsZWN0aW9uIAog
ICAgICAgICAgICAgLy8gYXJlIGJvdGggZWl0aGVyIGNvbXBvc2l0ZWQsIG9yIG5vdCBjb21wb3Np
dGVkLgogICAgICAgICAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlvbigpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVuZGVyTGF5ZXIqIHNvdXJjZUxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0
KGxheWVyLnJlbmRlcmVyKCkucGFyZW50KCkpLT5sYXllcigpOworICAgICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBzb3VyY2VMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KCpsYXllci5yZW5kZXJlcigpLnBhcmVudCgpKS5sYXllcigpOwogICAgICAgICAgICAgICAgIGlm
IChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzb3VyY2VMYXllci0+YmFja2luZygpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnJl
cGxpY2FMYXllcigpID09IGxheWVyLmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5zZXRSZXBsaWNhdGVkQnlM
YXllcigwKTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5z
ZXRSZXBsaWNhdGVkQnlMYXllcihudWxscHRyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKQEAgLTk2NiwxNCArOTY2LDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAg
ICAgfQogICAgIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBpZiAobGF5ZXJDaGFuZ2VkICYmIGxh
eWVyLnJlbmRlcmVyKCkuaXNWaWRlbygpKSB7CisgICAgaWYgKGxheWVyQ2hhbmdlZCAmJiBpczxS
ZW5kZXJWaWRlbz4obGF5ZXIucmVuZGVyZXIoKSkpIHsKICAgICAgICAgLy8gSWYgaXQncyBhIHZp
ZGVvLCBnaXZlIHRoZSBtZWRpYSBwbGF5ZXIgYSBjaGFuY2UgdG8gaG9vayB1cCB0byB0aGUgbGF5
ZXIuCi0gICAgICAgIHRvUmVuZGVyVmlkZW8obGF5ZXIucmVuZGVyZXIoKSkuYWNjZWxlcmF0ZWRS
ZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyVmlkZW8+KGxh
eWVyLnJlbmRlcmVyKCkpLmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAg
fQogI2VuZGlmCiAKLSAgICBpZiAobGF5ZXJDaGFuZ2VkICYmIGxheWVyLnJlbmRlcmVyKCkuaXNX
aWRnZXQoKSkgewotICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRv
ciA9IGZyYW1lQ29udGVudHNDb21wb3NpdG9yKHRvUmVuZGVyV2lkZ2V0KCZsYXllci5yZW5kZXJl
cigpKSk7CisgICAgaWYgKGxheWVyQ2hhbmdlZCAmJiBpczxSZW5kZXJXaWRnZXQ+KGxheWVyLnJl
bmRlcmVyKCkpKSB7CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3Np
dG9yID0gZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoJmRvd25jYXN0PFJlbmRlcldpZGdldD4obGF5
ZXIucmVuZGVyZXIoKSkpOwogICAgICAgICBpZiAoaW5uZXJDb21wb3NpdG9yICYmIGlubmVyQ29t
cG9zaXRvci0+aW5Db21wb3NpdGluZ01vZGUoKSkKICAgICAgICAgICAgIGlubmVyQ29tcG9zaXRv
ci0+dXBkYXRlUm9vdExheWVyQXR0YWNobWVudCgpOwogICAgIH0KQEAgLTExNzUsNyArMTE3NSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJl
bWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgbGF5ZXIudXBkYXRlTGF5ZXJMaXN0c0lm
TmVlZGVkKCk7CiAKICAgICBpZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNz
TGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCYgZmxvd1Ro
cmVhZCA9IHRvUmVuZGVyRmxvd1RocmVhZChsYXllci5yZW5kZXJlcigpKTsKKyAgICAgICAgYXV0
byYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KGxheWVyLnJlbmRlcmVy
KCkpOwogICAgICAgICBsYXllci5zZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoZmxvd1RocmVh
ZC5oYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSk7CiAKICAgICAgICAgLy8gQmVmb3Jl
IHJldHVybmluZywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGxpc3RzIG9mIGFsbCBjaGlsZCBsYXll
cnMuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSwKQEAgLTE1NDgsOCArMTU0OCw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVy
TGF5ZXImIGxheWVyLCBWZWN0CiAKICAgICBpZiAobGF5ZXJCYWNraW5nKSB7CiAgICAgICAgIGJv
b2wgcGFyZW50ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNXaWRn
ZXQoKSkKLSAgICAgICAgICAgIHBhcmVudGVkID0gcGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKHRv
UmVuZGVyV2lkZ2V0KCZsYXllci5yZW5kZXJlcigpKSk7CisgICAgICAgIGlmIChpczxSZW5kZXJX
aWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgcGFyZW50ZWQgPSBwYXJlbnRG
cmFtZUNvbnRlbnRMYXllcnMoJmRvd25jYXN0PFJlbmRlcldpZGdldD4obGF5ZXIucmVuZGVyZXIo
KSkpOwogCiAgICAgICAgIGlmICghcGFyZW50ZWQpCiAgICAgICAgICAgICBsYXllckJhY2tpbmct
PnBhcmVudEZvclN1YmxheWVycygpLT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKQEAgLTIw
OTAsMTEgKzIwOTAsMTEgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5lZWRzVG9CZUNv
bXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXIKIC8vIHN0YXRpYwogYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyOjpWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbiogdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pIGNv
bnN0CiB7Ci0gICAgYXV0byByZW5kZXJlciA9ICZsYXllci5yZW5kZXJlcigpOworICAgIGF1dG8q
IHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CiAKICAgICAvLyBUaGUgY29tcG9zaXRpbmcg
c3RhdGUgb2YgYSByZWZsZWN0aW9uIHNob3VsZCBtYXRjaCB0aGF0IG9mIGl0cyByZWZsZWN0ZWQg
bGF5ZXIuCiAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlvbigpKQotICAgICAgICByZW5kZXJlciA9
IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChyZW5kZXJlci0+cGFyZW50KCkpOyAvLyBUaGUgUmVu
ZGVyUmVwbGljYSdzIHBhcmVudCBpcyB0aGUgb2JqZWN0IGJlaW5nIHJlZmxlY3RlZC4KKyAgICAg
ICAgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlci0+
cGFyZW50KCkpOyAvLyBUaGUgUmVuZGVyUmVwbGljYSdzIHBhcmVudCBpcyB0aGUgb2JqZWN0IGJl
aW5nIHJlZmxlY3RlZC4KIAogICAgIC8vIFRoZSByb290IGxheWVyIGFsd2F5cyBoYXMgYSBjb21w
b3NpdGluZyBsYXllciwgYnV0IGl0IG1heSBub3QgaGF2ZSBiYWNraW5nLgogICAgIHJldHVybiBy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKCpyZW5kZXJlcikKQEAgLTIxODMsOSArMjE4
Myw5IEBAIENvbXBvc2l0aW5nUmVhc29ucyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXNvbnNG
b3JDb21wb3NpdGluZyhjb25zdCBSZW5kZXJMYXllCiAgICAgaWYgKCFsYXllci5pc0NvbXBvc2l0
ZWQoKSkKICAgICAgICAgcmV0dXJuIHJlYXNvbnM7CiAKLSAgICBhdXRvIHJlbmRlcmVyID0gJmxh
eWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSAmbGF5ZXIucmVuZGVyZXIoKTsK
ICAgICBpZiAobGF5ZXIuaXNSZWZsZWN0aW9uKCkpCi0gICAgICAgIHJlbmRlcmVyID0gdG9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0KHJlbmRlcmVyLT5wYXJlbnQoKSk7CisgICAgICAgIHJlbmRlcmVy
ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXItPnBhcmVudCgpKTsK
IAogICAgIGlmIChyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKCpyZW5kZXJlcikpCiAg
ICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb24zRFRyYW5zZm9ybTsKQEAgLTI0NTAs
OCArMjQ1MCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0
aW5nRm9yVmlkZW8oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICBpZiAoIShtX2NvbXBvc2l0
aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OlZpZGVvVHJpZ2dlcikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHJlbmRlcmVyLmlzVmlkZW8oKSkg
ewotICAgICAgICBSZW5kZXJWaWRlbyYgdmlkZW8gPSB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKTsK
KyAgICBpZiAoaXM8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKSkgeworICAgICAgICBhdXRvJiB2aWRl
byA9IGRvd25jYXN0PFJlbmRlclZpZGVvPihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybiAodmlk
ZW8ucmVxdWlyZXNJbW1lZGlhdGVDb21wb3NpdGluZygpIHx8IHZpZGVvLnNob3VsZERpc3BsYXlW
aWRlbygpKSAmJiBjYW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcodmlkZW8pOwogICAgIH0KICNl
bHNlCkBAIC0yNDg0LDEzICsyNDg0LDEzIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAgICAg
aWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpQbHVnaW5UcmlnZ2Vy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBjb21wb3NpdGUgPSByZW5kZXJl
ci5pc0VtYmVkZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdCgmcmVuZGVyZXIp
LT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisgICAgYm9vbCBjb21wb3NpdGUgPSBp
czxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckVtYmVk
ZGVkT2JqZWN0PihyZW5kZXJlcikuYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAg
IGlmICghY29tcG9zaXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3JlZXZhbHVh
dGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0ID0gdHJ1ZTsKICAgICAKLSAgICBSZW5kZXJXaWRnZXQm
IHBsdWdpblJlbmRlcmVyID0gKnRvUmVuZGVyV2lkZ2V0KCZyZW5kZXJlcik7CisgICAgUmVuZGVy
V2lkZ2V0JiBwbHVnaW5SZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIp
OwogICAgIC8vIElmIHdlIGNhbid0IHJlbGlhYmx5IGtub3cgdGhlIHNpemUgb2YgdGhlIHBsdWdp
biB5ZXQsIGRvbid0IGNoYW5nZSBjb21wb3NpdGluZyBzdGF0ZS4KICAgICBpZiAocGx1Z2luUmVu
ZGVyZXIubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIHBsdWdpblJlbmRlcmVyLmhhc0xh
eWVyKCkgJiYgcGx1Z2luUmVuZGVyZXIubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CkBAIC0yNTAy
LDEwICsyNTAyLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUGx1Z2luKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAKIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnJhbWUoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlci5pc1dpZGdldCgp
KQorICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlbmRlcldpZGdldCYgZnJhbWVSZW5kZXJlciA9ICp0b1JlbmRlcldpZGdl
dCgmcmVuZGVyZXIpOworICAgIGF1dG8mIGZyYW1lUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJX
aWRnZXQ+KHJlbmRlcmVyKTsKIAogICAgIGlmICghZnJhbWVSZW5kZXJlci5yZXF1aXJlc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggMjA5OTA0
MjAyMzM1NjAzZWI1ZGUwY2IyZDliMDgwNGZkNTRiMzg5OC4uNmNmMGZkYzBjOTgxOTlkMmYwMDc0
Y2NkZTM3YmZkZGQ0MTBjZmRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBAIC02OSw4ICs2OSw2IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGJvb2wgc19sYXllcldhc1NlbGZQYWludGluZzsKIH07CiAKLVJFTkRFUl9PQkpFQ1Rf
VFlQRV9DQVNUUyhSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBpc1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1JFTkRFUl9PQkpFQ1QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgaXNSZW5kZXJMYXllck1vZGVs
T2JqZWN0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKaW5k
ZXggZThlYzVlZjdhMjUyMGY5M2VhZTE4MzMzZDFmMTdjMTBkMjlhOTQ4Zi4uZDBlM2ZlNWQyOTQ3
MTJiMjIyYzQ5YzczYjI4M2EzZjY3ZTA2MGZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuaApAQCAtOTMsOCArOTMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1dCUjsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJMaW5lQnJlYWss
IGlzTGluZUJyZWFrKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlckxpbmVCcmVhaywgaXNMaW5lQnJlYWsoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmgKaW5kZXggYTYzMjUwZWEwYWZlYjk5
ZTE4Y2VlOGEyNWNkNTlmNjU3MTdhZjY0Ni4uYzZlMjYwYWVkZTlhYTkyY2ZhZGE4NmZkYTJkOWY2
ZjFhMjMyMzJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmgKQEAgLTQ3
LDggKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHls
ZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsK
IAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlck1ldGVyLCBpc01ldGVyKCkpCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JK
RUNUKFJlbmRlck1ldGVyLCBpc01ldGVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCmluZGV4IGQyMGNiMDNk
YWNkZmI4ODY2NjBhMWM4MjQzNmUyMDY5MWNmNDM2ODIuLjY1YmMwMmNiYTlkMzdmMDNmODU3ODQ1
YzI0ODZlZmZlMGM2YTQ3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCkBAIC03Miw4ICs3Miw4IEBAIGNv
bnN0IGNoYXIqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cmVuZGVyTmFtZSgpIGNvbnN0
CiBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmaXJz
dE11bHRpQ29sdW1uU2V0KCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGlu
ZyA9IG5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJNdWx0aUNvbHVtblNldChzaWJsaW5nKTsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc2libGluZykpCisgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHNpYmxpbmcpOwogICAgIH0KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDggKzgxLDggQEAgUmVuZGVyTXVsdGlDb2x1bW5T
ZXQqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmlyc3RNdWx0aUNvbHVtblNldCgpIGNv
bnN0CiBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjps
YXN0TXVsdGlDb2x1bW5TZXQoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBzaWJs
aW5nID0gbXVsdGlDb2x1bW5CbG9ja0Zsb3coKS0+bGFzdENoaWxkKCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGluZy0+
aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyTXVs
dGlDb2x1bW5TZXQoc2libGluZyk7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNl
dD4oKnNpYmxpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck11bHRpQ29s
dW1uU2V0PihzaWJsaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMjQs
OCArMTI0LDggQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmxheW91dCgpCiAg
ICAgbV9pbkxheW91dCA9IHRydWU7CiAgICAgbV9sYXN0U2V0V29ya2VkT24gPSBudWxscHRyOwog
ICAgIGlmIChSZW5kZXJCb3gqIGZpcnN0ID0gZmlyc3RDb2x1bW5TZXRPclNwYW5uZXIoKSkgewot
ICAgICAgICBpZiAoZmlyc3QtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkgewotICAgICAgICAg
ICAgbV9sYXN0U2V0V29ya2VkT24gPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KGZpcnN0KTsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0PigqZmlyc3QpKSB7CisgICAgICAgICAg
ICBtX2xhc3RTZXRXb3JrZWRPbiA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihmaXJz
dCk7CiAgICAgICAgICAgICBtX2xhc3RTZXRXb3JrZWRPbi0+YmVnaW5GbG93KHRoaXMpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkOjpldmFjdWF0ZUFuZERlc3Ryb3koKQogCiB2b2lkIFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDo6YWRkUmVnaW9uVG9UaHJlYWQoUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24p
CiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IHRvUmVuZGVyTXVsdGlD
b2x1bW5TZXQocmVuZGVyUmVnaW9uKTsKKyAgICBhdXRvKiBjb2x1bW5TZXQgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNldD4ocmVuZGVyUmVnaW9uKTsKICAgICBpZiAoUmVuZGVyTXVsdGlD
b2x1bW5TZXQqIG5leHRTZXQgPSBjb2x1bW5TZXQtPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQo
KSkgewogICAgICAgICBSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdCA9IG1fcmVnaW9uTGlz
dC5maW5kKG5leHRTZXQpOwogICAgICAgICBBU1NFUlQoaXQgIT0gbV9yZWdpb25MaXN0LmVuZCgp
KTsKQEAgLTM2NywzNiArMzY3LDM2IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpmbG93VGhyZWFkRGVzY2VuZGFudEluc2VydGVkKFJlbmRlck9iamVjdCogZGVzCiAgICAgICAg
IHJldHVybjsKICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290ID0gZGVzY2VuZGFudDsKICAg
ICBmb3IgKDsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IChkZXNjZW5kYW50ID8gZGVzY2VuZGFu
dC0+bmV4dEluUHJlT3JkZXIoc3VidHJlZVJvb3QpIDogbnVsbHB0cikpIHsKLSAgICAgICAgaWYg
KGRlc2NlbmRhbnQtPmlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkgewor
ICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpkZXNj
ZW5kYW50KSkgewogICAgICAgICAgICAgLy8gQSBzcGFubmVyJ3MgcGxhY2Vob2xkZXIgaGFzIGJl
ZW4gaW5zZXJ0ZWQuIFRoZSBhY3R1YWwgc3Bhbm5lciByZW5kZXJlciBpcyBtb3ZlZCBmcm9tCiAg
ICAgICAgICAgICAvLyB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIgKGlmIGl0IHdlcmVu
J3QgYSBzcGFubmVyKSB0byBiZWNvbWluZyBhIHNpYmxpbmcgb2YgdGhlCiAgICAgICAgICAgICAv
LyBjb2x1bW4gc2V0cy4KLSAgICAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyKiBwbGFjZWhvbGRlciA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIoZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXItPmZsb3dUaHJlYWQo
KSAhPSB0aGlzKSB7CisgICAgICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlciYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcj4oKmRlc2NlbmRhbnQpOworICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmZsb3dU
aHJlYWQoKSAhPSB0aGlzKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBvdXIgc3Bh
bm5lciEgSXQgc2hpZnRlZCBoZXJlIGZyb20gYW4gYW5jZXN0b3IgbXVsdGljb2x1bW4gYmxvY2su
IEl0J3MgZ29pbmcgdG8gZW5kIHVwCiAgICAgICAgICAgICAgICAgLy8gYmVjb21pbmcgb3VyIHNw
YW5uZXIgaW5zdGVhZCwgYnV0IGZvciBpdCB0byBkbyB0aGF0IHdlIGZpcnN0IGhhdmUgdG8gbnVr
ZSB0aGUgb3JpZ2luYWwgc3Bhbm5lciwKICAgICAgICAgICAgICAgICAvLyBhbmQgZ2V0IHRoZSBz
cGFubmVyIGNvbnRlbnQgYmFjayBpbnRvIHRoaXMgZmxvdyB0aHJlYWQuCi0gICAgICAgICAgICAg
ICAgUmVuZGVyQm94KiBzcGFubmVyID0gcGxhY2Vob2xkZXItPnNwYW5uZXIoKTsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIHNwYW5uZXIgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGFmdGVyIHRoZSBwbGFjZWhv
bGRlciwgYnV0IGRvbid0IGxldCBhIG5vdGlmaWNhdGlvbiBoYXBwZW4uCiAgICAgICAgICAgICAg
ICAgZ1NoaWZ0aW5nU3Bhbm5lciA9IHRydWU7CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2tG
bG93JiBhbmNlc3RvckJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigqc3Bhbm5lci0+
cGFyZW50KCkpOwotICAgICAgICAgICAgICAgIGFuY2VzdG9yQmxvY2subW92ZUNoaWxkVG8ocGxh
Y2Vob2xkZXItPnBhcmVudEJveCgpLCBzcGFubmVyLCBwbGFjZWhvbGRlci0+bmV4dFNpYmxpbmco
KSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYW5jZXN0b3JCbG9jay5tb3ZlQ2hpbGRUbyhwbGFj
ZWhvbGRlci5wYXJlbnRCb3goKSwgc3Bhbm5lciwgcGxhY2Vob2xkZXIubmV4dFNpYmxpbmcoKSwg
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgZ1NoaWZ0aW5nU3Bhbm5lciA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbnVrZSB0aGUgcGxhY2Vo
b2xkZXIsIHNpbmNlIHRoZSBhbmNlc3RvciBhbHJlYWR5IGxvc3QgdGhlIG1hcHBpbmcgdG8gaXQg
d2hlbgogICAgICAgICAgICAgICAgIC8vIHdlIHNoaWZ0ZWQgdGhlIHBsYWNlaG9sZGVyIGRvd24g
aW50byB0aGlzIGZsb3cgdGhyZWFkLgogICAgICAgICAgICAgICAgIGFuY2VzdG9yQmxvY2subXVs
dGlDb2x1bW5GbG93VGhyZWFkKCktPmhhbmRsZVNwYW5uZXJSZW1vdmFsKHNwYW5uZXIpOwotICAg
ICAgICAgICAgICAgIHBsYWNlaG9sZGVyLT5kZXN0cm95KCk7CisgICAgICAgICAgICAgICAgcGxh
Y2Vob2xkZXIuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IE5vdyB3ZSBwcm9jZXNzIHRoZSBzcGFubmVyLgogICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQg
PSBwcm9jZXNzUG9zc2libGVTcGFubmVyRGVzY2VuZGFudChzdWJ0cmVlUm9vdCwgc3Bhbm5lcik7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEFTU0VSVCghbV9zcGFubmVyTWFwLmdldChwbGFjZWhvbGRlci0+c3Bhbm5l
cigpKSk7Ci0gICAgICAgICAgICBtX3NwYW5uZXJNYXAuYWRkKHBsYWNlaG9sZGVyLT5zcGFubmVy
KCksIHBsYWNlaG9sZGVyKTsKLSAgICAgICAgICAgIEFTU0VSVCghcGxhY2Vob2xkZXItPmZpcnN0
Q2hpbGQoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBjaGlsZHJlbiBoZXJlLCBidXQgaWYgdGhl
cmUgYXJlLCB3ZSBvdWdodCB0byBza2lwIHRoZW0uCisgICAgICAgICAgICBBU1NFUlQoIW1fc3Bh
bm5lck1hcC5nZXQocGxhY2Vob2xkZXIuc3Bhbm5lcigpKSk7CisgICAgICAgICAgICBtX3NwYW5u
ZXJNYXAuYWRkKHBsYWNlaG9sZGVyLnNwYW5uZXIoKSwgJnBsYWNlaG9sZGVyKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghcGxhY2Vob2xkZXIuZmlyc3RDaGlsZCgpKTsgLy8gVGhlcmUgc2hvdWxkIGJl
IG5vIGNoaWxkcmVuIGhlcmUsIGJ1dCBpZiB0aGVyZSBhcmUsIHdlIG91Z2h0IHRvIHNraXAgdGhl
bS4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDI4LDEy
ICs0MjgsMTIgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWRS
ZWxhdGl2ZVdpbGxCZVJlbW92ZWQoUmVuZGVyT2JqZWN0KgogICAgIGlmIChtX2JlaW5nRXZhY3Vh
dGVkKQogICAgICAgICByZXR1cm47CiAgICAgaW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICBpZiAo
cmVsYXRpdmUtPmlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSkgeworICAg
IGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKnJlbGF0aXZlKSkg
ewogICAgICAgICAvLyBSZW1vdmUgdGhlIG1hcCBlbnRyeSBmb3IgdGhpcyBzcGFubmVyLCBidXQg
bGVhdmUgdGhlIGFjdHVhbCBzcGFubmVyIHJlbmRlcmVyIGFsb25lLiBBbHNvCiAgICAgICAgIC8v
IGtlZXAgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3Bhbm5lciwgc2luY2UgdGhlIHBsYWNlaG9sZGVy
IG1heSBiZSBhYm91dCB0byBiZSByZS1pbnNlcnRlZAogICAgICAgICAvLyBpbiB0aGUgdHJlZS4K
ICAgICAgICAgQVNTRVJUKHJlbGF0aXZlLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSk7Ci0gICAgICAg
IG1fc3Bhbm5lck1hcC5yZW1vdmUodG9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cihyZWxhdGl2ZSktPnNwYW5uZXIoKSk7CisgICAgICAgIG1fc3Bhbm5lck1hcC5yZW1vdmUoZG93
bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpyZWxhdGl2ZSkuc3Bh
bm5lcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAocmVsYXRpdmUtPnN0eWxl
KCkuY29sdW1uU3BhbigpID09IENvbHVtblNwYW5BbGwpIHsKQEAgLTQ0OSwyMSArNDQ5LDIxIEBA
IHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkUmVsYXRpdmVXaWxs
QmVSZW1vdmVkKFJlbmRlck9iamVjdCoKIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmZsb3dUaHJlYWREZXNjZW5kYW50Qm94TGFpZE91dChSZW5kZXJCb3gqIGRlc2NlbmRhbnQp
CiB7Ci0gICAgaWYgKCFkZXNjZW5kYW50LT5pc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyKCkpCisgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cj4oKmRlc2NlbmRhbnQpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIqIHBsYWNlaG9sZGVyID0gdG9SZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcihkZXNjZW5kYW50KTsKLSAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0g
cGxhY2Vob2xkZXItPmNvbnRhaW5pbmdCbG9jaygpOworICAgIGF1dG8mIHBsYWNlaG9sZGVyID0g
ZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpkZXNjZW5kYW50
KTsKKyAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gcGxhY2Vob2xkZXIuY29udGFpbmluZ0Js
b2NrKCk7CiAKLSAgICBmb3IgKFJlbmRlckJveCogcHJldiA9IHByZXZpb3VzQ29sdW1uU2V0T3JT
cGFubmVyU2libGluZ09mKHBsYWNlaG9sZGVyLT5zcGFubmVyKCkpOyBwcmV2OyBwcmV2ID0gcHJl
dmlvdXNDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YocHJldikpIHsKLSAgICAgICAgaWYgKHBy
ZXYtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkgewotICAgICAgICAgICAgdG9SZW5kZXJNdWx0
aUNvbHVtblNldChwcmV2KS0+ZW5kRmxvdyhjb250YWluZXIsIHBsYWNlaG9sZGVyLT5sb2dpY2Fs
VG9wKCkpOworICAgIGZvciAoUmVuZGVyQm94KiBwcmV2ID0gcHJldmlvdXNDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YocGxhY2Vob2xkZXIuc3Bhbm5lcigpKTsgcHJldjsgcHJldiA9IHByZXZp
b3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKHByZXYpKSB7CisgICAgICAgIGlmIChpczxS
ZW5kZXJNdWx0aUNvbHVtblNldD4oKnByZXYpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtblNldD4oKnByZXYpLmVuZEZsb3coY29udGFpbmVyLCBwbGFjZWhvbGRlci5s
b2dpY2FsVG9wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBmb3IgKFJlbmRlckJveCogbmV4dCA9IG5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2Yo
cGxhY2Vob2xkZXItPnNwYW5uZXIoKSk7IG5leHQ7IG5leHQgPSBuZXh0Q29sdW1uU2V0T3JTcGFu
bmVyU2libGluZ09mKG5leHQpKSB7Ci0gICAgICAgIGlmIChuZXh0LT5pc1JlbmRlck11bHRpQ29s
dW1uU2V0KCkpIHsKLSAgICAgICAgICAgIG1fbGFzdFNldFdvcmtlZE9uID0gdG9SZW5kZXJNdWx0
aUNvbHVtblNldChuZXh0KTsKKyAgICBmb3IgKFJlbmRlckJveCogbmV4dCA9IG5leHRDb2x1bW5T
ZXRPclNwYW5uZXJTaWJsaW5nT2YocGxhY2Vob2xkZXIuc3Bhbm5lcigpKTsgbmV4dDsgbmV4dCA9
IG5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV4dCkpIHsKKyAgICAgICAgaWYgKGlz
PFJlbmRlck11bHRpQ29sdW1uU2V0PigqbmV4dCkpIHsKKyAgICAgICAgICAgIG1fbGFzdFNldFdv
cmtlZE9uID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KG5leHQpOwogICAgICAgICAg
ICAgbV9sYXN0U2V0V29ya2VkT24tPmJlZ2luRmxvdyhjb250YWluZXIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIExheW91dFVuaXQgUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjppbml0aWFsTG9naWNhbFdpZHRoKCkgY29uc3QKIAogdm9p
ZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFBhZ2VCcmVhayhjb25zdCBSZW5kZXJC
bG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IHNwYWNlU2hvcnRhZ2Up
CiB7Ci0gICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBtdWx0aWNvbFNldCA9IHRvUmVuZGVy
TXVsdGlDb2x1bW5TZXQocmVnaW9uQXRCbG9ja09mZnNldChibG9jaywgb2Zmc2V0KSkpCisgICAg
aWYgKGF1dG8qIG11bHRpY29sU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHJl
Z2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQogICAgICAgICBtdWx0aWNvbFNldC0+
cmVjb3JkU3BhY2VTaG9ydGFnZShzcGFjZVNob3J0YWdlKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OnVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGNvbnN0IFJlbmRlckJs
b2NrKiBibG9jaywgTGF5b3V0VW5pdCBvZmZzZXQsIExheW91dFVuaXQgbWluSGVpZ2h0KQogewot
ICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNldCogbXVsdGljb2xTZXQgPSB0b1JlbmRlck11bHRp
Q29sdW1uU2V0KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQorICAgIGlmIChh
dXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25B
dEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKICAgICAgICAgbXVsdGljb2xTZXQtPnVwZGF0
ZU1pbmltdW1Db2x1bW5IZWlnaHQobWluSGVpZ2h0KTsKIH0KIApAQCAtNTM0LDEyICs1MzQsMTIg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW4KICAgICAvLyBleGFjdCBzYW1lIGZsb3cgdGhyZWFk
IHBvc2l0aW9uLCB3aGljaCBtZWFucyB0aGF0IHNvbWUgcGFydHMgb2YgdGhlIGNvZGUgbWF5IGJl
bGlldmUgdGhhdCBhCiAgICAgLy8gZ2l2ZW4gYm94IGxpdmVzIGluIHNldHMgdGhhdCBpdCBkb2Vz
bid0IHJlYWxseSBsaXZlIGluLiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgaGVyZSBhbmQKICAgICAv
LyBpbmNsdWRlIHN1Y2ggc2V0cyBpZiB0aGV5IGFyZSBhZGphY2VudCB0byB0aGUgc3RhcnQgYW5k
L29yIGVuZCByZWdpb25zLgotICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNl
dCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoc3RhcnRSZWdpb24pLT5wcmV2aW91c1NpYmxpbmdN
dWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVtblNldCA9IGNvbHVtblNldC0+cHJldmlv
dXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgeworICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5T
ZXQqIGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc3RhcnRSZWdp
b24pLnByZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0
ID0gY29sdW1uU2V0LT5wcmV2aW91c1NpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CiAgICAgICAg
IGlmIChjb2x1bW5TZXQtPmxvZ2ljYWxIZWlnaHRJbkZsb3dUaHJlYWQoKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBzdGFydFJlZ2lvbiA9IGNvbHVtblNldDsKICAgICB9Ci0gICAgZm9y
IChSZW5kZXJNdWx0aUNvbHVtblNldCogY29sdW1uU2V0ID0gdG9SZW5kZXJNdWx0aUNvbHVtblNl
dChzdGFydFJlZ2lvbiktPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBj
b2x1bW5TZXQgPSBjb2x1bW5TZXQtPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgeworICAg
IGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11
bHRpQ29sdW1uU2V0Pigqc3RhcnRSZWdpb24pLm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsg
Y29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5T
ZXQoKSkgewogICAgICAgICBpZiAoY29sdW1uU2V0LT5sb2dpY2FsSGVpZ2h0SW5GbG93VGhyZWFk
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZW5kUmVnaW9uID0gY29sdW1uU2V0OwpA
QCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRS
ZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVuCiAKIGJvb2wgUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJC
bG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0LCBSZW5kZXJCb3gqIC8qYnJlYWtDaGlsZCov
LCBib29sIC8qaXNCZWZvcmUqLywgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50KQog
ewotICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNldCogbXVsdGljb2xTZXQgPSB0b1JlbmRlck11
bHRpQ29sdW1uU2V0KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKSB7CisgICAg
aWYgKGF1dG8qIG11bHRpY29sU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KHJl
Z2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKSB7CiAgICAgICAgIG11bHRpY29sU2V0
LT5hZGRGb3JjZWRCcmVhayhvZmZzZXQpOwogICAgICAgICBpZiAob2Zmc2V0QnJlYWtBZGp1c3Rt
ZW50KQogICAgICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IHBhZ2VMb2dpY2FsSGVp
Z2h0Rm9yT2Zmc2V0KG9mZnNldCkgPyBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNl
dChvZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDAp
OwpAQCAtNjg5LDcgKzY4OSw3IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkOjptYXBGcm9tRmxvd1RvUmVnaW9uKFRyYW5zZm9ybVN0YXRlJiB0CiBMYXlvdXRTaXpl
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xhdGlvbk9mZnNldEZy
b21GbG93VG9SZWdpb24oY29uc3QgUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24sIGNvbnN0IExh
eW91dFVuaXQgbG9naWNhbE9mZnNldCkgY29uc3QKIHsKICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93
IHdoaWNoIG11bHRpY29sdW1uIHNldCB3ZSBoaXQsIHdlIG5lZWQgdG8gZ2V0IHRoZSBhcHByb3By
aWF0ZSB0cmFuc2xhdGlvbiBvZmZzZXQgZm9yIHRoZSBjb2x1bW4uCi0gICAgY29uc3QgUmVuZGVy
TXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQocmVuZGVy
UmVnaW9uKTsKKyAgICBjb25zdCBhdXRvKiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0
aUNvbHVtblNldD4ocmVuZGVyUmVnaW9uKTsKICAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGlvbk9m
ZnNldCA9IGNvbHVtblNldC0+Y29sdW1uVHJhbnNsYXRpb25Gb3JPZmZzZXQobG9naWNhbE9mZnNl
dCk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgaG93IHdlIHdhbnQgdGhlIHJlY3QgdG8gYmUg
dHJhbnNsYXRlZCBpbnRvIHRoZSByZWdpb24uIEF0IHRoaXMgcG9pbnQgd2UncmUgY29udmVydGlu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oCmluZGV4IDUxM2QzMWQ5MjdmMDcxZWM4YWM1ZGE5OGQ1NTc1ZTAwNzJhZTY1
ZGEuLjAyMjNjOTgyYzcyMGMzN2U2NzU5NGEwNzhlOWM5YzgwYzBlYzE0NmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmgKQEAgLTE1OCw4ICsxNTgsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGdTaGlmdGlu
Z1NwYW5uZXI7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLCBpc1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQsIGlzUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0
LmNwcAppbmRleCBhM2NjNmU3NzA3Y2NiYmIxYWFmNzcxOWU0NTY5NTg5MGZiYmZjOTE2Li4yNDhi
OTQ4OWU4NjQ1NjcxMzU1OGJlNjE1YWIwOWMzNjFkZDVhZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKQEAgLTUxLDggKzUxLDgg
QEAgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OlJlbmRlck11bHRpQ29sdW1uU2V0KFJlbmRlckZsb3dU
aHJlYWQmIGZsb3dUaHJlYWQsIFBhc3NSZWYKIFJlbmRlck11bHRpQ29sdW1uU2V0KiBSZW5kZXJN
dWx0aUNvbHVtblNldDo6bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpIGNvbnN0CiB7CiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGluZy0+aXNS
ZW5kZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyTXVsdGlD
b2x1bW5TZXQoc2libGluZyk7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4o
KnNpYmxpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1u
U2V0PihzaWJsaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC02MCw4ICs2
MCw4IEBAIFJlbmRlck11bHRpQ29sdW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtblNldDo6bmV4dFNp
YmxpbmdNdWx0aUNvbHVtblNldCgpIGNvbnN0CiBSZW5kZXJNdWx0aUNvbHVtblNldCogUmVuZGVy
TXVsdGlDb2x1bW5TZXQ6OnByZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCkgY29uc3QKIHsK
ICAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGluZyA9IHByZXZpb3VzU2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYg
KHNpYmxpbmctPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkKLSAgICAgICAgICAgIHJldHVybiB0
b1JlbmRlck11bHRpQ29sdW1uU2V0KHNpYmxpbmcpOworICAgICAgICBpZiAoaXM8UmVuZGVyTXVs
dGlDb2x1bW5TZXQ+KCpzaWJsaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtblNldD4oc2libGluZyk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaApp
bmRleCBmOTMwYjc3YmZmZDcwZmY5NTdkZjc5YzI5YTgxYzQ0NWFjM2ZlYzU4Li4yN2NhNzM3YzM4
ZDgyYWNlNGRmNGM1Njc1Mjk5ZDFmZmI1NmUzNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaApAQCAtMjI1LDggKzIyNSw2IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPENvbnRlbnRSdW4sIDE+IG1fY29udGVudFJ1bnM7CiB9OwogCi1SRU5E
RVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTXVsdGlDb2x1bW5TZXQsIGlzUmVuZGVyTXVsdGlD
b2x1bW5TZXQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyTXVsdGlDb2x1bW5TZXQsIGlzUmVuZGVyTXVsdGlD
b2x1bW5TZXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgKaW5kZXggY2FhYzJlN2JkZGE3
NDdhYmVlOTJlY2M3YThlNzQyMTU0NzgyMzE3NS4uZjFhNWI4ODQ3M2I4NGFmNWE4YWIyNWMzYmQz
M2U0N2FiM2I0N2FlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgKQEAgLTU1LDggKzU1
LDYgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIG1fZmxvd1Ro
cmVhZDsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlciwgaXNSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigp
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVO
REVSX09CSkVDVChSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciwgaXNSZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKaW5kZXggZDJmZjg4NTYxNTg0
ZTE5NjA5MmVjNjI4NmFkMmU0ZDJhNjVlNzM2Ni4uYjUwODQzNWQzMDExNzczYTNiZjNlNTc0YmQ1
NjkxOTRlY2RkOThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdpb25TdHlsZSgpCiAgICAgaWYgKCFpc1BzZXVkb0Vs
ZW1lbnQoKSkKICAgICAgICAgY3VzdG9tUmVnaW9uU3R5bGUgPSB2aWV3KCkuZG9jdW1lbnQoKS5l
bnN1cmVTdHlsZVJlc29sdmVyKCkuY2hlY2tSZWdpb25TdHlsZShnZW5lcmF0aW5nRWxlbWVudCgp
KTsKICAgICBzZXRIYXNDdXN0b21SZWdpb25TdHlsZShjdXN0b21SZWdpb25TdHlsZSk7Ci0gICAg
dG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQobV9mbG93VGhyZWFkKS0+Y2hlY2tSZWdpb25zV2l0aFN0
eWxpbmcoKTsKKyAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJl
YWQpLmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdApAQCAtNDg5
LDcgKzQ4OSw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnJlc3RvcmVSZWdpb25P
YmplY3RzT3JpZ2luYWxTdHlsZSgpCiAKIFJlbmRlck5hbWVkRmxvd1RocmVhZCogUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6Om5hbWVkRmxvd1RocmVhZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
UmVuZGVyTmFtZWRGbG93VGhyZWFkKGZsb3dUaHJlYWQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZCgpKTsKIH0KIAogTGF5b3V0UmVjdCBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6dmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKaW5k
ZXggMzMwZjMwY2FlNDhmZmRiNzdjMjU0ZjA4MmE5ZmFiYmNiMWRhMTI3My4uYzVlZmIzMjQ5NGMz
ODFhNjJmODQ1NzFhZjE3N2E2NDQ2YjNjMWQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKQEAgLTc3LDcgKzc3LDcgQEAgcHVi
bGljOgogICAgIC8vIHBhcmVudCByZW5kZXJlciBpbnN0ZWFkLgogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgdGhhdCByZW5kZXJlciBob2xkaW5nIHRoZSBsYXllci4KICAgICAvLyBUaGUgcmV0
dXJuIHZhbHVlIGNhbm5vdCBiZSBudWxsIGJlY2F1c2UgQ1NTIFJlZ2lvbnMgY3JlYXRlIFN0YWNr
aW5nIENvbnRleHRzICh3aGljaCBtZWFucyB0aGV5IGNyZWF0ZSBsYXllcnMpLgotICAgIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIGxheWVyT3duZXIoKSBjb25zdCB7IHJldHVybiAqdG9SZW5kZXJM
YXllck1vZGVsT2JqZWN0KHBhcmVudCgpKTsgfQorICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IGxheWVyT3duZXIoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqcGFyZW50KCkpOyB9CiAKICAgICBib29sIGhhc0N1c3RvbVJlZ2lvblN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNDdXN0b21SZWdpb25TdHlsZTsgfQogICAgIHZvaWQgY2xlYXJPYmpl
Y3RTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwpAQCAtMTYzLDggKzE2Myw2IEBA
IHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX2NvbXB1dGVkQXV0b0hlaWdodDsKIH07CiAKLVJF
TkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgaXNSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCA1Y2JjZmZkNWNjZTZkMjE4ZWE0MWM0
YjRjZjhlZTVjOGQ4NjY5OGUxLi4xNzRjOGNlNTRhYzk1ZWU4MmE3NTA1MzgzOWU3ZDE5Mjg3MWQw
NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
VGhyZWFkLmNwcApAQCAtODUsNyArODUsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
Y2xlYXJDb250ZW50RWxlbWVudHMoKQogCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6dXBk
YXRlV3JpdGluZ01vZGUoKQogewotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmaXJzdEZy
YWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChtX3JlZ2lvbkxpc3QuZmlyc3QoKSk7
CisgICAgYXV0byogZmlyc3RGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50PihtX3JlZ2lvbkxpc3QuZmlyc3QoKSk7CiAgICAgaWYgKCFmaXJzdEZyYWdtZW50KQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBmaXJzdEZyYWdt
ZW50LT5zdHlsZSgpLndyaXRpbmdNb2RlKCkpCkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGljIHZv
aWQgYWRkRnJhZ21lbnRUb0xpc3QoUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCwgUmVuZGVy
TmFtZWRGbG93RnJhZ20KICAgICBlbHNlIHsKICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVn
aW9uICJncmVhdGVyIiB0aGFuIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LgogICAgICAgICBhdXRv
IGl0ID0gcmVnaW9uTGlzdC5iZWdpbigpOwotICAgICAgICB3aGlsZSAoaXQgIT0gcmVnaW9uTGlz
dC5lbmQoKSAmJiAhY29tcGFyZVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50cyhyZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCwgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXQpKSkKKyAgICAgICAgd2hp
bGUgKGl0ICE9IHJlZ2lvbkxpc3QuZW5kKCkgJiYgIWNvbXBhcmVSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudHMocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PigqaXQpKSkKICAgICAgICAgICAgICsraXQ7CiAgICAgICAgIHJlZ2lvbkxpc3QuaW5z
ZXJ0QmVmb3JlKGl0LCByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgfQpAQCAtMjMwLDE4
ICsyMzAsMTggQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhyZWFk
KFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQogICAgIEFTU0VSVChyZW5kZXJSZWdpb24pOwog
ICAgIEFTU0VSVCghcmVuZGVyUmVnaW9uLT5pc1ZhbGlkKCkpOwogCi0gICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChyZW5kZXJSZWdpb24pOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Pigq
cmVuZGVyUmVnaW9uKTsKICAgICByZXNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwogCi0gICAgaWYg
KHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSAmJiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0
aGlzKSkgeworICAgIGlmIChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dU
aHJlYWQoKSAmJiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQo
KS0+ZGVwZW5kc09uKHRoaXMpKSB7CiAgICAgICAgIC8vIFRoZSBvcmRlciBvZiBpbnZhbGlkIHJl
Z2lvbnMgaXMgaXJyZWxldmFudC4KLSAgICAgICAgbV9pbnZhbGlkUmVnaW9uTGlzdC5hZGQocmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LmFkZCgm
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOwogICAgICAgICAvLyBSZWdpc3RlciBvdXJzZWxmIHRv
IGdldCBhIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzLgotICAgICAgICByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJU
aHJlYWRzU2V0LmFkZCh0aGlzKTsKKyAgICAgICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQucGFy
ZW50TmFtZWRGbG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJUaHJlYWRzU2V0LmFkZCh0aGlzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZEZyYWdtZW50VG9OYW1lZEZsb3dUaHJlYWQo
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIGFkZEZyYWdtZW50VG9OYW1lZEZsb3dUaHJl
YWQoJnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKIAogICAgIGludmFsaWRhdGVSZWdpb25zKCk7
CiB9CkBAIC0yNTAsMjIgKzI1MCwyMiBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVt
b3ZlUmVnaW9uRnJvbVRocmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKIHsKICAgICBB
U1NFUlQocmVuZGVyUmVnaW9uKTsKIAotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVuZGVyUmVn
aW9uKTsKLSAgICBpZiAocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQo
KSkgewotICAgICAgICAgICAgQVNTRVJUKG1faW52YWxpZFJlZ2lvbkxpc3QuY29udGFpbnMocmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKLSAgICAgICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3Qu
cmVtb3ZlKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICAgICAgICAgIHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNT
ZXQucmVtb3ZlKHRoaXMpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiByZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVy
UmVnaW9uKTsKKyAgICBpZiAocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93
VGhyZWFkKCkpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ludmFsaWRSZWdpb25MaXN0LmNvbnRhaW5zKCZy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAgICAgICAgbV9pbnZhbGlkUmVnaW9uTGlz
dC5yZW1vdmUoJnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIHJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFk
c1NldC5yZW1vdmUodGhpcyk7CiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGludmFsaWRhdGUg
dGhlIHJlZ2lvbnMgcmVjdGFuZ2xlcy4gVGhlIHJlbW92ZWQgcmVnaW9uCiAgICAgICAgICAgICAv
LyB3YXMgbm90IHRha2VuIGludG8gYWNjb3VudC4gSnVzdCByZXR1cm4gaGVyZS4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZW1vdmVEZXBlbmRlbmN5T25GbG93VGhy
ZWFkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSk7Cisg
ICAgICAgIHJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQocmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCkpOwogICAgIH0KIAotICAgIEFTU0VSVChtX3JlZ2lv
bkxpc3QuY29udGFpbnMocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKLSAgICBib29sIHdhc0Zp
cnN0ID0gbV9yZWdpb25MaXN0LmZpcnN0KCkgPT0gcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7Ci0g
ICAgbV9yZWdpb25MaXN0LnJlbW92ZShyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgQVNT
RVJUKG1fcmVnaW9uTGlzdC5jb250YWlucygmcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKKyAg
ICBib29sIHdhc0ZpcnN0ID0gbV9yZWdpb25MaXN0LmZpcnN0KCkgPT0gJnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OworICAgIG1fcmVnaW9uTGlzdC5yZW1vdmUoJnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KTsKIAogICAgIGlmIChjYW5CZURlc3Ryb3llZCgpKQogICAgICAgICBzZXRNYXJrRm9yRGVz
dHJ1Y3Rpb24oKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6ZGVjb3JhdGlvbnNDbGlwUmVjdEZvckJveEluTmFtZWRGbG93RnJhZ21lbnQoYwog
CiBSZW5kZXJCbG9jayogUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpmcmFnbWVudEZyb21SZW5kZXJC
b3hBc1JlbmRlckJsb2NrKFJlbmRlckJveCogcmVuZGVyQm94LCBjb25zdCBJbnRQb2ludCYgYWJz
b2x1dGVQb2ludCwgY29uc3QgUmVuZGVyQm94JiBmbG93ZWRCb3gpCiB7Ci0gICAgcmV0dXJuIHRv
UmVuZGVyTmFtZWRGbG93VGhyZWFkKHJlbmRlckJveCktPmZyYWdtZW50RnJvbUFic29sdXRlUG9p
bnRBbmRCb3goYWJzb2x1dGVQb2ludCwgZmxvd2VkQm94KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqcmVuZGVyQm94KS5mcmFnbWVudEZyb21BYnNvbHV0ZVBv
aW50QW5kQm94KGFic29sdXRlUG9pbnQsIGZsb3dlZEJveCk7CiB9CiAKIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmZyYWdtZW50RnJvbUFic29sdXRlUG9p
bnRBbmRCb3goY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQsIGNvbnN0IFJlbmRlckJveCYg
Zmxvd2VkQm94KQpAQCAtMzg4LDEzICszODgsMTMgQEAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQq
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCgK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3Jl
Z2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbiksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZnJh
Z21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCppdGVyKTsKLSAgICAgICAgUmVuZGVy
QmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9IGZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5l
cigpOworICAgICAgICBhdXRvJiBmcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PigqKml0ZXIpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdtZW50Q29udGFp
bmVyID0gZnJhZ21lbnQuZnJhZ21lbnRDb250YWluZXIoKTsKICAgICAgICAgSW50UmVjdCBmcmFn
bWVudEFic29sdXRlUmVjdChyb3VuZGVkSW50UG9pbnQoZnJhZ21lbnRDb250YWluZXIubG9jYWxU
b0Fic29sdXRlKCkpLCByb3VuZGVkSW50U2l6ZShmcmFnbWVudENvbnRhaW5lci5wYWRkaW5nQm94
UmVjdCgpLnNpemUoKSkpOwogICAgICAgICBpZiAoZnJhZ21lbnRBYnNvbHV0ZVJlY3QuY29udGFp
bnMoYWJzb2x1dGVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAg
ICAgICByZXR1cm4gJmZyYWdtZW50OwogICAgICAgICAKLSAgICAgICAgaWYgKGZyYWdtZW50ID09
IGVuZFJlZ2lvbikKKyAgICAgICAgaWYgKCZmcmFnbWVudCA9PSBlbmRSZWdpb24pCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MzAsMTMgKzQzMCwxMyBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6Y2hlY2tJbnZhbGlkUmVnaW9ucygpCiB7CiAgICAgVmVjdG9yPFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Kj4gbmV3VmFsaWRGcmFnbWVudHM7CiAgICAgZm9yIChhdXRv
JiByZWdpb24gOiBtX2ludmFsaWRSZWdpb25MaXN0KSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
cmVnaW9uKTsKKyAgICAgICAgYXV0byYgbmFtZWRGbG93RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbik7CiAgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNv
biBhIHJlZ2lvbiB3b3VsZCBiZSBpbnZhbGlkIGlzIGJlY2F1c2UgaXQgaGFzIGEgcGFyZW50IGZs
b3cgdGhyZWFkLgotICAgICAgICBBU1NFUlQoIW5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkg
JiYgbmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKLSAgICAgICAg
aWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+ZGVwZW5kc09u
KHRoaXMpKQorICAgICAgICBBU1NFUlQoIW5hbWVkRmxvd0ZyYWdtZW50LmlzVmFsaWQoKSAmJiBu
YW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSk7CisgICAgICAgIGlmIChu
YW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+ZGVwZW5kc09uKHRoaXMp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbmV3VmFsaWRGcmFnbWVudHMuYXBw
ZW5kKG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgbmV3VmFsaWRGcmFnbWVudHMuYXBwZW5k
KCZuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBuYW1lZEZsb3dG
cmFnbWVudCA6IG5ld1ZhbGlkRnJhZ21lbnRzKSB7CkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCkKIHsKICAgICBi
b29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYg
cmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmICh0b1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KHJlZ2lvbiktPmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpIHsKKyAgICAgICAgaWYgKGRv
d25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5oYXNDdXN0b21SZWdpb25T
dHlsZSgpKSB7CiAgICAgICAgICAgICBoYXNSZWdpb25zV2l0aFN0eWxpbmcgPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgxNiw3ICs4MTYsNyBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJPYmplY3QqIG9iagogICAgIC8vIENsZWFyIHRoZSBzdHlsZXMgZm9yIHRoZSBvYmplY3QgaW4g
dGhlIHJlZ2lvbnMuCiAgICAgLy8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGlzIG5vdCBjb21wdXRl
ZCBvbmx5IGZvciB0aGUgcmVnaW9uIHJhbmdlIG9mIHRoZSBvYmplY3Qgc28gdGhpcyBpcyB3aHkg
d2UgbmVlZCB0byB3YWxrIHRoZSB3aG9sZSBjaGFpbi4KICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6
IG1fcmVnaW9uTGlzdCkKLSAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24p
LT5jbGVhck9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0KTsKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihv
YmplY3QpOwogfQogCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRmxvd0NoaWxk
SW5mbyhSZW5kZXJPYmplY3QqIGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCmluZGV4IGQ4MjcxM2EyNGU5Njg5MzAwNTdjZGNiNjYz
Y2UxOTliMWUzNDIwYjguLjFiMGU3OTQwNTM2ZjcwODQwNDkyOTdhNTdiZDUxNTk2ZGQxZDg3YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmgKQEAgLTE1OSw4ICsxNTksNiBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgbV9mbG93Q29u
dGVudEJvdHRvbTsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJOYW1lZEZs
b3dUaHJlYWQsIGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlck5hbWVk
Rmxvd1RocmVhZCwgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggODg4MGRkZTg0YWE5NzdjNDM2NDJiYmM0NzA5
MTcxMjc4OGI5MDJiZi4uYWJiYzJiNDYzMzI0ZTkyMGQ5ZWM5NzhjNzQ2YTA5NjdiY2VjMGI2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTU2OSwxMyAr
NTY5LDEzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpjbGVhck5lZWRzTGF5b3V0KCkKIAogc3RhdGlj
IHZvaWQgc2NoZWR1bGVSZWxheW91dEZvclN1YnRyZWUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIp
CiB7Ci0gICAgaWYgKCFyZW5kZXJlci5pc1JlbmRlclZpZXcoKSkgeworICAgIGlmICghaXM8UmVu
ZGVyVmlldz4ocmVuZGVyZXIpKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXIuaXNSb290ZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
LnNjaGVkdWxlUmVsYXlvdXRPZlN1YnRyZWUocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIHRvUmVuZGVyVmlldyhyZW5kZXJlcikuZnJhbWVWaWV3KCkuc2NoZWR1bGVSZWxh
eW91dCgpOworICAgIGRvd25jYXN0PFJlbmRlclZpZXc+KHJlbmRlcmVyKS5mcmFtZVZpZXcoKS5z
Y2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQ29udGFpbmlu
Z0Jsb2Nrc0ZvckxheW91dChib29sIHNjaGVkdWxlUmVsYXlvdXQsIFJlbmRlckVsZW1lbnQqIG5l
d1Jvb3QpCkBAIC02NzcsMTMgKzY3NywxMyBAQCB2b2lkIFJlbmRlck9iamVjdDo6aW52YWxpZGF0
ZUNvbnRhaW5lclByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dExheWVyTmVlZHNGdWxsUmVwYWludCgpCiB7CiAgICAgQVNTRVJUKGhhc0xheWVyKCkpOwotICAg
IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+c2V0UmVwYWludFN0YXR1
cyhOZWVkc0Z1bGxSZXBhaW50KTsKKyAgICBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0
PigqdGhpcykubGF5ZXIoKS0+c2V0UmVwYWludFN0YXR1cyhOZWVkc0Z1bGxSZXBhaW50KTsKIH0K
IAogdm9pZCBSZW5kZXJPYmplY3Q6OnNldExheWVyTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCgpCiB7CiAgICAgQVNTRVJUKGhhc0xheWVyKCkpOwotICAgIHRvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+c2V0UmVwYWludFN0YXR1cyhOZWVk
c0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KTsKKyAgICBkb3duY2FzdDxS
ZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2V0UmVwYWludFN0YXR1cyhO
ZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KTsKIH0KIAogUmVuZGVy
QmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKQEAgLTEyMzcsOCAr
MTIzNyw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50VXNpbmdDb250YWluZXIoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAocmVwYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAg
ICAgICAgdG9SZW5kZXJGbG93VGhyZWFkKHJlcGFpbnRDb250YWluZXIpLT5yZXBhaW50UmVjdGFu
Z2xlSW5SZWdpb25zKHIpOworICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPigqcmVwYWludENv
bnRhaW5lcikpIHsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnJlcGFpbnRD
b250YWluZXIpLnJlcGFpbnRSZWN0YW5nbGVJblJlZ2lvbnMocik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE2MjQsOCArMTYyNCw4IEBAIENvbG9yIFJlbmRlck9iamVjdDo6c2VsZWN0
aW9uRW1waGFzaXNNYXJrQ29sb3IoKSBjb25zdAogU2VsZWN0aW9uU3VidHJlZVJvb3QmIFJlbmRl
ck9iamVjdDo6c2VsZWN0aW9uUm9vdCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmxvd1Ro
cmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQotICAgICAgICBy
ZXR1cm4gKnRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGZsb3dUaHJlYWQpOworICAgIGlmIChpczxS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqZmxvd1RocmVhZCk7CiAKICAgICByZXR1cm4gdmll
dygpOwogfQpAQCAtMTc2MSw3ICsxNzYxLDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnNob3VsZFVz
ZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIKICNp
ZiBFTkFCTEUoM0RfUkVOREVSSU5HKQogICAgIC8vIGhhc1RyYW5zZm9ybSgpIGluZGljYXRlcyB3
aGV0aGVyIHRoZSBvYmplY3QgaGFzIHRyYW5zZm9ybSwgdHJhbnNmb3JtLXN0eWxlIG9yIHBlcnNw
ZWN0aXZlLiBXZSBqdXN0IGNhcmUgYWJvdXQgdHJhbnNmb3JtLAogICAgIC8vIHNvIGNoZWNrIHRo
ZSBsYXllcidzIHRyYW5zZm9ybSBkaXJlY3RseS4KLSAgICByZXR1cm4gKGhhc0xheWVyKCkgJiYg
dG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT50cmFuc2Zvcm0oKSkgfHwg
KGNvbnRhaW5lck9iamVjdCAmJiBjb250YWluZXJPYmplY3QtPnN0eWxlKCkuaGFzUGVyc3BlY3Rp
dmUoKSk7CisgICAgcmV0dXJuIChoYXNMYXllcigpICYmIGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpLT50cmFuc2Zvcm0oKSkgfHwgKGNvbnRhaW5lck9iamVj
dCAmJiBjb250YWluZXJPYmplY3QtPnN0eWxlKCkuaGFzUGVyc3BlY3RpdmUoKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjb250YWluZXJPYmplY3QpOwogICAgIHJldHVybiBoYXNUcmFuc2Zv
cm0oKTsKQEAgLTE3NzMsMTQgKzE3NzMsMTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5z
Zm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJPYmplY3QKICAg
ICB0cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvZmZz
ZXRJbkNvbnRhaW5lci53aWR0aCgpLCBvZmZzZXRJbkNvbnRhaW5lci5oZWlnaHQoKSk7CiAgICAg
UmVuZGVyTGF5ZXIqIGxheWVyOwotICAgIGlmIChoYXNMYXllcigpICYmIChsYXllciA9IHRvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKSkgJiYgbGF5ZXItPnRyYW5zZm9ybSgp
KQorICAgIGlmIChoYXNMYXllcigpICYmIChsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpKSAmJiBsYXllci0+dHJhbnNmb3JtKCkpCiAgICAgICAg
IHRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+Y3VycmVudFRyYW5zZm9ybSgpKTsKICAgICAKICNp
ZiBFTkFCTEUoM0RfUkVOREVSSU5HKQogICAgIGlmIChjb250YWluZXJPYmplY3QgJiYgY29udGFp
bmVyT2JqZWN0LT5oYXNMYXllcigpICYmIGNvbnRhaW5lck9iamVjdC0+c3R5bGUoKS5oYXNQZXJz
cGVjdGl2ZSgpKSB7CiAgICAgICAgIC8vIFBlcnBzZWN0aXZlIG9uIHRoZSBjb250YWluZXIgYWZm
ZWN0cyB1cywgc28gd2UgaGF2ZSB0byBmYWN0b3IgaXQgaW4gaGVyZS4KICAgICAgICAgQVNTRVJU
KGNvbnRhaW5lck9iamVjdC0+aGFzTGF5ZXIoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcGVyc3Bl
Y3RpdmVPcmlnaW4gPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+
bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKKyAgICAgICAgRmxvYXRQb2ludCBwZXJzcGVj
dGl2ZU9yaWdpbiA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpjb250YWluZXJP
YmplY3QpLmxheWVyKCktPnBlcnNwZWN0aXZlT3JpZ2luKCk7CiAKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGVyc3BlY3RpdmVNYXRyaXg7CiAgICAgICAgIHBlcnNwZWN0aXZlTWF0cml4
LmFwcGx5UGVyc3BlY3RpdmUoY29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLnBlcnNwZWN0aXZlKCkp
OwpAQCAtMTg1OCwxNSArMTg1OCwxNSBAQCBMYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxD
YXJldFJlY3QoSW5saW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVAogCiBib29s
IFJlbmRlck9iamVjdDo6aXNSb290ZWQoUmVuZGVyVmlldyoqIHZpZXcpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvID0gdGhpczsKLSAgICB3aGlsZSAoby0+cGFyZW50KCkpCi0g
ICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpczsKKyAgICB3aGlsZSAocmVuZGVyZXItPnBhcmVudCgpKQorICAgICAgICByZW5kZXJl
ciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAotICAgIGlmICghby0+aXNSZW5kZXJWaWV3KCkpCisg
ICAgaWYgKCFpczxSZW5kZXJWaWV3PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAodmlldykKLSAgICAgICAgKnZpZXcgPSAmY29uc3RfY2FzdDxSZW5kZXJWaWV3
Jj4odG9SZW5kZXJWaWV3KCpvKSk7CisgICAgICAgICp2aWV3ID0gY29uc3RfY2FzdDxSZW5kZXJW
aWV3Kj4oZG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIpKTsKIAogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMTk5OSw3ICsxOTk5LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ry
b3llZCgpCiAgICAgLy8gYmUgbW92ZWQgaW50byBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZGVzdHJv
eS4KICAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAgICAgICBzZXRIYXNMYXllcihmYWxzZSk7Ci0g
ICAgICAgIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+ZGVzdHJveUxheWVyKCk7Cisg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5kZXN0cm95TGF5
ZXIoKTsKICAgICB9CiAKICAgICBjbGVhckxheW91dFJvb3RJZk5lZWRlZCgpOwpAQCAtMjEzMiw3
ICsyMTMyLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdP
bikKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzQ29tcG9zaXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGhhc0xheWVyKCkgJiYgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKTsKKyAgICByZXR1cm4gaGFzTGF5ZXIoKSAmJiBkb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiB9CiAK
IGJvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
RmlsdGVyIGhpdFRlc3RGaWx0ZXIpCkBAIC0yNTc5LDcgKzI1NzksNyBAQCBib29sIFJlbmRlck9i
amVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdAogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKIHsKICAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghZmxv
d1RocmVhZCB8fCAhZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKKyAgICBp
ZiAoIWlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IE9uY2UgcmVnaW9ucyBhcmUgZnVsbHkgaW50ZWdy
YXRlZCB3aXRoIHRoZSBjb21wb3NpdGluZyBzeXN0ZW0gd2Ugc2hvdWxkIHVuY29tbWVudCB0aGlz
IGFzc2VydC4KQEAgLTI1ODcsNyArMjU4Nyw3IEBAIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBS
ZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0CiAgICAg
Ly8gYSBsYXllciB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRhaW5pbmcgcmVnaW9uIGluIGFkdmFu
Y2UuCiAgICAgLy8gQVNTRVJUKGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSAmJiBmbG93VGhy
ZWFkLT5jdXJyZW50UmVnaW9uKCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSk7CiAKLSAg
ICByZXR1cm4gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVn
aW9uKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oZmxv
d1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKTsKIH0KIAogUmVuZGVyRmxvd1RocmVhZCogUmVuZGVy
T2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBlMjllNDkyZThhYzA1MzM3NTg3MjY2
NTgzMGFjZWQ4MjIxODQwYzJjLi5kN2QzMTk4MWEyZmZmOTNiZmI0NGYzNzU4ZTU4NGI2MzQzYmNh
ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMTIyLDEw
ICsxMTIyLDYgQEAgaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpiYWNrZ3JvdW5kSXNLbm93blRv
QmVPYnNjdXJlZCgpCiAgICAgcmV0dXJuIG1fYml0ZmllbGRzLmJveERlY29yYXRpb25TdGF0ZSgp
ID09IEhhc0JveERlY29yYXRpb25zQW5kQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQ7CiB9
CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtYWNybyBhbmQgdXNlIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfUkVOREVSX09CSkVDVCgpIGluc3RlYWQuCi0jZGVmaW5lIFJFTkRFUl9PQkpFQ1RfVFlQ
RV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFT
RShUb1ZhbHVlVHlwZU5hbWUsIFJlbmRlck9iamVjdCwgcmVuZGVyZXIsIGlzPFRvVmFsdWVUeXBl
TmFtZT4oKnJlbmRlcmVyKSwgaXM8VG9WYWx1ZVR5cGVOYW1lPihyZW5kZXJlcikpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRF
Ul9PQkpFQ1QoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKaW5kZXggODZlODc2NTRhMzdlODFkZDAzMDFlNmY0MTUy
MTZiYzRjNjYzMzE1Ni4uZTgyNGYxYTU0MTk3YjI3ZWFiNmIzZDAxYzUzMzY3MDdhMTdjZDc5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKQEAgLTU4LDggKzU4
LDYgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxSZW5kZXJQcm9ncmVzcz4gbV9hbmltYXRpb25UaW1l
cjsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJQcm9ncmVzcywgaXNQcm9n
cmVzcygpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfUkVOREVSX09CSkVDVChSZW5kZXJQcm9ncmVzcywgaXNQcm9ncmVzcygpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCmluZGV4IGYwMmFiYzBkYTk1YTc4YTg0ZGE2ZmYx
OWNjNzAxMDE2MjUwMDk3ODEuLmQyZTA4ZDQwYWY2YTMwYTM0MjIxYTMyNjg0MTM5MzQ2MDVhZjVj
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKQEAgLTk0LDEwICs5
NCwxMCBAQCBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9j
ayhSZW5kZXJPYmplY3QmIHJ1YnkpCiBzdGF0aWMgUmVuZGVyUnVieVJ1biogbGFzdFJ1YnlSdW4o
Y29uc3QgUmVuZGVyRWxlbWVudCogcnVieSkKIHsKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0g
cnVieS0+bGFzdENoaWxkKCk7Ci0gICAgaWYgKGNoaWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkp
CisgICAgaWYgKGNoaWxkICYmICFpczxSZW5kZXJSdWJ5UnVuPigqY2hpbGQpKQogICAgICAgICBj
aGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBBU1NFUlQoIWNoaWxkIHx8IGNo
aWxkLT5pc1J1YnlSdW4oKSB8fCBjaGlsZC0+aXNCZWZvcmVDb250ZW50KCkgfHwgY2hpbGQgPT0g
cnVieUJlZm9yZUJsb2NrKHJ1YnkpKTsKLSAgICByZXR1cm4gY2hpbGQgJiYgY2hpbGQtPmlzUnVi
eVJ1bigpID8gdG9SZW5kZXJSdWJ5UnVuKGNoaWxkKSA6IDA7CisgICAgQVNTRVJUKCFjaGlsZCB8
fCBpczxSZW5kZXJSdWJ5UnVuPigqY2hpbGQpIHx8IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8
fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2socnVieSkpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJSdWJ5UnVuPihjaGlsZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVyUnVieVJ1biYg
ZmluZFJ1YnlSdW5QYXJlbnQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmluZGV4IDNlNTM5Mjk5Y2ViNjdlM2Q0Yzk0MzA2
NjAxNDczY2JjZjY5ZDkyNDEuLjMxMzI5OTg1NmQxY2U2YTM4ZjFiZGExNzE0Y2JmNmUyMDQ3MDMz
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcApAQCAt
MTMxLDkgKzEzMSw3IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVCbG9ja0NoaWxkcmVuKFJl
bmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmCiBSZW5kZXJSdWJ5UnVuKiBS
ZW5kZXJSdWJ5QmFzZTo6cnVieVJ1bigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsK
LSAgICBBU1NFUlQocGFyZW50KCktPmlzUnVieVJ1bigpKTsKLQotICAgIHJldHVybiAmdG9SZW5k
ZXJSdWJ5UnVuKCpwYXJlbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+
KHBhcmVudCgpKTsKIH0KIAogRVRleHRBbGlnbiBSZW5kZXJSdWJ5QmFzZTo6dGV4dEFsaWdubWVu
dEZvckxpbmUoYm9vbCAvKiBlbmRzV2l0aFNvZnRCcmVhayAqLykgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAppbmRleCAxNTI0YWQzODM2MjA5MjA0YTQ2
YWZkZTVhNmQ1MjA0MTE1YTU3NzE3Li5jNWFhNDAzYTRkNWY3ZTlhMWU1ZWJiZjY3ZmNmOWFiODA5
YTNhZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCkBA
IC0xNjMsMTUgKzE2MywxNSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlclJ1YnlSdW46OnJlbW92ZUNo
aWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiAgICAgaWYgKCFiZWluZ0Rlc3Ryb3llZCgpICYmICFk
b2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgY2hpbGQuaXNSdWJ5VGV4dCgpKSB7CiAgICAgICAg
IFJlbmRlclJ1YnlCYXNlKiBiYXNlID0gcnVieUJhc2UoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0
KiByaWdodE5laWdoYm91ciA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChiYXNlICYmIHJp
Z2h0TmVpZ2hib3VyICYmIHJpZ2h0TmVpZ2hib3VyLT5pc1J1YnlSdW4oKSkgeworICAgICAgICBp
ZiAoYmFzZSAmJiBpczxSZW5kZXJSdWJ5UnVuPihyaWdodE5laWdoYm91cikpIHsKICAgICAgICAg
ICAgIC8vIFJ1YnkgcnVuIHdpdGhvdXQgYSBiYXNlIGNhbiBoYXBwZW4gb25seSBhdCB0aGUgZmly
c3QgcnVuLgotICAgICAgICAgICAgUmVuZGVyUnVieVJ1biogcmlnaHRSdW4gPSB0b1JlbmRlclJ1
YnlSdW4ocmlnaHROZWlnaGJvdXIpOwotICAgICAgICAgICAgaWYgKHJpZ2h0UnVuLT5oYXNSdWJ5
QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyUnVieUJhc2UqIHJpZ2h0QmFzZSA9IHJp
Z2h0UnVuLT5ydWJ5QmFzZVNhZmUoKTsKKyAgICAgICAgICAgIFJlbmRlclJ1YnlSdW4mIHJpZ2h0
UnVuID0gZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4oKnJpZ2h0TmVpZ2hib3VyKTsKKyAgICAgICAg
ICAgIGlmIChyaWdodFJ1bi5oYXNSdWJ5QmFzZSgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVy
UnVieUJhc2UqIHJpZ2h0QmFzZSA9IHJpZ2h0UnVuLnJ1YnlCYXNlU2FmZSgpOwogICAgICAgICAg
ICAgICAgIC8vIENvbGxlY3QgYWxsIGNoaWxkcmVuIGluIGEgc2luZ2xlIGJhc2UsIHRoZW4gc3dh
cCB0aGUgYmFzZXMuCiAgICAgICAgICAgICAgICAgcmlnaHRCYXNlLT5tZXJnZUNoaWxkcmVuV2l0
aEJhc2UoYmFzZSk7Ci0gICAgICAgICAgICAgICAgbW92ZUNoaWxkVG8ocmlnaHRSdW4sIGJhc2Up
OwotICAgICAgICAgICAgICAgIHJpZ2h0UnVuLT5tb3ZlQ2hpbGRUbyh0aGlzLCByaWdodEJhc2Up
OworICAgICAgICAgICAgICAgIG1vdmVDaGlsZFRvKCZyaWdodFJ1biwgYmFzZSk7CisgICAgICAg
ICAgICAgICAgcmlnaHRSdW4ubW92ZUNoaWxkVG8odGhpcywgcmlnaHRCYXNlKTsKICAgICAgICAg
ICAgICAgICAvLyBUaGUgbm93IGVtcHR5IHJ1YnkgYmFzZSB3aWxsIGJlIHJlbW92ZWQgYmVsb3cu
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFydWJ5QmFzZSgpLT5maXJzdENoaWxkKCkpOwogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKaW5kZXgg
ZmRmMzgxZmQ5ZmI1ZWYwYjY4ZDkzZTU3MzNhMjY3NGJhN2ZjZTkzOC4uZDlkY2U0Zjc4YTZlZTVl
MzRjYTc2OTllYzRjMTAxM2E1ZjY4YzdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieVJ1bi5oCkBAIC03Nyw4ICs3Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqKSB7IH0KIH07CiAKLVJF
TkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJSdWJ5UnVuLCBpc1J1YnlSdW4oKSkKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpF
Q1QoUmVuZGVyUnVieVJ1biwgaXNSdWJ5UnVuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2xpZGVyLmgKaW5kZXggZGE4YWM3YWI4Njc3NDk4NDgwNDExNWJkN2Y1ODY2OThmMTJkYzI5
MS4uODZkYTIyNWEwMzBmODJlYzM1YTBhZTNjNWVjZGNiMTQxNjY0N2Y4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaApAQCAtNTEsOCArNTEsNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKIH07CiAKLVJFTkRFUl9PQkpFQ1Rf
VFlQRV9DQVNUUyhSZW5kZXJTbGlkZXIsIGlzU2xpZGVyKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclNsaWRl
ciwgaXNTbGlkZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRl
eCBhYjQyZDU0YTQwZTIzZGJmMmI4MmE2YTE0NWJlZGJkNTgxN2U5NmI1Li44NTdkZTY3M2Q2YTA2
YzRhNTBjYWExNWFmMDI0MDhiYjg3YjM1Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCkBAIC00MzgsOCArNDM4LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojps
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXkK
IAogQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBG
b250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS5oYXNU
ZXh0Q29tYmluZSgpICYmIGlzQ29tYmluZVRleHQoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJD
b21iaW5lVGV4dCYgY29tYmluZVRleHQgPSB0b1JlbmRlckNvbWJpbmVUZXh0KCp0aGlzKTsKKyAg
ICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRo
aXMpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRv
d25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcyk7CiAgICAgICAgIGlmIChjb21iaW5lVGV4
dC5pc0NvbWJpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gY29tYmluZVRleHQuY29tYmluZWRU
ZXh0V2lkdGgoZik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5jcHAKaW5kZXggYzU5ODc1YTY1ZjM0N2M3MDk2NmQ5ODkyZmZhZDVhYjVjNmYzNWJjOS4u
Y2Q2MzI5NTkyNzE2ZDNiMTc4YWUxMzQ4YWY4NjEwNzhhODFhYTg2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC0xNjIwLDcgKzE2MjAsNyBAQCBk
b3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdAogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0
JiBmdWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7
Ci0gICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9n
cmVzcyhyZW5kZXJPYmplY3QpOworICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93
bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCk7CiAgICAgaWYgKHJlbmRlclByb2dy
ZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dy
ZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKTsKICAgICAgICAgaWYg
KHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCBhN2RiZTg1NzMyOWQxYzY2N2UyN2Yx
NGFjOTNlNzQzOTUzNDM0NmViLi5lZDUxNjVlYmI2ZjNkZTc3NjkwNTkxYmVhOWExY2JmZWU2ZDQy
ZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC04
NDksNyArODQ5LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIAogYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJl
bmRlcmVyLmlzUHJvZ3Jlc3MoKSkKKyAgICBpZiAoIWlzPFJlbmRlclByb2dyZXNzPihyZW5kZXJl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVp
Z2h0ID0gOTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFBy
b2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogCiAg
ICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uLCByZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKIAotICAgIGNv
bnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZy
ZW5kZXJlcik7CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5k
ZXJQcm9ncmVzcz4ocmVuZGVyZXIpOwogICAgIGlmIChyZW5kZXJQcm9ncmVzcy5pc0RldGVybWlu
YXRlKCkpIHsKICAgICAgICAgLy8gMikgRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgICAgICBk
b3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwg
MS4wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA2
NzczMWI0ZmY3NjVkNTNmMGMwZjE5OGY1YWIwYzEzZjJkYWQyNThmLi5lNzg1YmVkMjhlY2RiYjg1
ODZlNmRiM2I1ZTllNDkxNzVmZDI5YjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCkBAIC05NjcsMTIgKzk2NywxMiBAQCBJbnRTaXplIFJlbmRlclRoZW1l
TWFjOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImIHJlbmRlck1ldGVyLCBj
b25zdAogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC5pc01ldGVyKCkpCisgICAgaWYgKCFp
czxSZW5kZXJNZXRlcj4ocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250
ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JG
b3IodG9SZW5kZXJNZXRlcihyZW5kZXJPYmplY3QpKTsKKyAgICBOU0xldmVsSW5kaWNhdG9yQ2Vs
bCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKGRvd25jYXN0PFJlbmRlck1ldGVyPihyZW5kZXJP
YmplY3QpKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKIAogICAgIFtjZWxsIGRyYXdXaXRoRnJhbWU6cmVjdCBpblZpZXc6ZG9j
dW1lbnRWaWV3Rm9yKHJlbmRlck9iamVjdCldOwpAQCAtMTExNSwxMyArMTExNSwxMyBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbgogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNz
QmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJlbmRlck9iamVjdC5p
c1Byb2dyZXNzKCkpCisgICAgaWYgKCFpczxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyhyZW5kZXJPYmplY3QsIHJlY3QpOwogICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkp
OwogCi0gICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVy
UHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3Mg
PSBkb3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KTsKICAgICBISVRoZW1lVHJh
Y2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJhY2tJbmZvLnZlcnNpb24gPSAwOwogICAgIGlm
IChjb250cm9sU2l6ZSA9PSBOU1JlZ3VsYXJDb250cm9sU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IGYzZGM1YTUxOWU0NWRlZThh
MjE2YTFiYjI2ZDg5ZmUwNTY0OGY0NDEuLjg2NTIyMTM5ODcyYjZkZmI1M2YxMzUzMTNmMGNlZGIz
MDZhYTIxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVNhZmFyaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2Fm
YXJpLmNwcApAQCAtMTIxNiwxMCArMTIxNiwxMCBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAog
ewogICAgIC8vIE5PVEU6IFRoaXMgcm91dGluZSBpcyBmb3IgdGVzdGluZyBvbmx5LiBJdCBzaG91
bGQgYmUgZmxlc2hlZCBvdXQgd2l0aCBhIHJlYWwgQ0ctYmFzZWQgaW1wbGVtZW50YXRpb24uCiAg
ICAgLy8gUmlnaHQgbm93IGl0IHVzZXMgYSBzbGlkZXIsIHdpdGggdGhlIHRodW1iIHBvc2l0aW9u
ZWQgYXQgdGhlIG1ldGVyIHBvaW50LgotICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkK
KyAgICBpZiAoIWlzPFJlbmRlck1ldGVyPihyZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJl
bmRlck9iamVjdCkubWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVu
dCA9IGRvd25jYXN0PFJlbmRlck1ldGVyPihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwog
CiAgICAgaW50IHJlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oKDEuMCAtIGVsZW1lbnQtPnZh
bHVlUmF0aW8oKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKaW5kZXggNDBj
ZTUyOTZmNDBlNTcyNTg3ODUzMWM5YzQ3OGRjN2QxOTkzZGExNC4uYWRiNDYzMjUzOWYyMTk4MDVh
MjlkYjRiODA1ZTVkMzVjMGU5MzNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwCkBAIC0xMTc1LDEwICsxMTc1LDEwIEBAIEludFNpemUgUmVuZGVyVGhl
bWVXaW46Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJl
Y3QmIGJvCiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKKyAgICBpZiAo
IWlzPFJlbmRlck1ldGVyPihyZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRlck9iamVj
dCkubWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IGRvd25j
YXN0PFJlbmRlck1ldGVyPihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgVGhl
bWVEYXRhIHRoZW1lID0gZ2V0VGhlbWVEYXRhKHJlbmRlck9iamVjdCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCAyNGYwN2E0NzkyMWRi
Yzc0MzZjOGY2N2MxYmZiOTQxYThkNTg2OWM4Li42ODk4NzkwYmUzNGY0ZDMxZTM1MDA4NzUzODhk
YjllYTU3N2FkMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCkBAIC02NTIsOCArNjUyLDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJSZWdp
b25MaXN0KGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIGZsb3dUaHJlYWRSZWdpb25MaXN0LAogCiAg
ICAgICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50ID0gcmVuZGVyUmVnaW9uLT5nZW5lcmF0
aW5nRWxlbWVudCgpOwogICAgICAgICBpZiAoZ2VuZXJhdGluZ0VsZW1lbnQpIHsKLSAgICAgICAg
ICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IHJlbmRlclJlZ2lvbi0+aXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQgJiYgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pLT5oYXND
dXN0b21SZWdpb25TdHlsZSgpKQorICAgICAgICAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50ID0gaXM8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOworICAg
ICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgZG93bmNhc3Q8UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pLmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkp
CiAgICAgICAgICAgICAgICAgdHMgPDwgIiByZWdpb24gc3R5bGU6IDEiOwogICAgICAgICAgICAg
aWYgKHJlbmRlclJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgICAg
ICB0cyA8PCAiIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0IjsKQEAgLTgwMiw4ICs4MDIsOCBAQCBzdGF0
aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZQogICAgIAogICAgIC8vIEFsdG91Z2ggdGhlIFJlbmRlckZsb3dU
aHJlYWQgcmVxdWlyZXMgYSBsYXllciwgaXQgaXMgbm90IGNvbGxlY3RlZCBieSBpdHMgcGFyZW50
LAogICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgaXQgYXMgYSBzcGVjaWFsIGNhc2UuCi0gICAg
aWYgKGwtPnJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHdyaXRlUmVuZGVyTmFt
ZWRGbG93VGhyZWFkcyh0cywgdG9SZW5kZXJWaWV3KGwtPnJlbmRlcmVyKCkpLCByb290TGF5ZXIs
IHBhaW50RGlydHlSZWN0LCBpbmRlbnQsIGJlaGF2aW9yKTsKKyAgICBpZiAoaXM8UmVuZGVyVmll
dz4obC0+cmVuZGVyZXIoKSkpCisgICAgICAgIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFkcyh0
cywgZG93bmNhc3Q8UmVuZGVyVmlldz4obC0+cmVuZGVyZXIoKSksIHJvb3RMYXllciwgcGFpbnRE
aXJ0eVJlY3QsIGluZGVudCwgYmVoYXZpb3IpOwogfQogCiBzdGF0aWMgU3RyaW5nIG5vZGVQb3Np
dGlvbihOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAppbmRl
eCA1NGFlM2YwNWJhMTBmOTUxNDE3ZmQ2NjljOTY0YzQwMTJkYTI4NzI1Li5lYTYwOGVjODE2NjBi
YjA0NzcxNWMzOTJlYzRjZDc0YzBmNzU2NzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlkZW8uaApAQCAtOTAsOCArOTAsNiBAQCBwcml2YXRlOgogICAgIExheW91dFNpemUgbV9j
YWNoZWRJbWFnZVNpemU7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyVmlk
ZW8sIGlzVmlkZW8oKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyVmlkZW8sIGlzVmlkZW8oKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA3NjQyMjkxMGUzYjFlOWFjYzhmZGNl
YmVjZDM5MjUwYWZiZWEzZmQ3Li41MTYwOTI2ZTA0NjI3ODM1ODlkODAyNzBkOGRhMTRlY2M5MjYy
MTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC02NiwxMSAr
NjYsMTEgQEAgc3RydWN0IFNlbGVjdGlvbkl0ZXJhdG9yIHsKICAgICAKICAgICB2b2lkIGNoZWNr
Rm9yU3Bhbm5lcigpCiAgICAgewotICAgICAgICBpZiAoIW1fY3VycmVudCB8fCAhbV9jdXJyZW50
LT5pc1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKCkpCisgICAgICAgIGlmICgh
aXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KG1fY3VycmVudCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyKiBwbGFjZWhvbGRlciA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIo
bV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKHBsYWNlaG9sZGVyKTsK
LSAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPnNwYW5uZXIoKTsKKyAgICAgICAgYXV0
byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlcj4oKm1fY3VycmVudCk7CisgICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vo
b2xkZXIpOworICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CiAgICAg
fQogICAgIAogICAgIFJlbmRlck9iamVjdCogY3VycmVudCgpCkBAIC01MDMsNyArNTAzLDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb3NpdGVkKFJl
bmRlckVsZW1lbnQqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5oYXNMYXllcigpICYm
IHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChvYmplY3QpLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQo
KTsKKyAgICByZXR1cm4gb2JqZWN0LT5oYXNMYXllcigpICYmIGRvd25jYXN0PFJlbmRlckxheWVy
TW9kZWxPYmplY3Q+KCpvYmplY3QpLmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJPYnNjdXJlc0JhY2tncm91bmQoUmVuZGVyRWxlbWVudCog
cm9vdE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDgzYWJl
NzJhNjc3NTFjNGI1MDMzOWY0MmExNTcwNjliMmUzNWY5YTUuLjI5NmZmNTY4MTRmNzlhMzY0MTE3
NTQ0N2M3NjQxOWQ4NDQ3ZGJmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aApAQCAtMzY5LDggKzM2OSw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLVJFTkRFUl9PQkpF
Q1RfVFlQRV9DQVNUUyhSZW5kZXJWaWV3LCBpc1JlbmRlclZpZXcoKSkKLQogLy8gU3RhY2stYmFz
ZWQgY2xhc3MgdG8gYXNzaXN0IHdpdGggTGF5b3V0U3RhdGUgcHVzaC9wb3AKIGNsYXNzIExheW91
dFN0YXRlTWFpbnRhaW5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5b3V0U3RhdGVN
YWludGFpbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAppbmRleCBi
MjdhZTlhZTNjZmIwYzVlZjMwMmQxYzUxYzY5MTZiZmFkNTc2NzBjLi5hNTU1NzhhMzIzZGNkZTk5
NzNkNjBhYzJjYTU3Mjc4Yjk5NDMyZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5oCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fY2xp
cFJlY3Q7IC8vIFRoZSByZWN0YW5nbGUgbmVlZHMgdG8gcmVtYWluIGNvcnJlY3QgYWZ0ZXIgc2Ny
b2xsaW5nLCBzbyBpdCBpcyBzdG9yZWQgaW4gY29udGVudCB2aWV3IGNvb3JkaW5hdGVzLCBhbmQg
bm90IGNsaXBwZWQgdG8gd2luZG93LgogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJl
bmRlcldpZGdldCwgaXNXaWRnZXQoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyV2lkZ2V0LCBpc1dpZGdldCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250
ZXh0SW5saW5lSGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtp
bmdDb250ZXh0SW5saW5lSGVhZGVycy5oCmluZGV4IGI2NGM3NjQ0YzY5ODIwMjk2MjFlMDg0M2Q0
YmU4MTRmMTI3NDM5MzAuLjUzZjAxYzFmOGE4YTM4ZDE4ZGI1MDUzMTMwOTZlZGQ4Mzc1MzRlMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4
dElubGluZUhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKQEAgLTU5NCw4ICs1OTQsOCBAQCBpbmxpbmUgYm9v
bCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1
cmVtZW50cywgYm9vbAogICAgIGlmIChtX2F1dG9XcmFwICYmICFSZW5kZXJTdHlsZTo6YXV0b1dy
YXAobV9sYXN0V1MpICYmIG1faWdub3JpbmdTcGFjZXMpCiAgICAgICAgIGNvbW1pdExpbmVCcmVh
a0F0Q3VycmVudFdpZHRoKHJlbmRlclRleHQpOwogCi0gICAgaWYgKHJlbmRlclRleHQuc3R5bGUo
KS5oYXNUZXh0Q29tYmluZSgpICYmIG1fY3VycmVudC5yZW5kZXJlcigpLT5pc0NvbWJpbmVUZXh0
KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5yZW5kZXJlcigpKS5pc0NvbWJp
bmVkKCkpIHsKLSAgICAgICAgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJpbmVSZW5kZXJlciA9IHRv
UmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5yZW5kZXJlcigpKTsKKyAgICBpZiAocmVuZGVy
VGV4dC5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCpt
X2N1cnJlbnQucmVuZGVyZXIoKSkgJiYgIWRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PigqbV9j
dXJyZW50LnJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSkgeworICAgICAgICBhdXRvJiBjb21iaW5l
UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKm1fY3VycmVudC5yZW5kZXJl
cigpKTsKICAgICAgICAgY29tYmluZVJlbmRlcmVyLmNvbWJpbmVUZXh0KCk7CiAgICAgICAgIC8v
IFRoZSBsZW5ndGggb2YgdGhlIHJlbmRlcmVyJ3MgdGV4dCBtYXkgaGF2ZSBjaGFuZ2VkLiBJbmNy
ZW1lbnQgc3RhbGUgaXRlcmF0b3IgcG9zaXRpb25zCiAgICAgICAgIGlmIChpdGVyYXRvcklzQmV5
b25kRW5kT2ZSZW5kZXJDb21iaW5lVGV4dChtX2xpbmVCcmVhaywgY29tYmluZVJlbmRlcmVyKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCmluZGV4
IGM3NzRhNTg2NjY3NjAxN2I5NDg2NjA5ZTVlYTYwNjg4M2I4ZDM5OTUuLmI2ODU3YjZmNDM3YWQ1
MjZhNTg3MWE4ZjQwMmM0NzJmMGI3NjU4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9MaW5lQnJlYWtlci5jcHAKQEAgLTY3LDkgKzY3LDkgQEAgdm9pZCBMaW5lQnJlYWtl
cjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExp
bmVJbmZvJgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0
aW5nKCkpCiAgICAgICAgICAgICBtX2Jsb2NrLnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobV9ibG9j
ay5pbnNlcnRGbG9hdGluZ09iamVjdChkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkpLCBsYXN0
RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBsaW5lSW5mbywgd2lkdGgpOwotICAgICAgICBlbHNlIGlm
IChvYmplY3QuaXNUZXh0KCkgJiYgb2JqZWN0LnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBv
YmplY3QuaXNDb21iaW5lVGV4dCgpICYmICF0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCkuaXND
b21iaW5lZCgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCkuY29t
YmluZVRleHQoKTsKLSAgICAgICAgICAgIGlmICh0b1JlbmRlckNvbWJpbmVUZXh0KG9iamVjdCku
aXNDb21iaW5lZCgpKQorICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJDb21iaW5lVGV4dD4ob2Jq
ZWN0KSAmJiBvYmplY3Quc3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmICFkb3duY2FzdDxSZW5k
ZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5pc0NvbWJpbmVkKCkpIHsKKyAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlckNvbWJpbmVUZXh0PihvYmplY3QpLmNvbWJpbmVUZXh0KCk7CisgICAgICAgICAg
ICBpZiAoZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG9iamVjdCkuaXNDb21iaW5lZCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHJlc29sdmVyLmlu
Y3JlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDE0OGQzYzIz
ZTMwNDU0MWU0ZjgzYmMyNWVkYjlmZTUxNjU1ZDdjZjMuLmE4NTIxN2JkMzAwNGQwN2M2NDRkOTY1
NWFiNjkwZDA0Zjg1ZTI2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTIyMjAsMTQgKzIyMjAsMTMgQEAgYm9vbCBJbnRlcm5hbHM6OmlzUGx1Z2luVW5hdmFpbGFiaWxp
dHlJbmRpY2F0b3JPYnNjdXJlZChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHQKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJl
cigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0VtYmVkZGVkT2JqZWN0KCkp
IHsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFp
czxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVuZGVy
RW1iZWRkZWRPYmplY3QqIGVtYmVkID0gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlcik7
Ci0gICAgcmV0dXJuIGVtYmVkLT5pc1JlcGxhY2VtZW50T2JzY3VyZWQoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcikuaXNSZXBsYWNlbWVudE9i
c2N1cmVkKCk7CiB9CiAgICAgCiBib29sIEludGVybmFsczo6aXNQbHVnaW5TbmFwc2hvdHRlZChF
bGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2lu
Vmlldy5tbQppbmRleCBmMjRkZmQyN2I0MzU5ZTUwOTJlNjEwMTIyZjVhMzBhYWZkYjQzMGQyLi4z
OTZlNjFlYjZiYWU4NmQ3NGJjZGM1OGQ2Y2U2Nzc1YTlmYjNmNzVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tCkBAIC00MzAsMTAgKzQzMCw4IEBAIC0gKHZvaWQpc2VuZE1vZGlmaWVy
RXZlbnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVyOihjaGFyKWNoYXJhY3Rlcgog
CiAtICh2b2lkKXBsdWdpbkhvc3REaWVkCiB7Ci0gICAgaWYgKF9lbGVtZW50LT5yZW5kZXJlcigp
ICYmIF9lbGVtZW50LT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAg
UmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyID0gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChf
ZWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXRQbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7Ci0gICAg
fQorICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4oX2VsZW1lbnQtPnJlbmRlcmVyKCkp
KQorICAgICAgICBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKl9lbGVtZW50LT5yZW5k
ZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVj
dDo6UGx1Z2luQ3Jhc2hlZCk7CiAKICAgICBfcGx1Z2luTGF5ZXIgPSBuaWw7CiAgICAgX3Byb3h5
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldy5tbQppbmRleCA5OTg1OTRmYWQyNTM4NjlkNWFjNzc2YjQ3NDRlNjcyNDE4
YjNkMDcxLi5iOTE0NGZiYWY4ZDdmMTQyNjA0YTM1ZDdkZmQ2NWI1Y2NjMDAxN2I2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tCkBAIC0yOTAsMTEgKzI5MCwxMSBAQCAtICh2b2lkKXJlc3RhcnRUaW1lcnMKIAogLSAo
TlNSZWN0KV93aW5kb3dDbGlwUmVjdAogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBf
ZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0Owog
Ci0gICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2luZG93Q2xpcFJlY3QoKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqcmVuZGVyZXIpLndpbmRvd0NsaXBS
ZWN0KCk7CiB9CiAKIC0gKE5TUmVjdCl2aXNpYmxlUmVjdApAQCAtODc0LDEzICs4NzQsMTMgQEAg
LSAodm9pZClpbnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6KE5TUmVjdClyZWN0CiAKIC0gKE5T
UmVjdClhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IF9lbGVtZW50LT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gX2VsZW1l
bnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CiAKICAgICBJbnRSZWN0IHdpZGdldFJlY3QgPSByZW5kZXJlci0+cGl4ZWxTbmFwcGVk
QWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAgICAgd2lkZ2V0UmVjdCA9IHJlbmRlcmVy
LT52aWV3KCkuZnJhbWVWaWV3KCkuY29udGVudHNUb1dpbmRvdyh3aWRnZXRSZWN0KTsKLSAgICBy
ZXR1cm4gaW50ZXJzZWN0aW9uKHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2luZG93Q2xpcFJl
Y3QoKSwgd2lkZ2V0UmVjdCk7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihkb3duY2FzdDxSZW5k
ZXJXaWRnZXQ+KCpyZW5kZXJlcikud2luZG93Q2xpcFJlY3QoKSwgd2lkZ2V0UmVjdCk7CiB9CiAK
IC0gKENBTGF5ZXIgKilwbHVnaW5MYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQppbmRleCBjNWY5ZTNhZDM1
ZGY4NzllOWFmMzRlNDhiNjBiNTdhYTRiZWYyODkzLi4yZTQzZWY4NTcyOWNmZmExOGNjZGEwNTQ4
YWVhZmZhZjQ3MmVkZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpAQCAtMTk2Miw4ICsxOTYyLDggQEAg
UGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29u
c3QgSW50U2l6ZSYgc2l6ZSwgSFRNTFAKICAgICBpZiAocGx1Z2luUGFja2FnZSkgewogICAgICAg
ICBpZiAoV0tTaG91bGRCbG9ja1BsdWdpbihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVy
XSwgW3BsdWdpblBhY2thZ2UgYnVuZGxlVmVyc2lvbl0pKSB7CiAgICAgICAgICAgICBlcnJvckNv
ZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQbHVnSW5WZXJzaW9uOwotICAgICAgICAgICAgaWYgKGVs
ZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5zZXRQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJz
aW9uKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQt
PnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2Jq
ZWN0PigqZWxlbWVudC0+cmVuZGVyZXIoKSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24o
UmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2Vi
UGx1Z2luUGFja2FnZSBjbGFzc11dKQogICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3
KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwgYXR0
cmlidXRlS2V5cywga2l0KHBhcmFtVmFsdWVzKSwgYmFzZVVSTCwga2l0KGVsZW1lbnQpLCBsb2Fk
TWFudWFsbHkpOwpAQCAtMjA2Nyw4ICsyMDY3LDggQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHMK
ICAgICBpZiAocGx1Z2luUGFja2FnZSkgewogICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1BsdWdp
bihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVuZGxl
VmVyc2lvbl0pKSB7CiAgICAgICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQ
bHVnSW5WZXJzaW9uOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRW1i
ZWRkZWRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KGVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJF
bWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKKyAgICAgICAgICAgIGlmIChp
czxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIo
KSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Oklu
c2VjdXJlUGx1Z2luVmVyc2lvbik7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZD
bGFzczpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAwMjA4MDcxMDdl
NGRiOTM4MTIyMTFlNzlmZDgzZjNjOGZkMDc2ZDc4Li5mMzM1OWI4OTllNGQ2YTBkZDY0MGJjNDhm
MDgxNGU0ZTE5MWRhYzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNDY2LDE2ICsxNDY2LDEyIEBAIHZvaWQgUGx1Z2luVmll
dzo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIG1fcGx1Z2luUHJvY2Vzc0hhc0NyYXNo
ZWQgPSB0cnVlOwogCi0gICAgaWYgKCFtX3BsdWdpbkVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpLT5pc0Vt
YmVkZGVkT2JqZWN0KCkpCisgICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4obV9wbHVn
aW5FbGVtZW50LT5yZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wbHVnaW5F
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIAotICAg
IFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciA9IHRvUmVuZGVyRW1iZWRkZWRPYmplY3Qo
bV9wbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICByZW5kZXJlci0+c2V0UGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbkNyYXNoZWQpOwor
ICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqbV9wbHVnaW5FbGVtZW50LT5yZW5k
ZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVj
dDo6UGx1Z2luQ3Jhc2hlZCk7CiAgICAgCiAgICAgV2lkZ2V0OjppbnZhbGlkYXRlKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOTY1
OWYwZDU0ZTliMzY3NTY2NjJiYTZmNzQ4MzU4YjdmNTg0NTI0MS4uZWZmN2QwNWE5NjIzYThlYzUx
NWM1Mjc1Y2Q0NDgxZWFlMDZhZTQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNjU0LDExICs2NTQsMTEgQEAgUGFzc1JlZlB0cjxQbHVn
aW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVt
ZW50KiBwbHUKIAogICAgIGlmIChpc0Jsb2NrZWRQbHVnaW4pIHsKICAgICAgICAgYm9vbCByZXBs
YWNlbWVudE9ic2N1cmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChwbHVnaW5FbGVtZW50LT5yZW5k
ZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckVtYmVkZGVk
T2JqZWN0KiByZW5kZXJPYmplY3QgPSB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHBsdWdpbkVsZW1l
bnQtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgcmVuZGVyT2JqZWN0LT5zZXRQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbldpdGhEZXNjcmlwdGlvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5z
ZWN1cmVQbHVnaW5WZXJzaW9uLCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKTsKLSAgICAgICAg
ICAgIHJlcGxhY2VtZW50T2JzY3VyZWQgPSByZW5kZXJPYmplY3QtPmlzUmVwbGFjZW1lbnRPYnNj
dXJlZCgpOwotICAgICAgICAgICAgcmVuZGVyT2JqZWN0LT5zZXRVbmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvcklzSGlkZGVuKHJlcGxhY2VtZW50T2JzY3VyZWQpOworICAgICAgICBpZiAoaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KCpwbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKSkgeworICAgICAg
ICAgICAgYXV0byYgcmVuZGVyT2JqZWN0ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+
KCpwbHVnaW5FbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIHJlbmRlck9iamVjdC5z
ZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbldpdGhEZXNjcmlwdGlvbihSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uLCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50T2JzY3VyZWQgPSByZW5kZXJPYmplY3QuaXNSZXBs
YWNlbWVudE9ic2N1cmVkKCk7CisgICAgICAgICAgICByZW5kZXJPYmplY3Quc2V0VW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3JJc0hpZGRlbihyZXBsYWNlbWVudE9ic2N1cmVkKTsKICAgICAgICAg
fQogCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQmxvY2tJbnNlY3Vy
ZVBsdWdpblZlcnNpb24ocGFyYW1ldGVycy5taW1lVHlwZSwgcGFyYW1ldGVycy51cmwuc3RyaW5n
KCksIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nLCByZXBsYWNlbWVudE9ic2N1cmVkKSk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>