<?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>234235</bug_id>
          
          <creation_ts>2021-12-13 05:08:56 -0800</creation_ts>
          <short_desc>[LBSE] Rename RenderSVGModelObject -&gt; LegacyRenderSVGModelObject</short_desc>
          <delta_ts>2022-01-05 04:42:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90738</blocked>
    
    <blocked>234524</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1823474</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-13 05:08:56 -0800</bug_when>
    <thetext>The LBSE RenderSVGModelObject will inherit from RenderLayerModelObject. Therefore we have to re-introduce a fresh RenderSVGModelObject for LBSE and rename the current one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823486</commentid>
    <comment_count>1</comment_count>
      <attachid>446990</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-13 05:15:50 -0800</bug_when>
    <thetext>Created attachment 446990
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823509</commentid>
    <comment_count>2</comment_count>
      <attachid>446990</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-13 06:27:43 -0800</bug_when>
    <thetext>Comment on attachment 446990
Patch, v1

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

&gt; Source/WebCore/rendering/RenderObject.h:351
&gt; +    bool isRenderSVGModelObjectOrLegacyRenderSVGModelObject() const { return isRenderSVGModelObject() || isLegacyRenderSVGModelObject(); }

Not too fond of the length. isARenderSVGModelObject? isRenderSVGModelObjectLike?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823622</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-13 10:38:28 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
&gt; Comment on attachment 446990 [details]
&gt; Patch, v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446990&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.h:351
&gt; &gt; +    bool isRenderSVGModelObjectOrLegacyRenderSVGModelObject() const { return isRenderSVGModelObject() || isLegacyRenderSVGModelObject(); }
&gt; 
&gt; Not too fond of the length. isARenderSVGModelObject?
&gt; isRenderSVGModelObjectLike?

I named it following the convention for RenderSVGRoot, which established  isRenderSVGRootOrLegacySVGRoot. I think if we change this, we should change both, no?

isRenderOrLegacyRenderSVGModelObject / isRenderOrLegacyRenderSVGRoot
Is that better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823629</commentid>
    <comment_count>4</comment_count>
      <attachid>446990</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-13 10:48:27 -0800</bug_when>
    <thetext>Comment on attachment 446990
Patch, v1

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderObject.h:351
&gt;&gt;&gt; +    bool isRenderSVGModelObjectOrLegacyRenderSVGModelObject() const { return isRenderSVGModelObject() || isLegacyRenderSVGModelObject(); }
&gt;&gt; 
&gt;&gt; Not too fond of the length. isARenderSVGModelObject? isRenderSVGModelObjectLike?
&gt; 
&gt; I named it following the convention for RenderSVGRoot, which established  isRenderSVGRootOrLegacySVGRoot. I think if we change this, we should change both, no?
&gt; 
&gt; isRenderOrLegacyRenderSVGModelObject / isRenderOrLegacyRenderSVGRoot
&gt; Is that better?

Yes, I like that better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823659</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-13 11:28:57 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #4)
&gt; Comment on attachment 446990 [details]
&gt; Patch, v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446990&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderObject.h:351
&gt; &gt;&gt;&gt; +    bool isRenderSVGModelObjectOrLegacyRenderSVGModelObject() const { return isRenderSVGModelObject() || isLegacyRenderSVGModelObject(); }
&gt; &gt;&gt; 
&gt; &gt;&gt; Not too fond of the length. isARenderSVGModelObject? isRenderSVGModelObjectLike?
&gt; &gt; 
&gt; &gt; I named it following the convention for RenderSVGRoot, which established  isRenderSVGRootOrLegacySVGRoot. I think if we change this, we should change both, no?
&gt; &gt; 
&gt; &gt; isRenderOrLegacyRenderSVGModelObject / isRenderOrLegacyRenderSVGRoot
&gt; &gt; Is that better?
&gt; 
&gt; Yes, I like that better!

Good will land that with the new name. One thing was incorrect: the naming scheme for RenderSVGRoot is different, the identifier is not named isRenderSVGRoot() but isSVGRoot(), thus a different naming scheme is fine for RenderSVGRoot - it can stay as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823672</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-13 11:55:32 -0800</bug_when>
    <thetext>Committed r286962 (245185@trunk): &lt;https://commits.webkit.org/245185@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823673</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-13 11:56:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/86425263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826088</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-21 12:40:15 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826089</commentid>
    <comment_count>9</comment_count>
      <attachid>447744</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-21 12:40:20 -0800</bug_when>
    <thetext>Created attachment 447744
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826091</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-21 12:42:11 -0800</bug_when>
    <thetext>Sorry for the noise, typo in the bug number... no new patch is needed here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446990</attachid>
            <date>2021-12-13 05:15:50 -0800</date>
            <delta_ts>2021-12-21 12:40:10 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234235-20211213051549.patch</filename>
            <type>text/plain</type>
            <size>51367</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJhZGRhYThlMmQ0NzE5
