<?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>217898</bug_id>
          
          <creation_ts>2020-10-19 03:20:52 -0700</creation_ts>
          <short_desc>Rename override sizes to overriding sizes</short_desc>
          <delta_ts>2020-10-23 02:56:23 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217479</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>jfernandez</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1699207</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-19 03:20:52 -0700</bug_when>
    <thetext>Rename override sizes to overriden sizes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699211</commentid>
    <comment_count>1</comment_count>
      <attachid>411731</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-19 03:29:21 -0700</bug_when>
    <thetext>Created attachment 411731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699629</commentid>
    <comment_count>2</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-20 00:46:20 -0700</bug_when>
    <thetext>Gentle ping for reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699794</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 09:59:31 -0700</bug_when>
    <thetext>Since this is about naming, and it’s at my prompting, I should weigh in on the name semantics.

I think these are &quot;sizes that should *override* the normal size computation&quot;.

When we use the term &quot;overridden size&quot; it sounds like a &quot;size that *has been* overridden&quot;. That is backwards. The &quot;size&quot; is the thing that overrides, not the thing that gets overridden.

The problem with the original name &quot;override size&quot; is that it could easily be a flag that tells us *whether* to override a size or a function that you call to override, not a function that returns the value of the size that has the power to override.

We are looking for a term that means &quot;size that has the power to override&quot; or &quot;size that is allowed to override the normal computation&quot;. That’s where my idea of using the term &quot;overriding size&quot; came from, but there probably are even better names.

So I’m not sure that this rename is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699841</commentid>
    <comment_count>4</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-20 10:54:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Since this is about naming, and it’s at my prompting, I should weigh in on
&gt; the name semantics.
&gt; 
&gt; I think these are &quot;sizes that should *override* the normal size computation&quot;.
&gt; 
&gt; When we use the term &quot;overridden size&quot; it sounds like a &quot;size that *has
&gt; been* overridden&quot;. That is backwards. The &quot;size&quot; is the thing that
&gt; overrides, not the thing that gets overridden.
&gt; 
&gt; The problem with the original name &quot;override size&quot; is that it could easily
&gt; be a flag that tells us *whether* to override a size or a function that you
&gt; call to override, not a function that returns the value of the size that has
&gt; the power to override.
&gt; 
&gt; We are looking for a term that means &quot;size that has the power to override&quot;
&gt; or &quot;size that is allowed to override the normal computation&quot;. That’s where
&gt; my idea of using the term &quot;overriding size&quot; came from, but there probably
&gt; are even better names.
&gt; 
&gt; So I’m not sure that this rename is right.

Fair enough, I&apos;ll use overriding size then.

I agree that there might be better names but we should also consider the cognitive effort to adapt to the new name. Folks working on rendering are quite used to &quot;OverrideSize&quot; so &quot;OverridingSize&quot; would be easier to learn than &quot;SomeOtherThingWeMightComeUpWith&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700129</commentid>
    <comment_count>5</comment_count>
      <attachid>411969</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-21 03:04:23 -0700</bug_when>
    <thetext>Created attachment 411969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700210</commentid>
    <comment_count>6</comment_count>
      <attachid>411969</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:12:51 -0700</bug_when>
    <thetext>Comment on attachment 411969
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        does not work well as a noun. It&apos;d be more correct to refer to them as &quot;overriden&quot; sizes.

Comment uses old name.

&gt; Source/WebCore/rendering/RenderBlock.cpp:2429
&gt; +                overrideHeight = Optional&lt;LayoutUnit&gt;(box.overridingLogicalHeight());

Should rename these local variables too, since they use the old &quot;override&quot; terminology, and the references in the comments above.

&gt; Source/WebCore/rendering/RenderBox.cpp:1970
&gt; +        if (auto overridingLogicalWidth = overridingContainingBlockContentLogicalWidth())
&gt; +            return overridingLogicalWidth.value();

I think maybe just the word &quot;width&quot; is a better name for this very-local local variable.

Also, seems a little strange that we have to check wither the overriding width is present twice in two different ways. Might be worth coming back here later and figuring out whether the check for nullopt is even needed when has already returns true, or maybe it’s the &quot;has&quot; check that should be removed. Perhaps we are inheriting these separate has functions from a different code base where Optional isn’t used the same way?

If we know it can’t be null this should be more like:

    return *overridingContainingBlockContentLogicalWidth();

Rather than a two line if statement.

&gt; Source/WebCore/rendering/RenderBox.cpp:1982
&gt; +        if (auto overridingLogicalHeight = overridingContainingBlockContentLogicalHeight())
&gt; +            return overridingLogicalHeight.value();

&quot;height&quot;

&gt; Source/WebCore/rendering/RenderBox.cpp:2023
&gt; +        if (auto overridingLogicalHeight = overridingContainingBlockContentLogicalHeight())
&gt; +            return overridingLogicalHeight.value();

&quot;height&quot;

&gt; Source/WebCore/rendering/RenderBox.cpp:3329
&gt; +        if (auto overridingLogicalWidth = overridingContainingBlockContentLogicalWidth())
&gt; +            return overridingLogicalWidth.value();

&quot;width&quot;

&gt; Source/WebCore/rendering/RenderBox.cpp:3394
&gt; +        if (auto overridingLogicalHeight = overridingContainingBlockContentLogicalHeight())
&gt; +            return overridingLogicalHeight.value();

&quot;height&quot;

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:352
&gt; +        LayoutUnit availableWidth = hasOverridingContainingBlockContentWidth()
&gt; +            ? overridingContainingBlockContentWidth().valueOr(LayoutUnit()) : containingBlock()-&gt;availableWidth();

Same thing again, with the checking twice. Seems like this happens everywhere and could get cleaned up.

&gt; Source/WebCore/rendering/RenderBoxModelObject.h:239
&gt; +    virtual Optional&lt;LayoutUnit&gt; overridingContainingBlockContentWidth() const { ASSERT_NOT_REACHED(); return -1_lu; }
&gt; +    virtual Optional&lt;LayoutUnit&gt; overridingContainingBlockContentHeight() const { ASSERT_NOT_REACHED(); return -1_lu; }
&gt; +    virtual bool hasOverridingContainingBlockContentWidth() const { return false; }
&gt; +    virtual bool hasOverridingContainingBlockContentHeight() const { return false; }

I guess here is the root of the design problem I see. Why have the value be Optional and have a *separate* has function? There could be a reason, but I can’t think of one. This looks like someone started using Optional but didn’t follow through all the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700812</commentid>
    <comment_count>7</comment_count>
      <attachid>411969</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-22 13:48:33 -0700</bug_when>
    <thetext>Comment on attachment 411969
Patch

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

Thanks for the reviews!

&gt;&gt; Source/WebCore/rendering/RenderBoxModelObject.h:239
&gt;&gt; +    virtual bool hasOverridingContainingBlockContentHeight() const { return false; }
&gt; 
&gt; I guess here is the root of the design problem I see. Why have the value be Optional and have a *separate* has function? There could be a reason, but I can’t think of one. This looks like someone started using Optional but didn’t follow through all the way.

I can&apos;t think of any either. As far as I saw, there are no overridingContaining...() calls without a preceding hasOverriding...(). I&apos;ve filled bug 218098 to deal with this (note that RenderBox.h replicates the same pattern).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700970</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-10-23 02:55:36 -0700</bug_when>
    <thetext>Committed r268919: &lt;https://trac.webkit.org/changeset/268919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700971</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-23 02:56:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/70612084&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411731</attachid>
            <date>2020-10-19 03:29:21 -0700</date>
            <delta_ts>2020-10-21 03:04:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217898-20201019122919.patch</filename>
            <type>text/plain</type>
            <size>89169</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdkMThmM2MyMGEyOWE2