ZDYxMGNjODRlYzk1YWJjNWNjZTZhMjAwZS4uZDgyNTIxZWZhNTRiZWExYWVmNjgyNTkwZTNiOGJk
NmViYmIxNWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIxLTEyLTEzICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBSZW5hbWUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgLT4gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmpl
Y3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDIz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRl
clNWR01vZGVsT2JqZWN0IHdpbGwgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxPYmplY3Qg
aW4gTEJTRSwKKyAgICAgICAgdGhlcmVmb3JlIHJlbmFtZSB0aGUgY3VycmVudCBpbXBsZW1lbnRh
dGlvbiB0byBMZWdhY3lSZW5kZXJTVkdSb290IGFuZAorICAgICAgICBhZGFwdCBhbGwgY2FsbHNp
dGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBi
ZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xheW91dERlcGVuZGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5
SW5TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbXB1dGVkRnJhZ21lbnRlZEZsb3dTdGF0ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSZW5kZXJTVkdNb2RlbE9iamVjdE9yTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvTGVnYWN5
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVy
Zmxvd1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcExvY2FsVG9Db250YWlu
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OnB1c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3Rz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Ojph
YnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNo
ZWNrRW5jbG9zdXJlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpSZW5k
ZXJTVkdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdJbWFnZTo6UmVuZGVyU1ZHSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdJbWFnZTo6aW1hZ2VFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR0ltYWdlOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1h
Z2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZUlubGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpncmFwaGljc0Vs
ZW1lbnQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrSW50ZXJzZWN0aW9uV2l0aG91dFVwZGF0aW5nTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNoZWNrRW5jbG9zdXJlV2l0aG91dFVwZGF0aW5nTGF5b3V0KToKKwogMjAy
MS0xMi0xMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIEZpeCBub24tdW5pZmllZCBidWlsZHMgYWZ0ZXIgcjI4Njg1MwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhMDYyODQxNDMzZTM0ZDliMGVlOGQzZmYwZDYyMzc0ODRmMWExMmY2Li4wYmM5YThkNjAz
NjFhZjE0NzE3N2VkOTkwOGRkZjNjNDE1NTc3ZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQ2MSw2
ICsyNDYxLDcgQEAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5jcHAKIHJlbmRl
cmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvVGV4dFNpemVB
ZGp1c3RtZW50LmNwcAogcmVuZGVyaW5nL3N0eWxlL1dpbGxDaGFuZ2VEYXRhLmNwcAorcmVuZGVy
aW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9zdmcvTGVn
YWN5UmVuZGVyU1ZHUm9vdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwCiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTI0NzEsNyArMjQ3Miw2IEBA
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAotcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYmQzMTQxMTMwYzU0M2M2YTdmYThjOTZmYmY4Mjg4ZTkwNTAyOGI4OS4u
ZDkyNzI5NzI2YjkwYWFhMjNhZjc0Mzg1MmQ0MGI2N2M2MDU1MDIxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI0MSw3ICsx
MjQxLDcgQEAKIAkJNDM2NzA4QzUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50
U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA4ODYxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9Owog
CQk0MzY3MDhDNzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4ODEy
RDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CiAJCTQz
NjcwOEM5MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0
IC8qIFJlbmRlclNWR0ltYWdlLmggKi87IH07Ci0JCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVs
T2JqZWN0LmggKi87IH07CisJCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5k
ZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVs
T2JqZWN0LmggKi87IH07CiAJCTQzNjcwOENEMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM2NzA4OEUxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggKi87IH07CiAJ
CTQzNjcwOENGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkwMTJE
OUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJNDM2
NzA4RDExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MjEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5
NjEsOCArODk2MSw4IEBACiAJCTQzNjcwODg4MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcw
ODg5MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQzNjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFn
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MzY3MDg4QjEyRDlDQTRBMDAwNDQyMzQgLyog
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRl
clNWR01vZGVsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQz
NjcwODhEMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhFMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4RjEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODg0Nyw2ICsxODg0Nyw4IEBACiAJCTA4OEMy
Rjc0MTIzOTAwODAwMDNENjVDRSAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8sCisJCQkJNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8sCiAJCQkJNDM2NzA4QTUxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuY3BwICovLAogCQkJCTQzNjcwOEE2MTJEOUNB
NEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggKi8sCiAJCQkJNDM2NzA4ODExMkQ5
Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmNwcCAqLywKQEAgLTE4ODcwLDggKzE4ODcy
LDYgQEAKIAkJCQlDREY3NDdFODI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5saW5lSW5s
aW5lcy5oICovLAogCQkJCTA4NTRCMDA0MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCAqLywKIAkJCQkwODU0QjAwNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZH
SW5saW5lVGV4dC5oICovLAotCQkJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAgKi8sCi0JCQkJNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJl
bmRlclNWR01vZGVsT2JqZWN0LmggKi8sCiAJCQkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8q
IFJlbmRlclNWR1BhdGguY3BwICovLAogCQkJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBS
ZW5kZXJTVkdQYXRoLmggKi8sCiAJCQkJQTEwQkI1ODIxNDg0RTNBNzAwQjJFODdBIC8qIFJlbmRl
clNWR1JlY3QuY3BwICovLApAQCAtMzU3OTYsNiArMzU3OTYsNyBAQAogCQkJCUY0NEE1RjU5MUZF
RDM4RjIwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE4NUI0MkExRTgyMTFBMTAwREM5MTE4IC8qIExlZ2FjeVByZXZpZXdMb2FkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUExMERCRjQ3MThGOTIzMTcwMDBENzBDNiAvKiBMZWdhY3lQcmV2
aWV3TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDhDQjEyRDlDQTRCMDAw
NDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzNjcwOEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOENGRjVFMTBBMTU1QTA1MDAwQTQyMzQgLyogTGVnYWN5Um9vdElubGlu
ZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIExl
Z2FjeVNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NjAwLDcgKzM2NjAxLDYg
QEAKIAkJCQkwODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREY3NDdFOTI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5s
aW5lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTcxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQzNjcwOENCMTJE
OUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAzMWUwNmIyYTc5ZDcyYWExNzM2NjkwMWYw
ZTdlMjkxODhlYzc2NTJiLi45OTY4ZjMzMDJkODcwY2U5MWY2OGU4YTU3OGU1NDczZGZlMTIxNTNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcApAQCAtMjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIGJvb2wgaXNMYXlvdXREZXBlbmRl
bnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUKICAg
ICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVydHlJbmxpbmVTaXpl
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCbG9ja1NpemU6Ci0gICAgICAgIHJldHVybiByZW5kZXJl
ciAmJiAhcmVuZGVyZXItPmlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSAmJiAhaXNOb25SZXBsYWNl
ZElubGluZSgqcmVuZGVyZXIpOworICAgICAgICByZXR1cm4gcmVuZGVyZXIgJiYgIXJlbmRlcmVy
LT5pc1JlbmRlclNWR01vZGVsT2JqZWN0T3JMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdCgpICYm
ICFpc05vblJlcGxhY2VkSW5saW5lKCpyZW5kZXJlcik7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBl
cnNwZWN0aXZlT3JpZ2luOgogICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW46CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybToKQEAgLTMxMzQsNyArMzEzNCw3IEBAIFJlZlB0
cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5
bGUoY29uc3QgUmVuZGVyU3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHYXA6CiAgICAgICAg
ICAgICByZXR1cm4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhhbmRQcm9wZXJ0aWVzKGdh
cFNob3J0aGFuZCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJlciAmJiAhcmVuZGVyZXItPmlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSkg
eworICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmICFyZW5kZXJlci0+aXNSZW5kZXJTVkdNb2Rl
bE9iamVjdE9yTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoKSkgewogICAgICAgICAgICAgICAg
IC8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyL3Zpc3VkZXQuaHRtbCN0
aGUtaGVpZ2h0LXByb3BlcnR5LAogICAgICAgICAgICAgICAgIC8vIHRoZSAiaGVpZ2h0IiBwcm9w
ZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAg
ICAgICAgICAgICAgICBpZiAoIWlzTm9uUmVwbGFjZWRJbmxpbmUoKnJlbmRlcmVyKSkKQEAgLTM0
NjAsNyArMzQ2MCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUoY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsK
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUud2lkb3dz
KCksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdp
ZHRoOgotICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmICFyZW5kZXJlci0+aXNSZW5kZXJTVkdN
b2RlbE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5p
c1JlbmRlclNWR01vZGVsT2JqZWN0T3JMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIv
dmlzdWRldC5odG1sI3RoZS13aWR0aC1wcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAvLyB0aGUg
IndpZHRoIiBwcm9wZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBl
bGVtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoIWlzTm9uUmVwbGFjZWRJbmxpbmUoKnJlbmRl
cmVyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggODMx
M2I4MWIxNWMwNzc5NmNjMmZlMTQ1YTllNWE0ZjA4YmNmZDk1NC4uYmZhZmJlNDdhNzkzZGM0ZWM4
ZTY2ODgyM2NiNjVlY2UzODhkN2E2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uTGluZUxheW91dC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIkxvZ2ljYWxTZWxl
Y3Rpb25PZmZzZXRDYWNoZXMuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC02Myw3ICs2NCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNjcm9sbGJhclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAt
MjM4LDcgKzIzOCw3IEBAIFJlbmRlck9iamVjdDo6RnJhZ21lbnRlZEZsb3dTdGF0ZSBSZW5kZXJP
YmplY3Q6OmNvbXB1dGVkRnJhZ21lbnRlZEZsb3dTdGF0ZShjb25zCiAgICAgYXV0byBpbmhlcml0
ZWRGbG93U3RhdGUgPSBSZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZyYWdtZW50ZWRGbG93OwogICAg
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCiAgICAgICAgIGluaGVyaXRlZEZsb3dTdGF0
ZSA9IHJlbmRlcmVyLnBhcmVudCgpLT5mcmFnbWVudGVkRmxvd1N0YXRlKCk7Ci0gICAgZWxzZSBp
ZiAoaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdJbmxpbmU+KHJl
bmRlcmVyKSB8fCBpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKSB7CisgICAgZWxz
ZSBpZiAoaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdJbmxpbmU+
KHJlbmRlcmVyKSB8fCBpczxMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKSB7
CiAgICAgICAgIC8vIGNvbnRhaW5pbmdCbG9jaygpIHNraXBzIHN2ZyBib3VuZGFyeSAoU1ZHIHJv
b3QgaXMgYSBSZW5kZXJSZXBsYWNlZCkuCiAgICAgICAgIGlmIChhdXRvKiBzdmdSb290ID0gU1ZH
UmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+
KHJlbmRlcmVyKSkpCiAgICAgICAgICAgICBpbmhlcml0ZWRGbG93U3RhdGUgPSBzdmdSb290LT5m
cmFnbWVudGVkRmxvd1N0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggMTVhZDA2NzRmODY2NTFkZmMyZTA4ZmNjMDBmODI0NTZlMTVjN2Q4ZC4uOGM1Mjc5
YTg1NTIzOGYyOTdkZGY0ZDVlZTYxODBmOTI0NjEwZGYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzI0LDggKzMyNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxVbmRlck92ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCiAKLSAgICAvLyBGSVhNRTogVW50aWwgYWxsIFNW
RyByZW5kZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJlbmRlclNWR01vZGVsT2JqZWN0IHdlIGhh
dmUKLSAgICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1ldGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdp
dGggYW4gQVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
aXJ0dWFsIGJvb2wgaXNMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclNWR0Jsb2NrKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgdmlydHVhbCBib29sIGlzTGVnYWN5U1ZHUm9v
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNDksNiArMzQ4LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jlc291cmNlQ2xpcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNTVkdSb290T3JMZWdhY3lTVkdSb290
KCkgY29uc3QgeyByZXR1cm4gaXNTVkdSb290KCkgfHwgaXNMZWdhY3lTVkdSb290KCk7IH0KKyAg
ICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3RPckxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJTVkdNb2RlbE9iamVjdCgpIHx8IGlzTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QoKTsgfQogCiAgICAgLy8gRklYTUU6IFRob3NlIGJlbG9uZyBpbnRv
IGEgU1ZHIHNwZWNpZmljIGJhc2UtY2xhc3MgZm9yIGFsbCByZW5kZXJlcnMgKHNlZSBhYm92ZSkK
ICAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGhhdmUgc3VjaCBhIGNsYXNzIHlldCwgYmVj
YXVzZSBpdCdzIG5vdCBwb3NzaWJsZSBmb3IgYWxsIHJlbmRlcmVycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNTMyZjA5NjlmZDk1MzhjYTBlYWUyOGJhYzc2YmIxZGNhMGJmYmU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lS
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5o
IgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdCk7CisKK0xlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSYmIHN0eWxlKQorICAgIDogUmVuZGVyRWxlbWVudChlbGVtZW50LCBXVEZNb3ZlKHN0
eWxlKSwgMCkKK3sKK30KKworTGF5b3V0UmVjdCBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlKCkudmlz
aWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhh
c1Zpc2libGVDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisg
ICAgICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50
T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZVJlY3QodmlzdWFs
T3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0KTsKKyAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KCp0aGlz
LCByZXBhaW50Q29udGFpbmVyKTsKK30KKworc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29u
dGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcigqdGhp
cywgcmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdN
b2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBP
cHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcigqdGhpcywgYW5jZXN0b3JD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCB3YXNGaXhlZCk7Cit9CisKK2NvbnN0IFJlbmRlck9i
amVjdCogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2Vv
bWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIHJldHVybiBTVkdSZW5kZXJTdXBw
b3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCp0aGlzLCBhbmNlc3RvclRvU3RvcEF0LCBnZW9t
ZXRyeU1hcCk7Cit9CisKKy8vIENvcGllZCBmcm9tIFJlbmRlckJveCwgdGhpcyBtZXRob2QgbGlr
ZWx5IHJlcXVpcmVzIGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29yayBlYXNpbHkgZm9yIGJvdGgg
U1ZHIGFuZCBDU1MgQm94IE1vZGVsIGNvbnRlbnQuCisvLyBGSVhNRTogVGhpcyBtYXkgYWxzbyBu
ZWVkIHRvIG1vdmUgaW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRoZSBSZW5kZXJCb3ggdmVyc2lv
biBkZXBlbmRzCisvLyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdoaWNoIFNWRyBSZW5kZXJCb3gg
c3ViY2xhc2VzIChsaWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3QgaW1wbGVtZW50LgorTGF5b3V0
UmVjdCBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVu
ZGVyR2VvbWV0cnlNYXAqKSBjb25zdAoreworICAgIExheW91dFJlY3QgYm94ID0gZW5jbG9zaW5n
TGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBhZGp1c3RS
ZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOworCisgICAgRmxvYXRRdWFkIGNvbnRhaW5lclJl
bGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBhaW50
Q29udGFpbmVyKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KExheW91dFJlY3QoY29udGFpbmVyUmVsYXRpdmVRdWFkLmJvdW5kaW5nQm94KCkpLCBkb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsKKyAgICByZWN0Lm1vdmVCeShy
b3VuZGVkSW50UG9pbnQoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICByZWN0cy5hcHBlbmQocmVj
dCk7Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBVc2VU
cmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCit2b2lkIExlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRE
ZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCgpOwor
fQorCit2b2lkIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIGlm
IChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0KSB7CisgICAgICAgIHNldE5lZWRzQm91
bmRhcmllc1VwZGF0ZSgpOworICAgICAgICBpZiAoc3R5bGUoKS5oYXNUcmFuc2Zvcm0oKSB8fCAo
b2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc1RyYW5zZm9ybSgpKSkKKyAgICAgICAgICAgIHNldE5l
ZWRzVHJhbnNmb3JtVXBkYXRlKCk7CisgICAgfQorICAgIFJlbmRlckVsZW1lbnQ6OnN0eWxlRGlk
Q2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5
bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRU
ZXN0QWN0aW9uKQoreworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlm
IChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIExlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0IGluaGVyaXRhbmNlIGNoYW5nZXMgKHNob3VsZCBpbmhlcml0IGZyb20gUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCkuCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZ2V0RWxlbWVudENUTShTVkdFbGVtZW50KiBl
bGVtZW50LCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBBU1NFUlQoZWxlbWVu
dCk7CisKKyAgICBTVkdFbGVtZW50KiBzdG9wQXRFbGVtZW50ID0gU1ZHTG9jYXRhYmxlOjpuZWFy
ZXN0Vmlld3BvcnRFbGVtZW50KGVsZW1lbnQpOworICAgIEFTU0VSVChzdG9wQXRFbGVtZW50KTsK
KworICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybTsKKyAgICBOb2RlKiBjdXJyZW50
ID0gZWxlbWVudDsKKworICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQtPmlzU1ZHRWxlbWVu
dCgpKSB7CisgICAgICAgIFNWR0VsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8U1ZH
RWxlbWVudD4oKmN1cnJlbnQpOworICAgICAgICBsb2NhbFRyYW5zZm9ybSA9IGN1cnJlbnRFbGVt
ZW50LnJlbmRlcmVyKCktPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKTsKKyAgICAgICAgdHJhbnNm
b3JtID0gbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsKKyAgICAgICAgLy8gRm9y
IGdldENUTSgpIGNvbXB1dGF0aW9uLCBzdG9wIGF0IHRoZSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1l
bnQKKyAgICAgICAgaWYgKCZjdXJyZW50RWxlbWVudCA9PSBzdG9wQXRFbGVtZW50KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE9yU2hhZG93
SG9zdE5vZGUoKTsKKyAgICB9Cit9CisKKy8vIEZsb2F0UmVjdDo6aW50ZXJzZWN0cyBkb2VzIG5v
dCBjb25zaWRlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGxpbmVzIChiZWNhdXNlIG9mIGlzRW1w
dHkoKSkuCisvLyBTbyBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2Ygc3VjaCBsaW5lcy4KK3N0YXRp
YyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3Qg
RmxvYXRSZWN0JiBvdGhlcikKK3sKKyAgICBpZiAoci5pc0VtcHR5KCkgJiYgb3RoZXIuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHIuaXNFbXB0eSgpICYmICFvdGhl
ci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAob3RoZXIuY29udGFpbnMoci54KCksIHIueSgp
KSAmJiAhb3RoZXIuY29udGFpbnMoci5tYXhYKCksIHIubWF4WSgpKSkgfHwgKCFvdGhlci5jb250
YWlucyhyLngoKSwgci55KCkpICYmIG90aGVyLmNvbnRhaW5zKHIubWF4WCgpLCByLm1heFkoKSkp
OworICAgIGlmIChvdGhlci5pc0VtcHR5KCkgJiYgIXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkob3RoZXIsIHIpOworICAgIHJldHVybiByLmludGVy
c2VjdHMob3RoZXIpOworfQorCisvLyBPbmUgb2YgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBjYW4g
Y2F1c2UgZ3JhcGhpY3MgdG8gYmUgZHJhd24gb250byB0aGUgdGFyZ2V0IGNhbnZhcy4gU3BlY2lm
aWNhbGx5OiBjaXJjbGUsIGVsbGlwc2UsCisvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwg
cG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KK3N0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVt
ZW50KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIHJldHVybiByZW5kZXJl
ci5pc1NWR1NoYXBlKCkgfHwgcmVuZGVyZXIuaXNTVkdUZXh0KCkgfHwgcmVuZGVyZXIuaXNTVkdJ
bWFnZSgpIHx8IHJlbmRlcmVyLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFn
KTsKK30KKworLy8gVGhlIFNWRyBhZGRGb2N1c1JpbmdSZWN0cygpIG1ldGhvZCBhZGRzIHJlY3Rz
IGluIGxvY2FsIGNvb3JkaW5hdGVzIHNvIHRoZSBkZWZhdWx0IGFic29sdXRlRm9jdXNSaW5nUXVh
ZHMKKy8vIHJldHVybnMgaW5jb3JyZWN0IHZhbHVlcyBmb3IgU1ZHIG9iamVjdHMuIE92ZXJyaWRp
bmcgdGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBhYnNvbHV0ZSBib3VuZHMuCit2
b2lkIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpKTsKK30K
KyAgICAKK2Jvb2wgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9u
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9p
bnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFw
aGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG07CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IGRvd25jYXN0PFNW
R0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIGdldEVsZW1lbnRDVE0oc3ZnRWxl
bWVudCwgY3RtKTsKKyAgICBBU1NFUlQoc3ZnRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgcmV0
dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KHJlY3QsIGN0bS5tYXBSZWN0KHN2Z0VsZW1lbnQt
PnJlbmRlcmVyKCktPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKK30KKworYm9v
bCBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVy
IHx8IHJlbmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpO
b25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgq
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0
bTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVu
ZGVyZXItPmVsZW1lbnQoKSk7CisgICAgZ2V0RWxlbWVudENUTShzdmdFbGVtZW50LCBjdG0pOwor
ICAgIEFTU0VSVChzdmdFbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICByZXR1cm4gcmVjdC5jb250
YWlucyhjdG0ubWFwUmVjdChzdmdFbGVtZW50LT5yZW5kZXJlcigpLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MTlkOGJkMmQ4NDA2MTA4OWFlOTkwN2Y5Mzk2MTUwOTY3N2Rj
MGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBNb3N0IHJlbmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBm
cm9tIHRoaXMgY2xhc3MKKy8vIGJ1dCBub3QgYWxsLiAoZS5nLiBSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LCBSZW5kZXJTVkdCbG9jaykgdGh1cyBtZXRob2RzCisvLyByZXF1aXJlZCBieSBTVkcgcmVu
ZGVycyBuZWVkIHRvIGJlIGRlY2xhcmVkIG9uIFJlbmRlck9iamVjdCwgYnV0IHNoYXJlZAorLy8g
bG9naWMgY2FuIGdvIGluIHRoaXMgY2xhc3Mgb3IgaW4gU1ZHUmVuZGVyU3VwcG9ydC4KKworY2xh
c3MgU1ZHRWxlbWVudDsKKworY2xhc3MgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QgOiBwdWJs
aWMgUmVuZGVyRWxlbWVudCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChMZWdhY3lSZW5k
ZXJTVkdNb2RlbE9iamVjdCk7CitwdWJsaWM6CisgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZs
b3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZp
c2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENv
bnRleHQpIGNvbnN0IGZpbmFsOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3Qg
UmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgYWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYs
IGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgbWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0
LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OworCisgICAgc3RhdGljIGJvb2wgY2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyRWxlbWVudCosIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHN0YXRpYyBib29sIGNoZWNrRW5jbG9zdXJlKFJlbmRlckVs
ZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIFNWR0VsZW1lbnQmIGVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkp
OyB9CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb24KKyAgICAvLyBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3Zl
cmZsb3dSZWN0KCp0aGlzKTsgfQorICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYsIFJlbmRlclN0eWxlJiYp
OworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBib29sIGlzTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBT
VkcgdXNlcyBhIGRpZmZlcmVudCBub2RlQXRQb2ludCBtZXRob2QKKyAgICBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRlRm9j
dXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKSBmaW5hbDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0LCBpc0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAKaW5kZXggZTE0MzFjYjZiYjZiODY3YTkxMDU3ZWNhMmVmODczZTBmYTc0OGYwZC4uOGIwNTc0
YjdmNzQxMTQ5MTA0YTMyM2Q2YmUyNjZkNDIzOGQ4ZmM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcApAQCAtNDMsNyArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVu
ZGVyU1ZHQ29udGFpbmVyKTsKIAogUmVuZGVyU1ZHQ29udGFpbmVyOjpSZW5kZXJTVkdDb250YWlu
ZXIoU1ZHRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRl
clNWR01vZGVsT2JqZWN0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAgIDogTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiB7CiB9CiAKQEAgLTgx
LDcgKzgxLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAgICAgICAgIG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CiAgICAgCiAgICAgICAgIC8vIElmIG91ciBi
b3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgICAgICBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgICAgIExlZ2FjeVJlbmRl
clNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICB9CiAKICAg
ICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAppbmRleCA4ZDczMDA1MTM1NTIzYmRh
NDYyZTI5ZTg0NTE2YWVkYzJjZTYzODRjLi44ZTM1OWNhOWQzOWMwMGE4MzE4ZTQ1YzA3ZGY5NDg2
MTgxMzc2ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmgKQEAgLTIyLDEzICsyMiwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
TW9kZWxPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdFbGVtZW50
OwogCi1jbGFzcyBSZW5kZXJTVkdDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QgeworY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyIDogcHVibGljIExlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR0NvbnRhaW5l
cik7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCmluZGV4IDQxNWYx
NzU4MTE4NWZmNmMyMDMyZmFjY2I5ODhlZTYzM2ViN2QwMGUuLmEyM2I0OTEyMzc2NjhhOWNjMDU3
MWIxMTMwOGJhYzgzODBiOWU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdJbWFnZSk7CiAKIFJlbmRl
clNWR0ltYWdlOjpSZW5kZXJTVkdJbWFnZShTVkdJbWFnZUVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlJiYgc3R5bGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChlbGVtZW50LCBXVEZN
b3ZlKHN0eWxlKSkKKyAgICA6IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0KGVsZW1lbnQsIFdU
Rk1vdmUoc3R5bGUpKQogICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUodHJ1ZSkKICAgICAs
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKICAgICAsIG1faW1hZ2VSZXNvdXJjZShtYWtl
VW5pcXVlPFJlbmRlckltYWdlUmVzb3VyY2U+KCkpCkBAIC02MSwxMiArNjEsMTIgQEAgUmVuZGVy
U1ZHSW1hZ2U6On5SZW5kZXJTVkdJbWFnZSgpID0gZGVmYXVsdDsKIHZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgaW1hZ2VSZXNvdXJjZSgpLnNodXRkb3duKCk7
Ci0gICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpOworICAgIExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAogU1ZHSW1hZ2VF
bGVtZW50JiBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZG93bmNhc3Q8U1ZHSW1hZ2VFbGVtZW50PihSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHSW1hZ2VFbGVtZW50PihMZWdhY3lSZW5kZXJT
VkdNb2RlbE9iamVjdDo6ZWxlbWVudCgpKTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdl
OjpjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CkBAIC0xNTYsNyArMTU2LDcgQEAg
dm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KCkKIAogICAgIC8vIElmIG91ciBib3VuZHMgY2hh
bmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgogICAgIGlmICh0cmFuc2Zvcm1PckJvdW5kYXJpZXNV
cGRhdGUpCi0gICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNV
cGRhdGUoKTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91
bmRhcmllc1VwZGF0ZSgpOwogCiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwog
ICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW1hZ2UuaAppbmRleCBhYjk4NDIyNzk2NDdlOWIyY2RmY2ZlMGI1OGJkNjlkY2M0
MjNhYTNiLi43ZDEwYTIyMTEwYmUxODVmMWE5MWQyM2U4ZWQwNmJlZWRjYWJjMDdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCkBAIC0yNSwxNCAr
MjUsMTQgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiTGVn
YWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBSZW5kZXJJbWFnZVJlc291cmNlOwogY2xhc3MgU1ZHSW1hZ2VFbGVtZW50OwogCi1jbGFzcyBS
ZW5kZXJTVkdJbWFnZSBmaW5hbCA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVjdCB7CitjbGFz
cyBSZW5kZXJTVkdJbWFnZSBmaW5hbCA6IHB1YmxpYyBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVj
dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJTVkdJbWFnZSk7CiBwdWJsaWM6
CiAgICAgUmVuZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2JlOTM5ZmU3MWI2ZDFhOWU5
MzY1Y2MxZWNiZGNkODI2MDJjNjQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCi0KLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnRJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgotI2lu
Y2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5k
ZXJTVkdNb2RlbE9iamVjdCk7Ci0KLVJlbmRlclNWR01vZGVsT2JqZWN0OjpSZW5kZXJTVkdNb2Rl
bE9iamVjdChTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQotICAgIDog
UmVuZGVyRWxlbWVudChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSwgMCkKLXsKLX0KLQotTGF5b3V0
UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQg
Y29udGV4dCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKLSAg
ICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2li
bGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmll
dygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOwotICAgICAg
ICByZXR1cm4gY29tcHV0ZVJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBh
aW50Q29udGFpbmVyLCBjb250ZXh0KTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KCp0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRlRmxvYXRW
aXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUZsb2F0VmlzaWJs
ZVJlY3RJbkNvbnRhaW5lcigqdGhpcywgcmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKLX0KLQot
dm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRy
YW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4
ZWQpIGNvbnN0Ci17Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcigq
dGhpcywgYW5jZXN0b3JDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCB3YXNGaXhlZCk7Ci19Ci0K
LWNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnB1c2hNYXBwaW5nVG9D
b250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwg
UmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAotewotICAgIHJldHVybiBTVkdS
ZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCp0aGlzLCBhbmNlc3RvclRvU3Rv
cEF0LCBnZW9tZXRyeU1hcCk7Ci19Ci0KLS8vIENvcGllZCBmcm9tIFJlbmRlckJveCwgdGhpcyBt
ZXRob2QgbGlrZWx5IHJlcXVpcmVzIGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29yayBlYXNpbHkg
Zm9yIGJvdGggU1ZHIGFuZCBDU1MgQm94IE1vZGVsIGNvbnRlbnQuCi0vLyBGSVhNRTogVGhpcyBt
YXkgYWxzbyBuZWVkIHRvIG1vdmUgaW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRoZSBSZW5kZXJC
b3ggdmVyc2lvbiBkZXBlbmRzCi0vLyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdoaWNoIFNWRyBS
ZW5kZXJCb3ggc3ViY2xhc2VzIChsaWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3QgaW1wbGVtZW50
LgotTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3Qg
UmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdAotewotICAgIExheW91dFJlY3QgYm94ID0gZW5jbG9z
aW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBhZGp1
c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOwotCi0gICAgRmxvYXRRdWFkIGNvbnRhaW5l
clJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBh
aW50Q29udGFpbmVyKTsKLSAgICByZXR1cm4gTGF5b3V0UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4
ZWxzKExheW91dFJlY3QoY29udGFpbmVyUmVsYXRpdmVRdWFkLmJvdW5kaW5nQm94KCkpLCBkb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsKLSAgICByZWN0Lm1vdmVCeShyb3Vu
ZGVkSW50UG9pbnQoYWNjdW11bGF0ZWRPZmZzZXQpKTsKLSAgICByZWN0cy5hcHBlbmQocmVjdCk7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKLXsKLSAgICBxdWFkcy5hcHBl
bmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1z
LCB3YXNGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0
cm95ZWQoKQotewotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMp
OwotICAgIFJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVy
ZW5jZTo6TGF5b3V0KSB7Ci0gICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAg
ICAgICBpZiAoc3R5bGUoKS5oYXNUcmFuc2Zvcm0oKSB8fCAob2xkU3R5bGUgJiYgb2xkU3R5bGUt
Pmhhc1RyYW5zZm9ybSgpKSkKLSAgICAgICAgICAgIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7
Ci0gICAgfQotICAgIFJlbmRlckVsZW1lbnQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxl
KTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZm
LCBzdHlsZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQotewotI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5
ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgewotICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFJlbmRlclNWR01vZGVsT2JqZWN0IGluaGVyaXRhbmNlIGNoYW5nZXMgKHNob3VsZCBp
bmhlcml0IGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCkuCi0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0
RWxlbWVudENUTShTVkdFbGVtZW50KiBlbGVtZW50LCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBTVkdFbGVtZW50KiBzdG9wQXRFbGVt
ZW50ID0gU1ZHTG9jYXRhYmxlOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGVsZW1lbnQpOwotICAg
IEFTU0VSVChzdG9wQXRFbGVtZW50KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5z
Zm9ybTsKLSAgICBOb2RlKiBjdXJyZW50ID0gZWxlbWVudDsKLQotICAgIHdoaWxlIChjdXJyZW50
ICYmIGN1cnJlbnQtPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQmIGN1cnJl
bnRFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4oKmN1cnJlbnQpOwotICAgICAgICBsb2Nh
bFRyYW5zZm9ybSA9IGN1cnJlbnRFbGVtZW50LnJlbmRlcmVyKCktPmxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKTsKLSAgICAgICAgdHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkodHJh
bnNmb3JtKTsKLSAgICAgICAgLy8gRm9yIGdldENUTSgpIGNvbXB1dGF0aW9uLCBzdG9wIGF0IHRo
ZSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQKLSAgICAgICAgaWYgKCZjdXJyZW50RWxlbWVudCA9
PSBzdG9wQXRFbGVtZW50KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKLSAgICB9Ci19Ci0KLS8vIEZsb2F0
UmVjdDo6aW50ZXJzZWN0cyBkb2VzIG5vdCBjb25zaWRlciBob3Jpem9udGFsIG9yIHZlcnRpY2Fs
IGxpbmVzIChiZWNhdXNlIG9mIGlzRW1wdHkoKSkuCi0vLyBTbyBzcGVjaWFsLWNhc2UgaGFuZGxp
bmcgb2Ygc3VjaCBsaW5lcy4KLXN0YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNv
bnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKLXsKLSAgICBpZiAoci5p
c0VtcHR5KCkgJiYgb3RoZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHIuaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmV0dXJuIChv
dGhlci5jb250YWlucyhyLngoKSwgci55KCkpICYmICFvdGhlci5jb250YWlucyhyLm1heFgoKSwg
ci5tYXhZKCkpKQotICAgICAgICAgICAgICAgfHwgKCFvdGhlci5jb250YWlucyhyLngoKSwgci55
KCkpICYmIG90aGVyLmNvbnRhaW5zKHIubWF4WCgpLCByLm1heFkoKSkpOwotICAgIH0KLSAgICBp
ZiAob3RoZXIuaXNFbXB0eSgpICYmICFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGludGVy
c2VjdHNBbGxvd2luZ0VtcHR5KG90aGVyLCByKTsKLSAgICByZXR1cm4gci5pbnRlcnNlY3RzKG90
aGVyKTsKLX0KLQotLy8gT25lIG9mIHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgY2FuIGNhdXNlIGdy
YXBoaWNzIHRvIGJlIGRyYXduIG9udG8gdGhlIHRhcmdldCBjYW52YXMuIFNwZWNpZmljYWxseTog
Y2lyY2xlLCBlbGxpcHNlLAotLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5l
LCByZWN0LCB0ZXh0IGFuZCB1c2UuCi1zdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIuaXNTVkdT
aGFwZSgpIHx8IHJlbmRlcmVyLmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLmlzU1ZHSW1hZ2UoKSB8
fCByZW5kZXJlci5lbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZyk7Ci19Ci0K
LS8vIFRoZSBTVkcgYWRkRm9jdXNSaW5nUmVjdHMoKSBtZXRob2QgYWRkcyByZWN0cyBpbiBsb2Nh
bCBjb29yZGluYXRlcyBzbyB0aGUgZGVmYXVsdCBhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzCi0vLyBy
ZXR1cm5zIGluY29ycmVjdCB2YWx1ZXMgZm9yIFNWRyBvYmplY3RzLiBPdmVycmlkaW5nIHRoaXMg
bWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYWJzb2x1dGUgYm91bmRzLgotdm9pZCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYgcXVhZHMpCi17Ci0gICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRR
dWFkKHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKSk7Ci19Ci0gICAgCi1ib29sIFJl
bmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbihSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmICghcmVuZGVyZXIgfHwgcmVu
ZGVyZXItPnN0eWxlKCkucG9pbnRlckV2ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzR3JhcGhpY3NFbGVtZW50KCpyZW5kZXJl
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+
ZWxlbWVudCgpKTsKLSAgICBnZXRFbGVtZW50Q1RNKHN2Z0VsZW1lbnQsIGN0bSk7Ci0gICAgQVNT
RVJUKHN2Z0VsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgIHJldHVybiBpbnRlcnNlY3RzQWxsb3dp
bmdFbXB0eShyZWN0LCBjdG0ubWFwUmVjdChzdmdFbGVtZW50LT5yZW5kZXJlcigpLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmNoZWNrRW5jbG9zdXJlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS5wb2lu
dGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgIGdl
dEVsZW1lbnRDVE0oc3ZnRWxlbWVudCwgY3RtKTsKLSAgICBBU1NFUlQoc3ZnRWxlbWVudC0+cmVu
ZGVyZXIoKSk7Ci0gICAgcmV0dXJuIHJlY3QuY29udGFpbnMoY3RtLm1hcFJlY3Qoc3ZnRWxlbWVu
dC0+cmVuZGVyZXIoKS0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFhNjJhMmM4YTRjYmFiMTkwMWRjZjc0ZDc0NWIwMmYyMDZhZmI5YTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIE1vc3QgcmVuZGVyZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5nIHRy
ZWUgd2lsbCBpbmhlcml0IGZyb20gdGhpcyBjbGFzcwotLy8gYnV0IG5vdCBhbGwuIChlLmcuIFJl
bmRlclNWR0ZvcmVpZ25PYmplY3QsIFJlbmRlclNWR0Jsb2NrKSB0aHVzIG1ldGhvZHMKLS8vIHJl
cXVpcmVkIGJ5IFNWRyByZW5kZXJzIG5lZWQgdG8gYmUgZGVjbGFyZWQgb24gUmVuZGVyT2JqZWN0
LCBidXQgc2hhcmVkCi0vLyBsb2dpYyBjYW4gZ28gaW4gdGhpcyBjbGFzcyBvciBpbiBTVkdSZW5k
ZXJTdXBwb3J0LgotCi1jbGFzcyBTVkdFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdNb2RlbE9i
amVjdCA6IHB1YmxpYyBSZW5kZXJFbGVtZW50IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KFJlbmRlclNWR01vZGVsT2JqZWN0KTsKLXB1YmxpYzoKLSAgICBMYXlvdXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVS
ZWN0Q29udGV4dCkgY29uc3QgZmluYWw7Ci0gICAgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9y
UmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBj
b25zdCBSZW5kZXJHZW9tZXRyeU1hcCopIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBtYXBMb2Nh
bFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFp
bmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29s
KiB3YXNGaXhlZCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9T
dG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3Zl
cnJpZGU7Ci0KLSAgICBzdGF0aWMgYm9vbCBjaGVja0ludGVyc2VjdGlvbihSZW5kZXJFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wgY2hlY2tFbmNsb3N1cmUoUmVu
ZGVyRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgU1ZHRWxlbWVudCYgZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1v
dXMoKSk7IH0KLQotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbgotICAgIC8vIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVu
dCgpIGNvbnN0IHsgcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1
YWxPdmVyZmxvd1JlY3QoKnRoaXMpOyB9Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1Jl
Y3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7
Ci0KLSAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IGJvb2wgaXNSZW5kZXJTVkdNb2RlbE9iamVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNWRyB1c2Vz
IGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAotICAgIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwotICAgIHZvaWQgYWJzb2x1dGVGb2N1c1JpbmdR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpIGZpbmFsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyU1ZHTW9k
ZWxPYmplY3QsIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKaW5kZXggYTVlM2RkOTE1YmQ0NjViM2Fj
MWI3YTQ1YmE4YWE4MzBjMzFjMjI5Yy4uMjNkODQwYWYyYTY0NDVhMWFjMGJlOTgyYzdjNWQ1MjI1
N2MwNWFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1NoYXBlKTsKIAogUmVuZGVyU1ZHU2hhcGU6OlJl
bmRlclNWR1NoYXBlKFNWR0dyYXBoaWNzRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSkKLSAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUp
KQorICAgIDogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShzdHls
ZSkpCiAgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBpcyBm
YWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nLgogICAg
ICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3Jh
YiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdHcmFwaGljc0VsZW1lbnQuCiAgICAgLCBtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBh
IEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR0dyYXBoaWNzRWxlbWVudC4KQEAg
LTE2OCw3ICsxNjgsNyBAQCB2b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlvdXQoKQogCiAgICAgLy8g
SWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCiAgICAgaWYgKHVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0
OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogCiAgICAgcmVwYWludGVyLnJl
cGFpbnRBZnRlckxheW91dCgpOwogICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAppbmRleCA0OTJhZGMyOTUzZjY2
OWM4ZjI4ZjNmMDlhOTFkNzRhMWYyZWUzYTJlLi4xMjM5YzUyMWFkZTNiMGQ2ZDJlNDkwMGUzNjIy
NGE1MWJiNWY1OTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVj
dC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U1ZHTWFya2VyRGF0YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclNWR1BhdGg7CiBjbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZTsKIGNsYXNzIFNWR0dyYXBoaWNzRWxlbWVudDsKIAotY2xhc3MgUmVuZGVyU1ZH
U2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworY2xhc3MgUmVuZGVyU1ZHU2hh
cGUgOiBwdWJsaWMgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyU1ZHU2hhcGUpOwogcHVibGljOgogICAgIGVudW0gUG9pbnRDb29y
ZGluYXRlU3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZUlubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGVJbmxpbmVzLmgKaW5kZXggZThiMzIwNTkzZGE3MjUzMDIzMTIyNWM2Y2M3ZDky
OGFkYjBiOWE1Zi4uYjZlNzI2YjRlZjJkMDVhMDBjOWY3ZjdmNmIwNWIxYjA0MDk4OWE3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZUlubGlu
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlSW5s
aW5lcy5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW5saW5lIFNW
R0dyYXBoaWNzRWxlbWVudCYgUmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFNWR0dyYXBoaWNzRWxl
bWVudD4oTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1lbnQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBh
YTM1ZDg4ODc0ZjRlYjZhMWNmYWM5MzQzNzcyNzkyYzMyNTY5YWE2Li5iM2I2YjVjODQ5MTUyMWI0
N2E3NzhlZmFmNWI5NDk5Zjg2MjA3NmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCkBAIC0yNDUsMTIgKzI0NSwxMiBAQCBSZWY8Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6OmNv
bGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QoU1ZHUmVjdCYgcmVjdCwgUwogCiBzdGF0
aWMgYm9vbCBjaGVja0ludGVyc2VjdGlvbldpdGhvdXRVcGRhdGluZ0xheW91dChTVkdFbGVtZW50
JiBlbGVtZW50LCBTVkdSZWN0JiByZWN0KQogewotICAgIHJldHVybiBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oZWxlbWVudC5yZW5kZXJlcigpLCByZWN0LnZhbHVlKCkp
OworICAgIHJldHVybiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rp
b24oZWxlbWVudC5yZW5kZXJlcigpLCByZWN0LnZhbHVlKCkpOwogfQogICAgIAogc3RhdGljIGJv
b2wgY2hlY2tFbmNsb3N1cmVXaXRob3V0VXBkYXRpbmdMYXlvdXQoU1ZHRWxlbWVudCYgZWxlbWVu
dCwgU1ZHUmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNo
ZWNrRW5jbG9zdXJlKGVsZW1lbnQucmVuZGVyZXIoKSwgcmVjdC52YWx1ZSgpKTsKKyAgICByZXR1
cm4gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrRW5jbG9zdXJlKGVsZW1lbnQucmVu
ZGVyZXIoKSwgcmVjdC52YWx1ZSgpKTsKIH0KIAogUmVmPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50
OjpnZXRJbnRlcnNlY3Rpb25MaXN0KFNWR1JlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5j
ZUVsZW1lbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447744</attachid>
            <date>2021-12-21 12:40:20 -0800</date>
            <delta_ts>2021-12-21 12:41:33 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-234235-20211221124018.patch</filename>
            <type>text/plain</type>
            <size>38631</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ0ZjRjMTM5ODVjN2E1
ZmViZThlNTQxMzQ5M2Q5NTFhODQ3ZTA2OS4uNTc4MDRiNjQ5NmUzNWVhZWI2Mjk2ZTAxNTI0ODFk
ZWE3NjVkNDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMS0xMi0yMCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVj
dDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJv
eWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwQWJzb2x1
dGVUb0xvY2FsUG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRlcmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmludGVyc2VjdHNBbGxvd2luZ0VtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmNvbXB1dGVDbGlwUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50U1ZHT3V0bGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJl
Y3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlv
bk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldExheW91dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93
Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisKIDIwMjEtMTItMjEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHN5bWxpbmtzIGZvciBhbHRlcm5hdGUg
cm9vdCBmcmFtZXdvcmsgbG9jYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQ5NTMwZjYyNGIwMTBm
NzZhNDgzMjRiZmRkOTljMmQyNjg4YTc3ODMuLmYyY2NkOTZmODA3OWFlZGQ0MDFmYTliYjNkZDEx
ZDVhMGQ1YTY1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDc4LDYgKzI0NzgsNyBAQCByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1JlY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDY0MzU2YWI4MDRmOWViMDY4ZGUzNmY3Yjc4YTY4NjE3NWYzYzVjMGQuLjc2MDRiYTRk
NDU5YmY0ZDJlMDc0OTk4YzdjN2RkY2FkNGUxNzE0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNDQsNiArMTI0NCw3IEBA
CiAJCTQzNjcwOEM3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODg4
MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLzsgfTsKIAkJ
NDM2NzA4QzkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QTEyRDlDQTRBMDAwNDQy
MzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLzsgfTsKIAkJNDM2NzA4Q0IxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogTGVnYWN5
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKKwkJNDM2NzBDOTM0MkQ5QkM0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCAqLzsgfTsKIAkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDg4RTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLzsgfTsK
IAkJNDM2NzA4Q0YxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTAx
MkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oICovOyB9OwogCQk0
MzY3MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkyMTJE
OUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovOyB9OwpAQCAt
ODk4MSw2ICs4OTgyLDggQEAKIAkJNDM2NzA4ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2
NzA4ODkxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0lt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODhEMzRFOUNBNEEwMDA0NDIzNCAv
KiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QjEyRDlDQTRBMDAwNDQyMzQg
LyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVn
YWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDM2NzA4OEQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTIzLDYgKzE4OTI2LDggQEAKIAkJCQlDREY3
NDdFODI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5saW5lSW5saW5lcy5oICovLAogCQkJ
CTA4NTRCMDA0MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywK
IAkJCQkwODU0QjAwNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICov
LAorCQkJCTQzNjcwODhEMzRFOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAgKi8sCisJCQkJNDM2NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2Jq
ZWN0LmggKi8sCiAJCQkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGgu
Y3BwICovLAogCQkJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmgg
Ki8sCiAJCQkJQTEwQkI1ODIxNDg0RTNBNzAwQjJFODdBIC8qIFJlbmRlclNWR1JlY3QuY3BwICov
LApAQCAtMzY3MDgsNiArMzY3MTMsNyBAQAogCQkJCTA4NTRCMDE1MTI1NUU0RTYwMEI5Q0REMCAv
KiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjc0N0U5MjcwRjZDQUUw
MDhGRUVFQyAvKiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODU0QjAxNzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDM2NzBDOTM0MkQ5QkM0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVu
ZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEwQkI1ODUxNDg0RTNBNzAwQjJFODdB
IC8qIFJlbmRlclNWR1JlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOENEMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXgg
ZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3OC4uYmIxNTFhMTZkMDc5NWY4
ZjllMzkzZDA1NjRmZGRjZWMzNjQ5OTEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjksOSArMjksMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw1ICsyMzEsOTMgQEAgdm9pZCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lIHRpbWUp
CiAgICAgbGF5ZXIoKS0+YmFja2luZygpLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKIH0KIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorc3RkOjpvcHRpb25hbDxMYXlvdXRS
ZWN0PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5l
cihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBj
b250YWluZXIsIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdCbG9jayBjaGFuZ2Vz
CisgICAgLy8gaWYgKCFpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4oKnRoaXMpICYmICFpczxSZW5k
ZXJTVkdCbG9jaz4odGhpcykpIHsKKyAgICBpZiAoIWlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pigq
dGhpcykpCisgICAgICAgIHJldHVybiBSZW5kZXJFbGVtZW50Ojpjb21wdXRlVmlzaWJsZVJlY3RJ
bkNvbnRhaW5lcihyZWN0LCBjb250YWluZXIsIGNvbnRleHQpOworCisgICAgQVNTRVJUKCFzdHls
ZSgpLmhhc0luRmxvd1Bvc2l0aW9uKCkpOworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworCisgICAgaWYg
KGNvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGJvb2wgY29u
dGFpbmVySXNTa2lwcGVkOworICAgIGF1dG8qIGxvY2FsQ29udGFpbmVyID0gdGhpcy0+Y29udGFp
bmVyKGNvbnRhaW5lciwgY29udGFpbmVySXNTa2lwcGVkKTsKKyAgICBpZiAoIWxvY2FsQ29udGFp
bmVyKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVy
SXNTa2lwcGVkLCAhY29udGFpbmVySXNTa2lwcGVkKTsKKworICAgIExheW91dFJlY3QgYWRqdXN0
ZWRSZWN0ID0gcmVjdDsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdCBjaGFuZ2VzCisgICAgLy8gTW92ZSB0byBvcmlnaW4gb2YgbG9jYWwgY29v
cmRpbmF0ZSBzeXN0ZW0sIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gY29tcHV0ZVZpc2li
bGVSZWN0SW5Db250YWluZXIoKSBvcmlnaW5hdGluZworICAgIC8vIGZyb20gYSBTVkcgcmVuZGVy
ZXIgKFJlbmRlclNWR01vZGVsT2JqZWN0IC8gUmVuZGVyU1ZHQmxvY2spIG9yIGlmIHdlIGNyb3Nz
IHRoZSBib3VuZGFyeSBmcm9tIEhUTUwgLT4gU1ZHIHZpYSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0
LgorICAgIC8vIGJvb2wgbW92ZVRvT3JpZ2luID0gaXM8UmVuZGVyU1ZHRm9yZWlnbk9iamVjdD4o
cmVuZGVyZXIpOworICAgIGJvb2wgbW92ZVRvT3JpZ2luID0gZmFsc2U7CisKKyAgICAvKiBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlck9iamVjdCBjaGFuZ2VzCisgICAgaWYgKGNvbnRleHQu
b3B0aW9ucy5jb250YWlucyhSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6
VHJhbnNsYXRlVG9TVkdSZW5kZXJlck9yaWdpbikpIHsKKyAgICAgICAgY29udGV4dC5vcHRpb25z
LnJlbW92ZShSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6VHJhbnNsYXRl
VG9TVkdSZW5kZXJlck9yaWdpbik7CisgICAgICAgIG1vdmVUb09yaWdpbiA9IHRydWU7CisgICAg
fQorICAgICovCisKKyAgICBpZiAobW92ZVRvT3JpZ2luKQorICAgICAgICBhZGp1c3RlZFJlY3Qu
bW92ZUJ5KGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29y
bmVyKCkpKTsKKworICAgIGlmIChhdXRvKiB0cmFuc2Zvcm0gPSBsYXllcigpLT50cmFuc2Zvcm0o
KSkKKyAgICAgICAgYWRqdXN0ZWRSZWN0ID0gdHJhbnNmb3JtLT5tYXBSZWN0KGFkanVzdGVkUmVj
dCk7CisKKyAgICByZXR1cm4gbG9jYWxDb250YWluZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGFkanVzdGVkUmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKK30KKwordm9pZCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3Jt
U3RhdGUsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIGJvb2wqIHdhc0ZpeGVk
KSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KCp0aGlzKSkKKyAg
ICAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6Om1hcExvY2FsVG9Db250YWluZXIoYW5jZXN0b3JD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7CisKKyAgICBBU1NFUlQo
c3R5bGUoKS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGlmIChh
bmNlc3RvckNvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
IXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5h
YmxlZCgpKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIGF1dG8qIGNvbnRhaW5l
ciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvckNvbnRhaW5lciwgYW5jZXN0b3JTa2lwcGVkKTsK
KyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNF
RChhbmNlc3RvclNraXBwZWQsICFhbmNlc3RvclNraXBwZWQpOworCisgICAgLy8gSWYgdGhpcyBi
b3ggaGFzIGEgdHJhbnNmb3JtLCBpdCBhY3RzIGFzIGEgZml4ZWQgcG9zaXRpb24gY29udGFpbmVy
IGZvciBmaXhlZCBkZXNjZW5kYW50cywKKyAgICAvLyBhbmQgbWF5IGl0c2VsZiBhbHNvIGJlIGZp
eGVkIHBvc2l0aW9uLiBTbyBwcm9wYWdhdGUgJ2ZpeGVkJyB1cCBvbmx5IGlmIHRoaXMgYm94IGlz
IGZpeGVkIHBvc2l0aW9uLgorICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgbW9kZS5y
ZW1vdmUoSXNGaXhlZCk7CisKKyAgICBpZiAod2FzRml4ZWQpCisgICAgICAgICp3YXNGaXhlZCA9
IG1vZGUuY29udGFpbnMoSXNGaXhlZCk7CisKKyAgICBhdXRvIGNvbnRhaW5lck9mZnNldCA9IG9m
ZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQodHJhbnNmb3JtU3RhdGUu
bWFwcGVkUG9pbnQoKSkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAmIFVzZVRyYW5z
Zm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJl
c2VydmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRy
YW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwg
Y29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zv
cm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDog
VHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQorICAgICAgICB0
cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZz
ZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5z
Zm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKworICAgIG1vZGUucmVt
b3ZlKEFwcGx5Q29udGFpbmVyRmxpcCk7CisKKyAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250
YWluZXIoYW5jZXN0b3JDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBkMTE4ZGM4MWE2
YTdjNjBiYjQzYjI3MWM3MzViMjFkNjY5OGM4NzFlLi5kZmJlZWEwN2M2MDhiYTkzOWE0MDQ0NWMy
NmZjNGNhMTJlMmUyM2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmgKQEAgLTY3LDYgKzY3LDE2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25pY1RpbWUoKSkgb3Zl
cnJpZGU7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAvLyBQcm92
aWRlcyB0aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRh
aW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMgaW4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgd2hp
Y2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZHIHJlbmRlcmVycy4KKyAgICBz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNv
bnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIs
IFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBQcm92aWRlcyB0
aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBtYXBMb2NhbFRvQ29udGFpbmVyKCkuCisgICAgLy8g
VGhpcyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCB3aGljaCBpcyB0aGUgY29tbW9u
IGJhc2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgorICAgIHZvaWQgbWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsK
ICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJiwgQmFz
ZVR5cGVGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZGI4NGM3NTRlOTgwZmM0NDBiOGE2
MGNjMDM1MGY4NWU0ZTE1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMCwwICsxLDI5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMb2NhdGFibGUu
aCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKKwor
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OlJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmIGVs
ZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpLCAwKQoreworfQorCit2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUoKQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnVwZGF0ZUZyb21TdHlsZSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShz
dHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm07CisgICAgaWYgKFJlbmRlck9iamVjdDo6bm9kZSgpICYmIGlzPFNWR0dy
YXBoaWNzRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKSkKKyAgICAgICAgdHJhbnNmb3Jt
ID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpLmFu
aW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
UmVuZGVyT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBpZiAoIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CisgICAgLy8gICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworfQorCitGbG9hdFJlY3QgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJG
cmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3Mp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGJvcmRlckJveFJlY3RFcXVpdmFsZW50KCk7Cit9CisKK0xh
eW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5
b3V0UG9pbnQmLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5LCBQYWludFBoYXNlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Cit9CisKK0xheW91dFJlY3QgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Cit7
CisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
IWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CisKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJl
Y3QodmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250
ZXh0KTsKK30KKworY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVz
aE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3Rv
clRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAg
QVNTRVJUKGFuY2VzdG9yVG9TdG9wQXQgIT0gdGhpcyk7CisgICAgQVNTRVJUKHN0eWxlKCkucG9z
aXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBib29sIGFuY2VzdG9yU2tp
cHBlZDsKKyAgICBSZW5kZXJFbGVtZW50KiBjb250YWluZXIgPSB0aGlzLT5jb250YWluZXIoYW5j
ZXN0b3JUb1N0b3BBdCwgYW5jZXN0b3JTa2lwcGVkKTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2VzdG9yU2tpcHBl
ZCwgIWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICBib29sIG9mZnNldERlcGVuZHNPblBvaW50ID0g
ZmFsc2U7CisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFp
bmVyKCpjb250YWluZXIsIExheW91dFBvaW50KCksICZvZmZzZXREZXBlbmRzT25Qb2ludCk7CisK
KyAgICBib29sIHByZXNlcnZlM0QgPSBjb250YWluZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8
fCBzdHlsZSgpLnByZXNlcnZlczNEKCk7CisgICAgaWYgKHNob3VsZFVzZVRyYW5zZm9ybUZyb21D
b250YWluZXIoY29udGFpbmVyKSAmJiAoZ2VvbWV0cnlNYXAubWFwQ29vcmRpbmF0ZXNGbGFncygp
ICYgVXNlVHJhbnNmb3JtcykpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAg
ICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNl
dCwgdCk7CisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2godGhpcywgdCwgcHJlc2VydmUzRCwgb2Zm
c2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8qIGlzRml4ZWRQb3MgKi8sIGhhc1RyYW5zZm9ybSgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJP
ZmZzZXQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVuZHNPblBvaW50LCBmYWxzZSAvKiBpc0ZpeGVk
UG9zICovLCBoYXNUcmFuc2Zvcm0oKSk7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCitM
YXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5k
ZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKCF2aWV3KCku
ZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7
CisKKyAgICBhdXRvIG91dGxpbmVCb3VuZHMgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50
KCk7CisKKyAgICBpZiAocmVwYWludENvbnRhaW5lciAhPSB0aGlzKSB7CisgICAgICAgIEZsb2F0
UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQ7CisgICAgICAgIGlmIChnZW9tZXRyeU1hcCkKKyAg
ICAgICAgICAgIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGdlb21ldHJ5TWFwLT5tYXBUb0NvbnRh
aW5lcihvdXRsaW5lQm91bmRzLCByZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxv
YXRSZWN0KG91dGxpbmVCb3VuZHMpLCByZXBhaW50Q29udGFpbmVyKTsKKworICAgICAgICBvdXRs
aW5lQm91bmRzID0gTGF5b3V0UmVjdChjb250YWluZXJSZWxhdGl2ZVF1YWQuYm91bmRpbmdCb3go
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dGxpbmVCb3VuZHM7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdAoreworICAgIHJlY3RzLmFw
cGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbGF5b3V0
TG9jYXRpb24oKSwgbGF5b3V0U2l6ZSgpKSkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4
ZWQpIGNvbnN0Cit7CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQob2JqZWN0
Qm91bmRpbmdCb3goKSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKK3sKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShkaWZm
LCBvbGRTdHlsZSk7CisKKyAgICAvLyBTVkcgbWFza3MgYXJlIHBhaW50ZWQgaW5kZXBlbmRlbnQg
b2YgdGhlIHRhcmdldCByZW5kZXJlcnMgdmlzaWJpbGl0eS4KKyAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFJlbmRlckVsZW1lbnQgY2hhbmdlcworICAgIC8vIGJvb2wgaGFzU1ZHTWFzayA9
IGhhc1NWR01hc2soKTsKKyAgICBib29sIGhhc1NWR01hc2sgPSBmYWxzZTsKKyAgICBpZiAoaGFz
U1ZHTWFzayAmJiBoYXNMYXllcigpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxp
dHk6OlZpc2libGUpCisgICAgICAgIGxheWVyKCktPnNldEhhc1Zpc2libGVDb250ZW50KCk7CisK
KyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBz
dHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQoT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAoreworICAgIEFTU0VSVChzdHlsZSgpLnBvc2l0aW9u
KCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQor
ICAgICAgICBtb2RlLnJlbW92ZShJc0ZpeGVkKTsKKworICAgIGF1dG8qIGNvbnRhaW5lciA9IHRo
aXMtPnBhcmVudCgpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb250YWluZXItPm1hcEFic29sdXRlVG9Mb2NhbFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0YXRl
KTsKKworICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5l
cigqY29udGFpbmVyLCBMYXlvdXRQb2ludCgpKTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IG1v
ZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWluZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8
fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworICAgIGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAm
JiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRl
LmFwcGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0
ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwg
Y29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFj
Y3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7Cit9
CisKK0xheW91dFNpemUgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIo
UmVuZGVyRWxlbWVudCYgY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqKSBjb25z
dAoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCAmY29udGFpbmVyID09IHRoaXMtPmNv
bnRhaW5lcigpKTsKKyAgICBBU1NFUlQoIWlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NF
UlQoIWlzQWJzb2x1dGVseVBvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOwor
ICAgIHJldHVybiBMYXlvdXRTaXplKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikK
K3sKKyAgICBhdXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGVuY2xvc2luZ0xheW91dFJlY3QodGhp
cy0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKHJlcGFpbnRCb3Vu
ZGluZ0JveC5zaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgcmVjdHMuYXBw
ZW5kKExheW91dFJlY3QoYWRkaXRpb25hbE9mZnNldCwgcmVwYWludEJvdW5kaW5nQm94LnNpemUo
KSkpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRl
cmVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKSBjb25zdAoreworICAgIEFTU0VSVCghcGFp
bnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOworCisgICAgaWYgKChwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSA9
PSBWaXNpYmlsaXR5OjpIaWRkZW4gfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6
Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisv
LyBGbG9hdFJlY3Q6OmludGVyc2VjdHMgZG9lcyBub3QgY29uc2lkZXIgaG9yaXpvbnRhbCBvciB2
ZXJ0aWNhbCBsaW5lcyAoYmVjYXVzZSBvZiBpc0VtcHR5KCkpLgorLy8gU28gc3BlY2lhbC1jYXNl
IGhhbmRsaW5nIG9mIHN1Y2ggbGluZXMuCitzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdF
bXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAg
aWYgKHIuaXNFbXB0eSgpICYmIG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChyLmlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gKG90aGVyLmNvbnRhaW5zKHIueCgpLCByLnkoKSkgJiYgIW90aGVyLmNvbnRhaW5zKHIubWF4
WCgpLCByLm1heFkoKSkpIHx8ICghb3RoZXIuY29udGFpbnMoci54KCksIHIueSgpKSAmJiBvdGhl
ci5jb250YWlucyhyLm1heFgoKSwgci5tYXhZKCkpKTsKKyAgICBpZiAob3RoZXIuaXNFbXB0eSgp
ICYmICFyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5
KG90aGVyLCByKTsKKyAgICByZXR1cm4gci5pbnRlcnNlY3RzKG90aGVyKTsKK30KKworLy8gT25l
IG9mIHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgY2FuIGNhdXNlIGdyYXBoaWNzIHRvIGJlIGRyYXdu
IG9udG8gdGhlIHRhcmdldCBjYW52YXMuIFNwZWNpZmljYWxseTogY2lyY2xlLCBlbGxpcHNlLAor
Ly8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCB0ZXh0IGFuZCB1
c2UuCitzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVy
LmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci5lbGVtZW50
KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZyk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5
bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2FzdDxT
VkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8U1ZHR3JhcGhp
Y3NFbGVtZW50PihzdmdFbGVtZW50KSk7CisgICAgYXV0byBjdG0gPSBkb3duY2FzdDxTVkdHcmFw
aGljc0VsZW1lbnQ+KCpzdmdFbGVtZW50KS5nZXRDVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0
eWxlVXBkYXRlKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkocmVjdCwgY3Rt
Lm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKK30K
KworYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVy
IHx8IHJlbmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpO
b25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgq
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIEFT
U0VSVChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0VsZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9
IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2Z0VsZW1lbnQpLmdldENUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIHJldHVybiByZWN0LmNvbnRhaW5zKGN0
bS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Cit9
CisKK1BhdGggUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXIoKS0+aGFzVHJhbnNmb3Jt
KCkpCisgICAgICAgIHRyYW5zZm9ybS5tdWx0aXBseShsYXllcigpLT5jdXJyZW50VHJhbnNmb3Jt
KFJlbmRlclN0eWxlOjppbmRpdmlkdWFsVHJhbnNmb3JtT3BlcmF0aW9ucykudG9BZmZpbmVUcmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gcGF0aEZyb21HcmFwaGljc0VsZW1lbnQoJmRvd25jYXN0
PFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwg
T3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMp
IGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zZm9ybSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0eWxlKTsKKyAgICBVTlVTRURfUEFSQU0oYm91bmRpbmdCb3gpOworICAgIFVOVVNFRF9QQVJB
TShvcHRpb25zKTsKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBv
cnQgY2hhbmdlcworICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5VHJhbnNmb3JtKCp0aGlz
LCB0cmFuc2Zvcm0sIHN0eWxlLCBib3VuZGluZ0JveCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxv
cHQsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludFNWR091
dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBh
aW50T2Zmc2V0KQoreworICAgIHBhaW50T3V0bGluZShwYWludEluZm8sIExheW91dFJlY3QoYWRq
dXN0ZWRQYWludE9mZnNldCwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzMWRmNjliOGQ4NWVkMTY5MzBk
MzE3OTY4ZTZmNzQyNTAwMTA0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNb3N0IHJl
bmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBmcm9tIHRoaXMg
Y2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LCBSZW5kZXJTVkdC
bG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRlckJsb2NrIGNsYXNzZXMs
IHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0CisvLyBkaXJlY3Rs
eSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4uIFRoZXJlZm9yZSBjb2Rl
IHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgU1ZHIHJlbmRlcmVycyBn
b2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFz
cyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0IHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKK3B1Ymxp
YzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBib29sIGNoZWNrSW50
ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisK
KyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8U1ZHRWxl
bWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBN
YXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAor
ICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJT
dHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICAvLyBNaW1pYyB0
aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kg
dGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKKyAgICAvLyBzaW1p
bGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJC
b3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQor
ICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4g
Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQorCisgICAgTGF5b3V0UmVj
dCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAg
ICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJm
bG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQm
IHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQorCisgICAg
TGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Cisg
ICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9s
YXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlv
bihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVk
TGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KKyAg
ICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVj
dC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KKyAg
ICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6
ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIEZsb2F0UmVjdCBib3Jk
ZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBS
ZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNoZVJl
bmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJm
bG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNr
Z3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExh
eWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7IHJl
dHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQor
CisgICAgdmlydHVhbCBQYXRoIGNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFuc2Zvcm0mKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBS
ZW5kZXJTdHlsZSYmKTsKKworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB1cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBhaW50
U1ZHUmVuZGVyZXIoY29uc3QgUGFpbnRJbmZvJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIG1h
cEFic29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYs
IGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBwYWludENvbnRhaW5lciA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRTVkdPdXRs
aW5lKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsK
KworcHJpdmF0ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJf
T0JKRUNUKFJlbmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisK
KyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>