N2FlZTFlY2I1NTU0ZjgxNjAyZTBlN2YyNS4uMWZlYTk0YTQzZTI1ZTFjZWJlNzViZGE3YjgzZWRk
YzU3YjExMmRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAyMC0xMC0xOSAgU2Vy
Z2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZW5hbWUg
b3ZlcnJpZGUgc2l6ZXMgdG8gb3ZlcnJpZGVuIHNpemVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4OTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSd2ZSBiZWVuIHRyYWRpdGlvbmFsbHkgdXNpbmcg
dGhlIHdvcmQgIm92ZXJyaWRlIiB0byByZWZlciB0byB0aG9zZSBzaXplcyB0aGF0IHdlcmUgZXhw
bGljaXRseSBzZXQgYnkKKyAgICAgICAgbGF5b3V0IHN5c3RlbXMgbGlrZSB0YWJsZXMsIGZsZXgg
b3IgZ3JpZC4gSG93ZXZlciB0aGF0J3MgYSBncmFtbWF0aWNhbCBtaXN0YWtlLiBvdmVycmlkZSBp
cyBhIHZlcmIgd2hpY2gKKyAgICAgICAgZG9lcyBub3Qgd29yayB3ZWxsIGFzIGEgbm91bi4gSXQn
ZCBiZSBtb3JlIGNvcnJlY3QgdG8gcmVmZXIgdG8gdGhlbSBhcyAib3ZlcnJpZGVuIiBzaXplcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgcmVxdWlyZWQgYXMgdGhpcyBpcyBqdXN0IGEgcmVuYW1p
bmcuCisKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIHJlbmRlcmluZy9Db21w
bGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6
dXBkYXRlUnVieUZvckp1c3RpZmllZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkTGF5
b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRMYXlvdXRGdW5jdGlvbnM6
Omhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0RnVuY3Rp
b25zOjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQ2xlYXJPdmVy
cmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldE92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OmxvZ2ljYWxI
ZWlnaHRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG1TdHJhdGVneTo6bWluQ29udGVudEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hp
bGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3Ry
YXRlZ3k6OnVwZGF0ZU92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRl
Z3k6Om1pbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
aW5pdGVTaXplU3RyYXRlZ3k6Om1pbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRDbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OnVwZGF0ZU92ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6Y29tcHV0ZUNoaWxkUHJlZmVycmVkTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VD
b21wdXRhdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpdEJvcmRlclRvTGluZXNJ
Zk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
aGFzT3ZlcnJpZGVuTG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Omhhc092ZXJyaWRlbkxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNldE92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzZXRPdmVycmlkZW5Mb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlbkxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZW5Mb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZW5Mb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVuQ29u
dGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Omhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlk
ZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoYXNPdmVycmlkZW5D
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6aGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRPdmVycmlkZW5D
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlbkNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xlYXJPdmVy
cmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0Rm9yQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBl
cnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWNoZUludHJpbnNpY0NvbnRlbnRMb2dp
Y2FsSGVpZ2h0Rm9yRmxleEl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2lu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxXaWR0aEZvclBvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc092ZXJyaWRlTG9naWNhbEhlaWdodCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc092ZXJyaWRlTG9n
aWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlTG9naWNhbEhlaWdodCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVMb2dpY2FsV2lkdGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlQ29udGVu
dFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZUxv
Z2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
Om92ZXJyaWRlTG9naWNhbEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Om92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoYXNPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldE92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVuQ29udGVudExvZ2ljYWxXaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJyaWRlbkNvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGVDb250ZW50TG9n
aWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
b3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpoYXNBdXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRoQXV0
b0hlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpvdmVycmlkZW5Db250YWluaW5nQmxvY2tD
b250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpoYXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50V2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Omhhc092ZXJyaWRlbkNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6Om92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpvdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Omhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2lkdGhGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpoZWlnaHRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpnYXRoZXJGbGV4Q2hp
bGRyZW5JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6bGF5b3V0SG9yaXpvbnRhbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6YXBwbHlMaW5lQ2xhbXApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpjbGVhckxpbmVDbGFtcCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsZXhpYmxlQm94OjpjaGlsZEludHJpbnNpY0xvZ2ljYWxXaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZUlubmVyRmxleEJhc2VT
aXplRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNyb3Nz
U2l6ZUZvclBlcmNlbnRhZ2VSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjptYWluU2l6ZUZvclBlcmNlbnRhZ2VSZXNvbHV0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsZXhpYmxlQm94Ojpjb25zdHJ1Y3RGbGV4SXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6c2V0T3ZlcnJpZGVNYWluQXhpc0NvbnRlbnRTaXpl
Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3Ry
ZXRjaEFsaWdubWVudFRvQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2Ny
ZWVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRl
cmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJH
cmlkOjpwbGFjZUl0ZW1zT25HcmlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om92ZXJyaWRl
U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dXBkYXRlR3JpZEFy
ZWFMb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlv
dXRQb3NpdGlvbmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFwcGx5
U3RyZXRjaEFsaWdubWVudFRvQ2hpbGRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjp1cGRhdGVBdXRvTWFyZ2luc0luUm93QXhpc0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OnVwZGF0ZUF1dG9NYXJnaW5zSW5Db2x1bW5BeGlzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3JpZEFyZWFQb3NpdGlvbkZvck91dE9m
Rmxvd0NoaWxkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OmFkanVzdElubGluZURpcmVjdGlv
bkxpbmVCb3VuZHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6c2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodEZyb21Sb3dIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRPdmVycmlkZUxvZ2ljYWxI
ZWlnaHRGcm9tUm93SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVsYXlvdXRDZWxs
SWZGbGV4ZWQpOgorCiAyMDIwLTEwLTEzICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFNhbml0aXplIHRoZSB1c2FnZSBvZiBvdmVycmlkZSBzaXpl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUub3JkZXIKaW5kZXggZDY0M2Q1YmJmYmVkNWI0ZTNiYjEzNThlMzYwOTZkY2Fm
NjZkNWQ4YS4uMWEwZGQ0N2M3NWNkMDcxMzdjOTU0OWU2MzA0NDczNjU0ZWVhZmQ4YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLm9yZGVyCkBAIC05NzAxLDcgKzk3MDEsNyBAQCBfX1pOM1dURjZWZWN0b3JJTjdXZWJD
b3JlMTBMYXlvdXRVbml0RUxtMEVOU18xNUNyYXNoT25PdmVyZmxvd0VFMTVyZXNlcnZlQ2FwYWNp
dAogX19aTjdXZWJDb3JlMTdSZW5kZXJGbGV4aWJsZUJveDIybGF5b3V0QW5kUGxhY2VDaGlsZHJl
bkVSTlNfMTBMYXlvdXRVbml0RVJLTjNXVEY2VmVjdG9ySVBOU185UmVuZGVyQm94RUxtMEVOUzNf
MTVDcmFzaE9uT3ZlcmZsb3dFRUVSS05TNF9JUzFfTG0wRVM3X0VFUzFfYlJOUzRfSU5TMF8xMUxp
bmVDb250ZXh0RUxtMEVTN19FRQogX19aTjdXZWJDb3JlMTdSZW5kZXJGbGV4aWJsZUJveDI2YXV0
b01hcmdpbk9mZnNldEluTWFpbkF4aXNFUktOM1dURjZWZWN0b3JJUE5TXzlSZW5kZXJCb3hFTG0w
RU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRVJOU18xMExheW91dFVuaXRFCiBfX1pON1dlYkNvcmUx
N1JlbmRlckZsZXhpYmxlQm94MjJzZXRMb2dpY2FsT3ZlcnJpZGVTaXplRVBOU185UmVuZGVyQm94
RU5TXzEwTGF5b3V0VW5pdEUKLV9fWk43V2ViQ29yZTlSZW5kZXJCb3gzMHNldE92ZXJyaWRlTG9n
aWNhbENvbnRlbnRXaWR0aEVOU18xMExheW91dFVuaXRFCitfX1pON1dlYkNvcmU5UmVuZGVyQm94
MzFzZXRPdmVycmlkZW5Mb2dpY2FsQ29udGVudFdpZHRoRU5TXzEwTGF5b3V0VW5pdEUKIF9fWk43
V2ViQ29yZTE3UmVuZGVyRmxleGlibGVCb3gxOG5lZWRUb1N0cmV0Y2hDaGlsZEVQTlNfOVJlbmRl
ckJveEUKIF9fWk43V2ViQ29yZTExUmVuZGVyQmxvY2szN3VwZGF0ZUJsb2NrQ2hpbGREaXJ0eUJp
dHNCZWZvcmVMYXlvdXRFYlBOU185UmVuZGVyQm94RQogX19aTjNXVEY5SGFzaFRhYmxlSVBLTjdX
ZWJDb3JlOVJlbmRlckJveEVOU18xMktleVZhbHVlUGFpcklTNF9OUzFfMTBMYXlvdXRVbml0RUVF
TlNfMjRLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTNF9FRU5TXzE4
SGFzaE1hcFZhbHVlVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTNF9FRU5TRF9JUzZfRUVFRVNFX0Ux
Nmxvb2t1cEZvcldyaXRpbmdJTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVNCX0VFUzRfRUVO
U3QzX18xNHBhaXJJUFM3X2JFRVJLVDBfCkBAIC0xNTA1OSw4ICsxNTA1OSw4IEBAIF9fWk43V2Vi
Q29yZTE0RGF0ZUNvbXBvbmVudHMzNnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGlt
ZUVkCiBfX1pON1dlYkNvcmUxNERhdGVDb21wb25lbnRzNDBzZXRNaWxsaXNlY29uZHNTaW5jZUVw
b2NoRm9yRGF0ZUludGVybmFsRWQKIF9fWk5TdDNfXzE3X19zb3J0NUlSUEZiUktOU180cGFpcklQ
TjNXVEYxNkF0b21pY1N0cmluZ0ltcGxFTlMyXzEyQXRvbWljU3RyaW5nRUVFUzhfRVBTNl9FRWpU
MF9TRF9TRF9TRF9TRF9UXwogX19aTjdXZWJDb3JlMTNIVE1MQlJFbGVtZW50MzZjb2xsZWN0U3R5
bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGVFUktOU18xM1F1YWxpZmllZE5hbWVFUktOM1dURjEy
QXRvbWljU3RyaW5nRVBOU18yM011dGFibGVTdHlsZVByb3BlcnR5U2V0RQotX19aTjdXZWJDb3Jl
MTVSZW5kZXJUYWJsZUNlbGw0NHNldE92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHRGcm9tUm93
SGVpZ2h0RU5TXzEwTGF5b3V0VW5pdEUKLV9fWk43V2ViQ29yZTlSZW5kZXJCb3gzMXNldE92ZXJy
aWRlTG9naWNhbENvbnRlbnRIZWlnaHRFTlNfMTBMYXlvdXRVbml0RQorX19aTjdXZWJDb3JlMTVS
ZW5kZXJUYWJsZUNlbGw0NXNldE92ZXJyaWRlbkxvZ2ljYWxDb250ZW50SGVpZ2h0RnJvbVJvd0hl
aWdodEVOU18xMExheW91dFVuaXRFCitfX1pON1dlYkNvcmU5UmVuZGVyQm94MzJzZXRPdmVycmlk
ZW5Mb2dpY2FsQ29udGVudEhlaWdodEVOU18xMExheW91dFVuaXRFCiBfX1pOSzdXZWJDb3JlMTdI
VE1MU2NyaXB0RWxlbWVudDE0aXNVUkxBdHRyaWJ1dGVFUktOU185QXR0cmlidXRlRQogX19aTks3
V2ViQ29yZTE2SFRNTEltYWdlRWxlbWVudDE0aXNVUkxBdHRyaWJ1dGVFUktOU185QXR0cmlidXRl
RQogX19aTks3V2ViQ29yZTE1SFRNTEZvcm1FbGVtZW50MTRpc1VSTEF0dHJpYnV0ZUVSS05TXzlB
dHRyaWJ1dGVFCkBAIC0yNzM2MCw4ICsyNzM2MCw4IEBAIF9fWlpON1dlYkNvcmUxMVJlbmRlckJs
b2NrMjVjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93RXZFMTFlbGxpcHNpc1N0cgogX19aR1ZaTjdX
ZWJDb3JlMTFSZW5kZXJCbG9jazI1Y2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvd0V2RTExZWxsaXBz
aXNTdHIuYgogX19aTjdXZWJDb3JlTDE4Z092ZXJyaWRlSGVpZ2h0TWFwRQogX19aTjdXZWJDb3Jl
TDE3Z092ZXJyaWRlV2lkdGhNYXBFCi1fX1pON1dlYkNvcmVMMzlnT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tMb2dpY2FsV2lkdGhNYXBFCi1fX1pON1dlYkNvcmVMNDBnT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tMb2dpY2FsSGVpZ2h0TWFwRQorX19aTjdXZWJDb3JlTDQwZ092ZXJyaWRlbkNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aE1hcEUKK19fWk43V2ViQ29yZUw0MWdPdmVycmlkZW5Db250YWlu
aW5nQmxvY2tMb2dpY2FsSGVpZ2h0TWFwRQogX19aTjdXZWJDb3JlTDE1Y29udGludWF0aW9uTWFw
RQogX19aTjdXZWJDb3JlTDI3Zmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwRQogX19aWk43V2Vi
Q29yZUwxM25ld2xpbmVTdHJpbmdFdkU2c3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcAppbmRleCBmMzA3ZTg1M2RhZGM2OTQwMmVhNmMxYmQ2
MzNkYmJjZDQ3ZmNkYTdiLi40YWE2MzdhMDliMWUyYzI5NTM5ZDA4Zjc3NjE5NDZjOTBiNTE0MjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAK
QEAgLTU5MCwxMSArNTkwLDExIEBAIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZVJ1YnlG
b3JKdXN0aWZpZWRUZXh0KFJlbmRlclJ1YnlSdW4mIHJ1YnlSdW4sIEJpZGlSCiAgICAgICAgIHRv
dGFsT3Bwb3J0dW5pdGllc0luUnVuICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICB9CiAKLSAg
ICBBU1NFUlQoIXJ1YnlSdW4uaGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSk7CisgICAgQVNTRVJU
KCFydWJ5UnVuLmhhc092ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpKTsKICAgICBmbG9hdCBuZXdCYXNl
V2lkdGggPSBydWJ5UnVuLmxvZ2ljYWxXaWR0aCgpICsgdG90YWxFeHBhbnNpb24gKyBtX2Zsb3cu
bWFyZ2luU3RhcnRGb3JDaGlsZChydWJ5UnVuKSArIG1fZmxvdy5tYXJnaW5FbmRGb3JDaGlsZChy
dWJ5UnVuKTsKICAgICBmbG9hdCBuZXdSdWJ5UnVuV2lkdGggPSBydWJ5UnVuLmxvZ2ljYWxXaWR0
aCgpICsgdG90YWxFeHBhbnNpb247CiAgICAgcnVieUJhc2Uuc2V0SW5pdGlhbE9mZnNldCgobmV3
UnVieVJ1bldpZHRoIC0gbmV3QmFzZVdpZHRoKSAvIDIpOwotICAgIHJ1YnlSdW4uc2V0T3ZlcnJp
ZGVMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdChuZXdSdWJ5UnVuV2lkdGgpKTsKKyAgICBydWJ5UnVu
LnNldE92ZXJyaWRlbkxvZ2ljYWxXaWR0aChMYXlvdXRVbml0KG5ld1J1YnlSdW5XaWR0aCkpOwog
ICAgIHJ1YnlSdW4uc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICByb290Qm94Lm1h
cmtEaXJ0eSgpOwogICAgIGlmIChSZW5kZXJSdWJ5VGV4dCogcnVieVRleHQgPSBydWJ5UnVuLnJ1
YnlUZXh0KCkpIHsKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1
cGRhdGVSdWJ5Rm9ySnVzdGlmaWVkVGV4dChSZW5kZXJSdWJ5UnVuJiBydWJ5UnVuLCBCaWRpUgog
ICAgICAgICAgICAgdGV4dFJvb3RCb3gtPm1hcmtEaXJ0eSgpOwogICAgIH0KICAgICBydWJ5UnVu
LmxheW91dEJsb2NrKHRydWUpOwotICAgIHJ1YnlSdW4uY2xlYXJPdmVycmlkZUxvZ2ljYWxXaWR0
aCgpOworICAgIHJ1YnlSdW4uY2xlYXJPdmVycmlkZW5Mb2dpY2FsV2lkdGgoKTsKICAgICByLmJv
eCgpLT5zZXRFeHBhbnNpb24obmV3UnVieVJ1bldpZHRoIC0gci5ib3goKS0+bG9naWNhbFdpZHRo
KCkpOwogCiAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gdG90YWxFeHBhbnNpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXggZDcy
YTZlZGFjNjUxMjBhMGZhNmFiNmM1NmYzZjMzYjE1YTE0YjY4My4uYzZiNmUwMWJmNDNhN2Q5ZTc2
NjRhNTg2ZTY4ZWUzNDFmYjZiM2YwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtODcsMTQgKzg3LDE0IEBAIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJHcmlk
JiBncmlkLCBjb25zCiAgICAgcmV0dXJuICFpc09ydGhvZ29uYWxDaGlsZChncmlkLCBjaGlsZCkg
PyBkaXJlY3Rpb24gOiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBGb3JSb3dzIDogRm9yQ29s
dW1ucyk7CiB9CiAKLWJvb2wgaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZv
ckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pCitib29sIGhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjaGlsZC5o
YXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IGNoaWxkLmhh
c092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKKyAgICByZXR1
cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjaGlsZC5oYXNPdmVycmlkZW5Db250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5oYXNPdmVycmlkZW5Db250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpOwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBv
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK09wdGlvbmFsPExh
eW91dFVuaXQ+IG92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29u
c3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjaGlsZC5vdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09
IEZvckNvbHVtbnMgPyBjaGlsZC5vdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhl
aWdodCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBHcmlkTGF5b3V0RnVuY3Rpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuaAppbmRleCAyMDA3MGJm
MTIzYTU2OTQ0YzA4NDZjNWFkMDZmOGY1MTA3ZmNlNGZkLi42YWE3MTk0MzU4N2IwYjdmYWE0YzRi
NGYwOTA1ZDc0ZmQ3MTE2NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZExheW91dEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Hcmlk
TGF5b3V0RnVuY3Rpb25zLmgKQEAgLTQxLDggKzQxLDggQEAgTGF5b3V0VW5pdCBjb21wdXRlTWFy
Z2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5n
RGkKIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlk
JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKIGJvb2wgaXNP
cnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOwogR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJl
bmRlckdyaWQmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOwot
Ym9vbCBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3Qg
UmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKLU9wdGlvbmFsPExheW91dFVu
aXQ+IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5k
ZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworYm9vbCBoYXNPdmVycmlkZW5Db250
YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbik7CitPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZW5Db250YWlu
aW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAppbmRleCBmOTAyMzliNzFlZWNmYWUyMmNk
NDdiMDY0ZjVkYTk3ODg1NmFkY2Q0Li5hYjEyOTVhODM2MThkNTljMzM3MjJhZDcxODRjNzNmOGVi
YzNhMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmNwcApAQCAtMTIwLDE3ICsxMjAsMTcgQEAgc3RhdGljIGJvb2wgaGFz
UmVsYXRpdmVPckludHJpbnNpY1NpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBH
cmlkVHJhY2sKICAgICByZXR1cm4gY2hpbGQuaGFzUmVsYXRpdmVMb2dpY2FsSGVpZ2h0KCkgfHwg
Y2hpbGQuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKIH0KIAot
c3RhdGljIGJvb2wgc2hvdWxkQ2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXpl
Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3N0YXRpYyBib29sIHNob3VsZENsZWFyT3ZlcnJpZGVuQ29udGFpbmluZ0Js
b2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBoYXNSZWxhdGl2ZU9ySW50
cmluc2ljU2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pIHx8IGhhc1JlbGF0aXZlTWFyZ2lu
T3JQYWRkaW5nRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkIHNl
dE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRV
bml0PiBzaXplKQorc3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRVbml0PiBzaXplKQogewogICAgIGlmIChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbFdpZHRoKHNpemUpOworICAgICAgICBjaGlsZC5zZXRPdmVycmlkZW5D
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKHNpemUpOwogICAgIGVsc2UKLSAgICAg
ICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChz
aXplKTsKKyAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHQoc2l6ZSk7CiB9CiAKIC8vIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSBwcml2
YXRlLgpAQCAtNzU2LDE0ICs3NTYsMTQgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2gKICAgICBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRG
dW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxk
LCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZlIGxvZ2ljYWwgaGVp
Z2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5zaWMgaGVpZ2h0LCB3
aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVyZS4gVGh1cyB3ZSBu
ZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0xIChubyBwb3NzaWJs
ZSByZXNvbHV0aW9uKS4KLSAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7Ci0gICAgICAgIHNldE92ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRCbG9ja0Rp
cmVjdGlvbiwgV1RGOjpudWxsb3B0KTsKKyAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZW5Db250
YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKSkgeworICAgICAg
ICBzZXRPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBj
aGlsZEJsb2NrRGlyZWN0aW9uLCBXVEY6Om51bGxvcHQpOwogICAgICAgICBjaGlsZC5zZXROZWVk
c0xheW91dChNYXJrT25seVRoaXMpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIg
dGhlIHN0cmV0Y2hlZCBoZWlnaHQgdG8gcHJvcGVybHkgY29tcHV0ZSBsb2dpY2FsIGhlaWdodCBk
dXJpbmcgbGF5b3V0LgogICAgIGlmIChjaGlsZC5uZWVkc0xheW91dCgpKQotICAgICAgICBjaGls
ZC5jbGVhck92ZXJyaWRlTG9naWNhbEhlaWdodCgpOworICAgICAgICBjaGlsZC5jbGVhck92ZXJy
aWRlbkxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CiAgICAg
cmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIEdyaWRMYXlvdXRGdW5jdGlvbnM6Om1hcmdp
bkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRCbG9ja0RpcmVjdGlvbiwg
Y2hpbGQpICsgbV9hbGdvcml0aG0uYmFzZWxpbmVPZmZzZXRGb3JDaGlsZChjaGlsZCwgZ3JpZEF4
aXNGb3JEaXJlY3Rpb24oZGlyZWN0aW9uKCkpKTsKQEAgLTc3OCw3ICs3NzgsNyBAQCBMYXlvdXRV
bml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hpbGQo
UmVuZGVyQm94JiBjaGlsZAogICAgICAgICByZXR1cm4gY2hpbGQubWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgKyBHcmlkTGF5b3V0RnVuY3Rpb25zOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxk
KCpyZW5kZXJHcmlkKCksIGNoaWxkSW5saW5lRGlyZWN0aW9uLCBjaGlsZCkgKyBtX2FsZ29yaXRo
bS5iYXNlbGluZU9mZnNldEZvckNoaWxkKGNoaWxkLCBncmlkQXhpc0ZvckRpcmVjdGlvbihkaXJl
Y3Rpb24oKSkpOwogICAgIH0KIAotICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkKKyAgICBp
ZiAodXBkYXRlT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGls
ZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pKQogICAgICAgICBjaGlsZC5zZXROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOwogICAgIHJldHVybiBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpOwog
fQpAQCAtNzkyLDcgKzc5Miw3IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6Om1heENvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkCiAgICAgICAgIHJl
dHVybiBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIEdyaWRMYXlvdXRGdW5jdGlv
bnM6Om1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRJbmxpbmVE
aXJlY3Rpb24sIGNoaWxkKSArIG1fYWxnb3JpdGhtLmJhc2VsaW5lT2Zmc2V0Rm9yQ2hpbGQoY2hp
bGQsIGdyaWRBeGlzRm9yRGlyZWN0aW9uKGRpcmVjdGlvbigpKSk7CiAgICAgfQogCi0gICAgaWYg
KHVwZGF0ZU92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwg
Y2hpbGRJbmxpbmVEaXJlY3Rpb24pKQorICAgIGlmICh1cGRhdGVPdmVycmlkZW5Db250YWluaW5n
QmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBjaGlsZElubGluZURpcmVjdGlvbikpCiAg
ICAgICAgIGNoaWxkLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgcmV0dXJuIGxv
Z2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCk7CiB9CkBAIC04OTksMTQgKzg5OSwxNCBAQCB2b2lk
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6Y29weUJhc2VsaW5lSXRlbXNDYWNoZShjb25zdCBH
cmlkVHJhY2tTaXppbmdBbGdvcgogICAgICAgICBtX3Jvd0Jhc2VsaW5lSXRlbXNNYXAgPSBzb3Vy
Y2UubV9yb3dCYXNlbGluZUl0ZW1zTWFwOwogfQogCi1ib29sIEdyaWRUcmFja1NpemluZ0FsZ29y
aXRobVN0cmF0ZWd5Ojp1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
biwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVTaXplKSBjb25zdAorYm9vbCBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6dXBkYXRlT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZVNpemUpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdmVycmlkZVNpemUpCiAgICAgICAgIG92ZXJyaWRlU2l6ZSA9IG1fYWxn
b3JpdGhtLmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pOwotICAgIGlm
IChHcmlkTGF5b3V0RnVuY3Rpb25zOjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRT
aXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikgJiYgR3JpZExheW91dEZ1bmN0aW9uczo6b3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24p
ID09IG92ZXJyaWRlU2l6ZSkKKyAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aGFzT3ZlcnJp
ZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSAm
JiBHcmlkTGF5b3V0RnVuY3Rpb25zOjpvdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50U2l6
ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pID09IG92ZXJyaWRlU2l6ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZv
ckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24sIG92ZXJyaWRlU2l6ZSk7CisgICAgc2V0T3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uLCBvdmVy
cmlkZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MTYsNyArOTE2LDcgQEAgTGF5
b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWluTG9naWNhbFNpemVG
b3JDaGlsZChSZW5kZXJCb3gmIGMKICAgICBib29sIGlzUm93QXhpcyA9IGRpcmVjdGlvbigpID09
IGNoaWxkSW5saW5lRGlyZWN0aW9uOwogICAgIGlmIChpc1Jvd0F4aXMpCiAgICAgICAgIHJldHVy
biBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nKE1pblNpemUsIGNoaWxk
TWluU2l6ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdyaWQoKSwgbnVsbHB0cikgKyBHcmlkTGF5
b3V0RnVuY3Rpb25zOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNo
aWxkSW5saW5lRGlyZWN0aW9uLCBjaGlsZCk7Ci0gICAgYm9vbCBvdmVycmlkZVNpemVIYXNDaGFu
Z2VkID0gdXBkYXRlT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNo
aWxkLCBjaGlsZElubGluZURpcmVjdGlvbiwgYXZhaWxhYmxlU2l6ZSk7CisgICAgYm9vbCBvdmVy
cmlkZVNpemVIYXNDaGFuZ2VkID0gdXBkYXRlT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24sIGF2YWlsYWJsZVNpemUp
OwogICAgIGxheW91dEdyaWRJdGVtRm9yTWluU2l6ZUNvbXB1dGF0aW9uKGNoaWxkLCBvdmVycmlk
ZVNpemVIYXNDaGFuZ2VkKTsKICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9j
a0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNo
aWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JSb3dzKTsKICAgICByZXR1cm4gY2hpbGQuY29t
cHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhNaW5TaXplLCBjaGlsZE1pblNpemUsIFdURjo6bnVsbG9w
dCkudmFsdWVPcigwKSArIEdyaWRMYXlvdXRGdW5jdGlvbnM6Om1hcmdpbkxvZ2ljYWxTaXplRm9y
Q2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRCbG9ja0RpcmVjdGlvbiwgY2hpbGQpOwpAQCAtMTA1
MCw3ICsxMDUwLDcgQEAgTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWluTG9naWNh
bFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBjb25zdAogICAgIExheW91dFVuaXQgaW5k
ZWZpbml0ZVNpemUgPSBkaXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURpcmVjdGlvbiA/IExheW91
dFVuaXQoKSA6IExheW91dFVuaXQoLTEpOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBm
bG93QXdhcmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rp
b25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgZGlyZWN0aW9uKCkpOwogICAgIGlmICho
YXNSZWxhdGl2ZU1hcmdpbk9yUGFkZGluZ0ZvckNoaWxkKGNoaWxkLCBmbG93QXdhcmVEaXJlY3Rp
b24pIHx8IChkaXJlY3Rpb24oKSAhPSBjaGlsZElubGluZURpcmVjdGlvbiAmJiBoYXNSZWxhdGl2
ZU9ySW50cmluc2ljU2l6ZUZvckNoaWxkKGNoaWxkLCBmbG93QXdhcmVEaXJlY3Rpb24pKSkKLSAg
ICAgICAgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxk
LCBkaXJlY3Rpb24oKSwgaW5kZWZpbml0ZVNpemUpOworICAgICAgICBzZXRPdmVycmlkZW5Db250
YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24oKSwgaW5kZWZp
bml0ZVNpemUpOwogICAgIHJldHVybiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6
bWluTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRNaW5TaXplLCBhdmFpbGFibGVTaXpl
KTsKIH0KIApAQCAtMTA5Myw4ICsxMDkzLDggQEAgTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJh
dGVneTo6ZnJlZVNwYWNlRm9yU3RyZXRjaEF1dG9UcmFja3NTdGVwKCkgY29uc3QKIExheW91dFVu
aXQgRGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxk
KCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKLSAgICBpZiAoZGlyZWN0aW9uKCkg
PT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24gJiYgY2hpbGQubmVlZHNMYXlvdXQoKSAmJiBzaG91bGRD
bGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgRm9y
Q29sdW1ucykpCi0gICAgICAgIHNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVG
b3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24sIExheW91dFVuaXQoKSk7CisgICAg
aWYgKGRpcmVjdGlvbigpID09IGNoaWxkSW5saW5lRGlyZWN0aW9uICYmIGNoaWxkLm5lZWRzTGF5
b3V0KCkgJiYgc2hvdWxkQ2xlYXJPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZv
ckNoaWxkKGNoaWxkLCBGb3JDb2x1bW5zKSkKKyAgICAgICAgc2V0T3ZlcnJpZGVuQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24sIExh
eW91dFVuaXQoKSk7CiAgICAgcmV0dXJuIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5
OjptaW5Db250ZW50Rm9yQ2hpbGQoY2hpbGQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKaW5kZXggOTNkYzVlMTU0NTEw
YzllMGY0ZGJlYTY5MjdmNzM4MThmNjc4YjM5NS4uNDk5YjZmYzc2MzkyYTJhODM5NmMxOWFiODE0
Yzk1M2JmYmM2ZDFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRU
cmFja1NpemluZ0FsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Hcmlk
VHJhY2tTaXppbmdBbGdvcml0aG0uaApAQCAtMjcxLDcgKzI3MSw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0R3JpZEl0ZW1Gb3JNaW5TaXplQ29tcHV0YXRpb24oUmVuZGVy
Qm94JiwgYm9vbCBvdmVycmlkZVNpemVIYXNDaGFuZ2VkKSBjb25zdCA9IDA7CiAKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gmKSBjb25zdDsKLSAgICBib29s
IHVwZGF0ZU92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJC
b3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIE9wdGlvbmFsPExheW91dFVuaXQ+ID0gV1RG
OjpudWxsb3B0KSBjb25zdDsKKyAgICBib29sIHVwZGF0ZU92ZXJyaWRlbkNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRTaXplRm9yQ2hpbGQoUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
LCBPcHRpb25hbDxMYXlvdXRVbml0PiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAKICAgICAvLyBH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0gYWNjZXNzb3JzIGZvciBzdWJjbGFzc2VzLgogICAgIExh
eW91dFVuaXQgY29tcHV0ZVRyYWNrQmFzZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbGdvcml0
aG0uY29tcHV0ZVRyYWNrQmFzZWRTaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCmluZGV4IDlmYTFiZTQ0MDAwZGIzOTg5ZWUwMzg1NTdhYWZjMDZmOGZlODJl
ODguLmU2MjczMmU1ZDg4ZWVjMjlkYTBmNGI1ZWEyOTMzMDU4ZTk5YmFkNDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTc2OCw3ICsxNzY4LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIHBvc2l0aW9u
ZWQpCiB7CiAgICAgQVNTRVJUKCFpc0Fub255bW91c0Jsb2NrKCkpOwogCi0gICAgcG9zaXRpb25l
ZC5jbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKTsKKyAgICBwb3NpdGlv
bmVkLmNsZWFyT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKTsKIAogICAgIGlm
IChwb3NpdGlvbmVkLmlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjQyNSwxMSArMjQyNSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQ2hpbGRQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKFJlbmRlck9iamVjdCYgY2hpbGQsIExheW91dAogICAgIGlmIChj
aGlsZC5pc0JveCgpKSB7CiAgICAgICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
Y2hpbGQpOwogICAgICAgICBpZiAoYm94LmlzRmxleEl0ZW0oKSkgewotICAgICAgICAgICAgaWYg
KGJveC5oYXNPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgICAgICBvdmVycmlk
ZUhlaWdodCA9IE9wdGlvbmFsPExheW91dFVuaXQ+KGJveC5vdmVycmlkZUxvZ2ljYWxIZWlnaHQo
KSk7Ci0gICAgICAgICAgICBpZiAoYm94Lmhhc092ZXJyaWRlTG9naWNhbFdpZHRoKCkpCi0gICAg
ICAgICAgICAgICAgb3ZlcnJpZGVXaWR0aCA9IE9wdGlvbmFsPExheW91dFVuaXQ+KGJveC5vdmVy
cmlkZUxvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgIGJveC5jbGVhck92ZXJyaWRlQ29udGVu
dFNpemUoKTsKKyAgICAgICAgICAgIGlmIChib3guaGFzT3ZlcnJpZGVuTG9naWNhbEhlaWdodCgp
KQorICAgICAgICAgICAgICAgIG92ZXJyaWRlSGVpZ2h0ID0gT3B0aW9uYWw8TGF5b3V0VW5pdD4o
Ym94Lm92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoYm94Lmhhc092
ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlV2lkdGggPSBP
cHRpb25hbDxMYXlvdXRVbml0Pihib3gub3ZlcnJpZGVuTG9naWNhbFdpZHRoKCkpOworICAgICAg
ICAgICAgYm94LmNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTI0MzksOSArMjQzOSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVDaGls
ZFByZWZlcnJlZExvZ2ljYWxXaWR0aHMoUmVuZGVyT2JqZWN0JiBjaGlsZCwgTGF5b3V0CiAgICAg
aWYgKGNoaWxkLmlzQm94KCkpIHsKICAgICAgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihjaGlsZCk7CiAgICAgICAgIGlmIChvdmVycmlkZUhlaWdodCkKLSAgICAgICAgICAgIGJv
eC5zZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHQob3ZlcnJpZGVIZWlnaHQudmFsdWUoKSk7CisgICAg
ICAgICAgICBib3guc2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodChvdmVycmlkZUhlaWdodC52YWx1
ZSgpKTsKICAgICAgICAgaWYgKG92ZXJyaWRlV2lkdGgpCi0gICAgICAgICAgICBib3guc2V0T3Zl
cnJpZGVMb2dpY2FsV2lkdGgob3ZlcnJpZGVXaWR0aC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJv
eC5zZXRPdmVycmlkZW5Mb2dpY2FsV2lkdGgob3ZlcnJpZGVXaWR0aC52YWx1ZSgpKTsKICAgICB9
CiAKICAgICAvLyBGb3Igbm9uLXJlcGxhY2VkIGJsb2NrcyBpZiB0aGUgaW5saW5lIHNpemUgaXMg
bWlufG1heC1jb250ZW50IG9yIGEgZGVmaW5pdGUKQEAgLTMyMTksOCArMzIxOSw4IEBAIE9wdGlv
bmFsPExheW91dFVuaXQ+IFJlbmRlckJsb2NrOjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0Rm9yUGVy
Y2VudGFnZUNvbXB1dGF0aW9uCiAgICAgCiAgICAgaWYgKHN0cmV0Y2hlZEZsZXhIZWlnaHQpCiAg
ICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IHN0cmV0Y2hlZEZsZXhIZWlnaHQ7Ci0gICAgZWxzZSBp
ZiAoaXNHcmlkSXRlbSgpICYmIGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpKQotICAgICAgICBh
dmFpbGFibGVIZWlnaHQgPSBvdmVycmlkZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBlbHNlIGlmIChp
c0dyaWRJdGVtKCkgJiYgaGFzT3ZlcnJpZGVuTG9naWNhbEhlaWdodCgpKQorICAgICAgICBhdmFp
bGFibGVIZWlnaHQgPSBvdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAoc3R5
bGVUb1VzZS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIExheW91dFVuaXQg
Y29udGVudEJveEhlaWdodCA9IGFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6
aW5nKChMYXlvdXRVbml0KXN0eWxlVG9Vc2UubG9naWNhbEhlaWdodCgpLnZhbHVlKCkpOwogICAg
ICAgICBhdmFpbGFibGVIZWlnaHQgPSBzdGQ6Om1heCgwX2x1LCBjb25zdHJhaW5Db250ZW50Qm94
TG9naWNhbEhlaWdodEJ5TWluTWF4KGNvbnRlbnRCb3hIZWlnaHQgLSBzY3JvbGxiYXJMb2dpY2Fs
SGVpZ2h0KCksIFdURjo6bnVsbG9wdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAppbmRleCBmZGQ4OTZiM2FiY2QzNDQ0NWYzNGQ1MWIwZjAwYmQ0ZWIy
YzI3YmRhLi5kZjkyMGNjNDQ4ZGEyMzAxYzM1NmFhMjhlYjYzMDhmZDc3MTFhMjAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzA0NSw3ICsz
MDQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEZvckJvcmRlckZpdChMYXlvdXRV
bml0IHgsIExheW91dFVuaXQmIGxlZnQsIExheW91dFUKIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OmZpdEJvcmRlclRvTGluZXNJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKHN0eWxlKCkuYm9yZGVyRml0
KCkgPT0gQm9yZGVyRml0OjpCb3JkZXIgfHwgaGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSkKKyAg
ICBpZiAoc3R5bGUoKS5ib3JkZXJGaXQoKSA9PSBCb3JkZXJGaXQ6OkJvcmRlciB8fCBoYXNPdmVy
cmlkZW5Mb2dpY2FsV2lkdGgoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2FsayBhbnkg
bm9ybWFsIGZsb3cgbGluZXMgdG8gc251Z2x5IGZpdC4KQEAgLTMwNjQsOSArMzA2NCw5IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpmaXRCb3JkZXJUb0xpbmVzSWZOZWVkZWQoKQogICAgIGlmIChu
ZXdDb250ZW50V2lkdGggPT0gb2xkV2lkdGgpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldE92
ZXJyaWRlTG9naWNhbFdpZHRoKG5ld0NvbnRlbnRXaWR0aCArIGJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsV2lkdGgoKSk7CisgICAgc2V0T3ZlcnJpZGVuTG9naWNhbFdpZHRoKG5ld0NvbnRlbnRXaWR0
aCArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSk7CiAgICAgbGF5b3V0QmxvY2soZmFs
c2UpOwotICAgIGNsZWFyT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKTsKKyAgICBjbGVhck92ZXJyaWRl
bkxvZ2ljYWxXaWR0aCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGly
dHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCmluZGV4IGNlMGYzODE2ZmE0NTVlOWEyNmI3OThiYmNlYTlmMDMwN2NhOWJhYmMu
LmRjNDkxYTM2MDA3ZDY2Y2IxMzU2Nzk2MmQyMGVkMTNkZmU5OTE5YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC05MywxMyArOTMsMTMgQEAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFJlbmRlckJveCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNSZW5kZXJCb3gpLCBSZW5k
ZXJCb3hfc2hvdWwKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHR5cGVkZWYgV1RGOjpI
YXNoTWFwPGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQ+IE92ZXJyaWRlU2l6ZU1hcDsKLXN0
YXRpYyBPdmVycmlkZVNpemVNYXAqIGdPdmVycmlkZUxvZ2ljYWxIZWlnaHRNYXAgPSBudWxscHRy
Owotc3RhdGljIE92ZXJyaWRlU2l6ZU1hcCogZ092ZXJyaWRlTG9naWNhbFdpZHRoTWFwID0gbnVs
bHB0cjsKK3N0YXRpYyBPdmVycmlkZVNpemVNYXAqIGdPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFw
ID0gbnVsbHB0cjsKK3N0YXRpYyBPdmVycmlkZVNpemVNYXAqIGdPdmVycmlkZW5Mb2dpY2FsV2lk
dGhNYXAgPSBudWxscHRyOwogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN0b3JlIHRoZXNlIGJhc2Vk
IG9uIHBoeXNpY2FsIGRpcmVjdGlvbi4KIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IFJlbmRl
ckJveCosIE9wdGlvbmFsPExheW91dFVuaXQ+PiBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcDsKLXN0
YXRpYyBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcCogZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29u
dGVudExvZ2ljYWxIZWlnaHRNYXAgPSBudWxscHRyOwotc3RhdGljIE92ZXJyaWRlT3B0aW9uYWxT
aXplTWFwKiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwID0g
bnVsbHB0cjsKK3N0YXRpYyBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcCogZ092ZXJyaWRlbkNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwID0gbnVsbHB0cjsKK3N0YXRpYyBPdmVy
cmlkZU9wdGlvbmFsU2l6ZU1hcCogZ092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsV2lkdGhNYXAgPSBudWxscHRyOwogCiAvLyBTaXplIG9mIGJvcmRlciBiZWx0IGZvciBhdXRv
c2Nyb2xsLiBXaGVuIG1vdXNlIHBvaW50ZXIgaW4gYm9yZGVyIGJlbHQsCiAvLyBhdXRvc2Nyb2xs
IGlzIHN0YXJ0ZWQuCkBAIC0xNDksOCArMTQ5LDggQEAgdm9pZCBSZW5kZXJCb3g6OndpbGxCZURl
c3Ryb3llZCgpCiAgICAgaWYgKGZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbFJlbmRl
cmVyKCkgPT0gdGhpcykKICAgICAgICAgZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zdG9wQXV0b3Nj
cm9sbFRpbWVyKHRydWUpOwogCi0gICAgY2xlYXJPdmVycmlkZUNvbnRlbnRTaXplKCk7Ci0gICAg
Y2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplKCk7CisgICAgY2xlYXJPdmVy
cmlkZW5Db250ZW50U2l6ZSgpOworICAgIGNsZWFyT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29u
dGVudFNpemUoKTsKIAogICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudElmTmVlZGVkKCp0aGlzKTsKIApAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgUmVuZGVyQm94
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlCiAgICAgLy8gY2hpbGRyZW4gb2YgYSBmbGV4L2dyaWQgYm94IGFyZSBvdXQtb2Yt
ZmxvdywgYW5kIHRodXMsIG5vdCBmbGV4L2dyaWQgaXRlbXMuIFRoaXMgbWVhbnMgdGhhdCB3ZSBu
ZWVkIHRvIGNsZWFyCiAgICAgLy8gYW55IG92ZXJyaWRlIGNvbnRlbnQgc2l6ZSBzZXQgYnkgb3Vy
IGNvbnRhaW5lciwgYmVjYXVzZSBpdCB3b3VsZCBsaWtlbHkgYmUgaW5jb3JyZWN0IGFmdGVyIHRo
ZSBzdHlsZSBjaGFuZ2UuCiAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHBhcmVu
dCgpICYmIHBhcmVudCgpLT5zdHlsZSgpLmlzRGlzcGxheUZsZXhpYmxlT3JHcmlkQm94KCkpCi0g
ICAgICAgIGNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOworICAgICAgICBjbGVhck92ZXJyaWRl
bkNvbnRlbnRTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVHcmlkUG9zaXRpb25B
ZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQpAQCAtMTA4MCwxNDUgKzEwODAsMTQ1IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgIHJldHVybiBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIAotYm9vbCBSZW5kZXJCb3g6Omhhc092ZXJyaWRlTG9n
aWNhbEhlaWdodCgpIGNvbnN0Citib29sIFJlbmRlckJveDo6aGFzT3ZlcnJpZGVuTG9naWNhbEhl
aWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdPdmVycmlkZUxvZ2ljYWxIZWlnaHRNYXAgJiYg
Z092ZXJyaWRlTG9naWNhbEhlaWdodE1hcC0+Y29udGFpbnModGhpcyk7CisgICAgcmV0dXJuIGdP
dmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFwICYmIGdPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFwLT5j
b250YWlucyh0aGlzKTsKIH0KIAotYm9vbCBSZW5kZXJCb3g6Omhhc092ZXJyaWRlTG9naWNhbFdp
ZHRoKCkgY29uc3QKK2Jvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZW5Mb2dpY2FsV2lkdGgoKSBj
b25zdAogewotICAgIHJldHVybiBnT3ZlcnJpZGVMb2dpY2FsV2lkdGhNYXAgJiYgZ092ZXJyaWRl
TG9naWNhbFdpZHRoTWFwLT5jb250YWlucyh0aGlzKTsKKyAgICByZXR1cm4gZ092ZXJyaWRlbkxv
Z2ljYWxXaWR0aE1hcCAmJiBnT3ZlcnJpZGVuTG9naWNhbFdpZHRoTWFwLT5jb250YWlucyh0aGlz
KTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRlTG9naWNhbEhlaWdodChMYXlvdXRV
bml0IGhlaWdodCkKK3ZvaWQgUmVuZGVyQm94OjpzZXRPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgaGVpZ2h0KQogewotICAgIGlmICghZ092ZXJyaWRlTG9naWNhbEhlaWdodE1hcCkK
LSAgICAgICAgZ092ZXJyaWRlTG9naWNhbEhlaWdodE1hcCA9IG5ldyBPdmVycmlkZVNpemVNYXAo
KTsKLSAgICBnT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0TWFwLT5zZXQodGhpcywgaGVpZ2h0KTsKKyAg
ICBpZiAoIWdPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFwKQorICAgICAgICBnT3ZlcnJpZGVuTG9n
aWNhbEhlaWdodE1hcCA9IG5ldyBPdmVycmlkZVNpemVNYXAoKTsKKyAgICBnT3ZlcnJpZGVuTG9n
aWNhbEhlaWdodE1hcC0+c2V0KHRoaXMsIGhlaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpz
ZXRPdmVycmlkZUxvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKQordm9pZCBSZW5kZXJCb3g6
OnNldE92ZXJyaWRlbkxvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKQogewotICAgIGlmICgh
Z092ZXJyaWRlTG9naWNhbFdpZHRoTWFwKQotICAgICAgICBnT3ZlcnJpZGVMb2dpY2FsV2lkdGhN
YXAgPSBuZXcgT3ZlcnJpZGVTaXplTWFwKCk7Ci0gICAgZ092ZXJyaWRlTG9naWNhbFdpZHRoTWFw
LT5zZXQodGhpcywgd2lkdGgpOworICAgIGlmICghZ092ZXJyaWRlbkxvZ2ljYWxXaWR0aE1hcCkK
KyAgICAgICAgZ092ZXJyaWRlbkxvZ2ljYWxXaWR0aE1hcCA9IG5ldyBPdmVycmlkZVNpemVNYXAo
KTsKKyAgICBnT3ZlcnJpZGVuTG9naWNhbFdpZHRoTWFwLT5zZXQodGhpcywgd2lkdGgpOwogfQog
Ci12b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKQordm9pZCBSZW5k
ZXJCb3g6OmNsZWFyT3ZlcnJpZGVuTG9naWNhbEhlaWdodCgpCiB7Ci0gICAgaWYgKGdPdmVycmlk
ZUxvZ2ljYWxIZWlnaHRNYXApCi0gICAgICAgIGdPdmVycmlkZUxvZ2ljYWxIZWlnaHRNYXAtPnJl
bW92ZSh0aGlzKTsKKyAgICBpZiAoZ092ZXJyaWRlbkxvZ2ljYWxIZWlnaHRNYXApCisgICAgICAg
IGdPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFwLT5yZW1vdmUodGhpcyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQm94OjpjbGVhck92ZXJyaWRlTG9naWNhbFdpZHRoKCkKK3ZvaWQgUmVuZGVyQm94OjpjbGVh
ck92ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpCiB7Ci0gICAgaWYgKGdPdmVycmlkZUxvZ2ljYWxXaWR0
aE1hcCkKLSAgICAgICAgZ092ZXJyaWRlTG9naWNhbFdpZHRoTWFwLT5yZW1vdmUodGhpcyk7Cisg
ICAgaWYgKGdPdmVycmlkZW5Mb2dpY2FsV2lkdGhNYXApCisgICAgICAgIGdPdmVycmlkZW5Mb2dp
Y2FsV2lkdGhNYXAtPnJlbW92ZSh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNsZWFyT3Zl
cnJpZGVDb250ZW50U2l6ZSgpCit2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkZW5Db250ZW50
U2l6ZSgpCiB7Ci0gICAgY2xlYXJPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICBjbGVhck92
ZXJyaWRlTG9naWNhbFdpZHRoKCk7CisgICAgY2xlYXJPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCk7
CisgICAgY2xlYXJPdmVycmlkZW5Mb2dpY2FsV2lkdGgoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6Om92ZXJyaWRlTG9naWNhbFdpZHRoKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94
OjpvdmVycmlkZW5Mb2dpY2FsV2lkdGgoKSBjb25zdAogewotICAgIEFTU0VSVChoYXNPdmVycmlk
ZUxvZ2ljYWxXaWR0aCgpKTsKLSAgICByZXR1cm4gZ092ZXJyaWRlTG9naWNhbFdpZHRoTWFwLT5n
ZXQodGhpcyk7CisgICAgQVNTRVJUKGhhc092ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpKTsKKyAgICBy
ZXR1cm4gZ092ZXJyaWRlbkxvZ2ljYWxXaWR0aE1hcC0+Z2V0KHRoaXMpOwogfQogCi1MYXlvdXRV
bml0IFJlbmRlckJveDo6b3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQg
UmVuZGVyQm94OjpvdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
aGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpOwotICAgIHJldHVybiBnT3ZlcnJpZGVMb2dpY2Fs
SGVpZ2h0TWFwLT5nZXQodGhpcyk7CisgICAgQVNTRVJUKGhhc092ZXJyaWRlbkxvZ2ljYWxIZWln
aHQoKSk7CisgICAgcmV0dXJuIGdPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0TWFwLT5nZXQodGhpcyk7
CiB9CiAKLU9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJveDo6b3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50V2lkdGgoKSBjb25zdAorT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQm94
OjpvdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBjb25zdAogewotICAgIEFT
U0VSVChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpKTsKKyAgICBBU1NF
UlQoaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkpOwogICAgIHJldHVy
biBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpCi0g
ICAgICAgID8gZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+
Z2V0KHRoaXMpCi0gICAgICAgIDogZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxIZWlnaHRNYXAtPmdldCh0aGlzKTsKKyAgICAgICAgPyBnT3ZlcnJpZGVuQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+Z2V0KHRoaXMpCisgICAgICAgIDogZ092ZXJyaWRl
bkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5nZXQodGhpcyk7CiB9CiAK
LU9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJveDo6b3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50SGVpZ2h0KCkgY29uc3QKK09wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJveDo6b3Zl
cnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKTsKKyAgICBBU1NFUlQo
aGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKTsKICAgICByZXR1cm4g
Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQotICAg
ICAgICA/IGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5n
ZXQodGhpcykKLSAgICAgICAgOiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bFdpZHRoTWFwLT5nZXQodGhpcyk7CisgICAgICAgID8gZ092ZXJyaWRlbkNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5nZXQodGhpcykKKyAgICAgICAgOiBnT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+Z2V0KHRoaXMpOwogfQogCi1i
b29sIFJlbmRlckJveDo6aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBj
b25zdAorYm9vbCBSZW5kZXJCb3g6Omhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRX
aWR0aCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgaWYgKCFjYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNiLT5z
dHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKLSAgICAgICAgPyBnT3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwICYmIGdPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAtPmNvbnRhaW5zKHRoaXMpCi0gICAgICAgIDogZ092
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAgJiYgZ092ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmNvbnRhaW5zKHRoaXMpOwor
ICAgICAgICA/IGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFw
ICYmIGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5jb250
YWlucyh0aGlzKQorICAgICAgICA6IGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodE1hcCAmJiBnT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHRNYXAtPmNvbnRhaW5zKHRoaXMpOwogfQogCi1ib29sIFJlbmRlckJveDo6aGFzT3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkgY29uc3QKK2Jvb2wgUmVuZGVyQm94Ojpo
YXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkgY29uc3QKIHsKICAgICBS
ZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoIWNiKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2ItPnN0eWxlKCkuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKQotICAgICAgICA/IGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsSGVpZ2h0TWFwICYmIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVp
Z2h0TWFwLT5jb250YWlucyh0aGlzKQotICAgICAgICA6IGdPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwICYmIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0TWFwLT5jb250YWlucyh0aGlzKTsKKyAgICAgICAgPyBnT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAgJiYgZ092ZXJyaWRlbkNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5jb250YWlucyh0aGlzKQorICAgICAg
ICA6IGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcCAmJiBn
T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmNvbnRhaW5z
KHRoaXMpOwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6Om92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0CitPcHRpb25hbDxMYXlvdXRV
bml0PiBSZW5kZXJCb3g6Om92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lk
dGgoKSBjb25zdAogewotICAgIEFTU0VSVChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgoKSk7Ci0gICAgcmV0dXJuIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGhNYXAtPmdldCh0aGlzKTsKKyAgICBBU1NFUlQoaGFzT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICByZXR1cm4gZ092ZXJy
aWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAtPmdldCh0aGlzKTsKIH0K
IAotT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQm94OjpvdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK09wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRl
ckJveDo6b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSBjb25z
dAogewotICAgIEFTU0VSVChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0KCkpOwotICAgIHJldHVybiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodE1hcC0+Z2V0KHRoaXMpOworICAgIEFTU0VSVChoYXNPdmVycmlkZW5Db250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKTsKKyAgICByZXR1cm4gZ092ZXJyaWRlbkNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5nZXQodGhpcyk7CiB9CiAKLWJv
b2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lk
dGgoKSBjb25zdAorYm9vbCBSZW5kZXJCb3g6Omhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBnT3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwICYmIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAtPmNvbnRhaW5zKHRoaXMpOworICAgIHJldHVybiBnT3Zl
cnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcCAmJiBnT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+Y29udGFpbnModGhpcyk7CiB9
CiAKLWJvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKK2Jvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZW5Db250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdPdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwICYmIGdPdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5jb250YWlucyh0aGlzKTsKKyAgICBy
ZXR1cm4gZ092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwICYm
IGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+Y29udGFp
bnModGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsV2lkdGgoT3B0aW9uYWw8TGF5b3V0VW5pdD4gbG9naWNhbFdpZHRoKQor
dm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
V2lkdGgoT3B0aW9uYWw8TGF5b3V0VW5pdD4gbG9naWNhbFdpZHRoKQogewotICAgIGlmICghZ092
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcCkKLSAgICAgICAgZ092
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcCA9IG5ldyBPdmVycmlk
ZU9wdGlvbmFsU2l6ZU1hcDsKLSAgICBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbFdpZHRoTWFwLT5zZXQodGhpcywgbG9naWNhbFdpZHRoKTsKKyAgICBpZiAoIWdPdmVycmlk
ZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwKQorICAgICAgICBnT3ZlcnJp
ZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcCA9IG5ldyBPdmVycmlkZU9w
dGlvbmFsU2l6ZU1hcDsKKyAgICBnT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxXaWR0aE1hcC0+c2V0KHRoaXMsIGxvZ2ljYWxXaWR0aCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94
OjpzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KE9wdGlvbmFs
PExheW91dFVuaXQ+IGxvZ2ljYWxIZWlnaHQpCit2b2lkIFJlbmRlckJveDo6c2V0T3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoT3B0aW9uYWw8TGF5b3V0VW5pdD4g
bG9naWNhbEhlaWdodCkKIHsKLSAgICBpZiAoIWdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0TWFwKQotICAgICAgICBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodE1hcCA9IG5ldyBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcDsKLSAgICBn
T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+c2V0KHRoaXMs
IGxvZ2ljYWxIZWlnaHQpOworICAgIGlmICghZ092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0TWFwKQorICAgICAgICBnT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29u
dGVudExvZ2ljYWxIZWlnaHRNYXAgPSBuZXcgT3ZlcnJpZGVPcHRpb25hbFNpemVNYXA7CisgICAg
Z092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5zZXQodGhp
cywgbG9naWNhbEhlaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpjbGVhck92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKQordm9pZCBSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKQogewotICAgIGlmIChnT3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwKQotICAgICAgICBnT3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5yZW1vdmUodGhpcyk7Ci0gICAgY2xlYXJP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKGdP
dmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwKQorICAgICAgICBn
T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+cmVtb3ZlKHRo
aXMpOworICAgIGNsZWFyT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWln
aHQoKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodCgpCit2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkZW5Db250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpCiB7Ci0gICAgaWYgKGdPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwKQotICAgICAgICBnT3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+cmVtb3ZlKHRoaXMpOworICAg
IGlmIChnT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXApCisg
ICAgICAgIGdPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+
cmVtb3ZlKHRoaXMpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6YWRqdXN0Qm9yZGVyQm94
TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKExheW91dFVuaXQgd2lkdGgpIGNvbnN0CkBAIC0xOTY1
LDkgKzE5NjUsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9B
dm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcgogCiBMYXlvdXRVbml0IFJlbmRl
ckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKSB7
Ci0gICAgICAgIGlmIChhdXRvIG92ZXJyaWRlTG9naWNhbFdpZHRoID0gb3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJp
ZGVMb2dpY2FsV2lkdGgudmFsdWUoKTsKKyAgICBpZiAoaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKSB7CisgICAgICAgIGlmIChhdXRvIG92ZXJyaWRlbkxv
Z2ljYWxXaWR0aCA9IG92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
KSkKKyAgICAgICAgICAgIHJldHVybiBvdmVycmlkZW5Mb2dpY2FsV2lkdGgudmFsdWUoKTsKICAg
ICB9CiAKICAgICBpZiAoUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCkpCkBAIC0x
OTc3LDkgKzE5NzcsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CiAKIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2FsSGVpZ2h0
VHlwZSBoZWlnaHRUeXBlKSBjb25zdAogewotICAgIGlmIChoYXNPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGVM
b2dpY2FsSGVpZ2h0ID0gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdo
dCgpKQotICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlTG9naWNhbEhlaWdodC52YWx1ZSgpOwor
ICAgIGlmIChoYXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgp
KSB7CisgICAgICAgIGlmIChhdXRvIG92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQgPSBvdmVycmlkZW5D
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKQorICAgICAgICAgICAgcmV0dXJu
IG92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQudmFsdWUoKTsKICAgICB9CiAKICAgICBpZiAoUmVuZGVy
QmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCkpCkBAIC0yMDE4LDE0ICsyMDE4LDE0IEBAIExh
eW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJbkZy
YWdtZW50KFJlbmRlckZyYWdtZW50CiAKIExheW91dFVuaXQgUmVuZGVyQm94OjpwZXJwZW5kaWN1
bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBp
ZiAoYXV0byBvdmVycmlkZUxvZ2ljYWxIZWlnaHQgPSBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVMb2dpY2Fs
SGVpZ2h0LnZhbHVlKCk7CisgICAgaWYgKGhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGVuTG9naWNhbEhl
aWdodCA9IG92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpCisg
ICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVuTG9naWNhbEhlaWdodC52YWx1ZSgpOwogICAgIH0K
IAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChjYi0+
aGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBjYi0+b3ZlcnJpZGVD
b250ZW50TG9naWNhbEhlaWdodCgpOworICAgIGlmIChjYi0+aGFzT3ZlcnJpZGVuTG9naWNhbEhl
aWdodCgpKQorICAgICAgICByZXR1cm4gY2ItPm92ZXJyaWRlbkNvbnRlbnRMb2dpY2FsSGVpZ2h0
KCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjYi0+
c3R5bGUoKTsKICAgICBMZW5ndGggbG9naWNhbEhlaWdodExlbmd0aCA9IGNvbnRhaW5pbmdCbG9j
a1N0eWxlLmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTI0MzEsOCArMjQzMSw4IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRW
YWx1ZXMmIGNvbXB1CiAgICAgLy8gd2lkdGguICBVc2UgdGhlIHdpZHRoIGZyb20gdGhlIHN0eWxl
IGNvbnRleHQuCiAgICAgLy8gRklYTUU6IEFjY291bnQgZm9yIGJsb2NrLWZsb3cgaW4gZmxleGli
bGUgYm94ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ2NDE4Ci0gICAgaWYgKGhhc092ZXJyaWRlTG9naWNhbFdpZHRoKCkgJiYgKGlzUnVieVJ1bigp
IHx8IHN0eWxlKCkuYm9yZGVyRml0KCkgPT0gQm9yZGVyRml0OjpMaW5lcyB8fCAocGFyZW50KCkt
PmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkpKSkgewotICAgICAgICBjb21wdXRl
ZFZhbHVlcy5tX2V4dGVudCA9IG92ZXJyaWRlTG9naWNhbFdpZHRoKCk7CisgICAgaWYgKGhhc092
ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpICYmIChpc1J1YnlSdW4oKSB8fCBzdHlsZSgpLmJvcmRlckZp
dCgpID09IEJvcmRlckZpdDo6TGluZXMgfHwgKHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94SW5jbHVk
aW5nRGVwcmVjYXRlZCgpKSkpIHsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBv
dmVycmlkZW5Mb2dpY2FsV2lkdGgoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjc3
NCwxMCArMjc3NCwxMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRGbGlwQmVmb3JlQWZ0ZXJNYXJnaW5z
KGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluaW5nQmxvY2tTdHlsZQogCiB2b2lkIFJlbmRlckJv
eDo6Y2FjaGVJbnRyaW5zaWNDb250ZW50TG9naWNhbEhlaWdodEZvckZsZXhJdGVtKExheW91dFVu
aXQgaGVpZ2h0KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpdCBzaG91bGQgYmUgZW5vdWdoIHdp
dGggY2hlY2tpbmcgaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgYXMgdGhpcyBsb2dpYyBjb3Vs
ZCBiZSBzaGFyZWQKKyAgICAvLyBGSVhNRTogaXQgc2hvdWxkIGJlIGVub3VnaCB3aXRoIGNoZWNr
aW5nIGhhc092ZXJyaWRlbkxvZ2ljYWxIZWlnaHQoKSBhcyB0aGlzIGxvZ2ljIGNvdWxkIGJlIHNo
YXJlZAogICAgIC8vIGJ5IGFueSBsYXlvdXQgc3lzdGVtIHVzaW5nIG92ZXJyaWRlcyBsaWtlIGdy
aWQgb3IgZmxleC4gSG93ZXZlciB0aGlzIGNhdXNlcyBhIG5ldmVyIGVuZGluZyBzZXF1ZW5jZSBv
ZiBjYWxscwogICAgIC8vIGJldHdlZW4gbGF5b3V0QmxvY2soKSA8LT4gcmVsYXlvdXRUb0F2b2lk
V2lkb3dzKCkuCi0gICAgaWYgKGlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAh
cGFyZW50KCkgfHwgIXBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgfHwgaGFzT3ZlcnJpZGVMb2dp
Y2FsSGVpZ2h0KCkpCisgICAgaWYgKGlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8
fCAhcGFyZW50KCkgfHwgIXBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgfHwgaGFzT3ZlcnJpZGVu
TG9naWNhbEhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAgICAgZG93bmNhc3Q8UmVuZGVyRmxl
eGlibGVCb3g+KHBhcmVudCgpKS0+c2V0Q2FjaGVkQ2hpbGRJbnRyaW5zaWNDb250ZW50TG9naWNh
bEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKIH0KQEAgLTI4MzgsOCArMjgzOCw4IEBAIFJlbmRlckJv
eDo6TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoTGF5b3V0VW5pCiAgICAgICAgIC8vIGdyYWIgb3VyIGNhY2hlZCBmbGV4aWJsZSBoZWln
aHQuCiAgICAgICAgIC8vIEZJWE1FOiBBY2NvdW50IGZvciBibG9jay1mbG93IGluIGZsZXhpYmxl
IGJveGVzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDY0MTgKLSAgICAgICAgaWYgKGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpICYmIChwYXJl
bnQoKS0+aXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKSB8fCBwYXJlbnQoKS0+aXNS
ZW5kZXJHcmlkKCkpKSB7Ci0gICAgICAgICAgICBoID0gTGVuZ3RoKG92ZXJyaWRlTG9naWNhbEhl
aWdodCgpLCBGaXhlZCk7CisgICAgICAgIGlmIChoYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkg
JiYgKHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpIHx8IHBhcmVu
dCgpLT5pc1JlbmRlckdyaWQoKSkpIHsKKyAgICAgICAgICAgIGggPSBMZW5ndGgob3ZlcnJpZGVu
TG9naWNhbEhlaWdodCgpLCBGaXhlZCk7CiAgICAgICAgIH0gZWxzZSBpZiAodHJlYXRBc1JlcGxh
Y2VkKQogICAgICAgICAgICAgaCA9IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0
KCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpLCBGaXhlZCk7CiAgICAgICAgIGVs
c2UgewpAQCAtMzAyMywxNyArMzAyMywxNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaQogCiAg
ICAgaWYgKGlzSG9yaXpvbnRhbCAhPSBjYi0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAg
ICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrQ2hpbGQtPmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKLSAgICBlbHNlIGlmIChoYXNPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgIGF2YWlsYWJsZUhl
aWdodCA9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKKyAg
ICBlbHNlIGlmIChoYXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdo
dCgpKQorICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBvdmVycmlkZW5Db250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodCgpOwogICAgIGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4o
KmNiKSkgewogICAgICAgICBpZiAoIXNraXBwZWRBdXRvSGVpZ2h0Q29udGFpbmluZ0Jsb2NrKSB7
CiAgICAgICAgICAgICAvLyBUYWJsZSBjZWxscyB2aW9sYXRlIHdoYXQgdGhlIENTUyBzcGVjIHNh
eXMgdG8gZG8gd2l0aCBoZWlnaHRzLiBCYXNpY2FsbHkgd2UKICAgICAgICAgICAgIC8vIGRvbid0
IGNhcmUgaWYgdGhlIGNlbGwgc3BlY2lmaWVkIGEgaGVpZ2h0IG9yIG5vdC4gV2UganVzdCBhbHdh
eXMgbWFrZSBvdXJzZWx2ZXMKICAgICAgICAgICAgIC8vIGJlIGEgcGVyY2VudGFnZSBvZiB0aGUg
Y2VsbCdzIGN1cnJlbnQgY29udGVudCBoZWlnaHQuCi0gICAgICAgICAgICBpZiAoIWNiLT5oYXNP
dmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgIGlmICghY2ItPmhhc092ZXJyaWRl
bkxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVDZWxsU2hvdWxk
SGF2ZVplcm9Jbml0aWFsU2l6ZSgqY2IsICp0aGlzLCBzY3JvbGxzT3ZlcmZsb3dZKCkpID8gT3B0
aW9uYWw8TGF5b3V0VW5pdD4oMCkgOiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGF2YWls
YWJsZUhlaWdodCA9IGNiLT5vdmVycmlkZUxvZ2ljYWxIZWlnaHQoKSAtIGNiLT5jb21wdXRlZENT
U1BhZGRpbmdCZWZvcmUoKSAtIGNiLT5jb21wdXRlZENTU1BhZGRpbmdBZnRlcigpIC0gY2ItPmJv
cmRlckJlZm9yZSgpIC0gY2ItPmJvcmRlckFmdGVyKCk7CisgICAgICAgICAgICBhdmFpbGFibGVI
ZWlnaHQgPSBjYi0+b3ZlcnJpZGVuTG9naWNhbEhlaWdodCgpIC0gY2ItPmNvbXB1dGVkQ1NTUGFk
ZGluZ0JlZm9yZSgpIC0gY2ItPmNvbXB1dGVkQ1NTUGFkZGluZ0FmdGVyKCkgLSBjYi0+Ym9yZGVy
QmVmb3JlKCkgLSBjYi0+Ym9yZGVyQWZ0ZXIoKTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAg
ICAgICBhdmFpbGFibGVIZWlnaHQgPSBjYi0+YXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNl
bnRhZ2VDb21wdXRhdGlvbigpOwpAQCAtMzA0MywxMyArMzA0MywxMyBAQCBPcHRpb25hbDxMYXlv
dXRVbml0PiBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBM
ZW5ndGgmIGhlaQogCiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSB2YWx1ZUZvckxlbmd0aChoZWln
aHQsIGF2YWlsYWJsZUhlaWdodC52YWx1ZSgpIC0gcm9vdE1hcmdpbkJvcmRlclBhZGRpbmdIZWln
aHQgKyAoaXNUYWJsZSgpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8gY2ItPnBhZGRpbmdC
ZWZvcmUoKSArIGNiLT5wYWRkaW5nQWZ0ZXIoKSA6IDBfbHUpKTsKICAgICAKLSAgICAvLyB8b3Zl
cnJpZGVMb2dpY2FsSGVpZ2h0fCBpcyB0aGUgbWF4aW11bSBoZWlnaHQgbWFkZSBhdmFpbGFibGUg
YnkgdGhlCisgICAgLy8gfG92ZXJyaWRlbkxvZ2ljYWxIZWlnaHR8IGlzIHRoZSBtYXhpbXVtIGhl
aWdodCBtYWRlIGF2YWlsYWJsZSBieSB0aGUKICAgICAvLyBjZWxsIHRvIGl0cyBwZXJjZW50IGhl
aWdodCBjaGlsZHJlbiB3aGVuIHdlIGRlY2lkZSB0aGV5IGNhbiBkZXRlcm1pbmUgdGhlCiAgICAg
Ly8gaGVpZ2h0IG9mIHRoZSBjZWxsLiBJZiB0aGUgcGVyY2VudCBoZWlnaHQgY2hpbGQgaXMgYm94
LXNpemluZzpjb250ZW50LWJveAogICAgIC8vIHRoZW4gd2UgbXVzdCBzdWJ0cmFjdCB0aGUgYm9y
ZGVyIGFuZCBwYWRkaW5nIGZyb20gdGhlIGNlbGwncwotICAgIC8vIHxhdmFpbGFibGVIZWlnaHR8
IChnaXZlbiBieSB8b3ZlcnJpZGVMb2dpY2FsSGVpZ2h0fCkgdG8gYXJyaXZlCisgICAgLy8gfGF2
YWlsYWJsZUhlaWdodHwgKGdpdmVuIGJ5IHxvdmVycmlkZW5Mb2dpY2FsSGVpZ2h0fCkgdG8gYXJy
aXZlCiAgICAgLy8gYXQgdGhlIGNoaWxkJ3MgY29tcHV0ZWQgaGVpZ2h0LgotICAgIGJvb2wgc3Vi
dHJhY3RCb3JkZXJBbmRQYWRkaW5nID0gaXNUYWJsZSgpIHx8IChpczxSZW5kZXJUYWJsZUNlbGw+
KCpjYikgJiYgIXNraXBwZWRBdXRvSGVpZ2h0Q29udGFpbmluZ0Jsb2NrICYmIGNiLT5oYXNPdmVy
cmlkZUxvZ2ljYWxIZWlnaHQoKSk7CisgICAgYm9vbCBzdWJ0cmFjdEJvcmRlckFuZFBhZGRpbmcg
PSBpc1RhYmxlKCkgfHwgKGlzPFJlbmRlclRhYmxlQ2VsbD4oKmNiKSAmJiAhc2tpcHBlZEF1dG9I
ZWlnaHRDb250YWluaW5nQmxvY2sgJiYgY2ItPmhhc092ZXJyaWRlbkxvZ2ljYWxIZWlnaHQoKSk7
CiAgICAgaWYgKHN1YnRyYWN0Qm9yZGVyQW5kUGFkZGluZykgewogICAgICAgICByZXN1bHQgLT0g
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4
KDBfbHUsIHJlc3VsdCk7CkBAIC0zMTg4LDggKzMxODgsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKFNpemVUeXBlIGhlaWdodFR5cGUs
IExlbgogICAgICAgICAgICAgICAgIGJsb2NrLT5hZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudCgq
Y29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5pc0ZsZXhJdGVtKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hlZEhlaWdodCA9IGRv
d25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihibG9jay0+cGFyZW50KCkpLT5jaGlsZExvZ2ljYWxI
ZWlnaHRGb3JQZXJjZW50YWdlUmVzb2x1dGlvbigqYmxvY2spOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGJsb2NrLT5pc0dyaWRJdGVtKCkgJiYgYmxvY2stPmhhc092ZXJyaWRlTG9naWNhbEhl
aWdodCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJldGNoZWRIZWlnaHQgPSBibG9jay0+b3Zl
cnJpZGVMb2dpY2FsSGVpZ2h0KCkgLSBibG9jay0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChibG9jay0+aXNHcmlkSXRlbSgpICYmIGJs
b2NrLT5oYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIHN0
cmV0Y2hlZEhlaWdodCA9IGJsb2NrLT5vdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkgLSBibG9jay0+
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY2FsY3VsYXRpb24gaXMgbm90IHBhdGNoZWQgZm9yIGJsb2Nr
LWZsb3cgeWV0LgpAQCAtMzI1NCw4ICszMjU0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2
YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kK
ICAgICAvLyBhcnRpZmljaWFsbHkuICBXZSdyZSBnb2luZyB0byByZWx5IG9uIHRoaXMgY2VsbCBn
ZXR0aW5nIGV4cGFuZGVkIHRvIHNvbWUgbmV3CiAgICAgLy8gaGVpZ2h0LCBhbmQgdGhlbiB3aGVu
IHdlIGxheSBvdXQgYWdhaW4gd2UnbGwgdXNlIHRoZSBjYWxjdWxhdGlvbiBiZWxvdy4KICAgICBp
ZiAoaXNUYWJsZUNlbGwoKSAmJiAoaC5pc0F1dG8oKSB8fCBoLmlzUGVyY2VudE9yQ2FsY3VsYXRl
ZCgpKSkgewotICAgICAgICBpZiAoaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gb3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgLSBjb21wdXRlZENTU1BhZGRpbmdC
ZWZvcmUoKSAtIGNvbXB1dGVkQ1NTUGFkZGluZ0FmdGVyKCkgLSBib3JkZXJCZWZvcmUoKSAtIGJv
cmRlckFmdGVyKCk7CisgICAgICAgIGlmIChoYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkpCisg
ICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVuTG9naWNhbEhlaWdodCgpIC0gY29tcHV0ZWRDU1NQ
YWRkaW5nQmVmb3JlKCkgLSBjb21wdXRlZENTU1BhZGRpbmdBZnRlcigpIC0gYm9yZGVyQmVmb3Jl
KCkgLSBib3JkZXJBZnRlcigpOwogICAgICAgICByZXR1cm4gbG9naWNhbEhlaWdodCgpIC0gYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKICAgICB9CiAKQEAgLTMzMjQsOSArMzMyNCw5
IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQ
b3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vCiAgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxh
cldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdCbG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ICE9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5n
QmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsK
IAotICAgIGlmIChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
KSkgewotICAgICAgICBpZiAoYXV0byBvdmVycmlkZUxvZ2ljYWxXaWR0aCA9IG92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKQotICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRlTG9naWNhbFdpZHRoLnZhbHVlKCk7CisgICAgaWYgKGhhc092ZXJyaWRlbkNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSkgeworICAgICAgICBpZiAoYXV0byBvdmVycmlk
ZW5Mb2dpY2FsV2lkdGggPSBvdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdp
ZHRoKCkpCisgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVuTG9naWNhbFdpZHRoLnZhbHVlKCk7
CiAgICAgfQogCiAgICAgaWYgKGlzPFJlbmRlckJveD4oY29udGFpbmluZ0Jsb2NrKSkgewpAQCAt
MzM4OSw5ICszMzg5LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE0KICAgICBpZiAoY2hlY2tG
b3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYgY29udGFpbmluZ0Jsb2NrLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0
dXJuIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Js
b2NrLCBudWxscHRyLCBmYWxzZSk7CiAKLSAgICBpZiAoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG92ZXJyaWRlTG9n
aWNhbEhlaWdodCA9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQo
KSkKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUxvZ2ljYWxIZWlnaHQudmFsdWUoKTsKKyAg
ICBpZiAoaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkg
eworICAgICAgICBpZiAoYXV0byBvdmVycmlkZW5Mb2dpY2FsSGVpZ2h0ID0gb3ZlcnJpZGVuQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgIHJldHVybiBv
dmVycmlkZW5Mb2dpY2FsSGVpZ2h0LnZhbHVlKCk7CiAgICAgfQogCiAgICAgaWYgKGNvbnRhaW5p
bmdCbG9jay5pc0JveCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXgg
OWQyMDlkMWJmODcyMDVhNGViYzczZjRmM2QyMDVjODExMzc0MjVlYi4uMDg4MWViYjllNmIyNjkz
YTQ4NzQyMWY0NzRlMDY4YmRkMzZmMjczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaApAQCAtMzA3LDMxICszMDcsMzEgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBtYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIExheW91dFVuaXQg
b3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJyaWRlTG9n
aWNhbEhlaWdodCgpIGNvbnN0OwotICAgIGJvb2wgaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkg
Y29uc3Q7Ci0gICAgYm9vbCBoYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0T3Zl
cnJpZGVMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBjbGVhck92ZXJyaWRlQ29u
dGVudFNpemUoKTsKLSAgICB2b2lkIGNsZWFyT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAg
dm9pZCBjbGVhck92ZXJyaWRlTG9naWNhbFdpZHRoKCk7Ci0KLSAgICBMYXlvdXRVbml0IG92ZXJy
aWRlQ29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlTG9naWNhbFdp
ZHRoKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkgLSBzY3JvbGxiYXJMb2dpY2Fs
V2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgb3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlTG9naWNhbEhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxIZWlnaHQoKSAtIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsgfQotCi0gICAgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc092ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgoKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgYm9vbCBo
YXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdDsKLSAg
ICBib29sIGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSBj
b25zdDsKLSAgICB2b2lkIHNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxX
aWR0aChPcHRpb25hbDxMYXlvdXRVbml0Pik7Ci0gICAgdm9pZCBzZXRPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KE9wdGlvbmFsPExheW91dFVuaXQ+KTsKLSAgICB2
b2lkIGNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgpOwotICAgIHZvaWQg
Y2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAg
TGF5b3V0VW5pdCBvdmVycmlkZW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICBib29sIGhhc092ZXJyaWRlbkxv
Z2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICBib29sIGhhc092ZXJyaWRlbkxvZ2ljYWxXaWR0aCgp
IGNvbnN0OworICAgIHZvaWQgc2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodChMYXlvdXRVbml0KTsK
KyAgICB2b2lkIHNldE92ZXJyaWRlbkxvZ2ljYWxXaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lk
IGNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUoKTsKKyAgICB2b2lkIGNsZWFyT3ZlcnJpZGVuTG9n
aWNhbEhlaWdodCgpOworICAgIHZvaWQgY2xlYXJPdmVycmlkZW5Mb2dpY2FsV2lkdGgoKTsKKwor
ICAgIExheW91dFVuaXQgb3ZlcnJpZGVuQ29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG92ZXJyaWRlbkxvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0
aCgpIC0gc2Nyb2xsYmFyTG9naWNhbFdpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IG92ZXJyaWRl
bkNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gb3ZlcnJpZGVuTG9naWNhbEhl
aWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIHNjcm9sbGJhckxvZ2lj
YWxIZWlnaHQoKTsgfQorCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVuQ29udGFp
bmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gb3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRo
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tD
b250ZW50SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
b3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAg
IE9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVycmlkZW5Db250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbFdpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVycmlkZW5Db250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZvaWQgc2V0T3ZlcnJp
ZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChPcHRpb25hbDxMYXlvdXRVbml0
Pik7CisgICAgdm9pZCBzZXRPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhl
aWdodChPcHRpb25hbDxMYXlvdXRVbml0Pik7CisgICAgdm9pZCBjbGVhck92ZXJyaWRlbkNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRTaXplKCk7CisgICAgdm9pZCBjbGVhck92ZXJyaWRlbkNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAKICAgICBMYXlvdXRTaXplIG9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zm
c2V0RGVwZW5kc09uUG9pbnQgPSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4
IDIyODA4ZGE5ZjI5Zjk1MzIzMzM3Y2EzNzhhYjNiN2FmOGIzMDIxMmUuLmRmZjU4ZDBhYjg0NTk5
ODNmNDQ0MzU3ZDRhYzMxNmFkNjYxNzRmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjgwLDcgKzI4MCw3IEBAIGJvb2wg
UmVuZGVyQm94TW9kZWxPYmplY3Q6Omhhc0F1dG9IZWlnaHRPckNvbnRhaW5pbmdCbG9ja1dpdGhB
dXRvSGVpZ2h0KCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKHRoaXNCb3ggJiYgdGhpc0JveC0+aXNHcmlkSXRlbSgpICYmIHRoaXNCb3gtPmhh
c092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKKyAgICBpZiAo
dGhpc0JveCAmJiB0aGlzQm94LT5pc0dyaWRJdGVtKCkgJiYgdGhpc0JveC0+aGFzT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIGlmIChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzQXV0bygpICYmICFpc091
dE9mRmxvd1Bvc2l0aW9uZWRXaXRoSW1wbGljaXRIZWlnaHQoKnRoaXMpKQpAQCAtMzQ4LDggKzM0
OCw4IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnJlbGF0aXZlUG9zaXRpb25P
ZmZzZXQoKSBjb25zdAogICAgIC8vIEhvd2V2ZXIgZm9yIGdyaWQgaXRlbXMgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgdGhlIGdyaWQgYXJlYSwgc28gb2Zmc2V0cyBzaG91bGQgYmUgcmVzb2x2ZWQg
YWdhaW5zdCB0aGF0OgogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8j
Z3JpZC1pdGVtLXNpemluZwogICAgIGlmICghc3R5bGUoKS5sZWZ0KCkuaXNBdXRvKCkgfHwgIXN0
eWxlKCkucmlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoID0gaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKQotICAgICAgICAg
ICAgPyBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpLnZhbHVlT3IoTGF5b3V0
VW5pdCgpKSA6IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVXaWR0aCgpOworICAgICAgICBM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoID0gaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29u
dGVudFdpZHRoKCkKKyAgICAgICAgICAgID8gb3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFdpZHRoKCkudmFsdWVPcihMYXlvdXRVbml0KCkpIDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWls
YWJsZVdpZHRoKCk7CiAgICAgICAgIGlmICghc3R5bGUoKS5sZWZ0KCkuaXNBdXRvKCkpIHsKICAg
ICAgICAgICAgIGlmICghc3R5bGUoKS5yaWdodCgpLmlzQXV0bygpICYmICFjb250YWluaW5nQmxv
Y2soKS0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
b2Zmc2V0LnNldFdpZHRoKC12YWx1ZUZvckxlbmd0aChzdHlsZSgpLnJpZ2h0KCksICFzdHlsZSgp
LnJpZ2h0KCkuaXNGaXhlZCgpID8gYXZhaWxhYmxlV2lkdGggOiAwX2x1KSk7CkBAIC0zNzEsMjEg
KzM3MSwyMSBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpyZWxhdGl2ZVBvc2l0
aW9uT2Zmc2V0KCkgY29uc3QKICAgICAgICAgJiYgKCFzdHlsZSgpLnRvcCgpLmlzUGVyY2VudE9y
Q2FsY3VsYXRlZCgpCiAgICAgICAgICAgICB8fCAhY29udGFpbmluZ0Jsb2NrKCktPmhhc0F1dG9I
ZWlnaHRPckNvbnRhaW5pbmdCbG9ja1dpdGhBdXRvSGVpZ2h0KCkKICAgICAgICAgICAgIHx8IGNv
bnRhaW5pbmdCbG9jaygpLT5zdHJldGNoZXNUb1ZpZXdwb3J0KCkKLSAgICAgICAgICAgIHx8IGhh
c092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKSkgeworICAgICAgICAgICAg
fHwgaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKSkgewogICAgICAg
ICAvLyBGSVhNRTogVGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBhdmFpbGFibGUgaGVpZ2h0IGlzIHJl
cGVhdGVkIGxhdGVyIGZvciAiYm90dG9tIi4KICAgICAgICAgLy8gV2UgY291bGQgcmVmYWN0b3Ig
dGhpcyBhbmQgbW92ZSBpdCB0byBzb21lIGNvbW1vbiBjb2RlIGZvciBib3RoIGlmcywgaG93ZXZl
ciBtb3ZpbmcgaXQgb3V0c2lkZSBvZiB0aGUgaWZzCiAgICAgICAgIC8vIGlzIG5vdCBwb3NzaWJs
ZSBhcyBpdCdkIGNhdXNlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLgogICAgICAgICBvZmZzZXQu
ZXhwYW5kKDBfbHUsIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkudG9wKCksICFzdHlsZSgpLnRvcCgp
LmlzRml4ZWQoKQotICAgICAgICAgICAgPyAoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50SGVpZ2h0KCkgPyBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKS52YWx1
ZU9yKDBfbHUpIDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKQorICAgICAg
ICAgICAgPyAoaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpID8gb3Zl
cnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpLnZhbHVlT3IoMF9sdSkgOiBjb250
YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlSGVpZ2h0KCkpCiAgICAgICAgICAgICA6IExheW91dFVu
aXQoKSkpOwogICAgIH0gZWxzZSBpZiAoIXN0eWxlKCkuYm90dG9tKCkuaXNBdXRvKCkKICAgICAg
ICAgJiYgKCFzdHlsZSgpLmJvdHRvbSgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpCiAgICAgICAg
ICAgICB8fCAhY29udGFpbmluZ0Jsb2NrKCktPmhhc0F1dG9IZWlnaHRPckNvbnRhaW5pbmdCbG9j
a1dpdGhBdXRvSGVpZ2h0KCkKICAgICAgICAgICAgIHx8IGNvbnRhaW5pbmdCbG9jaygpLT5zdHJl
dGNoZXNUb1ZpZXdwb3J0KCkKLSAgICAgICAgICAgIHx8IGhhc092ZXJyaWRlQ29udGFpbmluZ0Js
b2NrQ29udGVudEhlaWdodCgpKSkgeworICAgICAgICAgICAgfHwgaGFzT3ZlcnJpZGVuQ29udGFp
bmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKSkgewogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgY29t
bWVudCBhYm92ZSBmb3IgInRvcCIsIGl0IGFwcGxpZXMgaGVyZSB0b28uCiAgICAgICAgIG9mZnNl
dC5leHBhbmQoMF9sdSwgLXZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm90dG9tKCksICFzdHlsZSgp
LmJvdHRvbSgpLmlzRml4ZWQoKQotICAgICAgICAgICAgPyAoaGFzT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50SGVpZ2h0KCkgPyBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWln
aHQoKS52YWx1ZU9yKDBfbHUpIDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgp
KQorICAgICAgICAgICAgPyAoaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdo
dCgpID8gb3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpLnZhbHVlT3IoMF9s
dSkgOiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlSGVpZ2h0KCkpCiAgICAgICAgICAgICA6
IExheW91dFVuaXQoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCBhYzU5M2NhZjEzOWYxMWY4N2JjODU5NTViZDVk
YWFhZDUwZGExYjY2Li42MGQ0NGU3MDlkNjZhMjMyNmQyMzA5MTcyMzk5MjUxMGEyNTIyYTU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaApA
QCAtMjMzLDEwICsyMzMsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNSdW5uaW5nQWNjZWxl
cmF0ZWRBbmltYXRpb25zKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPExheW91dFVu
aXQ+IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIC0xX2x1OyB9Ci0gICAgdmlydHVhbCBPcHRpb25hbDxMYXlv
dXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gLTFfbHU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFz
T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gb3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIC0xX2x1OyB9CisgICAgdmlydHVhbCBPcHRpb25h
bDxMYXlvdXRVbml0PiBvdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkgY29u
c3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIC0xX2x1OyB9CisgICAgdmlydHVhbCBi
b29sIGhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhc092ZXJyaWRlbkNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBl
RmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94LmNwcAppbmRleCBmODBiZjVlOGFlY2UwNDRhNWRlYzJhOTUxMWFj
Yzg5MmVhMGFiNmM0Li5iYmVhY2U2NDVkZWVhZjFmZjUzYThlYTA2NThiNjUwMWU3ZmM4ZjE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmNwcApAQCAtMTUzLDE1ICsxNTMsMTUgQEAgc3RhdGljIGJvb2wgY2hpbGRE
b2VzTm90QWZmZWN0V2lkdGhPckZsZXhpbmcoUmVuZGVyT2JqZWN0KiBjaGlsZCkKIAogc3RhdGlj
IExheW91dFVuaXQgd2lkdGhGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKQogewotICAgIGlmIChj
aGlsZC0+aGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5v
dmVycmlkZUxvZ2ljYWxXaWR0aCgpOworICAgIGlmIChjaGlsZC0+aGFzT3ZlcnJpZGVuTG9naWNh
bFdpZHRoKCkpCisgICAgICAgIHJldHVybiBjaGlsZC0+b3ZlcnJpZGVuTG9naWNhbFdpZHRoKCk7
CiAgICAgcmV0dXJuIGNoaWxkLT5sb2dpY2FsV2lkdGgoKTsKIH0KIAogc3RhdGljIExheW91dFVu
aXQgaGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkKIHsKLSAgICBpZiAoY2hpbGQtPmhh
c092ZXJyaWRlTG9naWNhbEhlaWdodCgpKQotICAgICAgICByZXR1cm4gY2hpbGQtPm92ZXJyaWRl
TG9naWNhbEhlaWdodCgpOworICAgIGlmIChjaGlsZC0+aGFzT3ZlcnJpZGVuTG9naWNhbEhlaWdo
dCgpKQorICAgICAgICByZXR1cm4gY2hpbGQtPm92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQoKTsKICAg
ICByZXR1cm4gY2hpbGQtPmxvZ2ljYWxIZWlnaHQoKTsKIH0KIApAQCAtMzY3LDcgKzM2Nyw3IEBA
IHN0YXRpYyB2b2lkIGdhdGhlckZsZXhDaGlsZHJlbkluZm8oRmxleEJveEl0ZXJhdG9yJiBpdGVy
YXRvciwgYm9vbCByZWxheW91dENoaWxkCiAgICAgICAgIGlmICghY2hpbGREb2VzTm90QWZmZWN0
V2lkdGhPckZsZXhpbmcoY2hpbGQpICYmIGNoaWxkLT5zdHlsZSgpLmJveEZsZXgoKSA+IDAuMGYp
IHsKICAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBoYXZlIHRvIGxheSBvdXQgZmxleGlibGUgb2Jq
ZWN0cyBhZ2Fpbiwgc2luY2UgdGhlIGZsZXggZGlzdHJpYnV0aW9uCiAgICAgICAgICAgICAvLyBt
YXkgaGF2ZSBjaGFuZ2VkLCBhbmQgd2UgbmVlZCB0byByZWFsbG9jYXRlIHNwYWNlLgotICAgICAg
ICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOworICAgICAgICAgICAgY2hp
bGQtPmNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUoKTsKICAgICAgICAgICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbikKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOwogICAgICAgICAgICAgaGF2ZUZsZXggPSB0cnVlOwpAQCAtNTk1LDcgKzU5
NSw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFs
Qm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
bGxvd2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBzcGFjZUFkZCA9IExheW91dFVuaXQoc3BhY2VBdmFpbGFi
bGVUaGlzUGFzcyAqIChjaGlsZC0+c3R5bGUoKS5ib3hGbGV4KCkgLyB0b3RhbEZsZXgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BhY2VBZGQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9naWNhbFdpZHRoKHdpZHRoRm9y
Q2hpbGQoY2hpbGQpICsgc3BhY2VBZGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZC0+c2V0T3ZlcnJpZGVuTG9naWNhbFdpZHRoKHdpZHRoRm9yQ2hpbGQoY2hpbGQpICsg
c3BhY2VBZGQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4aW5nQ2hpbGRy
ZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxheW91dENoaWxk
cmVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC02MTIsNyArNjEy
LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWxC
b3goYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBzcGFjZUFkZCA9IGdyb3VwUmVtYWluaW5nU3BhY2UgPiAwID8gMSA6IC0xOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3Qo
KTsgY2hpbGQgJiYgZ3JvdXBSZW1haW5pbmdTcGFjZTsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZENoaWxkRmxleChjaGls
ZCwgZXhwYW5kaW5nLCBpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGls
ZC0+c2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgod2lkdGhGb3JDaGlsZChjaGlsZCkgKyBzcGFjZUFk
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZW5M
b2dpY2FsV2lkdGgod2lkdGhGb3JDaGlsZChjaGlsZCkgKyBzcGFjZUFkZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsZXhpbmdDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdTcGFjZSAtPSBzcGFjZUFkZDsKQEAgLTg1
Miw3ICs4NTIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0VmVy
dGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFsbG93ZWRDaGlsZEZsZXgoY2hpbGQsIGV4cGFuZGluZywgaSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHNwYWNlQWRkIHsgc3BhY2VBdmFpbGFibGVUaGlz
UGFzcyAqIChjaGlsZC0+c3R5bGUoKS5ib3hGbGV4KCkgLyB0b3RhbEZsZXgpIH07CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlQWRkKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHQoaGVpZ2h0Rm9yQ2hp
bGQoY2hpbGQpICsgc3BhY2VBZGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZC0+c2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodChoZWlnaHRGb3JDaGlsZChjaGlsZCkgKyBz
cGFjZUFkZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhpbmdDaGlsZHJl
biA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRy
ZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTg2OSw3ICs4Njks
NyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3go
Ym9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBzcGFjZUFkZCA9IGdyb3VwUmVtYWluaW5nU3BhY2UgPiAwID8gMSA6IC0xOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsg
Y2hpbGQgJiYgZ3JvdXBSZW1haW5pbmdTcGFjZTsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZENoaWxkRmxleChjaGlsZCwg
ZXhwYW5kaW5nLCBpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+
c2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KGhlaWdodEZvckNoaWxkKGNoaWxkKSArIHNwYWNlQWRk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlbkxv
Z2ljYWxIZWlnaHQoaGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgc3BhY2VBZGQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGV4aW5nQ2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgLT0gc3BhY2VBZGQ7CkBAIC05
NDcsNyArOTQ3LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TGlu
ZUNsYW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgaWYgKGNoaWxk
RG9lc05vdEFmZmVjdFdpZHRoT3JGbGV4aW5nKGNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRlQ29udGVudFNpemUoKTsKKyAgICAgICAg
Y2hpbGQtPmNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUoKTsKICAgICAgICAgaWYgKHJlbGF5b3V0
Q2hpbGRyZW4gfHwgKGNoaWxkLT5pc1JlcGxhY2VkKCkgJiYgKGNoaWxkLT5zdHlsZSgpLndpZHRo
KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgfHwgY2hpbGQtPnN0eWxlKCkuaGVpZ2h0KCkuaXNQ
ZXJjZW50T3JDYWxjdWxhdGVkKCkpKQogICAgICAgICAgICAgfHwgKGNoaWxkLT5zdHlsZSgpLmhl
aWdodCgpLmlzQXV0bygpICYmIGlzPFJlbmRlckJsb2NrRmxvdz4oKmNoaWxkKSkpIHsKICAgICAg
ICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CkBAIC05ODQs
NyArOTg0LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TGluZUNs
YW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0g
ICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHQobmV3SGVpZ2h0KTsKKyAgICAg
ICAgY2hpbGQtPnNldE92ZXJyaWRlbkxvZ2ljYWxIZWlnaHQobmV3SGVpZ2h0KTsKICAgICAgICAg
Y2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgZG9u
J3Qgc3VwcG9ydCBSVEwuCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveDo6Y2xlYXJMaW5lQ2xhbXAoKQogICAgICAgICBpZiAoY2hpbGREb2VzTm90
QWZmZWN0V2lkdGhPckZsZXhpbmcoY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOworICAgICAgICBjaGlsZC0+
Y2xlYXJPdmVycmlkZW5Db250ZW50U2l6ZSgpOwogICAgICAgICBpZiAoKGNoaWxkLT5pc1JlcGxh
Y2VkKCkgJiYgKGNoaWxkLT5zdHlsZSgpLndpZHRoKCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkg
fHwgY2hpbGQtPnN0eWxlKCkuaGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkpKQogICAg
ICAgICAgICAgfHwgKGNoaWxkLT5zdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmIGlzPFJlbmRl
ckJsb2NrRmxvdz4oKmNoaWxkKSkpIHsKICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRz
TGF5b3V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcAppbmRleCA2ZTY4ODk3MTg3ZmEwMGIxZjdlOWI0NzgyY2NhYjZhOTUwMzlhNTBkLi5mMzEw
ODQ4OGEyNzY4YWRjOTdlOTFkYWE4MjMzZTNiNjE2MGFkOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTQ4MCwxNCArNDgwLDE0IEBA
IExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNoaWxkSW50cmluc2ljTG9naWNhbFdpZHRo
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCiAgICAgICAgIHJldHVybiBjaGlsZC5sb2dpY2FsV2lk
dGgoKTsKIAogICAgIC8vIFRlbXBvcmFyaWx5IGNsZWFyIHBvdGVudGlhbCBvdmVycmlkZXMgdG8g
Y29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBvdmVy
cmlkZSBzaXplLgotICAgIGJvb2wgY2hpbGRIYXNPdmVycmlkZVdpZHRoID0gY2hpbGQuaGFzT3Zl
cnJpZGVMb2dpY2FsV2lkdGgoKTsKLSAgICBhdXRvIG92ZXJyaWRlV2lkdGggPSBjaGlsZEhhc092
ZXJyaWRlV2lkdGggPyBjaGlsZC5vdmVycmlkZUxvZ2ljYWxXaWR0aCgpIDogLTFfbHU7CisgICAg
Ym9vbCBjaGlsZEhhc092ZXJyaWRlV2lkdGggPSBjaGlsZC5oYXNPdmVycmlkZW5Mb2dpY2FsV2lk
dGgoKTsKKyAgICBhdXRvIG92ZXJyaWRlV2lkdGggPSBjaGlsZEhhc092ZXJyaWRlV2lkdGggPyBj
aGlsZC5vdmVycmlkZW5Mb2dpY2FsV2lkdGgoKSA6IC0xX2x1OwogICAgIGlmIChjaGlsZEhhc092
ZXJyaWRlV2lkdGgpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oJmNoaWxkKS0+Y2xl
YXJPdmVycmlkZUxvZ2ljYWxXaWR0aCgpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+
KCZjaGlsZCktPmNsZWFyT3ZlcnJpZGVuTG9naWNhbFdpZHRoKCk7CiAgICAgTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWVzIHZhbHVlczsKICAgICBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5G
cmFnbWVudCh2YWx1ZXMpOwogICAgIGlmIChjaGlsZEhhc092ZXJyaWRlV2lkdGgpCi0gICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oJmNoaWxkKS0+c2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgo
b3ZlcnJpZGVXaWR0aCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oJmNoaWxkKS0+
c2V0T3ZlcnJpZGVuTG9naWNhbFdpZHRoKG92ZXJyaWRlV2lkdGgpOwogICAgIHJldHVybiB2YWx1
ZXMubV9leHRlbnQ7CiB9CiAKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpjbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkK
ICAgICAKIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVJbm5lckZsZXhCYXNl
U2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgbWFpbkF4aXNCb3JkZXJB
bmRQYWRkaW5nLCBib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7Ci0gICAgY2hpbGQuY2xlYXJPdmVy
cmlkZUNvbnRlbnRTaXplKCk7CisgICAgY2hpbGQuY2xlYXJPdmVycmlkZW5Db250ZW50U2l6ZSgp
OwogICAgIAogICAgIExlbmd0aCBmbGV4QmFzaXMgPSBmbGV4QmFzaXNGb3JDaGlsZChjaGlsZCk7
CiAgICAgaWYgKG1haW5BeGlzTGVuZ3RoSXNEZWZpbml0ZShjaGlsZCwgZmxleEJhc2lzKSkKQEAg
LTExNjksOCArMTE2OSw4IEBAIE9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckZsZXhpYmxlQm94
Ojpjcm9zc1NpemVGb3JQZXJjZW50YWdlUmVzb2x1dGlvbihjb25zdCBSCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBIZXJlIHdlIGltcGxlbWVudCBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWZsZXhib3gvI2FsZ28tc3RyZXRjaAotICAgIGlmIChjaGlsZC5oYXNP
dmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLm92ZXJyaWRlQ29u
dGVudExvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoY2hpbGQuaGFzT3ZlcnJpZGVuTG9naWNhbEhl
aWdodCgpKQorICAgICAgICByZXR1cm4gY2hpbGQub3ZlcnJpZGVuQ29udGVudExvZ2ljYWxIZWln
aHQoKTsKIAogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIG9wdGltaXph
dGlvbiBmcm9tCiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mbGV4Ym94LyNk
ZWZpbml0ZS1zaXplcyBjYXNlIDEuIFdoaWxlIHRoYXQKQEAgLTExOTAsNyArMTE5MCw3IEBAIE9w
dGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckZsZXhpYmxlQm94OjptYWluU2l6ZUZvclBlcmNlbnRh
Z2VSZXNvbHV0aW9uKGNvbnN0IFJlCiAgICAgaWYgKCFtYWluQXhpc0xlbmd0aElzRGVmaW5pdGUo
Y2hpbGQsIExlbmd0aCgwLCBQZXJjZW50KSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICByZXR1cm4gY2hpbGQuaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgPyBPcHRpb25h
bDxMYXlvdXRVbml0PihjaGlsZC5vdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIDogV1RG
OjpudWxsb3B0OworICAgIHJldHVybiBjaGlsZC5oYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkg
PyBPcHRpb25hbDxMYXlvdXRVbml0PihjaGlsZC5vdmVycmlkZW5Db250ZW50TG9naWNhbEhlaWdo
dCgpKSA6IFdURjo6bnVsbG9wdDsKIH0KIAogT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxl
eGlibGVCb3g6OmNoaWxkTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VSZXNvbHV0aW9uKGNvbnN0
IFJlbmRlckJveCYgY2hpbGQpCkBAIC0xMjMxLDE1ICsxMjMxLDE1IEBAIEZsZXhJdGVtIFJlbmRl
ckZsZXhpYmxlQm94Ojpjb25zdHJ1Y3RGbGV4SXRlbShSZW5kZXJCb3gmIGNoaWxkLCBib29sIHJl
bGF5b3V0Q2hpCiAgICAgICAgIC8vIGJ5IGRlZmluaXRpb24gd2UgaGF2ZSBhbiBpbmRlZmluaXRl
IGZsZXggYmFzaXMgaGVyZSBhbmQgdGh1cyBwZXJjZW50YWdlcyBzaG91bGQgbm90IHJlc29sdmUu
CiAgICAgICAgIGlmIChjaGlsZC5uZWVkc0xheW91dCgpIHx8ICFtX2ludHJpbnNpY1NpemVBbG9u
Z01haW5BeGlzLmNvbnRhaW5zKCZjaGlsZCkpIHsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID09IGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bEhlaWdodChXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRl
bkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KFdURjo6bnVsbG9wdCk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbFdpZHRoKFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICBjaGls
ZC5jbGVhck92ZXJyaWRlQ29udGVudFNpemUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRP
dmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKFdURjo6bnVsbG9wdCk7
CisgICAgICAgICAgICBjaGlsZC5jbGVhck92ZXJyaWRlbkNvbnRlbnRTaXplKCk7CiAgICAgICAg
ICAgICBjaGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgICAg
ICBjaGlsZC5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgY2FjaGVDaGlsZE1haW5TaXpl
KGNoaWxkKTsKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAg
ICAgIGNoaWxkLmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgpOworICAg
ICAgICAgICAgY2hpbGQuY2xlYXJPdmVycmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgp
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTQyNCw5ICsxNDI0LDkgQEAgc3RhdGljIExh
eW91dFVuaXQgYWxpZ25tZW50T2Zmc2V0KExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBJ
dGVtUG9zaXRpb24gcG8KIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnNldE92ZXJyaWRlTWFpbkF4
aXNDb250ZW50U2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRQ
cmVmZXJyZWRTaXplKQogewogICAgIGlmIChoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkpCi0gICAg
ICAgIGNoaWxkLnNldE92ZXJyaWRlTG9naWNhbEhlaWdodChjaGlsZFByZWZlcnJlZFNpemUgKyBj
aGlsZC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgY2hpbGQuc2V0
T3ZlcnJpZGVuTG9naWNhbEhlaWdodChjaGlsZFByZWZlcnJlZFNpemUgKyBjaGlsZC5ib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKTsKICAgICBlbHNlCi0gICAgICAgIGNoaWxkLnNldE92
ZXJyaWRlTG9naWNhbFdpZHRoKGNoaWxkUHJlZmVycmVkU2l6ZSArIGNoaWxkLmJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlbkxvZ2ljYWxX
aWR0aChjaGlsZFByZWZlcnJlZFNpemUgKyBjaGlsZC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdp
ZHRoKCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpzdGF0aWNNYWluQXhp
c1Bvc2l0aW9uRm9yUG9zaXRpb25lZENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCkBAIC0x
ODgzLDggKzE4ODMsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGln
bm1lbnRUb0NoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaQogICAgICAgICAgICAgLy8g
U28sIHJlZG8gaXQgaGVyZS4KICAgICAgICAgICAgIGNoaWxkTmVlZHNSZWxheW91dCA9IHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkTmVlZHNSZWxheW91dCB8fCAhY2hpbGQuaGFz
T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUxv
Z2ljYWxIZWlnaHQoZGVzaXJlZExvZ2ljYWxIZWlnaHQpOworICAgICAgICBpZiAoY2hpbGROZWVk
c1JlbGF5b3V0IHx8ICFjaGlsZC5oYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkpCisgICAgICAg
ICAgICBjaGlsZC5zZXRPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KGRlc2lyZWRMb2dpY2FsSGVpZ2h0
KTsKICAgICAgICAgaWYgKGNoaWxkTmVlZHNSZWxheW91dCkgewogICAgICAgICAgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gcmVzZXRDaGlsZExvZ2ljYWxIZWlnaHQobV9zaG91bGRSZXNldENoaWxkTG9n
aWNhbEhlaWdodEJlZm9yZUxheW91dCwgdHJ1ZSk7CiAgICAgICAgICAgICAvLyBXZSBjYWNoZSB0
aGUgY2hpbGQncyBpbnRyaW5zaWMgY29udGVudCBsb2dpY2FsIGhlaWdodCB0byBhdm9pZCBpdCBi
ZWluZwpAQCAtMTkwNSw3ICsxOTA1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlT
dHJldGNoQWxpZ25tZW50VG9DaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbmkKICAgICAg
ICAgY2hpbGRXaWR0aCA9IGNoaWxkLmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1p
bk1heChjaGlsZFdpZHRoLCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCksICp0aGlzLCBudWxscHRy
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLmxvZ2ljYWxXaWR0
aCgpKSB7Ci0gICAgICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUxvZ2ljYWxXaWR0aChjaGlsZFdp
ZHRoKTsKKyAgICAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlbkxvZ2ljYWxXaWR0aChjaGlsZFdp
ZHRoKTsKICAgICAgICAgICAgIGNoaWxkLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKICAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAppbmRleCBkODcyZGVi
MGY5NzljMmU5YTM4NGQzMTE0ZDJkNjYzNDUxNmVjMjZlLi5kYWIwYWZmYTEyZWUwODM0MzQwNWQ2
YmY5ZTg1Nzk2YzUyNThjZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZ1bGxTY3JlZW4uY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVu
Ojp1bndyYXBSZW5kZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQogICAgICAg
ICAgICAgLy8gbWF5IGhhdmUgc2V0IG9uZSBvbiB0aGUgY2hpbGQsIGFuZCB3ZSBkb24ndCB3YW50
IHRvIGxlYXZlIHRoYXQKICAgICAgICAgICAgIC8vIGx5aW5nIGFyb3VuZCBvbiB0aGUgY2hpbGQu
CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQotICAgICAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRlQ29udGVudFNpemUoKTsK
KyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuY2xlYXJPdmVycmlk
ZW5Db250ZW50U2l6ZSgpOwogICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJ1aWxkZXIu
ZGV0YWNoKCpjaGlsZC0+cGFyZW50KCksICpjaGlsZCk7CiAgICAgICAgICAgICBidWlsZGVyLmF0
dGFjaCgqcGFyZW50KCksIFdURk1vdmUoY2hpbGRUb01vdmUpLCB0aGlzKTsKICAgICAgICAgICAg
IHBhcmVudCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCBiYzBjNGUxYjM5OGFlZjRhNzBjMDM5
MzhjMjM1M2M3N2JmODg0NWFkLi5jOTQyMGIwOThiNGRlZjkyODlkMWU4MDA1NWE5OTllMzBjNjAw
ZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC0xOTMsNyAr
MTkzLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQpCiAgICAgICAgIExheW91dFNpemUgcHJldmlvdXNTaXplID0gc2l6ZSgp
OwogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBSZW5kZXJCbG9jazo6aGFzRGVmaW5p
dGVMb2dpY2FsSGVpZ2h0KCkgYnV0IGl0IGRvZXMgbm90IHdvcmsgZm9yIHBvc2l0aW9uZWQgc3R1
ZmYuCiAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBjYWNoaW5nIHRoZSBoYXNEZWZpbml0ZUxv
Z2ljYWxIZWlnaHQgdmFsdWUgdGhyb3VnaG91dCB0aGUgbGF5b3V0LgotICAgICAgICBib29sIGhh
c0RlZmluaXRlTG9naWNhbEhlaWdodCA9IGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpIHx8IGNv
bXB1dGVDb250ZW50TG9naWNhbEhlaWdodChNYWluT3JQcmVmZXJyZWRTaXplLCBzdHlsZSgpLmxv
Z2ljYWxIZWlnaHQoKSwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYm9vbCBoYXNEZWZpbml0ZUxv
Z2ljYWxIZWlnaHQgPSBoYXNPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0KCkgfHwgY29tcHV0ZUNvbnRl
bnRMb2dpY2FsSGVpZ2h0KE1haW5PclByZWZlcnJlZFNpemUsIHN0eWxlKCkubG9naWNhbEhlaWdo
dCgpLCBXVEY6Om51bGxvcHQpOwogCiAgICAgICAgIG1faGFzQW55T3J0aG9nb25hbEl0ZW0gPSBm
YWxzZTsKICAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2
b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCkKICAgICAgICAgICAgIC8vIEdyaWQncyBsYXlvdXQgbG9naWMgY29udHJvbHMgdGhlIGdy
aWQgaXRlbSdzIG92ZXJyaWRlIGhlaWdodCwgaGVuY2Ugd2UgbmVlZCB0bwogICAgICAgICAgICAg
Ly8gY2xlYXIgYW55IG92ZXJyaWRlIGhlaWdodCBzZXQgcHJldmlvdXNseSwgc28gaXQgZG9lc24n
dCBpbnRlcmZlcmUgaW4gY3VycmVudCBsYXlvdXQKICAgICAgICAgICAgIC8vIGV4ZWN1dGlvbi4g
R3JpZCBuZXZlciB1c2VzIHRoZSBvdmVycmlkZSB3aWR0aCwgdGhhdCdzIHdoeSB3ZSBkb24ndCBu
ZWVkIHRvIGNsZWFyICBpdC4KLSAgICAgICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRlTG9naWNh
bEhlaWdodCgpOworICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVuTG9naWNhbEhlaWdo
dCgpOwogCiAgICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCB0byByZXBlYXQgdGhlIHRyYWNrIHNp
emluZyBpbiBjYXNlIG9mIGFueSBncmlkIGl0ZW0gd2FzIG9ydGhvZ29uYWwuCiAgICAgICAgICAg
ICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGls
ZCkpCkBAIC02MTAsMTAgKzYxMCwxMCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdy
aWQoR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtJiBhbGdvcml0aG0sIE9wdGlvbmFsPAogCiAgICAg
ICAgIC8vIEdyaWQgaXRlbXMgc2hvdWxkIHVzZSB0aGUgZ3JpZCBhcmVhIHNpemVzIGluc3RlYWQg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGdyaWQgY29udGFpbmVyKQogICAgICAgICAvLyBzaXpl
cywgd2UgaW5pdGlhbGl6ZSB0aGUgb3ZlcnJpZGVzIGhlcmUgaWYgbmVlZGVkIHRvIGVuc3VyZSBp
dC4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbFdpZHRoKCkpCi0gICAgICAgICAgICBjaGlsZC0+c2V0T3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbFdpZHRoKExheW91dFVuaXQoKSk7Ci0gICAgICAgIGlmICghY2hp
bGQtPmhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKLSAg
ICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0KExheW91dFVuaXQoLTEpKTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzT3ZlcnJpZGVu
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgY2hpbGQt
PnNldE92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoTGF5b3V0VW5p
dCgpKTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29u
dGVudExvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZW5Db250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChMYXlvdXRVbml0KC0xKSk7CiAKICAgICAg
ICAgR3JpZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAgICAgICAgIGlm
ICghYXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpKQpAQCAtOTAyLDggKzkwMiw4IEBAIHN0YXRpYyBj
b25zdCBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhJiBjb250ZW50QWxpZ25tZW50Tm9ybWFsQmVo
YXZpb3JHcmlkKCkKIHN0YXRpYyBib29sIG92ZXJyaWRlU2l6ZUNoYW5nZWQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0U2l6
ZSBzaXplKQogewogICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgcmV0
dXJuICFjaGlsZC5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
KSB8fCBjaGlsZC5vdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSAh
PSBzaXplLndpZHRoKCk7Ci0gICAgcmV0dXJuICFjaGlsZC5oYXNPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgfHwgY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpICE9IHNpemUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVy
biAhY2hpbGQuaGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgp
IHx8IGNoaWxkLm92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSAh
PSBzaXplLndpZHRoKCk7CisgICAgcmV0dXJuICFjaGlsZC5oYXNPdmVycmlkZW5Db250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpIHx8IGNoaWxkLm92ZXJyaWRlbkNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgIT0gc2l6ZS5oZWlnaHQoKTsKIH0KIAogc3RhdGlj
IGJvb2wgaGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKGNvbnN0IFJlbmRlckdyaWQmIGdyaWQsIGNv
bnN0IFJlbmRlckJveCYgY2hpbGQpCkBAIC05MjAsOCArOTIwLDggQEAgdm9pZCBSZW5kZXJHcmlk
Ojp1cGRhdGVHcmlkQXJlYUxvZ2ljYWxTaXplKFJlbmRlckJveCYgY2hpbGQsIExheW91dFNpemUg
Z3JpZEFyZWEKICAgICBpZiAoZ3JpZEFyZWFXaWR0aENoYW5nZWQgfHwgKGdyaWRBcmVhSGVpZ2h0
Q2hhbmdlZCAmJiBoYXNSZWxhdGl2ZUJsb2NrQXhpc1NpemUoKnRoaXMsIGNoaWxkKSkpCiAgICAg
ICAgIGNoaWxkLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICBjaGlsZC5zZXRP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoZ3JpZEFyZWFMb2dpY2Fs
U2l6ZS53aWR0aCgpKTsKLSAgICBjaGlsZC5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0KGdyaWRBcmVhTG9naWNhbFNpemUuaGVpZ2h0KCkpOworICAgIGNoaWxk
LnNldE92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoZ3JpZEFyZWFM
b2dpY2FsU2l6ZS53aWR0aCgpKTsKKyAgICBjaGlsZC5zZXRPdmVycmlkZW5Db250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodChncmlkQXJlYUxvZ2ljYWxTaXplLmhlaWdodCgpKTsKIH0K
IAogdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRlbXMoKQpAQCAtOTg2LDggKzk4Niw4IEBA
IHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIGNoaWxk
LCBib29sIHJlbGF5b3V0Q2hpbGRyZW4sCiAgICAgTGF5b3V0VW5pdCBjb2x1bW5CcmVhZHRoID0g
Z3JpZEFyZWFCcmVhZHRoRm9yT3V0T2ZGbG93Q2hpbGQoY2hpbGQsIEZvckNvbHVtbnMpOwogICAg
IExheW91dFVuaXQgcm93QnJlYWR0aCA9IGdyaWRBcmVhQnJlYWR0aEZvck91dE9mRmxvd0NoaWxk
KGNoaWxkLCBGb3JSb3dzKTsKIAotICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxXaWR0aChjb2x1bW5CcmVhZHRoKTsKLSAgICBjaGlsZC5zZXRPdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KHJvd0JyZWFkdGgpOworICAgIGNo
aWxkLnNldE92ZXJyaWRlbkNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoY29sdW1u
QnJlYWR0aCk7CisgICAgY2hpbGQuc2V0T3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHQocm93QnJlYWR0aCk7CiAKICAgICAvLyBNYXJrIGZvciBsYXlvdXQgYXMgd2Un
cmUgcmVzZXR0aW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgYW5kIHdlIHJlbGF5IGluIGdlbmVyaWMg
bGF5b3V0IGxvZ2ljCiAgICAgLy8gZm9yIHBvc2l0aW9uZWQgaXRlbXMgaW4gb3JkZXIgdG8gZ2V0
IHRoZSBvZmZzZXRzIHByb3Blcmx5IHJlc29sdmVkLgpAQCAtMTEyNSwxOSArMTEyNSwxOSBAQCBT
dHlsZVNlbGZBbGlnbm1lbnREYXRhIFJlbmRlckdyaWQ6Omp1c3RpZnlTZWxmRm9yQ2hpbGQoY29u
c3QgUmVuZGVyQm94JiBjaGlsZCwgYwogLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5
IFJlbmRlckZsZXhpYmxlQm94LCBzbyBpdCBzaG91bGQgYmUgbW92ZWQgdG8gUmVuZGVyQm94Lgog
dm9pZCBSZW5kZXJHcmlkOjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkSWZOZWVkZWQoUmVu
ZGVyQm94JiBjaGlsZCkKIHsKLSAgICBBU1NFUlQoY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpKTsKKyAgICBBU1NFUlQoY2hpbGQub3ZlcnJpZGVuQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSk7CiAKICAgICAvLyBXZSBjbGVhciBo
ZWlnaHQgb3ZlcnJpZGUgdmFsdWVzIGJlY2F1c2Ugd2Ugd2lsbCBkZWNpZGUgbm93IHdoZXRoZXIg
aXQncyBhbGxvd2VkIG9yCiAgICAgLy8gbm90LCBldmFsdWF0aW5nIHRoZSBjb25kaXRpb25zIHdo
aWNoIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgb2xkIHZhbHVlcyB3ZXJlIHNldC4KLSAg
ICBjaGlsZC5jbGVhck92ZXJyaWRlTG9naWNhbEhlaWdodCgpOworICAgIGNoaWxkLmNsZWFyT3Zl
cnJpZGVuTG9naWNhbEhlaWdodCgpOwogCiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNo
aWxkQmxvY2tEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rp
b25Gb3JDaGlsZCgqdGhpcywgY2hpbGQsIEZvclJvd3MpOwogICAgIGJvb2wgYmxvY2tGbG93SXND
b2x1bW5BeGlzID0gY2hpbGRCbG9ja0RpcmVjdGlvbiA9PSBGb3JSb3dzOwogICAgIGJvb2wgYWxs
b3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplID0gYmxvY2tGbG93SXNDb2x1bW5BeGlzID8gYWxs
b3dlZFRvU3RyZXRjaENoaWxkQWxvbmdDb2x1bW5BeGlzKGNoaWxkKSA6IGFsbG93ZWRUb1N0cmV0
Y2hDaGlsZEFsb25nUm93QXhpcyhjaGlsZCk7CiAgICAgaWYgKGFsbG93ZWRUb1N0cmV0Y2hDaGls
ZEJsb2NrU2l6ZSkgewotICAgICAgICBMYXlvdXRVbml0IHN0cmV0Y2hlZExvZ2ljYWxIZWlnaHQg
PSBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkQmVmb3JlU3RyZXRjaGluZyhHcmlkTGF5
b3V0RnVuY3Rpb25zOjpvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQo
Y2hpbGQsIGNoaWxkQmxvY2tEaXJlY3Rpb24pLnZhbHVlKCksIGNoaWxkKTsKKyAgICAgICAgTGF5
b3V0VW5pdCBzdHJldGNoZWRMb2dpY2FsSGVpZ2h0ID0gYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VG
b3JDaGlsZEJlZm9yZVN0cmV0Y2hpbmcoR3JpZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGVuQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRCbG9ja0RpcmVjdGlv
bikudmFsdWUoKSwgY2hpbGQpOwogICAgICAgICBMYXlvdXRVbml0IGRlc2lyZWRMb2dpY2FsSGVp
Z2h0ID0gY2hpbGQuY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KHN0cmV0Y2hlZExvZ2lj
YWxIZWlnaHQsIC0xX2x1KTsKLSAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0
KGRlc2lyZWRMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVuTG9naWNh
bEhlaWdodChkZXNpcmVkTG9naWNhbEhlaWdodCk7CiAgICAgICAgIGlmIChkZXNpcmVkTG9naWNh
bEhlaWdodCAhPSBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBDYW4gYXZvaWQgbGF5aW5nIG91dCBoZXJlIGluIHNvbWUgY2FzZXMuIFNlZSBodHRwczovL3dl
YmtpdC5vcmcvYi84NzkwNS4KICAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWlnaHQoMF9s
dSk7CkBAIC0xMTc5LDcgKzExNzksNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnVwZGF0ZUF1dG9NYXJn
aW5zSW5Sb3dBeGlzSWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAgICBpZiAoIW1hcmdpbkVu
ZC5pc0F1dG8oKSkKICAgICAgICAgbWFyZ2luTG9naWNhbFdpZHRoICs9IGNoaWxkLm1hcmdpbkVu
ZCgpOwogCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSA9IGNoaWxkLm92
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpLnZhbHVlKCkgLSBjaGls
ZC5sb2dpY2FsV2lkdGgoKSAtIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IGF2
YWlsYWJsZUFsaWdubWVudFNwYWNlID0gY2hpbGQub3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2NrQ29u
dGVudExvZ2ljYWxXaWR0aCgpLnZhbHVlKCkgLSBjaGlsZC5sb2dpY2FsV2lkdGgoKSAtIG1hcmdp
bkxvZ2ljYWxXaWR0aDsKICAgICBpZiAoYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgPD0gMCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xMjEwLDcgKzEyMTAsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnVw
ZGF0ZUF1dG9NYXJnaW5zSW5Db2x1bW5BeGlzSWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAg
ICBpZiAoIW1hcmdpbkFmdGVyLmlzQXV0bygpKQogICAgICAgICBtYXJnaW5Mb2dpY2FsSGVpZ2h0
ICs9IGNoaWxkLm1hcmdpbkFmdGVyKCk7CiAKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdu
bWVudFNwYWNlID0gY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhl
aWdodCgpLnZhbHVlKCkgLSBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgLSBtYXJnaW5Mb2dpY2FsSGVp
Z2h0OworICAgIExheW91dFVuaXQgYXZhaWxhYmxlQWxpZ25tZW50U3BhY2UgPSBjaGlsZC5vdmVy
cmlkZW5Db250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpLnZhbHVlKCkgLSBjaGls
ZC5sb2dpY2FsSGVpZ2h0KCkgLSBtYXJnaW5Mb2dpY2FsSGVpZ2h0OwogICAgIGlmIChhdmFpbGFi
bGVBbGlnbm1lbnRTcGFjZSA8PSAwKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1OTEsOCArMTU5
MSw4IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6bG9naWNhbE9mZnNldEZvck91dE9mRmxvd0No
aWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyCiB2b2lkIFJlbmRlckdyaWQ6OmdyaWRBcmVh
UG9zaXRpb25Gb3JPdXRPZkZsb3dDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0JiBzdGFydCwgTGF5b3V0VW5p
dCYgZW5kKSBjb25zdAogewogICAgIEFTU0VSVChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSk7Ci0gICAgQVNTRVJUKEdyaWRMYXlvdXRGdW5jdGlvbnM6Omhhc092ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSk7Ci0gICAgTGF5b3V0
VW5pdCB0cmFja0JyZWFkdGggPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpvdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikudmFsdWUoKTsKKyAg
ICBBU1NFUlQoR3JpZExheW91dEZ1bmN0aW9uczo6aGFzT3ZlcnJpZGVuQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSk7CisgICAgTGF5b3V0VW5pdCB0
cmFja0JyZWFkdGggPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpvdmVycmlkZW5Db250YWluaW5nQmxv
Y2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pLnZhbHVlKCk7CiAgICAgYm9v
bCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKICAgICBhdXRvJiBvdXRPZkZs
b3dJdGVtTGluZSA9IGlzUm93QXhpcyA/IG1fb3V0T2ZGbG93SXRlbUNvbHVtbiA6IG1fb3V0T2ZG
bG93SXRlbVJvdzsKICAgICBzdGFydCA9IGlzUm93QXhpcyA/IGJvcmRlckxvZ2ljYWxMZWZ0KCkg
OiBib3JkZXJCZWZvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSdWJ5QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJh
c2UuY3BwCmluZGV4IDVhOWMyOWVmZjdjYWE5N2E2ODFhZjg3MGU3MTdiMTczZTY5MTljODAuLjk4
ZGE0NjNlZTE4ODc3M2YwOWI4MjAzYmZhMDIyYjdiN2VkM2JlZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcApAQCAtNjcsMTMgKzY3LDEzIEBAIE9wdGlv
bmFsPFRleHRBbGlnbk1vZGU+IFJlbmRlclJ1YnlCYXNlOjpvdmVycmlkZVRleHRBbGlnbm1lbnRG
b3JMaW5lKGJvb2wgLyogZW5kCiAKIHZvaWQgUmVuZGVyUnVieUJhc2U6OmFkanVzdElubGluZURp
cmVjdGlvbkxpbmVCb3VuZHMoaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIGZsb2F0JiBs
b2dpY2FsTGVmdCwgZmxvYXQmIGxvZ2ljYWxXaWR0aCkgY29uc3QKIHsKLSAgICBpZiAocnVieVJ1
bigpLT5oYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpICYmIGZpcnN0Um9vdEJveCgpICYmICFmaXJz
dFJvb3RCb3goKS0+bmV4dFJvb3RCb3goKSkgeworICAgIGlmIChydWJ5UnVuKCktPmhhc092ZXJy
aWRlbkxvZ2ljYWxXaWR0aCgpICYmIGZpcnN0Um9vdEJveCgpICYmICFmaXJzdFJvb3RCb3goKS0+
bmV4dFJvb3RCb3goKSkgewogICAgICAgICBsb2dpY2FsTGVmdCArPSBtX2luaXRpYWxPZmZzZXQ7
CiAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSAyICogbV9pbml0aWFsT2Zmc2V0OwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBydWJ5UnVuKCkgJiYgcnVieVJ1bigpLT5oYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpID8gcnVi
eVJ1bigpLT5vdmVycmlkZUxvZ2ljYWxXaWR0aCgpIDogdGhpcy0+bWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBydWJ5
UnVuKCkgJiYgcnVieVJ1bigpLT5oYXNPdmVycmlkZW5Mb2dpY2FsV2lkdGgoKSA/IHJ1YnlSdW4o
KS0+b3ZlcnJpZGVuTG9naWNhbFdpZHRoKCkgOiB0aGlzLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKTsKICAgICBpZiAobWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID49IGxvZ2ljYWxXaWR0aCkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAppbmRleCBiZTA1NzE3YmZhYjYwOWFjZjAxNmE3YzBkNGMzZjJmNzM4NzlmMTVmLi5kZjk1NjVh
NTAyYzQ3NmNhZjU3N2UwMTAwYTE1MGJmZWQ0ZGZlYWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTI4Miw4ICsyODIsOCBAQCB2b2lkIFJlbmRlclRhYmxl
Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogCiAgICAgLy8gT3VyIHBhcmVudCBtaWdodCBoYXZlIHNl
dCBhbiBvdmVycmlkZSBjb250ZW50IGxvZ2ljYWwgd2lkdGggb24gdXMsIHNvIHdlIG11c3QgcmVz
cGVjdCBpdC4gVGhpcwogICAgIC8vIGlzIGhvdyBmbGV4Ym94IGNvbnRhaW5lcnMgZmxleCBvciBz
dHJldGNoIHVzLgotICAgIGlmIChoYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpKQotICAgICAgICBz
ZXRMb2dpY2FsV2lkdGgoc3RkOjptYXgobG9naWNhbFdpZHRoKCksIG92ZXJyaWRlTG9naWNhbFdp
ZHRoKCkpKTsKKyAgICBpZiAoaGFzT3ZlcnJpZGVuTG9naWNhbFdpZHRoKCkpCisgICAgICAgIHNl
dExvZ2ljYWxXaWR0aChzdGQ6Om1heChsb2dpY2FsV2lkdGgoKSwgb3ZlcnJpZGVuTG9naWNhbFdp
ZHRoKCkpKTsKIAogICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2VyIHRoYW4gb3VyIG1heC13
aWR0aCBzdHlsZS4KICAgICBMZW5ndGggc3R5bGVNYXhMb2dpY2FsV2lkdGggPSBzdHlsZSgpLmxv
Z2ljYWxNYXhXaWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcAppbmRleCAxYzJlZmY3MDlkNWQ0YTUwM2E5N2VkYmNlOGQwOTZmZDg2NzVhMzI2Li4z
MjBjNGYyYjNiMWQxZDM4MjdhODg2YmExOTNkMjg3MWVmYzEyNWRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtMzMwLDEwICszMzAsMTAgQEAg
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdBZnRlcigpIGNvbnN0CiAgICAgcmV0
dXJuIGNvbXB1dGVkQ1NTUGFkZGluZ0FmdGVyKCkgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKTsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldE92ZXJyaWRlTG9naWNhbEhlaWdodEZyb21S
b3dIZWlnaHQoTGF5b3V0VW5pdCByb3dIZWlnaHQpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0
T3ZlcnJpZGVuTG9naWNhbEhlaWdodEZyb21Sb3dIZWlnaHQoTGF5b3V0VW5pdCByb3dIZWlnaHQp
CiB7CiAgICAgY2xlYXJJbnRyaW5zaWNQYWRkaW5nKCk7Ci0gICAgc2V0T3ZlcnJpZGVMb2dpY2Fs
SGVpZ2h0KHJvd0hlaWdodCk7CisgICAgc2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodChyb3dIZWln
aHQpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlclRhYmxlQ2VsbDo6b2Zmc2V0RnJvbUNvbnRhaW5l
cihSZW5kZXJFbGVtZW50JiBjb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgYm9v
bCogb2Zmc2V0RGVwZW5kc09uUG9pbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmgKaW5kZXggOTc1ZjNiOWE4MmZlNzQwNGI0YTk2NzEwZWMxNTg2NWRj
ZDMyN2RiNy4uNDMzMjRkYjhiYWFlM2Y0ZDNjNWEyZGJlZDg4ZjJkYzc4NGY1Zjk2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMTAyLDcgKzEwMiw3
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IHBhZGRpbmdCZWZvcmUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBMYXlvdXRVbml0IHBhZGRpbmdBZnRlcigpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dm9pZCBzZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHRGcm9tUm93SGVpZ2h0KExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0T3ZlcnJpZGVuTG9naWNhbEhlaWdodEZyb21Sb3dIZWlnaHQoTGF5b3V0VW5p
dCk7CiAKICAgICB2b2lkIHNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJh
ckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKSBvdmVycmlkZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCAy
YTRlZmE4MjZlYWE3Yzk5YjkyODJmMWQ0ZTMxYzc2YjA0YTg2ZmRkLi5iMWM2ODcwM2ZkNmI0YTcz
ZjA2ZDJlYzc3OTUwNzA2NjA1ZjhkYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjgzLDkgKzI4Myw5IEBAIExheW91dFVuaXQg
UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCgpCiAgICAgICAgICAgICAg
ICAgLy8gRm9yIHJvdyBzcGFubmluZyBjZWxscywgfHJ8IGlzIHRoZSBsYXN0IHJvdyBpbiB0aGUg
c3Bhbi4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjZWxsU3RhcnRSb3cgPSBjZWxsLT5yb3dJ
bmRleCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmhhc092ZXJyaWRlTG9naWNhbEhl
aWdodCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmhhc092ZXJyaWRlbkxvZ2ljYWxI
ZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICAgICBjZWxsLT5jbGVhckludHJpbnNpY1BhZGRp
bmcoKTsKLSAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y2xlYXJPdmVycmlkZUNvbnRlbnRTaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNsZWFyT3ZlcnJpZGVuQ29udGVudFNpemUo
KTsKICAgICAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwogICAgICAgICAgICAgICAgICAgICBjZWxsLT5sYXlvdXRJZk5lZWRlZCgpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTUyMiw3ICs1MjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlv
bjo6cmVsYXlvdXRDZWxsSWZGbGV4ZWQoUmVuZGVyVGFibGVDZWxsJiBjZWxsLCBpbnQgcm93SW5k
ZQogICAgICAgICAvLyBBbGlnbm1lbnQgd2l0aGluIGEgY2VsbCBpcyBiYXNlZCBvZmYgdGhlIGNh
bGN1bGF0ZWQKICAgICAvLyBoZWlnaHQsIHdoaWNoIGJlY29tZXMgaXJyZWxldmFudCBvbmNlIHRo
ZSBjZWxsIGhhcwogICAgIC8vIGJlZW4gcmVzaXplZCBiYXNlZCBvZmYgaXRzIHBlcmNlbnRhZ2Uu
Ci0gICAgY2VsbC5zZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHRGcm9tUm93SGVpZ2h0KHJvd0hlaWdo
dCk7CisgICAgY2VsbC5zZXRPdmVycmlkZW5Mb2dpY2FsSGVpZ2h0RnJvbVJvd0hlaWdodChyb3dI
ZWlnaHQpOwogICAgIGNlbGwubGF5b3V0SWZOZWVkZWQoKTsKICAgICAKICAgICBpZiAoIWNlbGwu
aXNCYXNlbGluZUFsaWduZWQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411969</attachid>
            <date>2020-10-21 03:04:23 -0700</date>
            <delta_ts>2020-10-21 09:12:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217898-20201021120421.patch</filename>
            <type>text/plain</type>
            <size>89532</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Nzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY1YzJmNTY3YjllOWVm
ZjY3YjUwYjZmYzk0MDUwYzQ5OGIzZmJkNC4uMjVjYjE3YmE4NzUxMmUwNGRlNTdhMzI4ZWEyYTJm
MDM1NTIzNWMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAyMC0xMC0yMSAgU2Vy
Z2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZW5hbWUg
b3ZlcnJpZGUgc2l6ZXMgdG8gb3ZlcnJpZGluZyBzaXplcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3ODk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UndmUgYmVlbiB0cmFkaXRpb25hbGx5IHVzaW5n
IHRoZSB3b3JkICJvdmVycmlkZSIgdG8gcmVmZXIgdG8gdGhvc2Ugc2l6ZXMgdGhhdCB3ZXJlIGV4
cGxpY2l0bHkgc2V0IGJ5CisgICAgICAgIGxheW91dCBzeXN0ZW1zIGxpa2UgdGFibGVzLCBmbGV4
IG9yIGdyaWQuIEhvd2V2ZXIgdGhhdCdzIGEgZ3JhbW1hdGljYWwgbWlzdGFrZS4gb3ZlcnJpZGUg
aXMgYSB2ZXJiIHdoaWNoCisgICAgICAgIGRvZXMgbm90IHdvcmsgd2VsbCBhcyBhIG5vdW4uIEl0
J2QgYmUgbW9yZSBjb3JyZWN0IHRvIHJlZmVyIHRvIHRoZW0gYXMgIm92ZXJyaWRlbiIgc2l6ZXMu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkIGFzIHRoaXMgaXMganVzdCBhIHJlbmFt
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiByZW5kZXJpbmcvQ29t
cGxleExpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6
OnVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZExh
eW91dEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0RnVuY3Rpb25z
OjpoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0RnVuY3Rpb25zOjpvdmVycmlkaW5nQ29udGFpbmluZ0Js
b2NrQ29udGVudFNpemVGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0RnVu
Y3Rpb25zOjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oOgorICAgICAgICAqIHJlbmRlcmluZy9Hcmlk
VHJhY2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQ2xlYXJP
dmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bG9n
aWNhbEhlaWdodEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1Np
emluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1heENvbnRlbnRG
b3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG1TdHJhdGVneTo6dXBkYXRlT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9y
Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6Om1pbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGls
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRDbGVhck92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
ZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OnVwZGF0
ZU92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29tcHV0ZUNoaWxkUHJlZmVycmVkTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNl
bnRhZ2VDb21wdXRhdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpdEJvcmRlclRv
TGluZXNJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6aGFzT3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpoYXNPdmVycmlkaW5nTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c2V0T3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xlYXJPdmVycmlkaW5nTG9naWNhbEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGluZ0NvbnRlbnRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJyaWRpbmdMb2dpY2FsSGVp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGluZ0NvbnRh
aW5pbmdCbG9ja0NvbnRlbnRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Om92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRl
bnRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc092ZXJyaWRp
bmdDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6b3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkaW5nQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc092ZXJyaWRpbmdDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNldE92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0T3ZlcnJpZGluZ0NvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29udGVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dp
Y2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpjYWNoZUludHJpbnNpY0NvbnRlbnRMb2dpY2FsSGVpZ2h0Rm9yRmxleEl0ZW0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxIZWlnaHRVc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0Rm9yUG9zaXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhh
c092ZXJyaWRlTG9naWNhbEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Omhhc092ZXJyaWRlTG9naWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0T3ZlcnJpZGVMb2dpY2FsV2lk
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRl
TG9naWNhbEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNs
ZWFyT3ZlcnJpZGVMb2dpY2FsV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjbGVhck92ZXJyaWRlQ29udGVudFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpvdmVycmlkZUxvZ2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJyaWRlTG9naWNhbEhlaWdodCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6b3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGFzT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGFzT3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldE92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcnJpZGluZ0Nv
bnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpv
dmVycmlkaW5nQ29udGVudExvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpvdmVycmlkZUNvbnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Omhhc0F1dG9I
ZWlnaHRPckNvbnRhaW5pbmdCbG9ja1dpdGhBdXRvSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpvdmVycmlkaW5nQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpvdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aGFzT3ZlcnJpZGluZ0NvbnRhaW5p
bmdCbG9ja0NvbnRlbnRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6aGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Om92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRI
ZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6Omhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpoYXNPdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d2lkdGhGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRGb3JDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpnYXRoZXJGbGV4Q2hpbGRyZW5JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbEJveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dFZl
cnRpY2FsQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6YXBwbHlMaW5lQ2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94OjpjbGVhckxpbmVDbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpjaGls
ZEludHJpbnNpY0xvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6Y29tcHV0ZUlubmVyRmxleEJhc2VTaXplRm9yQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNyb3NzU2l6ZUZvclBlcmNlbnRhZ2VSZXNvbHV0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjptYWluU2l6ZUZvclBl
cmNlbnRhZ2VSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94
Ojpjb25zdHJ1Y3RGbGV4SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJv
eDo6c2V0T3ZlcnJpZGVNYWluQXhpc0NvbnRlbnRTaXplRm9yQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om92ZXJyaWRlU2l6ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6dXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGRJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp1cGRhdGVBdXRvTWFyZ2lu
c0luUm93QXhpc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnVwZGF0
ZUF1dG9NYXJnaW5zSW5Db2x1bW5BeGlzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6Z3JpZEFyZWFQb3NpdGlvbkZvck91dE9mRmxvd0NoaWxkIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieUJhc2U6OmFkanVzdElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0T3Zl
cnJpZGluZ0xvZ2ljYWxIZWlnaHRGcm9tUm93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6c2V0T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0RnJvbVJvd0hlaWdodCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlbGF5b3V0Q2VsbElmRmxleGVkKToKKwogMjAyMC0xMC0y
MCAgSnVsaWFuIEdvbnphbGV6ICA8anVsaWFuX2FfZ29uemFsZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbGVhc2UgYXNzZXJ0IGluIH5Ob2RlIGR1ZSB0byByZW5kZXIgZWxlbWVudCBvZiBwc2V1
ZG8gZWxlbWVudCBub3QgZ2V0dGluZyByZW1vdmVkIGluIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCmlu
ZGV4IGQ2NDNkNWJiZmJlZDViNGUzYmIxMzU4ZTM2MDk2ZGNhZjY2ZDVkOGEuLmVmMTY4Yjc2ODE5
MjE2ZDk4NGI3YTJkMGY3NjAwMDVmYjlkMjRkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUub3JkZXIKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpAQCAtOTcw
MSw3ICs5NzAxLDcgQEAgX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEwTGF5b3V0VW5pdEVMbTBF
TlNfMTVDcmFzaE9uT3ZlcmZsb3dFRTE1cmVzZXJ2ZUNhcGFjaXQKIF9fWk43V2ViQ29yZTE3UmVu
ZGVyRmxleGlibGVCb3gyMmxheW91dEFuZFBsYWNlQ2hpbGRyZW5FUk5TXzEwTGF5b3V0VW5pdEVS
S04zV1RGNlZlY3RvcklQTlNfOVJlbmRlckJveEVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVF
UktOUzRfSVMxX0xtMEVTN19FRVMxX2JSTlM0X0lOUzBfMTFMaW5lQ29udGV4dEVMbTBFUzdfRUUK
IF9fWk43V2ViQ29yZTE3UmVuZGVyRmxleGlibGVCb3gyNmF1dG9NYXJnaW5PZmZzZXRJbk1haW5B
eGlzRVJLTjNXVEY2VmVjdG9ySVBOU185UmVuZGVyQm94RUxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZs
b3dFRUVSTlNfMTBMYXlvdXRVbml0RQogX19aTjdXZWJDb3JlMTdSZW5kZXJGbGV4aWJsZUJveDIy
c2V0TG9naWNhbE92ZXJyaWRlU2l6ZUVQTlNfOVJlbmRlckJveEVOU18xMExheW91dFVuaXRFCi1f
X1pON1dlYkNvcmU5UmVuZGVyQm94MzBzZXRPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGhFTlNf
MTBMYXlvdXRVbml0RQorX19aTjdXZWJDb3JlOVJlbmRlckJveDMyc2V0T3ZlcnJpZGluZ0xvZ2lj
YWxDb250ZW50V2lkdGhFTlNfMTBMYXlvdXRVbml0RQogX19aTjdXZWJDb3JlMTdSZW5kZXJGbGV4
aWJsZUJveDE4bmVlZFRvU3RyZXRjaENoaWxkRVBOU185UmVuZGVyQm94RQogX19aTjdXZWJDb3Jl
MTFSZW5kZXJCbG9jazM3dXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0c0JlZm9yZUxheW91dEViUE5T
XzlSZW5kZXJCb3hFCiBfX1pOM1dURjlIYXNoVGFibGVJUEtON1dlYkNvcmU5UmVuZGVyQm94RU5T
XzEyS2V5VmFsdWVQYWlySVM0X05TMV8xMExheW91dFVuaXRFRUVOU18yNEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMThIYXNoTWFwVmFsdWVUcmFpdHNJ
TlNfMTBIYXNoVHJhaXRzSVM0X0VFTlNEX0lTNl9FRUVFU0VfRTE2bG9va3VwRm9yV3JpdGluZ0lO
U18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJU0JfRUVTNF9FRU5TdDNfXzE0cGFpcklQUzdfYkVF
UktUMF8KQEAgLTE1MDU5LDggKzE1MDU5LDggQEAgX19aTjdXZWJDb3JlMTREYXRlQ29tcG9uZW50
czM2c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lRWQKIF9fWk43V2ViQ29yZTE0
RGF0ZUNvbXBvbmVudHM0MHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlSW50ZXJuYWxF
ZAogX19aTlN0M19fMTdfX3NvcnQ1SVJQRmJSS05TXzRwYWlySVBOM1dURjE2QXRvbWljU3RyaW5n
SW1wbEVOUzJfMTJBdG9taWNTdHJpbmdFRUVTOF9FUFM2X0VFalQwX1NEX1NEX1NEX1NEX1RfCiBf
X1pON1dlYkNvcmUxM0hUTUxCUkVsZW1lbnQzNmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0
dHJpYnV0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFUE5TXzIz
TXV0YWJsZVN0eWxlUHJvcGVydHlTZXRFCi1fX1pON1dlYkNvcmUxNVJlbmRlclRhYmxlQ2VsbDQ0
c2V0T3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodEZyb21Sb3dIZWlnaHRFTlNfMTBMYXlvdXRV
bml0RQotX19aTjdXZWJDb3JlOVJlbmRlckJveDMxc2V0T3ZlcnJpZGVMb2dpY2FsQ29udGVudEhl
aWdodEVOU18xMExheW91dFVuaXRFCitfX1pON1dlYkNvcmUxNVJlbmRlclRhYmxlQ2VsbDQ2c2V0
T3ZlcnJpZGluZ0xvZ2ljYWxDb250ZW50SGVpZ2h0RnJvbVJvd0hlaWdodEVOU18xMExheW91dFVu
aXRFCitfX1pON1dlYkNvcmU5UmVuZGVyQm94MzNzZXRPdmVycmlkaW5nTG9naWNhbENvbnRlbnRI
ZWlnaHRFTlNfMTBMYXlvdXRVbml0RQogX19aTks3V2ViQ29yZTE3SFRNTFNjcmlwdEVsZW1lbnQx
NGlzVVJMQXR0cmlidXRlRVJLTlNfOUF0dHJpYnV0ZUUKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbWFn
ZUVsZW1lbnQxNGlzVVJMQXR0cmlidXRlRVJLTlNfOUF0dHJpYnV0ZUUKIF9fWk5LN1dlYkNvcmUx
NUhUTUxGb3JtRWxlbWVudDE0aXNVUkxBdHRyaWJ1dGVFUktOU185QXR0cmlidXRlRQpAQCAtMjcz
NjAsOCArMjczNjAsOCBAQCBfX1paTjdXZWJDb3JlMTFSZW5kZXJCbG9jazI1Y2hlY2tMaW5lc0Zv
clRleHRPdmVyZmxvd0V2RTExZWxsaXBzaXNTdHIKIF9fWkdWWk43V2ViQ29yZTExUmVuZGVyQmxv
Y2syNWNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3dFdkUxMWVsbGlwc2lzU3RyLmIKIF9fWk43V2Vi
Q29yZUwxOGdPdmVycmlkZUhlaWdodE1hcEUKIF9fWk43V2ViQ29yZUwxN2dPdmVycmlkZVdpZHRo
TWFwRQotX19aTjdXZWJDb3JlTDM5Z092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
TWFwRQotX19aTjdXZWJDb3JlTDQwZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dE1hcEUKK19fWk43V2ViQ29yZUw0MWdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoTWFwRQorX19aTjdXZWJDb3JlTDQyZ092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0TWFwRQogX19aTjdXZWJDb3JlTDE1Y29udGludWF0aW9uTWFwRQogX19aTjdXZWJDb3Jl
TDI3Zmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwRQogX19aWk43V2ViQ29yZUwxM25ld2xpbmVT
dHJpbmdFdkU2c3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29t
cGxleExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5l
TGF5b3V0LmNwcAppbmRleCBmMzA3ZTg1M2RhZGM2OTQwMmVhNmMxYmQ2MzNkYmJjZDQ3ZmNkYTdi
Li5mY2ZhZjQyN2QxZWMwNGVmNTBkZjk2YTU0YTVjODIyZDdhMDEwZDNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKQEAgLTU5MCwxMSArNTkw
LDExIEBAIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0
KFJlbmRlclJ1YnlSdW4mIHJ1YnlSdW4sIEJpZGlSCiAgICAgICAgIHRvdGFsT3Bwb3J0dW5pdGll
c0luUnVuICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICB9CiAKLSAgICBBU1NFUlQoIXJ1YnlS
dW4uaGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSk7CisgICAgQVNTRVJUKCFydWJ5UnVuLmhhc092
ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKSk7CiAgICAgZmxvYXQgbmV3QmFzZVdpZHRoID0gcnVieVJ1
bi5sb2dpY2FsV2lkdGgoKSArIHRvdGFsRXhwYW5zaW9uICsgbV9mbG93Lm1hcmdpblN0YXJ0Rm9y
Q2hpbGQocnVieVJ1bikgKyBtX2Zsb3cubWFyZ2luRW5kRm9yQ2hpbGQocnVieVJ1bik7CiAgICAg
ZmxvYXQgbmV3UnVieVJ1bldpZHRoID0gcnVieVJ1bi5sb2dpY2FsV2lkdGgoKSArIHRvdGFsRXhw
YW5zaW9uOwogICAgIHJ1YnlCYXNlLnNldEluaXRpYWxPZmZzZXQoKG5ld1J1YnlSdW5XaWR0aCAt
IG5ld0Jhc2VXaWR0aCkgLyAyKTsKLSAgICBydWJ5UnVuLnNldE92ZXJyaWRlTG9naWNhbFdpZHRo
KExheW91dFVuaXQobmV3UnVieVJ1bldpZHRoKSk7CisgICAgcnVieVJ1bi5zZXRPdmVycmlkaW5n
TG9naWNhbFdpZHRoKExheW91dFVuaXQobmV3UnVieVJ1bldpZHRoKSk7CiAgICAgcnVieVJ1bi5z
ZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgIHJvb3RCb3gubWFya0RpcnR5KCk7CiAg
ICAgaWYgKFJlbmRlclJ1YnlUZXh0KiBydWJ5VGV4dCA9IHJ1YnlSdW4ucnVieVRleHQoKSkgewpA
QCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZVJ1YnlGb3JK
dXN0aWZpZWRUZXh0KFJlbmRlclJ1YnlSdW4mIHJ1YnlSdW4sIEJpZGlSCiAgICAgICAgICAgICB0
ZXh0Um9vdEJveC0+bWFya0RpcnR5KCk7CiAgICAgfQogICAgIHJ1YnlSdW4ubGF5b3V0QmxvY2so
dHJ1ZSk7Ci0gICAgcnVieVJ1bi5jbGVhck92ZXJyaWRlTG9naWNhbFdpZHRoKCk7CisgICAgcnVi
eVJ1bi5jbGVhck92ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKTsKICAgICByLmJveCgpLT5zZXRFeHBh
bnNpb24obmV3UnVieVJ1bldpZHRoIC0gci5ib3goKS0+bG9naWNhbFdpZHRoKCkpOwogCiAgICAg
dG90YWxMb2dpY2FsV2lkdGggKz0gdG90YWxFeHBhbnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXggZDcyYTZlZGFjNjUxMjBh
MGZhNmFiNmM1NmYzZjMzYjE1YTE0YjY4My4uOWVjM2Y1Mjk1Zjg4YjIxYWU2NDRjYjA1ZGQ4YWQ5
ZjE0OTVlYzJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlv
dXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0
RnVuY3Rpb25zLmNwcApAQCAtODcsMTQgKzg3LDE0IEBAIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25z
CiAgICAgcmV0dXJuICFpc09ydGhvZ29uYWxDaGlsZChncmlkLCBjaGlsZCkgPyBkaXJlY3Rpb24g
OiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBGb3JSb3dzIDogRm9yQ29sdW1ucyk7CiB9CiAK
LWJvb2wgaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiti
b29sIGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQuaGFzT3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5oYXNPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gY2hpbGQuaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgoKSA6IGNoaWxkLmhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodCgpOwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK09wdGlvbmFsPExheW91dFVuaXQ+
IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRl
ckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAg
cmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zID8gY2hpbGQub3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
KSA6IGNoaWxkLm92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBHcmlkTGF5b3V0RnVuY3Rpb25zCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuaAppbmRleCAyMDA3MGJmMTIzYTU2
OTQ0YzA4NDZjNWFkMDZmOGY1MTA3ZmNlNGZkLi4zYjQyYTVjZjdjZTI2NjI2MWUzZGM3OTIzYzg0
YjhlYjEzYzljYTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExh
eW91dEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0
RnVuY3Rpb25zLmgKQEAgLTQxLDggKzQxLDggQEAgTGF5b3V0VW5pdCBjb21wdXRlTWFyZ2luTG9n
aWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGkKIExh
eW91dFVuaXQgbWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKIGJvb2wgaXNPcnRob2dv
bmFsQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOwogR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdy
aWQmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOwotYm9vbCBo
YXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKLU9wdGlvbmFsPExheW91dFVuaXQ+IG92
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gm
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworYm9vbCBoYXNPdmVycmlkaW5nQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24pOworT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGluZ0NvbnRhaW5pbmdC
bG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCmluZGV4IGY5MDIzOWI3MWVlY2ZhZTIyY2Q0N2Iw
NjRmNWRhOTc4ODU2YWRjZDQuLmUzMTNhZjY1ZThmMWJjOWIxY2RhMjMyOGMxZWQzOTJmMDVmM2Q3
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uY3BwCkBAIC0xMjAsMTcgKzEyMCwxNyBAQCBzdGF0aWMgYm9vbCBoYXNSZWxh
dGl2ZU9ySW50cmluc2ljU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRU
cmFjawogICAgIHJldHVybiBjaGlsZC5oYXNSZWxhdGl2ZUxvZ2ljYWxIZWlnaHQoKSB8fCBjaGls
ZC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpOwogfQogCi1zdGF0
aWMgYm9vbCBzaG91bGRDbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JD
aGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uKQorc3RhdGljIGJvb2wgc2hvdWxkQ2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBoYXNSZWxhdGl2ZU9ySW50cmlu
c2ljU2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pIHx8IGhhc1JlbGF0aXZlTWFyZ2luT3JQ
YWRkaW5nRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldE92
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxk
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBzaXplKQorc3RhdGljIHZvaWQgc2V0T3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRT
aXplRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gc2l6ZSkKIHsKICAgICBpZiAoZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpCi0gICAgICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxXaWR0aChzaXplKTsKKyAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGluZ0Nv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoc2l6ZSk7CiAgICAgZWxzZQotICAgICAg
ICBjaGlsZC5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KHNp
emUpOworICAgICAgICBjaGlsZC5zZXRPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHQoc2l6ZSk7CiB9CiAKIC8vIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSBwcml2
YXRlLgpAQCAtNzU2LDE0ICs3NTYsMTQgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2gKICAgICBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRG
dW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxk
LCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZlIGxvZ2ljYWwgaGVp
Z2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5zaWMgaGVpZ2h0LCB3
aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVyZS4gVGh1cyB3ZSBu
ZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0xIChubyBwb3NzaWJs
ZSByZXNvbHV0aW9uKS4KLSAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7Ci0gICAgICAgIHNldE92ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRCbG9ja0Rp
cmVjdGlvbiwgV1RGOjpudWxsb3B0KTsKKyAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgRm9yUm93cykpIHsKKyAgICAg
ICAgc2V0T3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQs
IGNoaWxkQmxvY2tEaXJlY3Rpb24sIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIGNoaWxkLnNldE5l
ZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgfQogCiAgICAgLy8gV2UgbmVlZCB0byBjbGVh
ciB0aGUgc3RyZXRjaGVkIGhlaWdodCB0byBwcm9wZXJseSBjb21wdXRlIGxvZ2ljYWwgaGVpZ2h0
IGR1cmluZyBsYXlvdXQuCiAgICAgaWYgKGNoaWxkLm5lZWRzTGF5b3V0KCkpCi0gICAgICAgIGNo
aWxkLmNsZWFyT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIGNoaWxkLmNsZWFyT3Zl
cnJpZGluZ0xvZ2ljYWxIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CiAg
ICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIEdyaWRMYXlvdXRGdW5jdGlvbnM6Om1h
cmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRCbG9ja0RpcmVjdGlv
biwgY2hpbGQpICsgbV9hbGdvcml0aG0uYmFzZWxpbmVPZmZzZXRGb3JDaGlsZChjaGlsZCwgZ3Jp
ZEF4aXNGb3JEaXJlY3Rpb24oZGlyZWN0aW9uKCkpKTsKQEAgLTc3OCw3ICs3NzgsNyBAQCBMYXlv
dXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZAogICAgICAgICByZXR1cm4gY2hpbGQubWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkgKyBHcmlkTGF5b3V0RnVuY3Rpb25zOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNo
aWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkSW5saW5lRGlyZWN0aW9uLCBjaGlsZCkgKyBtX2FsZ29y
aXRobS5iYXNlbGluZU9mZnNldEZvckNoaWxkKGNoaWxkLCBncmlkQXhpc0ZvckRpcmVjdGlvbihk
aXJlY3Rpb24oKSkpOwogICAgIH0KIAotICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkKKyAg
ICBpZiAodXBkYXRlT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQo
Y2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkKICAgICAgICAgY2hpbGQuc2V0TmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKICAgICByZXR1cm4gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxk
KTsKIH0KQEAgLTc5Miw3ICs3OTIsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29y
aXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAogICAgICAg
ICByZXR1cm4gY2hpbGQubWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBHcmlkTGF5b3V0RnVu
Y3Rpb25zOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkSW5s
aW5lRGlyZWN0aW9uLCBjaGlsZCkgKyBtX2FsZ29yaXRobS5iYXNlbGluZU9mZnNldEZvckNoaWxk
KGNoaWxkLCBncmlkQXhpc0ZvckRpcmVjdGlvbihkaXJlY3Rpb24oKSkpOwogICAgIH0KIAotICAg
IGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hp
bGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkKKyAgICBpZiAodXBkYXRlT3ZlcnJpZGluZ0NvbnRh
aW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9u
KSkKICAgICAgICAgY2hpbGQuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICByZXR1
cm4gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKTsKIH0KQEAgLTg5OSwxNCArODk5LDE0IEBA
IHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb3B5QmFzZWxpbmVJdGVtc0NhY2hlKGNv
bnN0IEdyaWRUcmFja1NpemluZ0FsZ29yCiAgICAgICAgIG1fcm93QmFzZWxpbmVJdGVtc01hcCA9
IHNvdXJjZS5tX3Jvd0Jhc2VsaW5lSXRlbXNNYXA7CiB9CiAKLWJvb2wgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtU3RyYXRlZ3k6OnVwZGF0ZU92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNp
emVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZVNpemUpIGNvbnN0Citib29sIEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5Ojp1cGRhdGVPdmVycmlkaW5nQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZVNpemUp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdmVycmlkZVNpemUpCiAgICAgICAgIG92ZXJyaWRlU2l6ZSA9
IG1fYWxnb3JpdGhtLmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pOwot
ICAgIGlmIChHcmlkTGF5b3V0RnVuY3Rpb25zOjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikgJiYgR3JpZExheW91dEZ1bmN0aW9u
czo6b3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJl
Y3Rpb24pID09IG92ZXJyaWRlU2l6ZSkKKyAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aGFz
T3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVj
dGlvbikgJiYgR3JpZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbikgPT0gb3ZlcnJpZGVTaXplKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbiwgb3ZlcnJpZGVTaXplKTsKKyAgICBzZXRP
dmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0
aW9uLCBvdmVycmlkZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MTYsNyArOTE2
LDcgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWluTG9n
aWNhbFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGMKICAgICBib29sIGlzUm93QXhpcyA9IGRpcmVj
dGlvbigpID09IGNoaWxkSW5saW5lRGlyZWN0aW9uOwogICAgIGlmIChpc1Jvd0F4aXMpCiAgICAg
ICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nKE1pblNp
emUsIGNoaWxkTWluU2l6ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdyaWQoKSwgbnVsbHB0cikg
KyBHcmlkTGF5b3V0RnVuY3Rpb25zOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJH
cmlkKCksIGNoaWxkSW5saW5lRGlyZWN0aW9uLCBjaGlsZCk7Ci0gICAgYm9vbCBvdmVycmlkZVNp
emVIYXNDaGFuZ2VkID0gdXBkYXRlT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZv
ckNoaWxkKGNoaWxkLCBjaGlsZElubGluZURpcmVjdGlvbiwgYXZhaWxhYmxlU2l6ZSk7CisgICAg
Ym9vbCBvdmVycmlkZVNpemVIYXNDaGFuZ2VkID0gdXBkYXRlT3ZlcnJpZGluZ0NvbnRhaW5pbmdC
bG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uLCBhdmFp
bGFibGVTaXplKTsKICAgICBsYXlvdXRHcmlkSXRlbUZvck1pblNpemVDb21wdXRhdGlvbihjaGls
ZCwgb3ZlcnJpZGVTaXplSGFzQ2hhbmdlZCk7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJl
Y3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yUm93cyk7CiAgICAgcmV0dXJu
IGNoaWxkLmNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoTWluU2l6ZSwgY2hpbGRNaW5TaXplLCBX
VEY6Om51bGxvcHQpLnZhbHVlT3IoMCkgKyBHcmlkTGF5b3V0RnVuY3Rpb25zOjptYXJnaW5Mb2dp
Y2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkQmxvY2tEaXJlY3Rpb24sIGNoaWxk
KTsKQEAgLTEwNTAsNyArMTA1MCw3IEBAIExheW91dFVuaXQgRGVmaW5pdGVTaXplU3RyYXRlZ3k6
Om1pbkxvZ2ljYWxTaXplRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgY29uc3QKICAgICBMYXlv
dXRVbml0IGluZGVmaW5pdGVTaXplID0gZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rp
b24gPyBMYXlvdXRVbml0KCkgOiBMYXlvdXRVbml0KC0xKTsKICAgICBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZmxvd0F3YXJlRGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3
YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGQsIGRpcmVjdGlvbigpKTsK
ICAgICBpZiAoaGFzUmVsYXRpdmVNYXJnaW5PclBhZGRpbmdGb3JDaGlsZChjaGlsZCwgZmxvd0F3
YXJlRGlyZWN0aW9uKSB8fCAoZGlyZWN0aW9uKCkgIT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24gJiYg
aGFzUmVsYXRpdmVPckludHJpbnNpY1NpemVGb3JDaGlsZChjaGlsZCwgZmxvd0F3YXJlRGlyZWN0
aW9uKSkpCi0gICAgICAgIHNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JD
aGlsZChjaGlsZCwgZGlyZWN0aW9uKCksIGluZGVmaW5pdGVTaXplKTsKKyAgICAgICAgc2V0T3Zl
cnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlv
bigpLCBpbmRlZmluaXRlU2l6ZSk7CiAgICAgcmV0dXJuIEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bVN0cmF0ZWd5OjptaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkLCBjaGlsZE1pblNpemUsIGF2
YWlsYWJsZVNpemUpOwogfQogCkBAIC0xMDkzLDggKzEwOTMsOCBAQCBMYXlvdXRVbml0IERlZmlu
aXRlU2l6ZVN0cmF0ZWd5OjpmcmVlU3BhY2VGb3JTdHJldGNoQXV0b1RyYWNrc1N0ZXAoKSBjb25z
dAogTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWluQ29udGVudEZvckNoaWxkKFJl
bmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNo
aWxkSW5saW5lRGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0
aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpOwotICAgIGlmIChk
aXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURpcmVjdGlvbiAmJiBjaGlsZC5uZWVkc0xheW91dCgp
ICYmIHNob3VsZENsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KGNoaWxkLCBGb3JDb2x1bW5zKSkKLSAgICAgICAgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBjaGlsZElubGluZURpcmVjdGlvbiwgTGF5b3V0VW5p
dCgpKTsKKyAgICBpZiAoZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24gJiYgY2hp
bGQubmVlZHNMYXlvdXQoKSAmJiBzaG91bGRDbGVhck92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tD
b250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBGb3JDb2x1bW5zKSkKKyAgICAgICAgc2V0T3ZlcnJp
ZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5l
RGlyZWN0aW9uLCBMYXlvdXRVbml0KCkpOwogICAgIHJldHVybiBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG1TdHJhdGVneTo6bWluQ29udGVudEZvckNoaWxkKGNoaWxkKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCmluZGV4
IDkzZGM1ZTE1NDUxMGM5ZTBmNGRiZWE2OTI3ZjczODE4ZjY3OGIzOTUuLjQ5Y2Y1Zjc2ODdjZWMz
NzU3NWE1YTEzNjk5YmNmZjU3MjM3Mjc1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKQEAgLTI3MSw3ICsyNzEsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dEdyaWRJdGVtRm9yTWluU2l6ZUNvbXB1
dGF0aW9uKFJlbmRlckJveCYsIGJvb2wgb3ZlcnJpZGVTaXplSGFzQ2hhbmdlZCkgY29uc3QgPSAw
OwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JikgY29u
c3Q7Ci0gICAgYm9vbCB1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBPcHRpb25hbDxMYXlv
dXRVbml0PiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgYm9vbCB1cGRhdGVPdmVycmlkaW5n
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24sIE9wdGlvbmFsPExheW91dFVuaXQ+ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKIAogICAgIC8vIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSBhY2Nlc3NvcnMgZm9yIHN1YmNs
YXNzZXMuCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlVHJhY2tCYXNlZFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2FsZ29yaXRobS5jb21wdXRlVHJhY2tCYXNlZFNpemUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOWZhMWJlNDQwMDBkYjM5ODllZTAzODU1
N2FhZmMwNmY4ZmU4MmU4OC4uZGJjMjE4ZDhkZjk1OWNiMTEzNTM5ZjIwM2QzNTNjYjc4ZjZmYzQ0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNzY4LDcg
KzE3NjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRl
ckJveCYgcG9zaXRpb25lZCkKIHsKICAgICBBU1NFUlQoIWlzQW5vbnltb3VzQmxvY2soKSk7CiAK
LSAgICBwb3NpdGlvbmVkLmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgp
OworICAgIHBvc2l0aW9uZWQuY2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNp
emUoKTsKIAogICAgIGlmIChwb3NpdGlvbmVkLmlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQyNSwxMSArMjQyNSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
b21wdXRlQ2hpbGRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKFJlbmRlck9iamVjdCYgY2hpbGQsIExh
eW91dAogICAgIGlmIChjaGlsZC5pc0JveCgpKSB7CiAgICAgICAgIGF1dG8mIGJveCA9IGRvd25j
YXN0PFJlbmRlckJveD4oY2hpbGQpOwogICAgICAgICBpZiAoYm94LmlzRmxleEl0ZW0oKSkgewot
ICAgICAgICAgICAgaWYgKGJveC5oYXNPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAg
ICAgICAgICBvdmVycmlkZUhlaWdodCA9IE9wdGlvbmFsPExheW91dFVuaXQ+KGJveC5vdmVycmlk
ZUxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoYm94Lmhhc092ZXJyaWRlTG9naWNh
bFdpZHRoKCkpCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVXaWR0aCA9IE9wdGlvbmFsPExheW91
dFVuaXQ+KGJveC5vdmVycmlkZUxvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgIGJveC5jbGVh
ck92ZXJyaWRlQ29udGVudFNpemUoKTsKKyAgICAgICAgICAgIGlmIChib3guaGFzT3ZlcnJpZGlu
Z0xvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBvdmVycmlkZUhlaWdodCA9IE9wdGlv
bmFsPExheW91dFVuaXQ+KGJveC5vdmVycmlkaW5nTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGlmIChib3guaGFzT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgICAg
IG92ZXJyaWRlV2lkdGggPSBPcHRpb25hbDxMYXlvdXRVbml0Pihib3gub3ZlcnJpZGluZ0xvZ2lj
YWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGJveC5jbGVhck92ZXJyaWRpbmdDb250ZW50U2l6ZSgp
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjQzOSw5ICsyNDM5LDkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29tcHV0ZUNoaWxkUHJlZmVycmVkTG9naWNhbFdpZHRocyhSZW5kZXJPYmplY3Qm
IGNoaWxkLCBMYXlvdXQKICAgICBpZiAoY2hpbGQuaXNCb3goKSkgewogICAgICAgICBhdXRvJiBi
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGNoaWxkKTsKICAgICAgICAgaWYgKG92ZXJyaWRlSGVp
Z2h0KQotICAgICAgICAgICAgYm94LnNldE92ZXJyaWRlTG9naWNhbEhlaWdodChvdmVycmlkZUhl
aWdodC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJveC5zZXRPdmVycmlkaW5nTG9naWNhbEhlaWdo
dChvdmVycmlkZUhlaWdodC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG92ZXJyaWRlV2lkdGgpCi0g
ICAgICAgICAgICBib3guc2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgob3ZlcnJpZGVXaWR0aC52YWx1
ZSgpKTsKKyAgICAgICAgICAgIGJveC5zZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKG92ZXJyaWRl
V2lkdGgudmFsdWUoKSk7CiAgICAgfQogCiAgICAgLy8gRm9yIG5vbi1yZXBsYWNlZCBibG9ja3Mg
aWYgdGhlIGlubGluZSBzaXplIGlzIG1pbnxtYXgtY29udGVudCBvciBhIGRlZmluaXRlCkBAIC0z
MjE5LDggKzMyMTksOCBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCbG9jazo6YXZhaWxh
YmxlTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXRhdGlvbgogICAgIAogICAgIGlmIChz
dHJldGNoZWRGbGV4SGVpZ2h0KQogICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBzdHJldGNoZWRG
bGV4SGVpZ2h0OwotICAgIGVsc2UgaWYgKGlzR3JpZEl0ZW0oKSAmJiBoYXNPdmVycmlkZUxvZ2lj
YWxIZWlnaHQoKSkKLSAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcnJpZGVMb2dpY2FsSGVp
Z2h0KCk7CisgICAgZWxzZSBpZiAoaXNHcmlkSXRlbSgpICYmIGhhc092ZXJyaWRpbmdMb2dpY2Fs
SGVpZ2h0KCkpCisgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG92ZXJyaWRpbmdMb2dpY2FsSGVp
Z2h0KCk7CiAgICAgZWxzZSBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgp
KSB7CiAgICAgICAgIExheW91dFVuaXQgY29udGVudEJveEhlaWdodCA9IGFkanVzdENvbnRlbnRC
b3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5nKChMYXlvdXRVbml0KXN0eWxlVG9Vc2UubG9naWNh
bEhlaWdodCgpLnZhbHVlKCkpOwogICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBzdGQ6Om1heCgw
X2x1LCBjb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KGNvbnRlbnRCb3hI
ZWlnaHQgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksIFdURjo6bnVsbG9wdCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCA4Mzc1NDg1ZWJh
MGMzMTc3NDc3ZTgyMDNjNWEwZjZkZmI2MjJjMmIwLi5lNzA1YTc4ODIzZWYzMDRjZDFiM2MwNTkw
MTAwZDAxNDM0OTZkZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcApAQCAtMzA0NSw3ICszMDQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFk
anVzdEZvckJvcmRlckZpdChMYXlvdXRVbml0IHgsIExheW91dFVuaXQmIGxlZnQsIExheW91dFUK
IAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmZpdEJvcmRlclRvTGluZXNJZk5lZWRlZCgpCiB7Ci0g
ICAgaWYgKHN0eWxlKCkuYm9yZGVyRml0KCkgPT0gQm9yZGVyRml0OjpCb3JkZXIgfHwgaGFzT3Zl
cnJpZGVMb2dpY2FsV2lkdGgoKSkKKyAgICBpZiAoc3R5bGUoKS5ib3JkZXJGaXQoKSA9PSBCb3Jk
ZXJGaXQ6OkJvcmRlciB8fCBoYXNPdmVycmlkaW5nTG9naWNhbFdpZHRoKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFdhbGsgYW55IG5vcm1hbCBmbG93IGxpbmVzIHRvIHNudWdseSBmaXQu
CkBAIC0zMDY0LDkgKzMwNjQsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Zml0Qm9yZGVyVG9M
aW5lc0lmTmVlZGVkKCkKICAgICBpZiAobmV3Q29udGVudFdpZHRoID09IG9sZFdpZHRoKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzZXRPdmVycmlkZUxvZ2ljYWxXaWR0aChuZXdDb250ZW50V2lk
dGggKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpOworICAgIHNldE92ZXJyaWRpbmdM
b2dpY2FsV2lkdGgobmV3Q29udGVudFdpZHRoICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0
aCgpKTsKICAgICBsYXlvdXRCbG9jayhmYWxzZSk7Ci0gICAgY2xlYXJPdmVycmlkZUxvZ2ljYWxX
aWR0aCgpOworICAgIGNsZWFyT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCgpOwogfQogCiB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGNlMGYzODE2ZmE0NTVl
OWEyNmI3OThiYmNlYTlmMDMwN2NhOWJhYmMuLjhmZjhlNWI4ZTZhYjQ2MjlkMjQ1ODM5Y2I5YmQw
MzM1ZmFlYmI1YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC05
MywxMyArOTMsMTMgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJveCkgPT0gc2l6ZW9m
KFNhbWVTaXplQXNSZW5kZXJCb3gpLCBSZW5kZXJCb3hfc2hvdWwKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIExheW91
dFVuaXQ+IE92ZXJyaWRlU2l6ZU1hcDsKLXN0YXRpYyBPdmVycmlkZVNpemVNYXAqIGdPdmVycmlk
ZUxvZ2ljYWxIZWlnaHRNYXAgPSBudWxscHRyOwotc3RhdGljIE92ZXJyaWRlU2l6ZU1hcCogZ092
ZXJyaWRlTG9naWNhbFdpZHRoTWFwID0gbnVsbHB0cjsKK3N0YXRpYyBPdmVycmlkZVNpemVNYXAq
IGdPdmVycmlkaW5nTG9naWNhbEhlaWdodE1hcCA9IG51bGxwdHI7CitzdGF0aWMgT3ZlcnJpZGVT
aXplTWFwKiBnT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aE1hcCA9IG51bGxwdHI7CiAKIC8vIEZJWE1F
OiBXZSBzaG91bGQgc3RvcmUgdGhlc2UgYmFzZWQgb24gcGh5c2ljYWwgZGlyZWN0aW9uLgogdHlw
ZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4+
IE92ZXJyaWRlT3B0aW9uYWxTaXplTWFwOwotc3RhdGljIE92ZXJyaWRlT3B0aW9uYWxTaXplTWFw
KiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcCA9IG51bGxw
dHI7Ci1zdGF0aWMgT3ZlcnJpZGVPcHRpb25hbFNpemVNYXAqIGdPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAgPSBudWxscHRyOworc3RhdGljIE92ZXJyaWRlT3B0
aW9uYWxTaXplTWFwKiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVp
Z2h0TWFwID0gbnVsbHB0cjsKK3N0YXRpYyBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcCogZ092ZXJy
aWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwID0gbnVsbHB0cjsKIAog
Ly8gU2l6ZSBvZiBib3JkZXIgYmVsdCBmb3IgYXV0b3Njcm9sbC4gV2hlbiBtb3VzZSBwb2ludGVy
IGluIGJvcmRlciBiZWx0LAogLy8gYXV0b3Njcm9sbCBpcyBzdGFydGVkLgpAQCAtMTQ5LDggKzE0
OSw4IEBAIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIGlmIChmcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxSZW5kZXJlcigpID09IHRoaXMpCiAgICAgICAgIGZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcih0cnVlKTsKIAotICAgIGNs
ZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOwotICAgIGNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50U2l6ZSgpOworICAgIGNsZWFyT3ZlcnJpZGluZ0NvbnRlbnRTaXplKCk7CisgICAg
Y2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKTsKIAogICAgIFJlbmRl
ckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKCp0aGlzKTsKIApA
QCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgLy8gY2hpbGRy
ZW4gb2YgYSBmbGV4L2dyaWQgYm94IGFyZSBvdXQtb2YtZmxvdywgYW5kIHRodXMsIG5vdCBmbGV4
L2dyaWQgaXRlbXMuIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGNsZWFyCiAgICAgLy8gYW55
IG92ZXJyaWRlIGNvbnRlbnQgc2l6ZSBzZXQgYnkgb3VyIGNvbnRhaW5lciwgYmVjYXVzZSBpdCB3
b3VsZCBsaWtlbHkgYmUgaW5jb3JyZWN0IGFmdGVyIHRoZSBzdHlsZSBjaGFuZ2UuCiAgICAgaWYg
KGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5zdHlsZSgp
LmlzRGlzcGxheUZsZXhpYmxlT3JHcmlkQm94KCkpCi0gICAgICAgIGNsZWFyT3ZlcnJpZGVDb250
ZW50U2l6ZSgpOworICAgICAgICBjbGVhck92ZXJyaWRpbmdDb250ZW50U2l6ZSgpOwogfQogCiB2
b2lkIFJlbmRlckJveDo6dXBkYXRlR3JpZFBvc2l0aW9uQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKQEAgLTEwODAs
MTQ1ICsxMDgwLDE0NSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgY29uc3QKICAgICByZXR1cm4gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiB9
CiAKLWJvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAorYm9v
bCBSZW5kZXJCb3g6Omhhc092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ092ZXJyaWRlTG9naWNhbEhlaWdodE1hcCAmJiBnT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0
TWFwLT5jb250YWlucyh0aGlzKTsKKyAgICByZXR1cm4gZ092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0
TWFwICYmIGdPdmVycmlkaW5nTG9naWNhbEhlaWdodE1hcC0+Y29udGFpbnModGhpcyk7CiB9CiAK
LWJvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpIGNvbnN0Citib29sIFJl
bmRlckJveDo6aGFzT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGdPdmVycmlkZUxvZ2ljYWxXaWR0aE1hcCAmJiBnT3ZlcnJpZGVMb2dpY2FsV2lkdGhNYXAtPmNv
bnRhaW5zKHRoaXMpOworICAgIHJldHVybiBnT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aE1hcCAmJiBn
T3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aE1hcC0+Y29udGFpbnModGhpcyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQm94OjpzZXRPdmVycmlkZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCit2b2lk
IFJlbmRlckJveDo6c2V0T3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQp
CiB7Ci0gICAgaWYgKCFnT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0TWFwKQotICAgICAgICBnT3ZlcnJp
ZGVMb2dpY2FsSGVpZ2h0TWFwID0gbmV3IE92ZXJyaWRlU2l6ZU1hcCgpOwotICAgIGdPdmVycmlk
ZUxvZ2ljYWxIZWlnaHRNYXAtPnNldCh0aGlzLCBoZWlnaHQpOworICAgIGlmICghZ092ZXJyaWRp
bmdMb2dpY2FsSGVpZ2h0TWFwKQorICAgICAgICBnT3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHRNYXAg
PSBuZXcgT3ZlcnJpZGVTaXplTWFwKCk7CisgICAgZ092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0TWFw
LT5zZXQodGhpcywgaGVpZ2h0KTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRlTG9n
aWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpCit2b2lkIFJlbmRlckJveDo6c2V0T3ZlcnJpZGlu
Z0xvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKQogewotICAgIGlmICghZ092ZXJyaWRlTG9n
aWNhbFdpZHRoTWFwKQotICAgICAgICBnT3ZlcnJpZGVMb2dpY2FsV2lkdGhNYXAgPSBuZXcgT3Zl
cnJpZGVTaXplTWFwKCk7Ci0gICAgZ092ZXJyaWRlTG9naWNhbFdpZHRoTWFwLT5zZXQodGhpcywg
d2lkdGgpOworICAgIGlmICghZ092ZXJyaWRpbmdMb2dpY2FsV2lkdGhNYXApCisgICAgICAgIGdP
dmVycmlkaW5nTG9naWNhbFdpZHRoTWFwID0gbmV3IE92ZXJyaWRlU2l6ZU1hcCgpOworICAgIGdP
dmVycmlkaW5nTG9naWNhbFdpZHRoTWFwLT5zZXQodGhpcywgd2lkdGgpOwogfQogCi12b2lkIFJl
bmRlckJveDo6Y2xlYXJPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKQordm9pZCBSZW5kZXJCb3g6OmNs
ZWFyT3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoKQogewotICAgIGlmIChnT3ZlcnJpZGVMb2dpY2Fs
SGVpZ2h0TWFwKQotICAgICAgICBnT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0TWFwLT5yZW1vdmUodGhp
cyk7CisgICAgaWYgKGdPdmVycmlkaW5nTG9naWNhbEhlaWdodE1hcCkKKyAgICAgICAgZ092ZXJy
aWRpbmdMb2dpY2FsSGVpZ2h0TWFwLT5yZW1vdmUodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyQm94
OjpjbGVhck92ZXJyaWRlTG9naWNhbFdpZHRoKCkKK3ZvaWQgUmVuZGVyQm94OjpjbGVhck92ZXJy
aWRpbmdMb2dpY2FsV2lkdGgoKQogewotICAgIGlmIChnT3ZlcnJpZGVMb2dpY2FsV2lkdGhNYXAp
Ci0gICAgICAgIGdPdmVycmlkZUxvZ2ljYWxXaWR0aE1hcC0+cmVtb3ZlKHRoaXMpOworICAgIGlm
IChnT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aE1hcCkKKyAgICAgICAgZ092ZXJyaWRpbmdMb2dpY2Fs
V2lkdGhNYXAtPnJlbW92ZSh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNsZWFyT3ZlcnJp
ZGVDb250ZW50U2l6ZSgpCit2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkaW5nQ29udGVudFNp
emUoKQogewotICAgIGNsZWFyT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgY2xlYXJPdmVy
cmlkZUxvZ2ljYWxXaWR0aCgpOworICAgIGNsZWFyT3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoKTsK
KyAgICBjbGVhck92ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6Om92ZXJyaWRlTG9naWNhbFdpZHRoKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94
OjpvdmVycmlkaW5nTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzT3ZlcnJp
ZGVMb2dpY2FsV2lkdGgoKSk7Ci0gICAgcmV0dXJuIGdPdmVycmlkZUxvZ2ljYWxXaWR0aE1hcC0+
Z2V0KHRoaXMpOworICAgIEFTU0VSVChoYXNPdmVycmlkaW5nTG9naWNhbFdpZHRoKCkpOworICAg
IHJldHVybiBnT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aE1hcC0+Z2V0KHRoaXMpOwogfQogCi1MYXlv
dXRVbml0IFJlbmRlckJveDo6b3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK0xheW91dFVu
aXQgUmVuZGVyQm94OjpvdmVycmlkaW5nTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpKTsKLSAgICByZXR1cm4gZ092ZXJyaWRlTG9n
aWNhbEhlaWdodE1hcC0+Z2V0KHRoaXMpOworICAgIEFTU0VSVChoYXNPdmVycmlkaW5nTG9naWNh
bEhlaWdodCgpKTsKKyAgICByZXR1cm4gZ092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0TWFwLT5nZXQo
dGhpcyk7CiB9CiAKLU9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJveDo6b3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBjb25zdAorT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVu
ZGVyQm94OjpvdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSk7Cisg
ICAgQVNTRVJUKGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSk7CiAg
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkKLSAgICAgICAgPyBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdp
ZHRoTWFwLT5nZXQodGhpcykKLSAgICAgICAgOiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodE1hcC0+Z2V0KHRoaXMpOworICAgICAgICA/IGdPdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+Z2V0KHRoaXMpCisgICAgICAgIDog
Z092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+Z2V0KHRo
aXMpOwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6Om92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0CitPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5k
ZXJCb3g6Om92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkpOwor
ICAgIEFTU0VSVChoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpKTsK
ICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKQotICAgICAgICA/IGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0TWFwLT5nZXQodGhpcykKLSAgICAgICAgOiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbFdpZHRoTWFwLT5nZXQodGhpcyk7CisgICAgICAgID8gZ092ZXJyaWRpbmdD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+Z2V0KHRoaXMpCisgICAgICAg
IDogZ092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5nZXQo
dGhpcyk7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRXaWR0aCgpIGNvbnN0Citib29sIFJlbmRlckJveDo6aGFzT3ZlcnJpZGluZ0NvbnRhaW5p
bmdCbG9ja0NvbnRlbnRXaWR0aCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIGNiLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKLSAgICAgICAg
PyBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwICYmIGdPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAtPmNvbnRhaW5zKHRoaXMp
Ci0gICAgICAgIDogZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRN
YXAgJiYgZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmNv
bnRhaW5zKHRoaXMpOworICAgICAgICA/IGdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVu
dExvZ2ljYWxXaWR0aE1hcCAmJiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsV2lkdGhNYXAtPmNvbnRhaW5zKHRoaXMpCisgICAgICAgIDogZ092ZXJyaWRpbmdDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcCAmJiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5jb250YWlucyh0aGlzKTsKIH0KIAotYm9vbCBS
ZW5kZXJCb3g6Omhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0
Citib29sIFJlbmRlckJveDo6aGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWln
aHQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGlmICghY2IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjYi0+c3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpCi0gICAgICAgID8gZ092ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAgJiYgZ092ZXJyaWRlQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmNvbnRhaW5zKHRoaXMpCi0gICAgICAgIDogZ092
ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAgJiYgZ092ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmNvbnRhaW5zKHRoaXMpOwor
ICAgICAgICA/IGdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRN
YXAgJiYgZ092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+
Y29udGFpbnModGhpcykKKyAgICAgICAgOiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0TWFwICYmIGdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHRNYXAtPmNvbnRhaW5zKHRoaXMpOwogfQogCi1PcHRpb25hbDxMYXlvdXRVbml0
PiBSZW5kZXJCb3g6Om92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgp
IGNvbnN0CitPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6Om92ZXJyaWRpbmdDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzT3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkpOwotICAgIHJldHVybiBn
T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5nZXQodGhpcyk7
CisgICAgQVNTRVJUKGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdp
ZHRoKCkpOworICAgIHJldHVybiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dp
Y2FsV2lkdGhNYXAtPmdldCh0aGlzKTsKIH0KIAotT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVy
Qm94OjpvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QK
K09wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJveDo6b3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzT3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKTsKLSAgICByZXR1cm4gZ092ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPmdldCh0aGlzKTsKKyAg
ICBBU1NFUlQoaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0
KCkpOworICAgIHJldHVybiBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0TWFwLT5nZXQodGhpcyk7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjpoYXNPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdAorYm9vbCBSZW5kZXJCb3g6
Omhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0
aE1hcCAmJiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5j
b250YWlucyh0aGlzKTsKKyAgICByZXR1cm4gZ092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbFdpZHRoTWFwICYmIGdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxXaWR0aE1hcC0+Y29udGFpbnModGhpcyk7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjpoYXNP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK2Jvb2wg
UmVuZGVyQm94OjpoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWln
aHQoKSBjb25zdAogewotICAgIHJldHVybiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbEhlaWdodE1hcCAmJiBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bEhlaWdodE1hcC0+Y29udGFpbnModGhpcyk7CisgICAgcmV0dXJuIGdPdmVycmlkaW5nQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAgJiYgZ092ZXJyaWRpbmdDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+Y29udGFpbnModGhpcyk7CiB9CiAKLXZvaWQg
UmVuZGVyQm94OjpzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
T3B0aW9uYWw8TGF5b3V0VW5pdD4gbG9naWNhbFdpZHRoKQordm9pZCBSZW5kZXJCb3g6OnNldE92
ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKE9wdGlvbmFsPExheW91
dFVuaXQ+IGxvZ2ljYWxXaWR0aCkKIHsKLSAgICBpZiAoIWdPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsV2lkdGhNYXApCi0gICAgICAgIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAgPSBuZXcgT3ZlcnJpZGVPcHRpb25hbFNpemVNYXA7Ci0g
ICAgZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcC0+c2V0KHRo
aXMsIGxvZ2ljYWxXaWR0aCk7CisgICAgaWYgKCFnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGhNYXApCisgICAgICAgIGdPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxXaWR0aE1hcCA9IG5ldyBPdmVycmlkZU9wdGlvbmFsU2l6ZU1hcDsKKyAg
ICBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGhNYXAtPnNldCh0
aGlzLCBsb2dpY2FsV2lkdGgpOwogfQogCi12b2lkIFJlbmRlckJveDo6c2V0T3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChPcHRpb25hbDxMYXlvdXRVbml0PiBsb2dp
Y2FsSGVpZ2h0KQordm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodChPcHRpb25hbDxMYXlvdXRVbml0PiBsb2dpY2FsSGVpZ2h0KQog
ewotICAgIGlmICghZ092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRN
YXApCi0gICAgICAgIGdPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0
TWFwID0gbmV3IE92ZXJyaWRlT3B0aW9uYWxTaXplTWFwOwotICAgIGdPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0TWFwLT5zZXQodGhpcywgbG9naWNhbEhlaWdodCk7
CisgICAgaWYgKCFnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0
TWFwKQorICAgICAgICBnT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVp
Z2h0TWFwID0gbmV3IE92ZXJyaWRlT3B0aW9uYWxTaXplTWFwOworICAgIGdPdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPnNldCh0aGlzLCBsb2dpY2FsSGVp
Z2h0KTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50U2l6ZSgpCit2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Js
b2NrQ29udGVudFNpemUoKQogewotICAgIGlmIChnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbFdpZHRoTWFwKQotICAgICAgICBnT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbFdpZHRoTWFwLT5yZW1vdmUodGhpcyk7Ci0gICAgY2xlYXJPdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKGdPdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aE1hcCkKKyAgICAgICAgZ092ZXJyaWRpbmdD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoTWFwLT5yZW1vdmUodGhpcyk7CisgICAg
Y2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKIH0K
IAotdm9pZCBSZW5kZXJCb3g6OmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodCgpCit2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVycmlkaW5nQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKQogewotICAgIGlmIChnT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcCkKLSAgICAgICAgZ092ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHRNYXAtPnJlbW92ZSh0aGlzKTsKKyAgICBpZiAoZ092
ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcCkKKyAgICAgICAg
Z092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodE1hcC0+cmVtb3Zl
KHRoaXMpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6YWRqdXN0Qm9yZGVyQm94TG9naWNh
bFdpZHRoRm9yQm94U2l6aW5nKExheW91dFVuaXQgd2lkdGgpIGNvbnN0CkBAIC0xOTY1LDkgKzE5
NjUsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZs
b2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcgogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKSB7Ci0gICAg
ICAgIGlmIChhdXRvIG92ZXJyaWRlTG9naWNhbFdpZHRoID0gb3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbFdpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVMb2dp
Y2FsV2lkdGgudmFsdWUoKTsKKyAgICBpZiAoaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGgoKSkgeworICAgICAgICBpZiAoYXV0byBvdmVycmlkaW5nTG9naWNh
bFdpZHRoID0gb3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSkK
KyAgICAgICAgICAgIHJldHVybiBvdmVycmlkaW5nTG9naWNhbFdpZHRoLnZhbHVlKCk7CiAgICAg
fQogCiAgICAgaWYgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpKQpAQCAtMTk3
Nyw5ICsxOTc3LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdAogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvckNvbnRlbnQoQXZhaWxhYmxlTG9naWNhbEhlaWdodFR5
cGUgaGVpZ2h0VHlwZSkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG92ZXJyaWRlTG9n
aWNhbEhlaWdodCA9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQo
KSkKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUxvZ2ljYWxIZWlnaHQudmFsdWUoKTsKKyAg
ICBpZiAoaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQgPSBvdmVycmlkaW5n
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgIHJldHVy
biBvdmVycmlkaW5nTG9naWNhbEhlaWdodC52YWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChSZW5k
ZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKSkKQEAgLTIwMTgsMTQgKzIwMTgsMTQgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aElu
RnJhZ21lbnQoUmVuZGVyRnJhZ21lbnQKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnBlcnBlbmRp
Y3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFz
T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAg
IGlmIChhdXRvIG92ZXJyaWRlTG9naWNhbEhlaWdodCA9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUxvZ2lj
YWxIZWlnaHQudmFsdWUoKTsKKyAgICBpZiAoaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsSGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGluZ0xvZ2lj
YWxIZWlnaHQgPSBvdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQo
KSkKKyAgICAgICAgICAgIHJldHVybiBvdmVycmlkaW5nTG9naWNhbEhlaWdodC52YWx1ZSgpOwog
ICAgIH0KIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlm
IChjYi0+aGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBjYi0+b3Zl
cnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpOworICAgIGlmIChjYi0+aGFzT3ZlcnJpZGluZ0xv
Z2ljYWxIZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGNiLT5vdmVycmlkaW5nQ29udGVudExvZ2lj
YWxIZWlnaHQoKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluaW5nQmxvY2tTdHls
ZSA9IGNiLT5zdHlsZSgpOwogICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0TGVuZ3RoID0gY29udGFp
bmluZ0Jsb2NrU3R5bGUubG9naWNhbEhlaWdodCgpOwpAQCAtMjQzMSw4ICsyNDMxLDggQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50KExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYgY29tcHUKICAgICAvLyB3aWR0aC4gIFVzZSB0aGUgd2lkdGggZnJvbSB0
aGUgc3R5bGUgY29udGV4dC4KICAgICAvLyBGSVhNRTogQWNjb3VudCBmb3IgYmxvY2stZmxvdyBp
biBmbGV4aWJsZSBib3hlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDY0MTgKLSAgICBpZiAoaGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSAmJiAoaXNS
dWJ5UnVuKCkgfHwgc3R5bGUoKS5ib3JkZXJGaXQoKSA9PSBCb3JkZXJGaXQ6OkxpbmVzIHx8IChw
YXJlbnQoKS0+aXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKSkpKSB7Ci0gICAgICAg
IGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gb3ZlcnJpZGVMb2dpY2FsV2lkdGgoKTsKKyAgICBp
ZiAoaGFzT3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCgpICYmIChpc1J1YnlSdW4oKSB8fCBzdHlsZSgp
LmJvcmRlckZpdCgpID09IEJvcmRlckZpdDo6TGluZXMgfHwgKHBhcmVudCgpLT5pc0ZsZXhpYmxl
Qm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpKSkpIHsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9l
eHRlbnQgPSBvdmVycmlkaW5nTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTI3NzQsMTAgKzI3NzQsMTAgQEAgc3RhdGljIGJvb2wgc2hvdWxkRmxpcEJlZm9yZUFm
dGVyTWFyZ2lucyhjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmluZ0Jsb2NrU3R5bGUKIAogdm9p
ZCBSZW5kZXJCb3g6OmNhY2hlSW50cmluc2ljQ29udGVudExvZ2ljYWxIZWlnaHRGb3JGbGV4SXRl
bShMYXlvdXRVbml0IGhlaWdodCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaXQgc2hvdWxkIGJl
IGVub3VnaCB3aXRoIGNoZWNraW5nIGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpIGFzIHRoaXMg
bG9naWMgY291bGQgYmUgc2hhcmVkCisgICAgLy8gRklYTUU6IGl0IHNob3VsZCBiZSBlbm91Z2gg
d2l0aCBjaGVja2luZyBoYXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpIGFzIHRoaXMgbG9naWMg
Y291bGQgYmUgc2hhcmVkCiAgICAgLy8gYnkgYW55IGxheW91dCBzeXN0ZW0gdXNpbmcgb3ZlcnJp
ZGVzIGxpa2UgZ3JpZCBvciBmbGV4LiBIb3dldmVyIHRoaXMgY2F1c2VzIGEgbmV2ZXIgZW5kaW5n
IHNlcXVlbmNlIG9mIGNhbGxzCiAgICAgLy8gYmV0d2VlbiBsYXlvdXRCbG9jaygpIDwtPiByZWxh
eW91dFRvQXZvaWRXaWRvd3MoKS4KLSAgICBpZiAoaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRp
b25lZCgpIHx8ICFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmlzRmxleGlibGVCb3goKSB8fCBoYXNP
dmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKKyAgICBpZiAoaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpIHx8ICFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmlzRmxleGlibGVCb3goKSB8fCBo
YXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAgICAgZG93bmNh
c3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCgpKS0+c2V0Q2FjaGVkQ2hpbGRJbnRyaW5zaWND
b250ZW50TG9naWNhbEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKIH0KQEAgLTI4MzgsOCArMjgzOCw4
IEBAIFJlbmRlckJveDo6TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pCiAgICAgICAgIC8vIGdyYWIgb3VyIGNhY2hlZCBm
bGV4aWJsZSBoZWlnaHQuCiAgICAgICAgIC8vIEZJWE1FOiBBY2NvdW50IGZvciBibG9jay1mbG93
IGluIGZsZXhpYmxlIGJveGVzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY0MTgKLSAgICAgICAgaWYgKGhhc092ZXJyaWRlTG9naWNhbEhlaWdo
dCgpICYmIChwYXJlbnQoKS0+aXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKSB8fCBw
YXJlbnQoKS0+aXNSZW5kZXJHcmlkKCkpKSB7Ci0gICAgICAgICAgICBoID0gTGVuZ3RoKG92ZXJy
aWRlTG9naWNhbEhlaWdodCgpLCBGaXhlZCk7CisgICAgICAgIGlmIChoYXNPdmVycmlkaW5nTG9n
aWNhbEhlaWdodCgpICYmIChwYXJlbnQoKS0+aXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0
ZWQoKSB8fCBwYXJlbnQoKS0+aXNSZW5kZXJHcmlkKCkpKSB7CisgICAgICAgICAgICBoID0gTGVu
Z3RoKG92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKTsKICAgICAgICAgfSBlbHNlIGlm
ICh0cmVhdEFzUmVwbGFjZWQpCiAgICAgICAgICAgICBoID0gTGVuZ3RoKGNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxIZWlnaHQoKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCksIEZpeGVk
KTsKICAgICAgICAgZWxzZSB7CkBAIC0zMDIzLDE3ICszMDIzLDE3IEBAIE9wdGlvbmFsPExheW91
dFVuaXQ+IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExl
bmd0aCYgaGVpCiAKICAgICBpZiAoaXNIb3Jpem9udGFsICE9IGNiLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQogICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBjb250YWluaW5nQmxvY2tDaGls
ZC0+Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwotICAgIGVsc2UgaWYg
KGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkKLSAgICAg
ICAgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bEhlaWdodCgpOworICAgIGVsc2UgaWYgKGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodCgpKQorICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBvdmVycmlkaW5n
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKICAgICBlbHNlIGlmIChpczxS
ZW5kZXJUYWJsZUNlbGw+KCpjYikpIHsKICAgICAgICAgaWYgKCFza2lwcGVkQXV0b0hlaWdodENv
bnRhaW5pbmdCbG9jaykgewogICAgICAgICAgICAgLy8gVGFibGUgY2VsbHMgdmlvbGF0ZSB3aGF0
IHRoZSBDU1Mgc3BlYyBzYXlzIHRvIGRvIHdpdGggaGVpZ2h0cy4gQmFzaWNhbGx5IHdlCiAgICAg
ICAgICAgICAvLyBkb24ndCBjYXJlIGlmIHRoZSBjZWxsIHNwZWNpZmllZCBhIGhlaWdodCBvciBu
b3QuIFdlIGp1c3QgYWx3YXlzIG1ha2Ugb3Vyc2VsdmVzCiAgICAgICAgICAgICAvLyBiZSBhIHBl
cmNlbnRhZ2Ugb2YgdGhlIGNlbGwncyBjdXJyZW50IGNvbnRlbnQgaGVpZ2h0LgotICAgICAgICAg
ICAgaWYgKCFjYi0+aGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgICAgICBpZiAo
IWNiLT5oYXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0YWJsZUNlbGxTaG91bGRIYXZlWmVyb0luaXRpYWxTaXplKCpjYiwgKnRoaXMsIHNjcm9sbHNP
dmVyZmxvd1koKSkgPyBPcHRpb25hbDxMYXlvdXRVbml0PigwKSA6IFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gY2ItPm92ZXJyaWRlTG9naWNhbEhlaWdodCgp
IC0gY2ItPmNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpIC0gY2ItPmNvbXB1dGVkQ1NTUGFkZGlu
Z0FmdGVyKCkgLSBjYi0+Ym9yZGVyQmVmb3JlKCkgLSBjYi0+Ym9yZGVyQWZ0ZXIoKTsKKyAgICAg
ICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNiLT5vdmVycmlkaW5nTG9naWNhbEhlaWdodCgpIC0g
Y2ItPmNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpIC0gY2ItPmNvbXB1dGVkQ1NTUGFkZGluZ0Fm
dGVyKCkgLSBjYi0+Ym9yZGVyQmVmb3JlKCkgLSBjYi0+Ym9yZGVyQWZ0ZXIoKTsKICAgICAgICAg
fQogICAgIH0gZWxzZQogICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBjYi0+YXZhaWxhYmxlTG9n
aWNhbEhlaWdodEZvclBlcmNlbnRhZ2VDb21wdXRhdGlvbigpOwpAQCAtMzA0MywxMyArMzA0Mywx
MyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9n
aWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaQogCiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSB2
YWx1ZUZvckxlbmd0aChoZWlnaHQsIGF2YWlsYWJsZUhlaWdodC52YWx1ZSgpIC0gcm9vdE1hcmdp
bkJvcmRlclBhZGRpbmdIZWlnaHQgKyAoaXNUYWJsZSgpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpID8gY2ItPnBhZGRpbmdCZWZvcmUoKSArIGNiLT5wYWRkaW5nQWZ0ZXIoKSA6IDBfbHUpKTsK
ICAgICAKLSAgICAvLyB8b3ZlcnJpZGVMb2dpY2FsSGVpZ2h0fCBpcyB0aGUgbWF4aW11bSBoZWln
aHQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCisgICAgLy8gfG92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0
fCBpcyB0aGUgbWF4aW11bSBoZWlnaHQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCiAgICAgLy8gY2Vs
bCB0byBpdHMgcGVyY2VudCBoZWlnaHQgY2hpbGRyZW4gd2hlbiB3ZSBkZWNpZGUgdGhleSBjYW4g
ZGV0ZXJtaW5lIHRoZQogICAgIC8vIGhlaWdodCBvZiB0aGUgY2VsbC4gSWYgdGhlIHBlcmNlbnQg
aGVpZ2h0IGNoaWxkIGlzIGJveC1zaXppbmc6Y29udGVudC1ib3gKICAgICAvLyB0aGVuIHdlIG11
c3Qgc3VidHJhY3QgdGhlIGJvcmRlciBhbmQgcGFkZGluZyBmcm9tIHRoZSBjZWxsJ3MKLSAgICAv
LyB8YXZhaWxhYmxlSGVpZ2h0fCAoZ2l2ZW4gYnkgfG92ZXJyaWRlTG9naWNhbEhlaWdodHwpIHRv
IGFycml2ZQorICAgIC8vIHxhdmFpbGFibGVIZWlnaHR8IChnaXZlbiBieSB8b3ZlcnJpZGluZ0xv
Z2ljYWxIZWlnaHR8KSB0byBhcnJpdmUKICAgICAvLyBhdCB0aGUgY2hpbGQncyBjb21wdXRlZCBo
ZWlnaHQuCi0gICAgYm9vbCBzdWJ0cmFjdEJvcmRlckFuZFBhZGRpbmcgPSBpc1RhYmxlKCkgfHwg
KGlzPFJlbmRlclRhYmxlQ2VsbD4oKmNiKSAmJiAhc2tpcHBlZEF1dG9IZWlnaHRDb250YWluaW5n
QmxvY2sgJiYgY2ItPmhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpKTsKKyAgICBib29sIHN1YnRy
YWN0Qm9yZGVyQW5kUGFkZGluZyA9IGlzVGFibGUoKSB8fCAoaXM8UmVuZGVyVGFibGVDZWxsPigq
Y2IpICYmICFza2lwcGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jayAmJiBjYi0+aGFzT3ZlcnJp
ZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CiAgICAgaWYgKHN1YnRyYWN0Qm9yZGVyQW5kUGFkZGluZykg
ewogICAgICAgICByZXN1bHQgLT0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KDBfbHUsIHJlc3VsdCk7CkBAIC0zMTg4LDggKzMxODgsOCBA
QCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5n
KFNpemVUeXBlIGhlaWdodFR5cGUsIExlbgogICAgICAgICAgICAgICAgIGJsb2NrLT5hZGRQZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudCgqY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT5pc0ZsZXhJdGVtKCkpCiAgICAgICAgICAgICAgICAgICAg
IHN0cmV0Y2hlZEhlaWdodCA9IGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihibG9jay0+cGFy
ZW50KCkpLT5jaGlsZExvZ2ljYWxIZWlnaHRGb3JQZXJjZW50YWdlUmVzb2x1dGlvbigqYmxvY2sp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJsb2NrLT5pc0dyaWRJdGVtKCkgJiYgYmxvY2st
Pmhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJldGNo
ZWRIZWlnaHQgPSBibG9jay0+b3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgLSBibG9jay0+Ym9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChibG9j
ay0+aXNHcmlkSXRlbSgpICYmIGJsb2NrLT5oYXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpKQor
ICAgICAgICAgICAgICAgICAgICBzdHJldGNoZWRIZWlnaHQgPSBibG9jay0+b3ZlcnJpZGluZ0xv
Z2ljYWxIZWlnaHQoKSAtIGJsb2NrLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWxjdWxhdGlvbiBp
cyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCkBAIC0zMjU0LDggKzMyNTQsOCBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExl
bmd0aCYgaCwgQXZhaWxhYmxlTG9naQogICAgIC8vIGFydGlmaWNpYWxseS4gIFdlJ3JlIGdvaW5n
IHRvIHJlbHkgb24gdGhpcyBjZWxsIGdldHRpbmcgZXhwYW5kZWQgdG8gc29tZSBuZXcKICAgICAv
LyBoZWlnaHQsIGFuZCB0aGVuIHdoZW4gd2UgbGF5IG91dCBhZ2FpbiB3ZSdsbCB1c2UgdGhlIGNh
bGN1bGF0aW9uIGJlbG93LgogICAgIGlmIChpc1RhYmxlQ2VsbCgpICYmIChoLmlzQXV0bygpIHx8
IGguaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkpKSB7Ci0gICAgICAgIGlmIChoYXNPdmVycmlkZUxv
Z2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUxvZ2ljYWxIZWlnaHQo
KSAtIGNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpIC0gY29tcHV0ZWRDU1NQYWRkaW5nQWZ0ZXIo
KSAtIGJvcmRlckJlZm9yZSgpIC0gYm9yZGVyQWZ0ZXIoKTsKKyAgICAgICAgaWYgKGhhc092ZXJy
aWRpbmdMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGluZ0xvZ2lj
YWxIZWlnaHQoKSAtIGNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpIC0gY29tcHV0ZWRDU1NQYWRk
aW5nQWZ0ZXIoKSAtIGJvcmRlckJlZm9yZSgpIC0gYm9yZGVyQWZ0ZXIoKTsKICAgICAgICAgcmV0
dXJuIGxvZ2ljYWxIZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CiAg
ICAgfQogCkBAIC0zMzI0LDkgKzMzMjQsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFp
bmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAg
IGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2su
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQog
ICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQo
Y29udGFpbmluZ0Jsb2NrLCBmYWxzZSk7CiAKLSAgICBpZiAoaGFzT3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGVM
b2dpY2FsV2lkdGggPSBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgo
KSkKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUxvZ2ljYWxXaWR0aC52YWx1ZSgpOworICAg
IGlmIChoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKSB7
CisgICAgICAgIGlmIChhdXRvIG92ZXJyaWRpbmdMb2dpY2FsV2lkdGggPSBvdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRpbmdMb2dpY2FsV2lkdGgudmFsdWUoKTsKICAgICB9CiAKICAgICBpZiAoaXM8UmVuZGVy
Qm94Pihjb250YWluaW5nQmxvY2spKSB7CkBAIC0zMzg5LDkgKzMzODksOSBAQCBMYXlvdXRVbml0
IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29u
c3QgUmVuZGVyQm94TQogICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSAm
JiBjb250YWluaW5nQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIsIGZhbHNlKTsKIAotICAg
IGlmIChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIHsK
LSAgICAgICAgaWYgKGF1dG8gb3ZlcnJpZGVMb2dpY2FsSGVpZ2h0ID0gb3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIG92ZXJy
aWRlTG9naWNhbEhlaWdodC52YWx1ZSgpOworICAgIGlmIChoYXNPdmVycmlkaW5nQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSkgeworICAgICAgICBpZiAoYXV0byBvdmVycmlk
aW5nTG9naWNhbEhlaWdodCA9IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bEhlaWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0LnZh
bHVlKCk7CiAgICAgfQogCiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay5pc0JveCgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggOWQyMDlkMWJmODcyMDVhNGViYzczZjRm
M2QyMDVjODExMzc0MjVlYi4uZjg5YTY0YjUxMGNlMzM4YmMwNTg3YjIyODgzNDY2MzQyMGNjNmUx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMzA3LDMxICszMDcsMzEg
QEAgcHVibGljOgogICAgIExheW91dFVuaXQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIExheW91dFVuaXQgb3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSBj
b25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJyaWRlTG9naWNhbEhlaWdodCgpIGNvbnN0OwotICAg
IGJvb2wgaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNPdmVy
cmlkZUxvZ2ljYWxXaWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T3ZlcnJpZGVMb2dpY2FsSGVp
Z2h0KExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgoTGF5b3V0
VW5pdCk7Ci0gICAgdm9pZCBjbGVhck92ZXJyaWRlQ29udGVudFNpemUoKTsKLSAgICB2b2lkIGNs
ZWFyT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgdm9pZCBjbGVhck92ZXJyaWRlTG9naWNh
bFdpZHRoKCk7Ci0KLSAgICBMYXlvdXRVbml0IG92ZXJyaWRlQ29udGVudExvZ2ljYWxXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRlTG9naWNhbFdpZHRoKCkgLSBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbFdpZHRoKCkgLSBzY3JvbGxiYXJMb2dpY2FsV2lkdGgoKTsgfQotICAgIExheW91dFVu
aXQgb3ZlcnJpZGVDb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG92ZXJyaWRl
TG9naWNhbEhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKTsgfQotCi0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdDsK
LSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRM
b2dpY2FsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdDsKLSAgICBib29sIGhhc092ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIHNldE92ZXJy
aWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChPcHRpb25hbDxMYXlvdXRVbml0
Pik7Ci0gICAgdm9pZCBzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVp
Z2h0KE9wdGlvbmFsPExheW91dFVuaXQ+KTsKLSAgICB2b2lkIGNsZWFyT3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50U2l6ZSgpOwotICAgIHZvaWQgY2xlYXJPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBvdmVycmlkaW5nTG9n
aWNhbFdpZHRoKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVycmlkaW5nTG9naWNhbEhlaWdo
dCgpIGNvbnN0OworICAgIGJvb2wgaGFzT3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsK
KyAgICBib29sIGhhc092ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNl
dE92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0T3ZlcnJp
ZGluZ0xvZ2ljYWxXaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lkIGNsZWFyT3ZlcnJpZGluZ0Nv
bnRlbnRTaXplKCk7CisgICAgdm9pZCBjbGVhck92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgdm9pZCBjbGVhck92ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKTsKKworICAgIExheW91dFVuaXQg
b3ZlcnJpZGluZ0NvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBvdmVycmlkaW5n
TG9naWNhbFdpZHRoKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkgLSBzY3JvbGxi
YXJMb2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgb3ZlcnJpZGluZ0NvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gb3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoKSAtIGJv
cmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgLSBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7
IH0KKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tD
b250ZW50V2lkdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBv
dmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRI
ZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlk
aW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhl
aWdodCgpIGNvbnN0OworICAgIGJvb2wgaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc092ZXJyaWRpbmdDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZvaWQgc2V0T3ZlcnJpZGlu
Z0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoT3B0aW9uYWw8TGF5b3V0VW5pdD4p
OworICAgIHZvaWQgc2V0T3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVp
Z2h0KE9wdGlvbmFsPExheW91dFVuaXQ+KTsKKyAgICB2b2lkIGNsZWFyT3ZlcnJpZGluZ0NvbnRh
aW5pbmdCbG9ja0NvbnRlbnRTaXplKCk7CisgICAgdm9pZCBjbGVhck92ZXJyaWRpbmdDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpOwogCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRG
cm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9m
ZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCAyMjgwOGRhOWYyOWY5NTMyMzMzN2NhMzc4YWIzYjdhZjhiMzAyMTJlLi5lZTExNjhkNDQyODM1
MGRhOGFlMjdkZDYxZWEzMWQ0NDk3MWY0YzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTI4MCw3ICsyODAsNyBAQCBib29s
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpoYXNBdXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRo
QXV0b0hlaWdodCgpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIGlmICh0aGlzQm94ICYmIHRoaXNCb3gtPmlzR3JpZEl0ZW0oKSAmJiB0aGlzQm94LT5o
YXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpCisgICAgaWYg
KHRoaXNCb3ggJiYgdGhpc0JveC0+aXNHcmlkSXRlbSgpICYmIHRoaXNCb3gtPmhhc092ZXJyaWRp
bmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgaWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNBdXRvKCkgJiYgIWlz
T3V0T2ZGbG93UG9zaXRpb25lZFdpdGhJbXBsaWNpdEhlaWdodCgqdGhpcykpCkBAIC0zNDgsOCAr
MzQ4LDggQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVsYXRpdmVQb3NpdGlv
bk9mZnNldCgpIGNvbnN0CiAgICAgLy8gSG93ZXZlciBmb3IgZ3JpZCBpdGVtcyB0aGUgY29udGFp
bmluZyBibG9jayBpcyB0aGUgZ3JpZCBhcmVhLCBzbyBvZmZzZXRzIHNob3VsZCBiZSByZXNvbHZl
ZCBhZ2FpbnN0IHRoYXQ6CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1ncmlk
LyNncmlkLWl0ZW0tc2l6aW5nCiAgICAgaWYgKCFzdHlsZSgpLmxlZnQoKS5pc0F1dG8oKSB8fCAh
c3R5bGUoKS5yaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGggPSBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpCi0gICAgICAg
ICAgICA/IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkudmFsdWVPcihMYXlv
dXRVbml0KCkpIDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZVdpZHRoKCk7CisgICAgICAg
IExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGggPSBoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2Nr
Q29udGVudFdpZHRoKCkKKyAgICAgICAgICAgID8gb3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRXaWR0aCgpLnZhbHVlT3IoTGF5b3V0VW5pdCgpKSA6IGNvbnRhaW5pbmdCbG9jaygpLT5h
dmFpbGFibGVXaWR0aCgpOwogICAgICAgICBpZiAoIXN0eWxlKCkubGVmdCgpLmlzQXV0bygpKSB7
CiAgICAgICAgICAgICBpZiAoIXN0eWxlKCkucmlnaHQoKS5pc0F1dG8oKSAmJiAhY29udGFpbmlu
Z0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAg
ICAgIG9mZnNldC5zZXRXaWR0aCgtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5yaWdodCgpLCAhc3R5
bGUoKS5yaWdodCgpLmlzRml4ZWQoKSA/IGF2YWlsYWJsZVdpZHRoIDogMF9sdSkpOwpAQCAtMzcx
LDIxICszNzEsMjEgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgICAgICYmICghc3R5bGUoKS50b3AoKS5pc1BlcmNl
bnRPckNhbGN1bGF0ZWQoKQogICAgICAgICAgICAgfHwgIWNvbnRhaW5pbmdCbG9jaygpLT5oYXNB
dXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRoQXV0b0hlaWdodCgpCiAgICAgICAgICAgICB8
fCBjb250YWluaW5nQmxvY2soKS0+c3RyZXRjaGVzVG9WaWV3cG9ydCgpCi0gICAgICAgICAgICB8
fCBoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSkpIHsKKyAgICAgICAg
ICAgIHx8IGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgY29tcHV0YXRpb24gb2YgdGhlIGF2YWlsYWJsZSBoZWlnaHQg
aXMgcmVwZWF0ZWQgbGF0ZXIgZm9yICJib3R0b20iLgogICAgICAgICAvLyBXZSBjb3VsZCByZWZh
Y3RvciB0aGlzIGFuZCBtb3ZlIGl0IHRvIHNvbWUgY29tbW9uIGNvZGUgZm9yIGJvdGggaWZzLCBo
b3dldmVyIG1vdmluZyBpdCBvdXRzaWRlIG9mIHRoZSBpZnMKICAgICAgICAgLy8gaXMgbm90IHBv
c3NpYmxlIGFzIGl0J2QgY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuCiAgICAgICAgIG9m
ZnNldC5leHBhbmQoMF9sdSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS50b3AoKSwgIXN0eWxlKCku
dG9wKCkuaXNGaXhlZCgpCi0gICAgICAgICAgICA/IChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRIZWlnaHQoKSA/IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgp
LnZhbHVlT3IoMF9sdSkgOiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlSGVpZ2h0KCkpCisg
ICAgICAgICAgICA/IChoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgp
ID8gb3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKS52YWx1ZU9yKDBfbHUp
IDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKQogICAgICAgICAgICAgOiBM
YXlvdXRVbml0KCkpKTsKICAgICB9IGVsc2UgaWYgKCFzdHlsZSgpLmJvdHRvbSgpLmlzQXV0bygp
CiAgICAgICAgICYmICghc3R5bGUoKS5ib3R0b20oKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKQog
ICAgICAgICAgICAgfHwgIWNvbnRhaW5pbmdCbG9jaygpLT5oYXNBdXRvSGVpZ2h0T3JDb250YWlu
aW5nQmxvY2tXaXRoQXV0b0hlaWdodCgpCiAgICAgICAgICAgICB8fCBjb250YWluaW5nQmxvY2so
KS0+c3RyZXRjaGVzVG9WaWV3cG9ydCgpCi0gICAgICAgICAgICB8fCBoYXNPdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIHx8IGhhc092ZXJyaWRp
bmdDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBD
aGVjayBjb21tZW50IGFib3ZlIGZvciAidG9wIiwgaXQgYXBwbGllcyBoZXJlIHRvby4KICAgICAg
ICAgb2Zmc2V0LmV4cGFuZCgwX2x1LCAtdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5ib3R0b20oKSwg
IXN0eWxlKCkuYm90dG9tKCkuaXNGaXhlZCgpCi0gICAgICAgICAgICA/IChoYXNPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKSA/IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29u
dGVudEhlaWdodCgpLnZhbHVlT3IoMF9sdSkgOiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxl
SGVpZ2h0KCkpCisgICAgICAgICAgICA/IChoYXNPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29u
dGVudEhlaWdodCgpID8gb3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRIZWlnaHQoKS52
YWx1ZU9yKDBfbHUpIDogY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKQogICAg
ICAgICAgICAgOiBMYXlvdXRVbml0KCkpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggYWM1OTNjYWYxMzlmMTFmODdi
Yzg1OTU1YmQ1ZGFhYWQ1MGRhMWI2Ni4uZjc5N2VhYmFhNzc4MzIwMGZhM2RhMTcyZWI1Nzk5ZWQ4
ODc4OWVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmgKQEAgLTIzMywxMCArMjMzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUnVu
bmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9ucygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBPcHRpb25h
bDxMYXlvdXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRXaWR0aCgpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAtMV9sdTsgfQotICAgIHZpcnR1YWwgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50SGVpZ2h0KCkg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIC0xX2x1OyB9Ci0gICAgdmlydHVh
bCBib29sIGhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIE9w
dGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgo
KSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gLTFfbHU7IH0KKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50
SGVpZ2h0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIC0xX2x1OyB9Cisg
ICAgdmlydHVhbCBib29sIGhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50V2lkdGgo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVycmlkaW5n
Q29udGFpbmluZ0Jsb2NrQ29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
IHByb3RlY3RlZDoKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdChFbGVtZW50JiwgUmVuZGVyU3R5
bGUmJiwgQmFzZVR5cGVGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCmluZGV4IGY4MGJmNWU4YWVjZTA0
NGE1ZGVjMmE5NTExYWNjODkyZWEwYWI2YzQuLjAwMzA1NGVjMjVmNDAzNzk0ZDhmN2FjM2VkZjU1
ZmUzOGE4NzViNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCkBAIC0xNTMsMTUgKzE1MywxNSBAQCBzdGF0
aWMgYm9vbCBjaGlsZERvZXNOb3RBZmZlY3RXaWR0aE9yRmxleGluZyhSZW5kZXJPYmplY3QqIGNo
aWxkKQogCiBzdGF0aWMgTGF5b3V0VW5pdCB3aWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQp
CiB7Ci0gICAgaWYgKGNoaWxkLT5oYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpKQotICAgICAgICBy
ZXR1cm4gY2hpbGQtPm92ZXJyaWRlTG9naWNhbFdpZHRoKCk7CisgICAgaWYgKGNoaWxkLT5oYXNP
dmVycmlkaW5nTG9naWNhbFdpZHRoKCkpCisgICAgICAgIHJldHVybiBjaGlsZC0+b3ZlcnJpZGlu
Z0xvZ2ljYWxXaWR0aCgpOwogICAgIHJldHVybiBjaGlsZC0+bG9naWNhbFdpZHRoKCk7CiB9CiAK
IHN0YXRpYyBMYXlvdXRVbml0IGhlaWdodEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpCiB7Ci0g
ICAgaWYgKGNoaWxkLT5oYXNPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
IGNoaWxkLT5vdmVycmlkZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoY2hpbGQtPmhhc092ZXJy
aWRpbmdMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBjaGlsZC0+b3ZlcnJpZGluZ0xv
Z2ljYWxIZWlnaHQoKTsKICAgICByZXR1cm4gY2hpbGQtPmxvZ2ljYWxIZWlnaHQoKTsKIH0KIApA
QCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckZsZXhDaGlsZHJlbkluZm8oRmxl
eEJveEl0ZXJhdG9yJiBpdGVyYXRvciwgYm9vbCByZWxheW91dENoaWxkCiAgICAgICAgIGlmICgh
Y2hpbGREb2VzTm90QWZmZWN0V2lkdGhPckZsZXhpbmcoY2hpbGQpICYmIGNoaWxkLT5zdHlsZSgp
LmJveEZsZXgoKSA+IDAuMGYpIHsKICAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBoYXZlIHRvIGxh
eSBvdXQgZmxleGlibGUgb2JqZWN0cyBhZ2Fpbiwgc2luY2UgdGhlIGZsZXggZGlzdHJpYnV0aW9u
CiAgICAgICAgICAgICAvLyBtYXkgaGF2ZSBjaGFuZ2VkLCBhbmQgd2UgbmVlZCB0byByZWFsbG9j
YXRlIHNwYWNlLgotICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgp
OworICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGluZ0NvbnRlbnRTaXplKCk7CiAgICAg
ICAgICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgY2hpbGQtPnNl
dENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgIGhhdmVGbGV4ID0g
dHJ1ZTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6bGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxsb3dlZENoaWxkRmxleChjaGlsZCwgZXhwYW5kaW5nLCBpKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3BhY2VBZGQgPSBMYXlv
dXRVbml0KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MgKiAoY2hpbGQtPnN0eWxlKCkuYm94RmxleCgp
IC8gdG90YWxGbGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlQWRk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxv
Z2ljYWxXaWR0aCh3aWR0aEZvckNoaWxkKGNoaWxkKSArIHNwYWNlQWRkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRpbmdMb2dpY2FsV2lkdGgod2lk
dGhGb3JDaGlsZChjaGlsZCkgKyBzcGFjZUFkZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsZXhpbmdDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eDo6bGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IHNwYWNlQWRkID0gZ3JvdXBSZW1haW5pbmdTcGFjZSA+
IDAgPyAxIDogLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogY2hp
bGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZCAmJiBncm91cFJlbWFpbmluZ1NwYWNlOyBjaGls
ZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
bGxvd2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxvZ2ljYWxXaWR0aCh3aWR0aEZvckNo
aWxkKGNoaWxkKSArIHNwYWNlQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGQtPnNldE92ZXJyaWRpbmdMb2dpY2FsV2lkdGgod2lkdGhGb3JDaGlsZChjaGlsZCkgKyBz
cGFjZUFkZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhpbmdDaGlsZHJl
biA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRy
ZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdTcGFj
ZSAtPSBzcGFjZUFkZDsKQEAgLTg1Miw3ICs4NTIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRG
bGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKQogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRDaGlsZEZsZXgoY2hpbGQsIGV4cGFuZGlu
ZywgaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHNwYWNlQWRk
IHsgc3BhY2VBdmFpbGFibGVUaGlzUGFzcyAqIChjaGlsZC0+c3R5bGUoKS5ib3hGbGV4KCkgLyB0
b3RhbEZsZXgpIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlQWRkKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxvZ2lj
YWxIZWlnaHQoaGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgc3BhY2VBZGQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0T3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoaGVp
Z2h0Rm9yQ2hpbGQoY2hpbGQpICsgc3BhY2VBZGQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbGV4aW5nQ2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CkBAIC04NjksNyArODY5LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3g6OmxheW91dFZlcnRpY2FsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgc3BhY2VBZGQgPSBncm91cFJlbWFpbmluZ1NwYWNlID4g
MCA/IDEgOiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGls
ZCA9IGl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkICYmIGdyb3VwUmVtYWluaW5nU3BhY2U7IGNoaWxk
ID0gaXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFs
bG93ZWRDaGlsZEZsZXgoY2hpbGQsIGV4cGFuZGluZywgaSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9naWNhbEhlaWdodChoZWlnaHRGb3JD
aGlsZChjaGlsZCkgKyBzcGFjZUFkZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkLT5zZXRPdmVycmlkaW5nTG9naWNhbEhlaWdodChoZWlnaHRGb3JDaGlsZChjaGlsZCkg
KyBzcGFjZUFkZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhpbmdDaGls
ZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF5b3V0Q2hp
bGRyZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdT
cGFjZSAtPSBzcGFjZUFkZDsKQEAgLTk0Nyw3ICs5NDcsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveDo6YXBwbHlMaW5lQ2xhbXAoRmxleEJveEl0ZXJhdG9yJiBpdGVyYXRvciwg
Ym9vbAogICAgICAgICBpZiAoY2hpbGREb2VzTm90QWZmZWN0V2lkdGhPckZsZXhpbmcoY2hpbGQp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVD
b250ZW50U2l6ZSgpOworICAgICAgICBjaGlsZC0+Y2xlYXJPdmVycmlkaW5nQ29udGVudFNpemUo
KTsKICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgKGNoaWxkLT5pc1JlcGxhY2VkKCkg
JiYgKGNoaWxkLT5zdHlsZSgpLndpZHRoKCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgfHwgY2hp
bGQtPnN0eWxlKCkuaGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkpKQogICAgICAgICAg
ICAgfHwgKGNoaWxkLT5zdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpICYmIGlzPFJlbmRlckJsb2Nr
Rmxvdz4oKmNoaWxkKSkpIHsKICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CkBAIC05ODQsNyArOTg0LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJv
b2wKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRz
TGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUxvZ2ljYWxI
ZWlnaHQobmV3SGVpZ2h0KTsKKyAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRpbmdMb2dpY2FsSGVp
Z2h0KG5ld0hlaWdodCk7CiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAg
ICAgIC8vIEZJWE1FOiBGb3Igbm93IGRvbid0IHN1cHBvcnQgUlRMLgpAQCAtMTA0OSw3ICsxMDQ5
LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmNsZWFyTGluZUNsYW1wKCkK
ICAgICAgICAgaWYgKGNoaWxkRG9lc05vdEFmZmVjdFdpZHRoT3JGbGV4aW5nKGNoaWxkKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRlQ29udGVu
dFNpemUoKTsKKyAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGluZ0NvbnRlbnRTaXplKCk7CiAg
ICAgICAgIGlmICgoY2hpbGQtPmlzUmVwbGFjZWQoKSAmJiAoY2hpbGQtPnN0eWxlKCkud2lkdGgo
KS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCBjaGlsZC0+c3R5bGUoKS5oZWlnaHQoKS5pc1Bl
cmNlbnRPckNhbGN1bGF0ZWQoKSkpCiAgICAgICAgICAgICB8fCAoY2hpbGQtPnN0eWxlKCkuaGVp
Z2h0KCkuaXNBdXRvKCkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqY2hpbGQpKSkgewogICAgICAg
ICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IDZlNjg4OTcxODdmYTAwYjFmN2U5
YjQ3ODJjY2FiNmE5NTAzOWE1MGQuLmJlYzdlZDI4ZGM2NDIxMjkwY2MyY2MwZGViNmZhZTU2N2Y4
OTFjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcApAQCAtNDgwLDE0ICs0ODAsMTQgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6
Y2hpbGRJbnRyaW5zaWNMb2dpY2FsV2lkdGgoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAg
ICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxXaWR0aCgpOwogCiAgICAgLy8gVGVtcG9yYXJpbHkgY2xl
YXIgcG90ZW50aWFsIG92ZXJyaWRlcyB0byBjb21wdXRlIHRoZSBsb2dpY2FsIHdpZHRoIG90aGVy
d2lzZSBpdCdsbCByZXR1cm4gdGhlIG92ZXJyaWRlIHNpemUuCi0gICAgYm9vbCBjaGlsZEhhc092
ZXJyaWRlV2lkdGggPSBjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxXaWR0aCgpOwotICAgIGF1dG8g
b3ZlcnJpZGVXaWR0aCA9IGNoaWxkSGFzT3ZlcnJpZGVXaWR0aCA/IGNoaWxkLm92ZXJyaWRlTG9n
aWNhbFdpZHRoKCkgOiAtMV9sdTsKKyAgICBib29sIGNoaWxkSGFzT3ZlcnJpZGVXaWR0aCA9IGNo
aWxkLmhhc092ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICBhdXRvIG92ZXJyaWRlV2lkdGgg
PSBjaGlsZEhhc092ZXJyaWRlV2lkdGggPyBjaGlsZC5vdmVycmlkaW5nTG9naWNhbFdpZHRoKCkg
OiAtMV9sdTsKICAgICBpZiAoY2hpbGRIYXNPdmVycmlkZVdpZHRoKQotICAgICAgICBjb25zdF9j
YXN0PFJlbmRlckJveCo+KCZjaGlsZCktPmNsZWFyT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKTsKKyAg
ICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPigmY2hpbGQpLT5jbGVhck92ZXJyaWRpbmdMb2dp
Y2FsV2lkdGgoKTsKICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgdmFsdWVzOwogICAg
IGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50KHZhbHVlcyk7CiAgICAgaWYgKGNo
aWxkSGFzT3ZlcnJpZGVXaWR0aCkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPigmY2hp
bGQpLT5zZXRPdmVycmlkZUxvZ2ljYWxXaWR0aChvdmVycmlkZVdpZHRoKTsKKyAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJCb3gqPigmY2hpbGQpLT5zZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKG92
ZXJyaWRlV2lkdGgpOwogICAgIHJldHVybiB2YWx1ZXMubV9leHRlbnQ7CiB9CiAKQEAgLTg0NCw3
ICs4NDQsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjbGVhckNhY2hlZE1haW5TaXplRm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAKIExheW91dFVuaXQgUmVuZGVyRmxl
eGlibGVCb3g6OmNvbXB1dGVJbm5lckZsZXhCYXNlU2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQsIExheW91dFVuaXQgbWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nLCBib29sIHJlbGF5b3V0Q2hp
bGRyZW4pCiB7Ci0gICAgY2hpbGQuY2xlYXJPdmVycmlkZUNvbnRlbnRTaXplKCk7CisgICAgY2hp
bGQuY2xlYXJPdmVycmlkaW5nQ29udGVudFNpemUoKTsKICAgICAKICAgICBMZW5ndGggZmxleEJh
c2lzID0gZmxleEJhc2lzRm9yQ2hpbGQoY2hpbGQpOwogICAgIGlmIChtYWluQXhpc0xlbmd0aElz
RGVmaW5pdGUoY2hpbGQsIGZsZXhCYXNpcykpCkBAIC0xMTY5LDggKzExNjksOCBAQCBPcHRpb25h
bDxMYXlvdXRVbml0PiBSZW5kZXJGbGV4aWJsZUJveDo6Y3Jvc3NTaXplRm9yUGVyY2VudGFnZVJl
c29sdXRpb24oY29uc3QgUgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8g
SGVyZSB3ZSBpbXBsZW1lbnQgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mbGV4Ym94LyNh
bGdvLXN0cmV0Y2gKLSAgICBpZiAoY2hpbGQuaGFzT3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkpCi0g
ICAgICAgIHJldHVybiBjaGlsZC5vdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAg
aWYgKGNoaWxkLmhhc092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBj
aGlsZC5vdmVycmlkaW5nQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKIAogICAgIC8vIFdlIGRvbid0
IGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIG9wdGltaXphdGlvbiBmcm9tCiAgICAgLy8gaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mbGV4Ym94LyNkZWZpbml0ZS1zaXplcyBjYXNlIDEuIFdo
aWxlIHRoYXQKQEAgLTExOTAsNyArMTE5MCw3IEBAIE9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRl
ckZsZXhpYmxlQm94OjptYWluU2l6ZUZvclBlcmNlbnRhZ2VSZXNvbHV0aW9uKGNvbnN0IFJlCiAg
ICAgaWYgKCFtYWluQXhpc0xlbmd0aElzRGVmaW5pdGUoY2hpbGQsIExlbmd0aCgwLCBQZXJjZW50
KSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gY2hpbGQuaGFz
T3ZlcnJpZGVMb2dpY2FsSGVpZ2h0KCkgPyBPcHRpb25hbDxMYXlvdXRVbml0PihjaGlsZC5vdmVy
cmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIDogV1RGOjpudWxsb3B0OworICAgIHJldHVybiBj
aGlsZC5oYXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpID8gT3B0aW9uYWw8TGF5b3V0VW5pdD4o
Y2hpbGQub3ZlcnJpZGluZ0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIDogV1RGOjpudWxsb3B0Owog
fQogCiBPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJGbGV4aWJsZUJveDo6Y2hpbGRMb2dpY2Fs
SGVpZ2h0Rm9yUGVyY2VudGFnZVJlc29sdXRpb24oY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKQEAg
LTEyMzEsMTUgKzEyMzEsMTUgQEAgRmxleEl0ZW0gUmVuZGVyRmxleGlibGVCb3g6OmNvbnN0cnVj
dEZsZXhJdGVtKFJlbmRlckJveCYgY2hpbGQsIGJvb2wgcmVsYXlvdXRDaGkKICAgICAgICAgLy8g
YnkgZGVmaW5pdGlvbiB3ZSBoYXZlIGFuIGluZGVmaW5pdGUgZmxleCBiYXNpcyBoZXJlIGFuZCB0
aHVzIHBlcmNlbnRhZ2VzIHNob3VsZCBub3QgcmVzb2x2ZS4KICAgICAgICAgaWYgKGNoaWxkLm5l
ZWRzTGF5b3V0KCkgfHwgIW1faW50cmluc2ljU2l6ZUFsb25nTWFpbkF4aXMuY29udGFpbnMoJmNo
aWxkKSkgewogICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY2hp
bGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBjaGlsZC5zZXRP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KFdURjo6bnVsbG9wdCk7
CisgICAgICAgICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsSGVpZ2h0KFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdp
ZHRoKFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICBjaGlsZC5jbGVhck92ZXJyaWRlQ29udGVu
dFNpemUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRPdmVycmlkaW5nQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxXaWR0aChXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgY2hpbGQu
Y2xlYXJPdmVycmlkaW5nQ29udGVudFNpemUoKTsKICAgICAgICAgICAgIGNoaWxkLnNldENoaWxk
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVl
ZGVkKCk7CiAgICAgICAgICAgICBjYWNoZUNoaWxkTWFpblNpemUoY2hpbGQpOwogICAgICAgICAg
ICAgcmVsYXlvdXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgY2hpbGQuY2xlYXJPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplKCk7CisgICAgICAgICAgICBjaGlsZC5jbGVh
ck92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgpOwogICAgICAgICB9CiAgICAg
fQogICAgIApAQCAtMTQyNCw5ICsxNDI0LDkgQEAgc3RhdGljIExheW91dFVuaXQgYWxpZ25tZW50
T2Zmc2V0KExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBJdGVtUG9zaXRpb24gcG8KIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OnNldE92ZXJyaWRlTWFpbkF4aXNDb250ZW50U2l6ZUZvckNo
aWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRQcmVmZXJyZWRTaXplKQogewog
ICAgIGlmIChoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkpCi0gICAgICAgIGNoaWxkLnNldE92ZXJy
aWRlTG9naWNhbEhlaWdodChjaGlsZFByZWZlcnJlZFNpemUgKyBjaGlsZC5ib3JkZXJBbmRQYWRk
aW5nTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGluZ0xvZ2ljYWxI
ZWlnaHQoY2hpbGRQcmVmZXJyZWRTaXplICsgY2hpbGQuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxI
ZWlnaHQoKSk7CiAgICAgZWxzZQotICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUxvZ2ljYWxXaWR0
aChjaGlsZFByZWZlcnJlZFNpemUgKyBjaGlsZC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRo
KCkpOworICAgICAgICBjaGlsZC5zZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKGNoaWxkUHJlZmVy
cmVkU2l6ZSArIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSk7CiB9CiAKIExh
eW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OnN0YXRpY01haW5BeGlzUG9zaXRpb25Gb3JQb3Np
dGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKQEAgLTE4ODMsOCArMTg4Myw4IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pCiAgICAgICAgICAgICAvLyBTbywgcmVkbyBpdCBoZXJl
LgogICAgICAgICAgICAgY2hpbGROZWVkc1JlbGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoY2hpbGROZWVkc1JlbGF5b3V0IHx8ICFjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxI
ZWlnaHQoKSkKLSAgICAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlTG9naWNhbEhlaWdodChkZXNp
cmVkTG9naWNhbEhlaWdodCk7CisgICAgICAgIGlmIChjaGlsZE5lZWRzUmVsYXlvdXQgfHwgIWNo
aWxkLmhhc092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgICAgICBjaGlsZC5zZXRP
dmVycmlkaW5nTG9naWNhbEhlaWdodChkZXNpcmVkTG9naWNhbEhlaWdodCk7CiAgICAgICAgIGlm
IChjaGlsZE5lZWRzUmVsYXlvdXQpIHsKICAgICAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IHJl
c2V0Q2hpbGRMb2dpY2FsSGVpZ2h0KG1fc2hvdWxkUmVzZXRDaGlsZExvZ2ljYWxIZWlnaHRCZWZv
cmVMYXlvdXQsIHRydWUpOwogICAgICAgICAgICAgLy8gV2UgY2FjaGUgdGhlIGNoaWxkJ3MgaW50
cmluc2ljIGNvbnRlbnQgbG9naWNhbCBoZWlnaHQgdG8gYXZvaWQgaXQgYmVpbmcKQEAgLTE5MDUs
NyArMTkwNSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFsaWdubWVu
dFRvQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pCiAgICAgICAgIGNoaWxkV2lkdGgg
PSBjaGlsZC5jb25zdHJhaW5Mb2dpY2FsV2lkdGhJbkZyYWdtZW50QnlNaW5NYXgoY2hpbGRXaWR0
aCwgY3Jvc3NBeGlzQ29udGVudEV4dGVudCgpLCAqdGhpcywgbnVsbHB0cik7CiAgICAgICAgIAog
ICAgICAgICBpZiAoY2hpbGRXaWR0aCAhPSBjaGlsZC5sb2dpY2FsV2lkdGgoKSkgewotICAgICAg
ICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVMb2dpY2FsV2lkdGgoY2hpbGRXaWR0aCk7CisgICAgICAg
ICAgICBjaGlsZC5zZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKGNoaWxkV2lkdGgpOwogICAgICAg
ICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAg
ICAgY2hpbGQubGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCmluZGV4IGQ4NzJkZWIwZjk3OWMyZTlhMzg0
ZDMxMTRkMmQ2NjM0NTE2ZWMyNmUuLjcyNGZiMjdiMjQ5NWFmNGZmM2U1NmNjM2JhMzI4YjViN2U0
NGZjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2Ny
ZWVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5j
cHAKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRl
cmVyKGJvb2wmIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQpCiAgICAgICAgICAgICAvLyBtYXkg
aGF2ZSBzZXQgb25lIG9uIHRoZSBjaGlsZCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gbGVhdmUgdGhh
dAogICAgICAgICAgICAgLy8gbHlpbmcgYXJvdW5kIG9uIHRoZSBjaGlsZC4KICAgICAgICAgICAg
IGlmIChpczxSZW5kZXJCb3g+KCpjaGlsZCkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94PigqY2hpbGQpLmNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOworICAgICAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRpbmdDb250ZW50U2l6
ZSgpOwogICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJ1aWxkZXIuZGV0YWNoKCpjaGls
ZC0+cGFyZW50KCksICpjaGlsZCk7CiAgICAgICAgICAgICBidWlsZGVyLmF0dGFjaCgqcGFyZW50
KCksIFdURk1vdmUoY2hpbGRUb01vdmUpLCB0aGlzKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcAppbmRleCBiYzBjNGUxYjM5OGFlZjRhNzBjMDM5MzhjMjM1M2M3N2Jm
ODg0NWFkLi40ZTZjOGU4Mzg2YzU3OTljYzk5ODVlOWQzM2QxZGNhMjA2MTI3NzUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQpCiAgICAgICAgIExheW91dFNpemUgcHJldmlvdXNTaXplID0gc2l6ZSgpOwogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBSZW5kZXJCbG9jazo6aGFzRGVmaW5pdGVMb2dpY2FsSGVp
Z2h0KCkgYnV0IGl0IGRvZXMgbm90IHdvcmsgZm9yIHBvc2l0aW9uZWQgc3R1ZmYuCiAgICAgICAg
IC8vIEZJWE1FOiBDb25zaWRlciBjYWNoaW5nIHRoZSBoYXNEZWZpbml0ZUxvZ2ljYWxIZWlnaHQg
dmFsdWUgdGhyb3VnaG91dCB0aGUgbGF5b3V0LgotICAgICAgICBib29sIGhhc0RlZmluaXRlTG9n
aWNhbEhlaWdodCA9IGhhc092ZXJyaWRlTG9naWNhbEhlaWdodCgpIHx8IGNvbXB1dGVDb250ZW50
TG9naWNhbEhlaWdodChNYWluT3JQcmVmZXJyZWRTaXplLCBzdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KSwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgYm9vbCBoYXNEZWZpbml0ZUxvZ2ljYWxIZWlnaHQg
PSBoYXNPdmVycmlkaW5nTG9naWNhbEhlaWdodCgpIHx8IGNvbXB1dGVDb250ZW50TG9naWNhbEhl
aWdodChNYWluT3JQcmVmZXJyZWRTaXplLCBzdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKSwgV1RGOjpu
dWxsb3B0KTsKIAogICAgICAgICBtX2hhc0FueU9ydGhvZ29uYWxJdGVtID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZ0JveCgpKSB7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBSZW5kZXJH
cmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAgICAg
ICAgICAgICAvLyBHcmlkJ3MgbGF5b3V0IGxvZ2ljIGNvbnRyb2xzIHRoZSBncmlkIGl0ZW0ncyBv
dmVycmlkZSBoZWlnaHQsIGhlbmNlIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8vIGNsZWFyIGFu
eSBvdmVycmlkZSBoZWlnaHQgc2V0IHByZXZpb3VzbHksIHNvIGl0IGRvZXNuJ3QgaW50ZXJmZXJl
IGluIGN1cnJlbnQgbGF5b3V0CiAgICAgICAgICAgICAvLyBleGVjdXRpb24uIEdyaWQgbmV2ZXIg
dXNlcyB0aGUgb3ZlcnJpZGUgd2lkdGgsIHRoYXQncyB3aHkgd2UgZG9uJ3QgbmVlZCB0byBjbGVh
ciAgaXQuCi0gICAgICAgICAgICBjaGlsZC0+Y2xlYXJPdmVycmlkZUxvZ2ljYWxIZWlnaHQoKTsK
KyAgICAgICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCk7CiAKICAg
ICAgICAgICAgIC8vIFdlIG1heSBuZWVkIHRvIHJlcGVhdCB0aGUgdHJhY2sgc2l6aW5nIGluIGNh
c2Ugb2YgYW55IGdyaWQgaXRlbSB3YXMgb3J0aG9nb25hbC4KICAgICAgICAgICAgIGlmIChHcmlk
TGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkKQEAgLTYx
MCwxMCArNjEwLDEwIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgT3B0aW9uYWw8CiAKICAgICAgICAgLy8gR3Jp
ZCBpdGVtcyBzaG91bGQgdXNlIHRoZSBncmlkIGFyZWEgc2l6ZXMgaW5zdGVhZCBvZiB0aGUgY29u
dGFpbmluZyBibG9jayAoZ3JpZCBjb250YWluZXIpCiAgICAgICAgIC8vIHNpemVzLCB3ZSBpbml0
aWFsaXplIHRoZSBvdmVycmlkZXMgaGVyZSBpZiBuZWVkZWQgdG8gZW5zdXJlIGl0LgotICAgICAg
ICBpZiAoIWNoaWxkLT5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lk
dGgoKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCgpKTsKLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzT3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAg
Y2hpbGQtPnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoTGF5
b3V0VW5pdCgtMSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNPdmVycmlkaW5nQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJy
aWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKExheW91dFVuaXQoKSk7Cisg
ICAgICAgIGlmICghY2hpbGQtPmhhc092ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodCgpKQorICAgICAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRpbmdDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodChMYXlvdXRVbml0KC0xKSk7CiAKICAgICAgICAgR3Jp
ZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAgICAgICAgIGlmICghYXJl
YS5yb3dzLmlzSW5kZWZpbml0ZSgpKQpAQCAtOTAyLDggKzkwMiw4IEBAIHN0YXRpYyBjb25zdCBT
dHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhJiBjb250ZW50QWxpZ25tZW50Tm9ybWFsQmVoYXZpb3JH
cmlkKCkKIHN0YXRpYyBib29sIG92ZXJyaWRlU2l6ZUNoYW5nZWQoY29uc3QgUmVuZGVyQm94JiBj
aGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0U2l6ZSBzaXpl
KQogewogICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgcmV0dXJuICFj
aGlsZC5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSB8fCBj
aGlsZC5vdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSAhPSBzaXpl
LndpZHRoKCk7Ci0gICAgcmV0dXJuICFjaGlsZC5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsSGVpZ2h0KCkgfHwgY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodCgpICE9IHNpemUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAhY2hp
bGQuaGFzT3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSB8fCBj
aGlsZC5vdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpICE9IHNp
emUud2lkdGgoKTsKKyAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRpbmdDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpIHx8IGNoaWxkLm92ZXJyaWRpbmdDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCgpICE9IHNpemUuaGVpZ2h0KCk7CiB9CiAKIHN0YXRpYyBi
b29sIGhhc1JlbGF0aXZlQmxvY2tBeGlzU2l6ZShjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKQpAQCAtOTIwLDggKzkyMCw4IEBAIHZvaWQgUmVuZGVyR3JpZDo6
dXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZShSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRTaXplIGdy
aWRBcmVhCiAgICAgaWYgKGdyaWRBcmVhV2lkdGhDaGFuZ2VkIHx8IChncmlkQXJlYUhlaWdodENo
YW5nZWQgJiYgaGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKCp0aGlzLCBjaGlsZCkpKQogICAgICAg
ICBjaGlsZC5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogCi0gICAgY2hpbGQuc2V0T3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKGdyaWRBcmVhTG9naWNhbFNp
emUud2lkdGgoKSk7Ci0gICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbEhlaWdodChncmlkQXJlYUxvZ2ljYWxTaXplLmhlaWdodCgpKTsKKyAgICBjaGlsZC5z
ZXRPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChncmlkQXJlYUxv
Z2ljYWxTaXplLndpZHRoKCkpOworICAgIGNoaWxkLnNldE92ZXJyaWRpbmdDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodChncmlkQXJlYUxvZ2ljYWxTaXplLmhlaWdodCgpKTsKIH0K
IAogdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRlbXMoKQpAQCAtOTg2LDggKzk4Niw4IEBA
IHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIGNoaWxk
LCBib29sIHJlbGF5b3V0Q2hpbGRyZW4sCiAgICAgTGF5b3V0VW5pdCBjb2x1bW5CcmVhZHRoID0g
Z3JpZEFyZWFCcmVhZHRoRm9yT3V0T2ZGbG93Q2hpbGQoY2hpbGQsIEZvckNvbHVtbnMpOwogICAg
IExheW91dFVuaXQgcm93QnJlYWR0aCA9IGdyaWRBcmVhQnJlYWR0aEZvck91dE9mRmxvd0NoaWxk
KGNoaWxkLCBGb3JSb3dzKTsKIAotICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxXaWR0aChjb2x1bW5CcmVhZHRoKTsKLSAgICBjaGlsZC5zZXRPdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KHJvd0JyZWFkdGgpOworICAgIGNo
aWxkLnNldE92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKGNvbHVt
bkJyZWFkdGgpOworICAgIGNoaWxkLnNldE92ZXJyaWRpbmdDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbEhlaWdodChyb3dCcmVhZHRoKTsKIAogICAgIC8vIE1hcmsgZm9yIGxheW91dCBhcyB3
ZSdyZSByZXNldHRpbmcgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbmQgd2UgcmVsYXkgaW4gZ2VuZXJp
YyBsYXlvdXQgbG9naWMKICAgICAvLyBmb3IgcG9zaXRpb25lZCBpdGVtcyBpbiBvcmRlciB0byBn
ZXQgdGhlIG9mZnNldHMgcHJvcGVybHkgcmVzb2x2ZWQuCkBAIC0xMTI1LDE5ICsxMTI1LDE5IEBA
IFN0eWxlU2VsZkFsaWdubWVudERhdGEgUmVuZGVyR3JpZDo6anVzdGlmeVNlbGZGb3JDaGlsZChj
b25zdCBSZW5kZXJCb3gmIGNoaWxkLCBjCiAvLyBGSVhNRTogVGhpcyBsb2dpYyBpcyBzaGFyZWQg
YnkgUmVuZGVyRmxleGlibGVCb3gsIHNvIGl0IHNob3VsZCBiZSBtb3ZlZCB0byBSZW5kZXJCb3gu
CiB2b2lkIFJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGRJZk5lZWRlZChS
ZW5kZXJCb3gmIGNoaWxkKQogewotICAgIEFTU0VSVChjaGlsZC5vdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpOworICAgIEFTU0VSVChjaGlsZC5vdmVycmlkaW5n
Q29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSk7CiAKICAgICAvLyBXZSBjbGVh
ciBoZWlnaHQgb3ZlcnJpZGUgdmFsdWVzIGJlY2F1c2Ugd2Ugd2lsbCBkZWNpZGUgbm93IHdoZXRo
ZXIgaXQncyBhbGxvd2VkIG9yCiAgICAgLy8gbm90LCBldmFsdWF0aW5nIHRoZSBjb25kaXRpb25z
IHdoaWNoIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgb2xkIHZhbHVlcyB3ZXJlIHNldC4K
LSAgICBjaGlsZC5jbGVhck92ZXJyaWRlTG9naWNhbEhlaWdodCgpOworICAgIGNoaWxkLmNsZWFy
T3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHQoKTsKIAogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBjaGlsZEJsb2NrRGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGly
ZWN0aW9uRm9yQ2hpbGQoKnRoaXMsIGNoaWxkLCBGb3JSb3dzKTsKICAgICBib29sIGJsb2NrRmxv
d0lzQ29sdW1uQXhpcyA9IGNoaWxkQmxvY2tEaXJlY3Rpb24gPT0gRm9yUm93czsKICAgICBib29s
IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6ZSA9IGJsb2NrRmxvd0lzQ29sdW1uQXhpcyA/
IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFsb25nQ29sdW1uQXhpcyhjaGlsZCkgOiBhbGxvd2VkVG9T
dHJldGNoQ2hpbGRBbG9uZ1Jvd0F4aXMoY2hpbGQpOwogICAgIGlmIChhbGxvd2VkVG9TdHJldGNo
Q2hpbGRCbG9ja1NpemUpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJldGNoZWRMb2dpY2FsSGVp
Z2h0ID0gYXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JDaGlsZEJlZm9yZVN0cmV0Y2hpbmcoR3Jp
ZExheW91dEZ1bmN0aW9uczo6b3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNo
aWxkKGNoaWxkLCBjaGlsZEJsb2NrRGlyZWN0aW9uKS52YWx1ZSgpLCBjaGlsZCk7CisgICAgICAg
IExheW91dFVuaXQgc3RyZXRjaGVkTG9naWNhbEhlaWdodCA9IGF2YWlsYWJsZUFsaWdubWVudFNw
YWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nKEdyaWRMYXlvdXRGdW5jdGlvbnM6Om92ZXJyaWRp
bmdDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBjaGlsZEJsb2NrRGly
ZWN0aW9uKS52YWx1ZSgpLCBjaGlsZCk7CiAgICAgICAgIExheW91dFVuaXQgZGVzaXJlZExvZ2lj
YWxIZWlnaHQgPSBjaGlsZC5jb25zdHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgoc3RyZXRjaGVk
TG9naWNhbEhlaWdodCwgLTFfbHUpOwotICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUxvZ2ljYWxI
ZWlnaHQoZGVzaXJlZExvZ2ljYWxIZWlnaHQpOworICAgICAgICBjaGlsZC5zZXRPdmVycmlkaW5n
TG9naWNhbEhlaWdodChkZXNpcmVkTG9naWNhbEhlaWdodCk7CiAgICAgICAgIGlmIChkZXNpcmVk
TG9naWNhbEhlaWdodCAhPSBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBDYW4gYXZvaWQgbGF5aW5nIG91dCBoZXJlIGluIHNvbWUgY2FzZXMuIFNlZSBodHRw
czovL3dlYmtpdC5vcmcvYi84NzkwNS4KICAgICAgICAgICAgIGNoaWxkLnNldExvZ2ljYWxIZWln
aHQoMF9sdSk7CkBAIC0xMTc5LDcgKzExNzksNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnVwZGF0ZUF1
dG9NYXJnaW5zSW5Sb3dBeGlzSWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAgICBpZiAoIW1h
cmdpbkVuZC5pc0F1dG8oKSkKICAgICAgICAgbWFyZ2luTG9naWNhbFdpZHRoICs9IGNoaWxkLm1h
cmdpbkVuZCgpOwogCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVBbGlnbm1lbnRTcGFjZSA9IGNo
aWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpLnZhbHVlKCkg
LSBjaGlsZC5sb2dpY2FsV2lkdGgoKSAtIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID0gY2hpbGQub3ZlcnJpZGluZ0NvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKS52YWx1ZSgpIC0gY2hpbGQubG9naWNhbFdpZHRoKCkg
LSBtYXJnaW5Mb2dpY2FsV2lkdGg7CiAgICAgaWYgKGF2YWlsYWJsZUFsaWdubWVudFNwYWNlIDw9
IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIxMCw3ICsxMjEwLDcgQEAgdm9pZCBSZW5kZXJH
cmlkOjp1cGRhdGVBdXRvTWFyZ2luc0luQ29sdW1uQXhpc0lmTmVlZGVkKFJlbmRlckJveCYgY2hp
bGQpCiAgICAgaWYgKCFtYXJnaW5BZnRlci5pc0F1dG8oKSkKICAgICAgICAgbWFyZ2luTG9naWNh
bEhlaWdodCArPSBjaGlsZC5tYXJnaW5BZnRlcigpOwogCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVBbGlnbm1lbnRTcGFjZSA9IGNoaWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHQoKS52YWx1ZSgpIC0gY2hpbGQubG9naWNhbEhlaWdodCgpIC0gbWFyZ2luTG9n
aWNhbEhlaWdodDsKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlID0gY2hp
bGQub3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkudmFsdWUo
KSAtIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAtIG1hcmdpbkxvZ2ljYWxIZWlnaHQ7CiAgICAgaWYg
KGF2YWlsYWJsZUFsaWdubWVudFNwYWNlIDw9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTU5
MSw4ICsxNTkxLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpsb2dpY2FsT2Zmc2V0Rm9yT3V0
T2ZGbG93Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3IKIHZvaWQgUmVuZGVyR3JpZDo6
Z3JpZEFyZWFQb3NpdGlvbkZvck91dE9mRmxvd0NoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQs
IEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIExheW91dFVuaXQmIHN0YXJ0LCBM
YXlvdXRVbml0JiBlbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNoaWxkLmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKTsKLSAgICBBU1NFUlQoR3JpZExheW91dEZ1bmN0aW9uczo6aGFzT3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pKTsKLSAg
ICBMYXlvdXRVbml0IHRyYWNrQnJlYWR0aCA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6Om92ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKS52YWx1
ZSgpOworICAgIEFTU0VSVChHcmlkTGF5b3V0RnVuY3Rpb25zOjpoYXNPdmVycmlkaW5nQ29udGFp
bmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSk7CisgICAgTGF5
b3V0VW5pdCB0cmFja0JyZWFkdGggPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpvdmVycmlkaW5nQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKS52YWx1ZSgp
OwogICAgIGJvb2wgaXNSb3dBeGlzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7CiAgICAgYXV0
byYgb3V0T2ZGbG93SXRlbUxpbmUgPSBpc1Jvd0F4aXMgPyBtX291dE9mRmxvd0l0ZW1Db2x1bW4g
OiBtX291dE9mRmxvd0l0ZW1Sb3c7CiAgICAgc3RhcnQgPSBpc1Jvd0F4aXMgPyBib3JkZXJMb2dp
Y2FsTGVmdCgpIDogYm9yZGVyQmVmb3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcAppbmRleCA1YTljMjllZmY3Y2FhOTdhNjgxYWY4NzBlNzE3YjE3M2U2
OTE5YzgwLi4xZGY2N2QwOTc4M2Y3ZmNjNTdjMjZjMTRmZGEwMjY5NWEzMzM2Y2U5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKQEAgLTY3LDEzICs2Nywx
MyBAQCBPcHRpb25hbDxUZXh0QWxpZ25Nb2RlPiBSZW5kZXJSdWJ5QmFzZTo6b3ZlcnJpZGVUZXh0
QWxpZ25tZW50Rm9yTGluZShib29sIC8qIGVuZAogCiB2b2lkIFJlbmRlclJ1YnlCYXNlOjphZGp1
c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
LCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiBsb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0gICAg
aWYgKHJ1YnlSdW4oKS0+aGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgoKSAmJiBmaXJzdFJvb3RCb3go
KSAmJiAhZmlyc3RSb290Qm94KCktPm5leHRSb290Qm94KCkpIHsKKyAgICBpZiAocnVieVJ1bigp
LT5oYXNPdmVycmlkaW5nTG9naWNhbFdpZHRoKCkgJiYgZmlyc3RSb290Qm94KCkgJiYgIWZpcnN0
Um9vdEJveCgpLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IG1faW5p
dGlhbE9mZnNldDsKICAgICAgICAgbG9naWNhbFdpZHRoIC09IDIgKiBtX2luaXRpYWxPZmZzZXQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IG1heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IHJ1YnlSdW4oKSAmJiBydWJ5UnVuKCktPmhhc092ZXJyaWRlTG9naWNhbFdp
ZHRoKCkgPyBydWJ5UnVuKCktPm92ZXJyaWRlTG9naWNhbFdpZHRoKCkgOiB0aGlzLT5tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IG1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IHJ1YnlSdW4oKSAmJiBydWJ5UnVuKCktPmhhc092ZXJyaWRpbmdMb2dpY2FsV2lkdGgo
KSA/IHJ1YnlSdW4oKS0+b3ZlcnJpZGluZ0xvZ2ljYWxXaWR0aCgpIDogdGhpcy0+bWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCk7CiAgICAgaWYgKG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA+PSBs
b2dpY2FsV2lkdGgpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKaW5kZXggYmUwNTcxN2JmYWI2MDlhY2YwMTZhN2MwZDRjM2YyZjczODc5
ZjE1Zi4uZjNhZWFkNjdiYTVjMDdkODliNGJiZDJiY2VjOGRmZWY1OWQ0NzUzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0yODIsOCArMjgyLDggQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIAogICAgIC8vIE91ciBwYXJlbnQg
bWlnaHQgaGF2ZSBzZXQgYW4gb3ZlcnJpZGUgY29udGVudCBsb2dpY2FsIHdpZHRoIG9uIHVzLCBz
byB3ZSBtdXN0IHJlc3BlY3QgaXQuIFRoaXMKICAgICAvLyBpcyBob3cgZmxleGJveCBjb250YWlu
ZXJzIGZsZXggb3Igc3RyZXRjaCB1cy4KLSAgICBpZiAoaGFzT3ZlcnJpZGVMb2dpY2FsV2lkdGgo
KSkKLSAgICAgICAgc2V0TG9naWNhbFdpZHRoKHN0ZDo6bWF4KGxvZ2ljYWxXaWR0aCgpLCBvdmVy
cmlkZUxvZ2ljYWxXaWR0aCgpKSk7CisgICAgaWYgKGhhc092ZXJyaWRpbmdMb2dpY2FsV2lkdGgo
KSkKKyAgICAgICAgc2V0TG9naWNhbFdpZHRoKHN0ZDo6bWF4KGxvZ2ljYWxXaWR0aCgpLCBvdmVy
cmlkaW5nTG9naWNhbFdpZHRoKCkpKTsKIAogICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2Vy
IHRoYW4gb3VyIG1heC13aWR0aCBzdHlsZS4KICAgICBMZW5ndGggc3R5bGVNYXhMb2dpY2FsV2lk
dGggPSBzdHlsZSgpLmxvZ2ljYWxNYXhXaWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCAxYzJlZmY3MDlkNWQ0YTUwM2E5N2VkYmNlOGQw
OTZmZDg2NzVhMzI2Li45ZmEwNDI3OWNkOTEwOWZkMGYzMGNjMzk0ZGIzMzdmOGM0Nzc4ZWNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtMzMw
LDEwICszMzAsMTAgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdBZnRlcigp
IGNvbnN0CiAgICAgcmV0dXJuIGNvbXB1dGVkQ1NTUGFkZGluZ0FmdGVyKCkgKyBpbnRyaW5zaWNQ
YWRkaW5nQWZ0ZXIoKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldE92ZXJyaWRlTG9n
aWNhbEhlaWdodEZyb21Sb3dIZWlnaHQoTGF5b3V0VW5pdCByb3dIZWlnaHQpCit2b2lkIFJlbmRl
clRhYmxlQ2VsbDo6c2V0T3ZlcnJpZGluZ0xvZ2ljYWxIZWlnaHRGcm9tUm93SGVpZ2h0KExheW91
dFVuaXQgcm93SGVpZ2h0KQogewogICAgIGNsZWFySW50cmluc2ljUGFkZGluZygpOwotICAgIHNl
dE92ZXJyaWRlTG9naWNhbEhlaWdodChyb3dIZWlnaHQpOworICAgIHNldE92ZXJyaWRpbmdMb2dp
Y2FsSGVpZ2h0KHJvd0hlaWdodCk7CiB9CiAKIExheW91dFNpemUgUmVuZGVyVGFibGVDZWxsOjpv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50LCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCA5NzVmM2I5YTgyZmU3NDA0
YjRhOTY3MTBlYzE1ODY1ZGNkMzI3ZGI3Li4wMDEzYjY0ZjY3OWMxZTI1NmQwNTNjZTE5NTQ5Mjcy
NGZjZThlNzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgcGFkZGluZ0JlZm9y
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIExheW91dFVuaXQgcGFkZGluZ0FmdGVyKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE92ZXJyaWRlTG9naWNhbEhlaWdodEZyb21Sb3dIZWln
aHQoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRPdmVycmlkaW5nTG9naWNhbEhlaWdodEZyb21S
b3dIZWlnaHQoTGF5b3V0VW5pdCk7CiAKICAgICB2b2lkIHNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wg
aG9yaXpvbnRhbFNjcm9sbGJhckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxiYXJDaGFuZ2Vk
KSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAppbmRleCAyYTRlZmE4MjZlYWE3Yzk5YjkyODJmMWQ0ZTMxYzc2YjA0YTg2ZmRk
Li40OTBmZDk1YzNmNjE1M2MzOTE1ODU0NTk2YjZkYjA3MjFiMzg1NTYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjgzLDkgKzI4
Myw5IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdo
dCgpCiAgICAgICAgICAgICAgICAgLy8gRm9yIHJvdyBzcGFubmluZyBjZWxscywgfHJ8IGlzIHRo
ZSBsYXN0IHJvdyBpbiB0aGUgc3Bhbi4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjZWxsU3Rh
cnRSb3cgPSBjZWxsLT5yb3dJbmRleCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmhh
c092ZXJyaWRlTG9naWNhbEhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmhh
c092ZXJyaWRpbmdMb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2VsbC0+
Y2xlYXJJbnRyaW5zaWNQYWRkaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNlbGwtPmNsZWFy
T3ZlcnJpZGVDb250ZW50U2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBjZWxsLT5jbGVhck92
ZXJyaWRpbmdDb250ZW50U2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDaGls
ZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmxh
eW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTIyLDcgKzUyMiw3IEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyZWxheW91dENlbGxJZkZsZXhlZChSZW5kZXJUYWJsZUNl
bGwmIGNlbGwsIGludCByb3dJbmRlCiAgICAgICAgIC8vIEFsaWdubWVudCB3aXRoaW4gYSBjZWxs
IGlzIGJhc2VkIG9mZiB0aGUgY2FsY3VsYXRlZAogICAgIC8vIGhlaWdodCwgd2hpY2ggYmVjb21l
cyBpcnJlbGV2YW50IG9uY2UgdGhlIGNlbGwgaGFzCiAgICAgLy8gYmVlbiByZXNpemVkIGJhc2Vk
IG9mZiBpdHMgcGVyY2VudGFnZS4KLSAgICBjZWxsLnNldE92ZXJyaWRlTG9naWNhbEhlaWdodEZy
b21Sb3dIZWlnaHQocm93SGVpZ2h0KTsKKyAgICBjZWxsLnNldE92ZXJyaWRpbmdMb2dpY2FsSGVp
Z2h0RnJvbVJvd0hlaWdodChyb3dIZWlnaHQpOwogICAgIGNlbGwubGF5b3V0SWZOZWVkZWQoKTsK
ICAgICAKICAgICBpZiAoIWNlbGwuaXNCYXNlbGluZUFsaWduZWQoKSkK
</data>
<flag name="review"
          id="428312"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>