<?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>188146</bug_id>
          
          <creation_ts>2018-07-29 06:56:32 -0700</creation_ts>
          <short_desc>Use static global variables instead of static NeverDestroyed inside function if possible</short_desc>
          <delta_ts>2018-07-29 11:14:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1446082</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-07-29 06:56:32 -0700</bug_when>
    <thetext>Use constexpr constructors more instead of NeverDestroyed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446083</commentid>
    <comment_count>1</comment_count>
      <attachid>346028</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-07-29 07:05:18 -0700</bug_when>
    <thetext>Created attachment 346028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446095</commentid>
    <comment_count>2</comment_count>
      <attachid>346028</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-29 10:43:09 -0700</bug_when>
    <thetext>Comment on attachment 346028
Patch

Change seems fine.

Bug title is a bit inaccurate.

Having a constexpr constructor does not affect whether NeverDestroyed is needed. It does affect whether we can have a global outside a function. If the constructor is not constexpr it needs to be inside a function so it gets run the first time the function is installed rather than at load time.

What affects the need for NeverDestroyed is whether the class has a trivial destructor. If it does then NeverDestroyed is not needed.

In all these cases in this patch we changed both things but they are independent.

You can have a static without NeverDestroyed if the destructor is trivial. You can have a global outside a function that uses NeverDestroyed as long as the entire constructor is all constexpr. (Might need to fix NeverDestroyed implementation to be sure it’s constructors are constexpr.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446097</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-29 10:50:26 -0700</bug_when>
    <thetext>“Called” not “installed”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446101</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-07-29 11:12:06 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 346028 [details]
&gt; Patch
&gt; 
&gt; Change seems fine.
&gt; 
&gt; Bug title is a bit inaccurate.
&gt; 
&gt; Having a constexpr constructor does not affect whether NeverDestroyed is
&gt; needed. It does affect whether we can have a global outside a function. If
&gt; the constructor is not constexpr it needs to be inside a function so it gets
&gt; run the first time the function is installed rather than at load time.
&gt; 
&gt; What affects the need for NeverDestroyed is whether the class has a trivial
&gt; destructor. If it does then NeverDestroyed is not needed.
&gt; 
&gt; In all these cases in this patch we changed both things but they are
&gt; independent.

Right, changed.

&gt; 
&gt; You can have a static without NeverDestroyed if the destructor is trivial.
&gt; You can have a global outside a function that uses NeverDestroyed as long as
&gt; the entire constructor is all constexpr. (Might need to fix NeverDestroyed
&gt; implementation to be sure it’s constructors are constexpr.)

Currently, we cannot have constexpr NeverDestroyed, since it allocates an instance on aligned storage with placement `new`.
This type of code cannot be achieved inside constexpr constructor unfortunately :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446102</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-07-29 11:13:33 -0700</bug_when>
    <thetext>Committed r234347: &lt;https://trac.webkit.org/changeset/234347&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446104</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-29 11:14:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/42710939&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346028</attachid>
            <date>2018-07-29 07:05:18 -0700</date>
            <delta_ts>2018-07-29 10:43:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188146-20180729230517.patch</filename>
            <type>text/plain</type>
            <size>40101</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc3NTk5N2JmNDRhY2Ez
MDJmYzkxODcyZWQyYTViZWQ0MDQ0ZDllZi4uYjE4OWVkMjI0MTUyYTA1MWYxMjJjM2NjZThiNmQ2
OTI1MTk1MzRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE4LTA3LTI5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFVzZSBjb25zdGV4
cHIgY29uc3RydWN0b3JzIG1vcmUgaW5zdGVhZCBvZiBOZXZlckRlc3Ryb3llZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MTQ2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsZXZlcmFn
ZXMgY29uc3RleHByIGNvbnN0cnVjdG9ycyBtb3JlIHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSBOZXZl
ckRlc3Ryb3llZC4KKyAgICAgICAgSXQgc2ltcGxpZmllcyB0aGUgY29kZSwgcmVtb3ZlcyB0aGUg
dW5uZWNlc3NhcnkgZnVuY3Rpb24sIGFuZCBlbnN1cmVzIHRoZSBpbml0aWFsaXphdGlvbiBhdCB0
aGUgbG9hZGluZyB0aW1lLgorCisgICAgICAgIFdlIG1ha2UgU3RlcFJhbmdlOjpTdGVwRGVzY3Jp
cHRpb24gY29uc3RydWN0b3IgY29uc3RleHByIHRvIHJlbW92ZSBidW5jaCBvZiBgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24+YC4KKyAgICAgICAgQW5kIHdl
IHVzZSBgc3RhdGljIExvY2tgIHNpbmNlIFdURjo6TG9jayBoYXMgY29uc3RleHByIGNvbnN0cnVj
dG9yLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9NZXNz
YWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGVyZWYgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmlzRXhpc3RpbmdNZXNzYWdlUG9ydExv
Y2FsbHlSZWFjaGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6Om5vdGlmeU1l
c3NhZ2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQ
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6YWxsTWVzc2FnZVBvcnRzTG9jayk6IERlbGV0ZWQuCisgICAgICAgICog
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6Y29udGV4dElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVtb3ZlRnJvbUNvbnRleHRzTWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5TY3JpcHRFeGVjdXRpb25D
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnBvc3RU
YXNrVG8pOgorICAgICAgICAoV2ViQ29yZTo6YWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBM
b2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0RhdGVJbnB1dFR5cGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvRGF0
ZVRpbWVMb2NhbElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUxvY2Fs
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvTW9udGhJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9udGhJbnB1dFR5cGU6OmNyZWF0ZVN0
ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL1N0ZXBSYW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjpT
dGVwRGVzY3JpcHRpb246OlN0ZXBEZXNjcmlwdGlvbik6CisgICAgICAgICogaHRtbC9UaW1lSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBS
YW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9XZWVrSW5wdXRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlZWtJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAg
ICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcmlnaW5BY2Nl
c3NNYXApOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OmlzQWNjZXNzV2hpdGVM
aXN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1v
dmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0
eVBvbGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Om9yaWdpbkFjY2Vzc01hcExvY2spOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFsbEJ1aWx0aW5TY2hlbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWx0aW5Mb2NhbFVSTFNjaGVtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6bG9jYWxVUkxTY2hlbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJc29sYXRlZFVS
TFNjaGVtZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbHRpblNlY3VyZVNjaGVtZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2VjdXJlU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsdGlu
U2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaGVtZXNXaXRo
VW5pcXVlT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpidWlsdGluQ2FuRGlzcGxheU9ubHlJ
ZkNhblJlcXVlc3RTY2hlbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkRpc3BsYXlPbmx5SWZD
YW5SZXF1ZXN0U2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5
OjpyZW1vdmVVUkxTY2hlbWVSZWdpc3RlcmVkQXNMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lCeXBhc3NpbmdTY2hlbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXJ2aWNlV29y
a2VyU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5Ojpy
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVn
aXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0Rp
c3BsYXlJc29sYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6
c2hvdWxkVHJlYXRVUkxTY2hlbWVBc1NlY3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVS
ZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdp
c3RyeTo6cmVtb3ZlVVJMU2NoZW1lUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpzY2hlbWVTaG91bGRC
eXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVn
aXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRQYXJ0aXRpb25DYWNoZUZvclVSTFNjaGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVTZXJ2
aWNlV29ya2Vyc0NhbkhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6
Y2FuU2VydmljZVdvcmtlcnNIYW5kbGVVUkxTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2No
ZW1lUmVnaXN0cnk6OmlzU2VydmljZVdvcmtlckNvbnRhaW5lckN1c3RvbVNjaGVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzY2hlbWVSZWdpc3RyeUxvY2spOiBEZWxldGVkLgorCiAyMDE4LTA3LTI4
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc2V0
IENvbXBvc2l0aW5nUG9saWN5T3ZlcnJpZGUgYmV0d2VlbiB0ZXN0cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5jcHAKaW5kZXggNmY3ZmQzNmJlM2RlMjFmYTY2Mjg0MTAyYWY2YzU2MDdlNGIwNzBk
MS4uMTg4Y2MzMWZlYmI3ODdmOTRkNDc0ZDFkNjYxZjE4N2U1NjY0NDk5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTWVzc2FnZVBvcnQuY3BwCkBAIC0zOCwxOCArMzgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgTG9jayBhbGxNZXNzYWdlUG9ydHNMb2NrOwogc3RhdGljIEhhc2hNYXA8
TWVzc2FnZVBvcnRJZGVudGlmaWVyLCBNZXNzYWdlUG9ydCo+JiBhbGxNZXNzYWdlUG9ydHMoKQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPE1lc3NhZ2VQb3J0SWRlbnRpZmll
ciwgTWVzc2FnZVBvcnQqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXN0YXRpYyBMb2Nr
JiBhbGxNZXNzYWdlUG9ydHNMb2NrKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9j
az4gbG9jazsKLSAgICByZXR1cm4gbG9jazsKLX0KLQogdm9pZCBNZXNzYWdlUG9ydDo6cmVmKCkg
Y29uc3QKIHsKICAgICArK21fcmVmQ291bnQ7CkBAIC02MSw3ICs1Niw3IEBAIHZvaWQgTWVzc2Fn
ZVBvcnQ6OmRlcmVmKCkgY29uc3QKICAgICAvLyBUaGlzIGFsbG93cyBpc0V4aXN0aW5nTWVzc2Fn
ZVBvcnRMb2NhbGx5UmVhY2hhYmxlIGFuZCBub3RpZnlNZXNzYWdlQXZhaWxhYmxlIHRvIGVhc2ls
eSBxdWVyeSB0aGUgbWFwIGFuZCBtYW5pcHVsYXRlIE1lc3NhZ2VQb3J0IGluc3RhbmNlcy4KIAog
ICAgIGlmICghLS1tX3JlZkNvdW50KSB7Ci0gICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoYWxs
TWVzc2FnZVBvcnRzTG9jaygpKTsKKyAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihhbGxNZXNz
YWdlUG9ydHNMb2NrKTsKIAogICAgICAgICBpZiAobV9yZWZDb3VudCkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTc2LDE0ICs3MSwxNCBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkZXJlZigpIGNvbnN0
CiAKIGJvb2wgTWVzc2FnZVBvcnQ6OmlzRXhpc3RpbmdNZXNzYWdlUG9ydExvY2FsbHlSZWFjaGFi
bGUoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIExvY2tl
cjxMb2NrPiBsb2NrZXIoYWxsTWVzc2FnZVBvcnRzTG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKGFsbE1lc3NhZ2VQb3J0c0xvY2spOwogICAgIGF1dG8qIHBvcnQgPSBhbGxNZXNzYWdl
UG9ydHMoKS5nZXQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHBvcnQgJiYgcG9ydC0+aXNMb2Nh
bGx5UmVhY2hhYmxlKCk7CiB9CiAKIHZvaWQgTWVzc2FnZVBvcnQ6Om5vdGlmeU1lc3NhZ2VBdmFp
bGFibGUoY29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIoYWxsTWVzc2FnZVBvcnRzTG9jaygpKTsKKyAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKGFsbE1lc3NhZ2VQb3J0c0xvY2spOwogICAgIGlmIChhdXRvKiBwb3J0ID0gYWxs
TWVzc2FnZVBvcnRzKCkuZ2V0KGlkZW50aWZpZXIpKQogICAgICAgICBwb3J0LT5tZXNzYWdlQXZh
aWxhYmxlKCk7CiAKQEAgLTEwMSw3ICs5Niw3IEBAIE1lc3NhZ2VQb3J0OjpNZXNzYWdlUG9ydChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBNCiB7
CiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIkNyZWF0ZWQgTWVzc2FnZVBvcnQgJXMgKCVwKSBpbiBw
cm9jZXNzICUiIFBSSXU2NCwgbV9pZGVudGlmaWVyLmxvZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHRoaXMsIFByb2Nlc3M6OmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKIAotICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIoYWxsTWVzc2FnZVBvcnRzTG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4gbG9j
a2VyKGFsbE1lc3NhZ2VQb3J0c0xvY2spOwogICAgIGFsbE1lc3NhZ2VQb3J0cygpLnNldChtX2lk
ZW50aWZpZXIsIHRoaXMpOwogCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVk
TWVzc2FnZVBvcnQoKnRoaXMpOwpAQCAtMTE0LDcgKzEwOSw3IEBAIE1lc3NhZ2VQb3J0Ojp+TWVz
c2FnZVBvcnQoKQogewogICAgIExPRyhNZXNzYWdlUG9ydHMsICJEZXN0cm95ZWQgTWVzc2FnZVBv
cnQgJXMgKCVwKSBpbiBwcm9jZXNzICUiIFBSSXU2NCwgbV9pZGVudGlmaWVyLmxvZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHRoaXMsIFByb2Nlc3M6OmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsK
IAotICAgIEFTU0VSVChhbGxNZXNzYWdlUG9ydHNMb2NrKCkuaXNMb2NrZWQoKSk7CisgICAgQVNT
RVJUKGFsbE1lc3NhZ2VQb3J0c0xvY2suaXNMb2NrZWQoKSk7CiAKICAgICBpZiAobV9lbnRhbmds
ZWQpCiAgICAgICAgIGNsb3NlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKaW5kZXggYWZlMjZmMjVmMTkwYzA0NjNjOTE3MWI4ZDgwNjQyNjUzMTcy
ZmQxZS4uZDhjNDRkODcwZWVjMjVmMTJlNjhjMzQ0OGFhZGE2NjY2ZGIxMTUzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtNjYsMTYgKzY2
LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
Ci1zdGF0aWMgTG9jayYgYWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2NrKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jaz4gbG9jazsKLSAgICByZXR1cm4gbG9jazsKLX0K
LQorc3RhdGljIExvY2sgYWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2NrOwogc3RhdGlj
IEhhc2hNYXA8U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqPiYgYWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXAoKQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVy
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4+IGNvbnRleHRzOwotICAgIEFTU0VSVChhbGxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0c01hcExvY2soKS5pc0xvY2tlZCgpKTsKKyAgICBBU1NFUlQoYWxs
U2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2NrLmlzTG9ja2VkKCkpOwogICAgIHJldHVybiBj
b250ZXh0czsKIH0KIApAQCAtMTA1LDcgKzEwMCw3IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJ
ZGVudGlmaWVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNvbnRleHRJZGVudGlmaWVyKCkgY29u
CiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKICAgICBpZiAoIW1fY29udGV4dElk
ZW50aWZpZXIpIHsKLSAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihhbGxTY3JpcHRFeGVjdXRp
b25Db250ZXh0c01hcExvY2soKSk7CisgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoYWxsU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2NrKTsKIAogICAgICAgICBtX2NvbnRleHRJZGVudGlm
aWVyID0gZ2VuZXJhdGVPYmplY3RJZGVudGlmaWVyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVu
dGlmaWVyVHlwZT4oKTsKIApAQCAtMTE4LDcgKzExMyw3IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRJZGVudGlmaWVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNvbnRleHRJZGVudGlmaWVyKCkg
Y29uCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZUZyb21Db250ZXh0c01hcCgp
CiB7CiAgICAgaWYgKG1fY29udGV4dElkZW50aWZpZXIpIHsKLSAgICAgICAgTG9ja2VyPExvY2s+
IGxvY2tlcihhbGxTY3JpcHRFeGVjdXRpb25Db250ZXh0c01hcExvY2soKSk7CisgICAgICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIoYWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2NrKTsKICAg
ICAgICAgQVNTRVJUKGFsbFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRzTWFwKCkuY29udGFpbnMobV9j
b250ZXh0SWRlbnRpZmllcikpOwogICAgICAgICBhbGxTY3JpcHRFeGVjdXRpb25Db250ZXh0c01h
cCgpLnJlbW92ZShtX2NvbnRleHRJZGVudGlmaWVyKTsKICAgICB9CkBAIC0xNTQsNyArMTQ5LDcg
QEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChtX2NvbnRleHRJZGVudGlmaWVyKSB7Ci0gICAg
ICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoYWxsU2NyaXB0RXhlY3V0aW9uQ29udGV4dHNNYXBMb2Nr
KCkpOworICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKGFsbFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRzTWFwTG9jayk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFsbFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRzTWFwKCkuY29udGFpbnMobV9jb250ZXh0SWRlbnRpZmllciksCiAgICAgICAg
ICAgICAiQSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHN1YmNsYXNzIGluc3RhbmNlIGltcGxlbWVu
dGluZyBwb3N0VGFzayBzaG91bGQgaGF2ZSBhbHJlYWR5IHJlbW92ZWQgaXRzZWxmIGZyb20gdGhl
IG1hcCIpOwogICAgIH0KQEAgLTYwMSw3ICs1OTYsNyBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnBvc3RUYXNrVG8oY29uc3QgRG9jdW1lbnRPcldvcmtlcklkZW50aWZpZXImIGNvbnRl
eAogCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnBvc3RUYXNrVG8oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dElkZW50aWZpZXIgaWRlbnRpZmllciwgVGFzayYmIHRhc2spCiB7Ci0gICAgTG9j
a2VyPExvY2s+IGxvY2tlcihhbGxTY3JpcHRFeGVjdXRpb25Db250ZXh0c01hcExvY2soKSk7Cisg
ICAgTG9ja2VyPExvY2s+IGxvY2tlcihhbGxTY3JpcHRFeGVjdXRpb25Db250ZXh0c01hcExvY2sp
OwogICAgIGF1dG8qIGNvbnRleHQgPSBhbGxTY3JpcHRFeGVjdXRpb25Db250ZXh0c01hcCgpLmdl
dChpZGVudGlmaWVyKTsKIAogICAgIGlmICghY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJ
bnB1dFR5cGUuY3BwCmluZGV4IDUxODhhZDM0NzEwZGRmYjQ2NDBjZTE5ZTBjMjBkMTc1NTUzY2Ex
YTEuLmM4NDhhODdkYzY3MGE3OWJiOWE3ODkxOGQwMzIwMzY3MTJjZDY2OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnB1
dFR5cGVOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZURlZmF1bHRTdGVwID0gMTsKIHN0YXRpYyBjb25zdCBp
bnQgZGF0ZURlZmF1bHRTdGVwQmFzZSA9IDA7CiBzdGF0aWMgY29uc3QgaW50IGRhdGVTdGVwU2Nh
bGVGYWN0b3IgPSA4NjQwMDAwMDsKK3N0YXRpYyBjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlw
dGlvbiBkYXRlU3RlcERlc2NyaXB0aW9uIHsgZGF0ZURlZmF1bHRTdGVwLCBkYXRlRGVmYXVsdFN0
ZXBCYXNlLCBkYXRlU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBhcnNlZFN0ZXBWYWx1ZVNo
b3VsZEJlSW50ZWdlciB9OwogCiBEYXRlSW5wdXRUeXBlOjpEYXRlSW5wdXRUeXBlKEhUTUxJbnB1
dEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgOiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0
VHlwZShlbGVtZW50KQpAQCAtNjIsMTQgKzYyLDEyIEBAIERhdGVDb21wb25lbnRzOjpUeXBlIERh
dGVJbnB1dFR5cGU6OmRhdGVUeXBlKCkgY29uc3QKIAogU3RlcFJhbmdlIERhdGVJbnB1dFR5cGU6
OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlw
dGlvbj4gc3RlcERlc2NyaXB0aW9uKGRhdGVEZWZhdWx0U3RlcCwgZGF0ZURlZmF1bHRTdGVwQmFz
ZSwgZGF0ZVN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpQYXJzZWRTdGVwVmFsdWVTaG91bGRC
ZUludGVnZXIpOwotCiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgY29uc3QgRGVjaW1hbCBz
dGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKG1pbkF0dHIpLCAwKTsKICAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5B
dHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGUoKSkp
OwogICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91
YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBz
dGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRp
b24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikp
OwotICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlk
LCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24pOworICAgIGNvbnN0IERl
Y2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgZGF0ZVN0
ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHN0ZXBBdHRyKSk7CisgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgUmFuZ2VMaW1pdGF0
aW9uczo6VmFsaWQsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIGRhdGVTdGVwRGVzY3JpcHRpb24p
OwogfQogCiBib29sIERhdGVJbnB1dFR5cGU6OnBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFs
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRz
KiBvdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCmlu
ZGV4IDI5MWZmODNmZWE4NjkzMjliNTIyMzRkMjA5YTdjMTBmMmQ5MmZlYmQuLmVjZmQ2MzhkNjY5
NWMyYjllYzZkMzc2NDcwYWIyYWNlNGFlNTE4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0
ZVRpbWVJbnB1dFR5cGUuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklucHV0VHlwZU5h
bWVzLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDQsNiArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3Rh
dGljIGNvbnN0IGludCBkYXRlVGltZURlZmF1bHRTdGVwID0gNjA7CiBzdGF0aWMgY29uc3QgaW50
IGRhdGVUaW1lRGVmYXVsdFN0ZXBCYXNlID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZVRpbWVT
dGVwU2NhbGVGYWN0b3IgPSAxMDAwOworc3RhdGljIGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2Ny
aXB0aW9uIGRhdGVUaW1lU3RlcERlc2NyaXB0aW9uIHsgZGF0ZVRpbWVEZWZhdWx0U3RlcCwgZGF0
ZVRpbWVEZWZhdWx0U3RlcEJhc2UsIGRhdGVUaW1lU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6
OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlciB9OwogCiBjb25zdCBBdG9taWNTdHJpbmcm
IERhdGVUaW1lSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogewpAQCAtNjIsMTMg
KzYyLDExIEBAIERlY2ltYWwgRGF0ZVRpbWVJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBV
cCgpIGNvbnN0CiAKIFN0ZXBSYW5nZSBEYXRlVGltZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdl
KEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3Jp
cHRpb24oZGF0ZVRpbWVEZWZhdWx0U3RlcCwgZGF0ZVRpbWVEZWZhdWx0U3RlcEJhc2UsIGRhdGVU
aW1lU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50
ZWdlcik7Ci0KICAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CiAgICAg
Y29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRl
Q29tcG9uZW50czo6bWluaW11bURhdGVUaW1lKCkpKTsKICAgICBjb25zdCBEZWNpbWFsIG1heGlt
dW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVt
RGF0ZVRpbWUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VT
dGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwotICAgIHJldHVybiBTdGVwUmFuZ2Uo
c3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVw
LCBzdGVwRGVzY3JpcHRpb24pOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6
cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgZGF0ZVRpbWVTdGVwRGVzY3JpcHRpb24sIGVsZW1l
bnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7CisgICAgcmV0
dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgUmFuZ2VMaW1pdGF0aW9uczo6VmFsaWQsIG1pbmltdW0s
IG1heGltdW0sIHN0ZXAsIGRhdGVUaW1lU3RlcERlc2NyaXB0aW9uKTsKIH0KIAogYm9vbCBEYXRl
VGltZUlucHV0VHlwZTo6cGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqIG91dCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCmluZGV4
IDc0ZjU4NjZiMTcwNzQwZWZkMzYyNTExZWIyZGMzZTE5YWExYWJjNDkuLjdjYWMxZDljYmQ2MzNi
OTU0MTliOGUxZmJmMjFiOWUyMTYxM2M5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
YXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnB1
dFR5cGVOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDYgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIHN0YXRpYyBjb25zdCBpbnQgZGF0ZVRpbWVMb2NhbERlZmF1bHRTdGVwID0gNjA7CiBzdGF0
aWMgY29uc3QgaW50IGRhdGVUaW1lTG9jYWxEZWZhdWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNv
bnN0IGludCBkYXRlVGltZUxvY2FsU3RlcFNjYWxlRmFjdG9yID0gMTAwMDsKK3N0YXRpYyBjb25z
dCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0aW9u
IHsgZGF0ZVRpbWVMb2NhbERlZmF1bHRTdGVwLCBkYXRlVGltZUxvY2FsRGVmYXVsdFN0ZXBCYXNl
LCBkYXRlVGltZUxvY2FsU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBWYWx1
ZVNob3VsZEJlSW50ZWdlciB9OwogCiBjb25zdCBBdG9taWNTdHJpbmcmIERhdGVUaW1lTG9jYWxJ
bnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CkBAIC03MCwxNCArNzAsMTIgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2V0VmFsdWVBc0RhdGUo
ZG91YmxlIHZhbHVlKSBjb25zdAogCiBTdGVwUmFuZ2UgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6
Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0
aW9uPiBzdGVwRGVzY3JpcHRpb24oZGF0ZVRpbWVMb2NhbERlZmF1bHRTdGVwLCBkYXRlVGltZUxv
Y2FsRGVmYXVsdFN0ZXBCYXNlLCBkYXRlVGltZUxvY2FsU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFu
Z2U6OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik7Ci0KICAgICBBU1NFUlQoZWxlbWVu
dCgpKTsKICAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIDApOwogICAgIGNv
bnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVD
b21wb25lbnRzOjptaW5pbXVtRGF0ZVRpbWUoKSkpOwogICAgIGNvbnN0IERlY2ltYWwgbWF4aW11
bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVt
RGF0ZVRpbWUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VT
dGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKLSAgICByZXR1cm4gU3RlcFJhbmdl
KHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3Rl
cCwgc3RlcERlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6
OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIGRhdGVUaW1lTG9jYWxTdGVwRGVzY3JpcHRpb24s
IGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwor
ICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBt
aW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0aW9uKTsKIH0K
IAogYm9vbCBEYXRlVGltZUxvY2FsSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBEYXRlQ29tcG9u
ZW50cyogb3V0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElu
cHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAppbmRl
eCA1OTc3Y2FhMGFiMDAxZjc1ODgwN2Y1MzQ5N2E3YjUzZWY1MjZlNzRmLi5mOTJiMzU1MzVhMWQ2
ZWEyMzM2N2E2OTYwNTJmMThhMjNmMWUyNGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL01vbnRoSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5w
dXRUeXBlLmNwcApAQCAtNDYsNiArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
c3RhdGljIGNvbnN0IGludCBtb250aERlZmF1bHRTdGVwID0gMTsKIHN0YXRpYyBjb25zdCBpbnQg
bW9udGhEZWZhdWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNvbnN0IGludCBtb250aFN0ZXBTY2Fs
ZUZhY3RvciA9IDE7CitzdGF0aWMgY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24gbW9u
dGhTdGVwRGVzY3JpcHRpb24geyBtb250aERlZmF1bHRTdGVwLCBtb250aERlZmF1bHRTdGVwQmFz
ZSwgbW9udGhTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6UGFyc2VkU3RlcFZhbHVlU2hvdWxk
QmVJbnRlZ2VyIH07CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgTW9udGhJbnB1dFR5cGU6OmZvcm1D
b250cm9sVHlwZSgpIGNvbnN0CiB7CkBAIC05MSwxNCArOTIsMTIgQEAgRGVjaW1hbCBNb250aElu
cHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKIAogU3RlcFJhbmdlIE1vbnRo
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGlu
ZykgY29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpT
dGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihtb250aERlZmF1bHRTdGVwLCBtb250aERl
ZmF1bHRTdGVwQmFzZSwgbW9udGhTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6UGFyc2VkU3Rl
cFZhbHVlU2hvdWxkQmVJbnRlZ2VyKTsKLQogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIGNv
bnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShtb250
aERlZmF1bHRTdGVwQmFzZSkpOwogICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIp
LCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtTW9udGgoKSkpOwog
ICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91Ymxl
KERhdGVDb21wb25lbnRzOjptYXhpbXVtTW9udGgoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3Rl
cCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9u
LCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsK
LSAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwg
bWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBEZWNp
bWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIG1vbnRoU3Rl
cERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
c3RlcEF0dHIpKTsKKyAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRp
b25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgbW9udGhTdGVwRGVzY3JpcHRpb24p
OwogfQogCiBEZWNpbWFsIE1vbnRoSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmlu
ZyYgc3JjLCBjb25zdCBEZWNpbWFsJiBkZWZhdWx0VmFsdWUpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCmluZGV4IDI3NTk1NTg2ODAxZjZjNzc2MmMwOTgzYWY5OTll
NzAwMmU5ZDFhMGYuLjQ0NjBkNzE5ODJkNjdiNmYzYzgwZjQxOWM4M2ZiYzMxYzljODdmYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAj
aW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2luY2x1ZGUgIlRvdWNoLmgiCkBAIC02OSw2ICs2
OCw3IEBAIHN0YXRpYyBjb25zdCBpbnQgcmFuZ2VEZWZhdWx0TWF4aW11bSA9IDEwMDsKIHN0YXRp
YyBjb25zdCBpbnQgcmFuZ2VEZWZhdWx0U3RlcCA9IDE7CiBzdGF0aWMgY29uc3QgaW50IHJhbmdl
RGVmYXVsdFN0ZXBCYXNlID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgcmFuZ2VTdGVwU2NhbGVGYWN0
b3IgPSAxOworc3RhdGljIGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uIHJhbmdlU3Rl
cERlc2NyaXB0aW9uIHsgcmFuZ2VEZWZhdWx0U3RlcCwgcmFuZ2VEZWZhdWx0U3RlcEJhc2UsIHJh
bmdlU3RlcFNjYWxlRmFjdG9yIH07CiAKIHN0YXRpYyBEZWNpbWFsIGVuc3VyZU1heGltdW0oY29u
c3QgRGVjaW1hbCYgcHJvcG9zZWRWYWx1ZSwgY29uc3QgRGVjaW1hbCYgbWluaW11bSwgY29uc3Qg
RGVjaW1hbCYgZmFsbGJhY2tWYWx1ZSkKIHsKQEAgLTExNSw4ICsxMTUsNiBAQCBib29sIFJhbmdl
SW5wdXRUeXBlOjpzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3QKIAogU3RlcFJhbmdlIFJhbmdlSW5w
dXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykg
Y29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVw
RGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihyYW5nZURlZmF1bHRTdGVwLCByYW5nZURlZmF1
bHRTdGVwQmFzZSwgcmFuZ2VTdGVwU2NhbGVGYWN0b3IpOwotCiAgICAgQVNTRVJUKGVsZW1lbnQo
KSk7CiAgICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIHJhbmdlRGVmYXVsdE1p
bmltdW0pOwogICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFyc2VU
b051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0
ciksIHJhbmdlRGVmYXVsdE1heGltdW0pLCBtaW5pbXVtLCByYW5nZURlZmF1bHRNYXhpbXVtKTsK
QEAgLTEyNCwxMSArMTIyLDExIEBAIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3Rl
cFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVjaXNpb25WYWx1ZSA9IGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyKTsKICAgICBpZiAoIXByZWNpc2lvblZhbHVl
LmlzTnVsbCgpKSB7CiAgICAgICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHByZWNpc2lvblZhbHVlLCAiZmxvYXQiKSA/IERlY2ltYWw6Om5hbigp
IDogMTsKLSAgICAgICAgcmV0dXJuIFN0ZXBSYW5nZShtaW5pbXVtLCBSYW5nZUxpbWl0YXRpb25z
OjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIFN0ZXBSYW5nZShtaW5pbXVtLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWlu
aW11bSwgbWF4aW11bSwgc3RlcCwgcmFuZ2VTdGVwRGVzY3JpcHRpb24pOwogICAgIH0KIAotICAg
IGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGlu
Zywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oc3RlcEF0dHIpKTsKLSAgICByZXR1cm4gU3RlcFJhbmdlKG1pbmltdW0sIFJhbmdlTGlt
aXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24p
OworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBI
YW5kbGluZywgcmFuZ2VTdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOworICAgIHJldHVybiBTdGVwUmFuZ2UobWluaW11
bSwgUmFuZ2VMaW1pdGF0aW9uczo6VmFsaWQsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHJhbmdl
U3RlcERlc2NyaXB0aW9uKTsKIH0KIAogYm9vbCBSYW5nZUlucHV0VHlwZTo6aXNTdGVwcGFibGUo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmgKaW5kZXggNDhlOTgxNzY3ZDQ2ZTQzMzYxM2Zi
YThkNzJlOWE5NzAxYmZiZGE0OC4uNGI2ZDAxOWQ1YWU3MTk1MjdhNTczMmYzYjZjM2EyYjQ1MzVl
NDZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5oCkBAIC00MywxMiArNDMsMTIgQEAgY2xhc3Mg
U3RlcFJhbmdlIHsKICAgICBzdHJ1Y3QgU3RlcERlc2NyaXB0aW9uIHsKICAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBpbnQgZGVmYXVsdFN0ZXA7
Ci0gICAgICAgIGludCBkZWZhdWx0U3RlcEJhc2U7Ci0gICAgICAgIGludCBzdGVwU2NhbGVGYWN0
b3I7Ci0gICAgICAgIFN0ZXBWYWx1ZVNob3VsZEJlIHN0ZXBWYWx1ZVNob3VsZEJlOworICAgICAg
ICBpbnQgZGVmYXVsdFN0ZXAgeyAxIH07CisgICAgICAgIGludCBkZWZhdWx0U3RlcEJhc2UgeyAw
IH07CisgICAgICAgIGludCBzdGVwU2NhbGVGYWN0b3IgeyAxIH07CisgICAgICAgIFN0ZXBWYWx1
ZVNob3VsZEJlIHN0ZXBWYWx1ZVNob3VsZEJlIHsgU3RlcFZhbHVlU2hvdWxkQmVSZWFsIH07CiAK
LSAgICAgICAgU3RlcERlc2NyaXB0aW9uKGludCBkZWZhdWx0U3RlcCwgaW50IGRlZmF1bHRTdGVw
QmFzZSwgaW50IHN0ZXBTY2FsZUZhY3RvciwgU3RlcFZhbHVlU2hvdWxkQmUgc3RlcFZhbHVlU2hv
dWxkQmUgPSBTdGVwVmFsdWVTaG91bGRCZVJlYWwpCisgICAgICAgIGNvbnN0ZXhwciBTdGVwRGVz
Y3JpcHRpb24oaW50IGRlZmF1bHRTdGVwLCBpbnQgZGVmYXVsdFN0ZXBCYXNlLCBpbnQgc3RlcFNj
YWxlRmFjdG9yLCBTdGVwVmFsdWVTaG91bGRCZSBzdGVwVmFsdWVTaG91bGRCZSA9IFN0ZXBWYWx1
ZVNob3VsZEJlUmVhbCkKICAgICAgICAgICAgIDogZGVmYXVsdFN0ZXAoZGVmYXVsdFN0ZXApCiAg
ICAgICAgICAgICAsIGRlZmF1bHRTdGVwQmFzZShkZWZhdWx0U3RlcEJhc2UpCiAgICAgICAgICAg
ICAsIHN0ZXBTY2FsZUZhY3RvcihzdGVwU2NhbGVGYWN0b3IpCkBAIC01NiwxMyArNTYsNyBAQCBj
bGFzcyBTdGVwUmFuZ2UgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBTdGVwRGVz
Y3JpcHRpb24oKQotICAgICAgICAgICAgOiBkZWZhdWx0U3RlcCgxKQotICAgICAgICAgICAgLCBk
ZWZhdWx0U3RlcEJhc2UoMCkKLSAgICAgICAgICAgICwgc3RlcFNjYWxlRmFjdG9yKDEpCi0gICAg
ICAgICAgICAsIHN0ZXBWYWx1ZVNob3VsZEJlKFN0ZXBWYWx1ZVNob3VsZEJlUmVhbCkKLSAgICAg
ICAgewotICAgICAgICB9CisgICAgICAgIFN0ZXBEZXNjcmlwdGlvbigpID0gZGVmYXVsdDsKIAog
ICAgICAgICBEZWNpbWFsIGRlZmF1bHRWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDA3OTkzOWNjNjM1Y2U3NGIzMTkxOGVkZjBh
Y2ZmYmQ5MmE1YTdhNDMuLjQyYzM5MTFlZGUyMmJmMTI3ZjljMmM5YWRhZWVkMWRlMzY5ZTI1Nzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcApAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw2ICs0NSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgaW50IHRpbWVEZWZhdWx0U3RlcCA9IDYwOwog
c3RhdGljIGNvbnN0IGludCB0aW1lRGVmYXVsdFN0ZXBCYXNlID0gMDsKIHN0YXRpYyBjb25zdCBp
bnQgdGltZVN0ZXBTY2FsZUZhY3RvciA9IDEwMDA7CitzdGF0aWMgY29uc3QgU3RlcFJhbmdlOjpT
dGVwRGVzY3JpcHRpb24gdGltZVN0ZXBEZXNjcmlwdGlvbiB7IHRpbWVEZWZhdWx0U3RlcCwgdGlt
ZURlZmF1bHRTdGVwQmFzZSwgdGltZVN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpTY2FsZWRT
dGVwVmFsdWVTaG91bGRCZUludGVnZXIgfTsKIAogVGltZUlucHV0VHlwZTo6VGltZUlucHV0VHlw
ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogICAgIDogQmFzZUNob29zZXJPbmx5RGF0ZUFu
ZFRpbWVJbnB1dFR5cGUoZWxlbWVudCkKQEAgLTc3LDE0ICs3NywxMiBAQCBEZWNpbWFsIFRpbWVJ
bnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CiAKIFN0ZXBSYW5nZSBUaW1l
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGlu
ZykgY29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpT
dGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbih0aW1lRGVmYXVsdFN0ZXAsIHRpbWVEZWZh
dWx0U3RlcEJhc2UsIHRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZh
bHVlU2hvdWxkQmVJbnRlZ2VyKTsKLQogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIGNvbnN0
IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CiAgICAgY29uc3QgRGVjaW1hbCBtaW5p
bXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmlt
dW1UaW1lKCkpKTsKICAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVs
ZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1h
bDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bVRpbWUoKSkpOwotICAgIGNvbnN0
IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3Rl
cERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
c3RlcEF0dHIpKTsKLSAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRp
b25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKKyAg
ICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxp
bmcsIHRpbWVTdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihzdGVwQXR0cikpOworICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJh
bmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCB0aW1lU3RlcERl
c2NyaXB0aW9uKTsKIH0KIAogYm9vbCBUaW1lSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVu
dHNJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBEYXRl
Q29tcG9uZW50cyogb3V0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9X
ZWVrSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAK
aW5kZXggZDYzNzkwZGVhZDJiNjQwNjZmZmQzNjY5Mjg2OWUyZjg1NTNlY2RmMy4uYmNiNmFmMmNh
YWQ1ZTVmM2JlYTk0NTRhNTEwM2ViOTUxY2Q0M2Q2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJ
bnB1dFR5cGUuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDQsNiArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNv
bnN0IGludCB3ZWVrRGVmYXVsdFN0ZXBCYXNlID0gLTI1OTIwMDAwMDsgLy8gVGhlIGZpcnN0IGRh
eSBvZiAxOTcwLVcwMS4KIHN0YXRpYyBjb25zdCBpbnQgd2Vla0RlZmF1bHRTdGVwID0gMTsKIHN0
YXRpYyBjb25zdCBpbnQgd2Vla1N0ZXBTY2FsZUZhY3RvciA9IDYwNDgwMDAwMDsKK3N0YXRpYyBj
b25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiB3ZWVrU3RlcERlc2NyaXB0aW9uIHsgd2Vl
a0RlZmF1bHRTdGVwLCB3ZWVrRGVmYXVsdFN0ZXBCYXNlLCB3ZWVrU3RlcFNjYWxlRmFjdG9yLCBT
dGVwUmFuZ2U6OlBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlciB9OwogCiBjb25zdCBBdG9t
aWNTdHJpbmcmIFdlZWtJbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CkBAIC01
NywxNCArNTcsMTIgQEAgRGF0ZUNvbXBvbmVudHM6OlR5cGUgV2Vla0lucHV0VHlwZTo6ZGF0ZVR5
cGUoKSBjb25zdAogCiBTdGVwUmFuZ2UgV2Vla0lucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFu
eVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3JpcHRp
b24od2Vla0RlZmF1bHRTdGVwLCB3ZWVrRGVmYXVsdFN0ZXBCYXNlLCB3ZWVrU3RlcFNjYWxlRmFj
dG9yLCBTdGVwUmFuZ2U6OlBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik7Ci0KICAgICBB
U1NFUlQoZWxlbWVudCgpKTsKICAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciks
IHdlZWtEZWZhdWx0U3RlcEJhc2UpOwogICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNl
VG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0
dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7
CiAgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3Vi
bGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0
ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlv
biwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7
Ci0gICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgUmFuZ2VMaW1pdGF0aW9uczo6VmFsaWQs
IG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CisgICAgY29uc3QgRGVj
aW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCB3ZWVrU3Rl
cERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
c3RlcEF0dHIpKTsKKyAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRp
b25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgd2Vla1N0ZXBEZXNjcmlwdGlvbik7
CiB9CiAKIGJvb2wgV2Vla0lucHV0VHlwZTo6cGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMq
IG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xp
Y3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKaW5kZXggZmU2
MTI4Mzk3NjMwYWM4MWJlZGM4M2U3MGYwNTgyYWI0ZWU1ZTI5NS4uMTUzZWRkODE5ZDEyNTU1NTU2
ODg3NjU2NmRlMzFmOThiNmMwNTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGlj
eS5jcHAKQEAgLTQ1LDE1ICs0NSwxMCBAQCBzdGF0aWMgU2VjdXJpdHlQb2xpY3k6OkxvY2FsTG9h
ZFBvbGljeSBsb2NhbExvYWRQb2xpY3kgPSBTZWN1cml0eVBvbGljeTo6QWxsb3dMbwogdHlwZWRl
ZiBWZWN0b3I8T3JpZ2luQWNjZXNzRW50cnk+IE9yaWdpbkFjY2Vzc1doaXRlTGlzdDsKIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxPcmlnaW5BY2Nlc3NXaGl0ZUxpc3Q+
PiBPcmlnaW5BY2Nlc3NNYXA7CiAKLXN0YXRpYyBMb2NrJiBvcmlnaW5BY2Nlc3NNYXBMb2NrKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jaz4gbG9jazsKLSAgICByZXR1cm4gbG9j
azsKLX0KLQorc3RhdGljIExvY2sgb3JpZ2luQWNjZXNzTWFwTG9jazsKIHN0YXRpYyBPcmlnaW5B
Y2Nlc3NNYXAmIG9yaWdpbkFjY2Vzc01hcCgpCiB7Ci0gICAgQVNTRVJUKG9yaWdpbkFjY2Vzc01h
cExvY2soKS5pc0hlbGQoKSk7CisgICAgQVNTRVJUKG9yaWdpbkFjY2Vzc01hcExvY2suaXNIZWxk
KCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxPcmlnaW5BY2Nlc3NNYXA+IG9yaWdpbkFj
Y2Vzc01hcDsKICAgICByZXR1cm4gb3JpZ2luQWNjZXNzTWFwOwogfQpAQCAtMTY3LDcgKzE2Miw3
IEBAIGJvb2wgU2VjdXJpdHlQb2xpY3k6OmFsbG93U3Vic3RpdHV0ZURhdGFBY2Nlc3NUb0xvY2Fs
KCkKIAogYm9vbCBTZWN1cml0eVBvbGljeTo6aXNBY2Nlc3NXaGl0ZUxpc3RlZChjb25zdCBTZWN1
cml0eU9yaWdpbiogYWN0aXZlT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3Jp
Z2luKQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIob3JpZ2luQWNjZXNzTWFwTG9jaygpKTsK
KyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG9yaWdpbkFjY2Vzc01hcExvY2spOwogICAgIGlmIChP
cmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBvcmlnaW5BY2Nlc3NNYXAoKS5nZXQoYWN0aXZl
T3JpZ2luLT50b1N0cmluZygpKSkgewogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKmxpc3Qp
IHsKICAgICAgICAgICAgIGlmIChlbnRyeS5tYXRjaGVzT3JpZ2luKCp0YXJnZXRPcmlnaW4pKQpA
QCAtMTkxLDcgKzE4Niw3IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPCiAKICAgICBTdHJpbmcg
c291cmNlU3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAKLSAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKG9yaWdpbkFjY2Vzc01hcExvY2soKSk7CisgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihvcmlnaW5BY2Nlc3NNYXBMb2NrKTsKICAgICBPcmlnaW5BY2Nlc3NNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBvcmlnaW5BY2Nlc3NNYXAoKS5hZGQoc291cmNlU3RyaW5nLCBudWxscHRyKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBzdGQ6Om1ha2VfdW5pcXVlPE9yaWdpbkFjY2Vzc1doaXRlTGlzdD4oKTsKQEAgLTIwOCw3ICsy
MDMsNyBAQCB2b2lkIFNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShjb25zdCBTZWN1cml0eU9yaWdpbiYgc291cgogCiAgICAgU3RyaW5nIHNvdXJjZVN0cmlu
ZyA9IHNvdXJjZU9yaWdpbi50b1N0cmluZygpOwogCi0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihv
cmlnaW5BY2Nlc3NNYXBMb2NrKCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIob3JpZ2luQWNj
ZXNzTWFwTG9jayk7CiAgICAgT3JpZ2luQWNjZXNzTWFwJiBtYXAgPSBvcmlnaW5BY2Nlc3NNYXAo
KTsKICAgICBPcmlnaW5BY2Nlc3NNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoc291cmNlU3Ry
aW5nKTsKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQpAQCAtMjI1LDcgKzIyMCw3IEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiBzb3VyCiAKIHZvaWQgU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNj
ZXNzV2hpdGVsaXN0cygpCiB7Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihvcmlnaW5BY2Nlc3NN
YXBMb2NrKCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIob3JpZ2luQWNjZXNzTWFwTG9jayk7
CiAgICAgb3JpZ2luQWNjZXNzTWFwKCkuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCmluZGV4IDkwZGM0NjFkZjViNzBlMjIxZjdlMjg2OTFj
NTczMmFiOTRkOGM4MjUuLjk0OWRlNjNhZWYwNmNmY2ZhZjBjMDJkMjRjNmFjNDRlNjZmZTBiOTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKQEAgLTY1LDEx
ICs2NSw3IEBAIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVUkxTY2hlbWVzTWFwPiBtYWtlTmV2ZXJE
ZXN0cm95ZWRTY2hlbWVTZXQoY29uc3QgVmVjdG9yPFN0CiAgICAgcmV0dXJuIHNldDsKIH0KIAot
c3RhdGljIExvY2smIHNjaGVtZVJlZ2lzdHJ5TG9jaygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPExvY2s+IGxvY2s7Ci0gICAgcmV0dXJuIGxvY2s7Ci19CitzdGF0aWMgTG9jayBzY2hl
bWVSZWdpc3RyeUxvY2s7CiAKIHN0YXRpYyBjb25zdCBVUkxTY2hlbWVzTWFwJiBhbGxCdWlsdGlu
U2NoZW1lcygpCiB7CkBAIC05OCw3ICs5NCw3IEBAIHN0YXRpYyBjb25zdCBVUkxTY2hlbWVzTWFw
JiBhbGxCdWlsdGluU2NoZW1lcygpCiAKICAgICAgICAgVVJMU2NoZW1lc01hcCBzZXQ7CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2Nr
KCkpOworICAgICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2sp
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBidWlsdGluTG9jYWxVUkxTY2hlbWVz
KCkpCiAgICAgICAgICAgICAgICAgc2V0LmFkZChzY2hlbWUpOwogCkBAIC0xMTQsNyArMTEwLDcg
QEAgc3RhdGljIGNvbnN0IFVSTFNjaGVtZXNNYXAmIGFsbEJ1aWx0aW5TY2hlbWVzKCkKIAogc3Rh
dGljIGNvbnN0IFVSTFNjaGVtZXNNYXAmIGJ1aWx0aW5Mb2NhbFVSTFNjaGVtZXMoKQogewotICAg
IEFTU0VSVChzY2hlbWVSZWdpc3RyeUxvY2soKS5pc0hlbGQoKSk7CisgICAgQVNTRVJUKHNjaGVt
ZVJlZ2lzdHJ5TG9jay5pc0hlbGQoKSk7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gc2NoZW1lcyA9
IG1ha2VOZXZlckRlc3Ryb3llZChVUkxTY2hlbWVzTWFwIHsKICAgICAgICAgImZpbGUiLAogI2lm
IFBMQVRGT1JNKENPQ09BKQpAQCAtMTI2LDIxICsxMjIsMjEgQEAgc3RhdGljIGNvbnN0IFVSTFNj
aGVtZXNNYXAmIGJ1aWx0aW5Mb2NhbFVSTFNjaGVtZXMoKQogCiBzdGF0aWMgVVJMU2NoZW1lc01h
cCYgbG9jYWxVUkxTY2hlbWVzKCkKIHsKLSAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrKCku
aXNIZWxkKCkpOworICAgIEFTU0VSVChzY2hlbWVSZWdpc3RyeUxvY2suaXNIZWxkKCkpOwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVUkxTY2hlbWVzTWFwPiBsb2NhbFNjaGVtZXMgPSBidWls
dGluTG9jYWxVUkxTY2hlbWVzKCk7CiAgICAgcmV0dXJuIGxvY2FsU2NoZW1lczsKIH0KIAogc3Rh
dGljIFVSTFNjaGVtZXNNYXAmIGRpc3BsYXlJc29sYXRlZFVSTFNjaGVtZXMoKQogewotICAgIEFT
U0VSVChzY2hlbWVSZWdpc3RyeUxvY2soKS5pc0hlbGQoKSk7CisgICAgQVNTRVJUKHNjaGVtZVJl
Z2lzdHJ5TG9jay5pc0hlbGQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVSTFNjaGVt
ZXNNYXA+IGRpc3BsYXlJc29sYXRlZFNjaGVtZXM7CiAgICAgcmV0dXJuIGRpc3BsYXlJc29sYXRl
ZFNjaGVtZXM7CiB9CiAKIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBidWlsdGluU2VjdXJlU2NoZW1l
cygpCiB7Ci0gICAgQVNTRVJUKHNjaGVtZVJlZ2lzdHJ5TG9jaygpLmlzSGVsZCgpKTsKKyAgICBB
U1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrLmlzSGVsZCgpKTsKICAgICBzdGF0aWMgY29uc3QgYXV0
byBzY2hlbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKICAgICAgICAg
Imh0dHBzIiwKICAgICAgICAgImFib3V0IiwKQEAgLTE1NSwxNCArMTUxLDE0IEBAIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBidWlsdGluU2VjdXJlU2NoZW1lcygpCiAKIHN0YXRpYyBVUkxTY2hlbWVz
TWFwJiBzZWN1cmVTY2hlbWVzKCkKIHsKLSAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrKCku
aXNIZWxkKCkpOworICAgIEFTU0VSVChzY2hlbWVSZWdpc3RyeUxvY2suaXNIZWxkKCkpOwogICAg
IHN0YXRpYyBhdXRvIHNlY3VyZVNjaGVtZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWRTY2hlbWVTZXQo
YnVpbHRpblNlY3VyZVNjaGVtZXMpOwogICAgIHJldHVybiBzZWN1cmVTY2hlbWVzOwogfQogCiBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYnVpbHRpblNjaGVtZXNXaXRoVW5pcXVlT3JpZ2lucygpCiB7
Ci0gICAgQVNTRVJUKHNjaGVtZVJlZ2lzdHJ5TG9jaygpLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQo
c2NoZW1lUmVnaXN0cnlMb2NrLmlzSGVsZCgpKTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzY2hl
bWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKICAgICAgICAgImFib3V0
IiwKICAgICAgICAgImphdmFzY3JpcHQiLApAQCAtMTc1LDcgKzE3MSw3IEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBidWlsdGluU2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKCkKIAogc3RhdGljIFVS
TFNjaGVtZXNNYXAmIHNjaGVtZXNXaXRoVW5pcXVlT3JpZ2lucygpCiB7Ci0gICAgQVNTRVJUKHNj
aGVtZVJlZ2lzdHJ5TG9jaygpLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlM
b2NrLmlzSGVsZCgpKTsKICAgICBzdGF0aWMgYXV0byBzY2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMg
PSBtYWtlTmV2ZXJEZXN0cm95ZWRTY2hlbWVTZXQoYnVpbHRpblNjaGVtZXNXaXRoVW5pcXVlT3Jp
Z2lucyk7CiAgICAgcmV0dXJuIHNjaGVtZXNXaXRoVW5pcXVlT3JpZ2luczsKIH0KQEAgLTIwMywx
NCArMTk5LDE0IEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBzY2hlbWVzRm9yYmlkZGVuRnJvbURv
bWFpblJlbGF4YXRpb24oKQogCiBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYnVpbHRpbkNhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpCiB7Ci0gICAgQVNTRVJUKHNjaGVtZVJlZ2lzdHJ5
TG9jaygpLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrLmlzSGVsZCgp
KTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzY2hlbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZl
Y3RvcjxTdHJpbmc+IHsgImJsb2IiIH0pOwogICAgIHJldHVybiBzY2hlbWVzOwogfQogCiBzdGF0
aWMgVVJMU2NoZW1lc01hcCYgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKCkKIHsK
LSAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrKCkuaXNIZWxkKCkpOworICAgIEFTU0VSVChz
Y2hlbWVSZWdpc3RyeUxvY2suaXNIZWxkKCkpOwogICAgIHN0YXRpYyBhdXRvIGNhbkRpc3BsYXlP
bmx5SWZDYW5SZXF1ZXN0U2NoZW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZFNjaGVtZVNldChidWls
dGluQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKTsKICAgICByZXR1cm4gY2FuRGlz
cGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzOwogfQpAQCAtMjI3LDEzICsyMjMsMTMgQEAgdm9p
ZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYg
c2NoZW1lKQogICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKCkpOworICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKTsKICAgICBsb2NhbFVSTFNjaGVtZXMoKS5h
ZGQoc2NoZW1lKTsKIH0KIAogdm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVtb3ZlVVJMU2NoZW1lUmVn
aXN0ZXJlZEFzTG9jYWwoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgTG9ja2VyPExvY2s+
IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2soKSk7CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihz
Y2hlbWVSZWdpc3RyeUxvY2spOwogICAgIGlmIChidWlsdGluTG9jYWxVUkxTY2hlbWVzKCkuY29u
dGFpbnMoc2NoZW1lKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzEsMjEgKzI2NywyMSBAQCBz
dGF0aWMgVVJMU2NoZW1lc01hcCYgQ09SU0VuYWJsZWRTY2hlbWVzKCkKIAogc3RhdGljIFVSTFNj
aGVtZXNNYXAmIENvbnRlbnRTZWN1cml0eVBvbGljeUJ5cGFzc2luZ1NjaGVtZXMoKQogewotICAg
IEFTU0VSVChzY2hlbWVSZWdpc3RyeUxvY2soKS5pc0hlbGQoKSk7CisgICAgQVNTRVJUKHNjaGVt
ZVJlZ2lzdHJ5TG9jay5pc0hlbGQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVSTFNj
aGVtZXNNYXA+IHNjaGVtZXM7CiAgICAgcmV0dXJuIHNjaGVtZXM7CiB9CiAKIHN0YXRpYyBVUkxT
Y2hlbWVzTWFwJiBjYWNoZVBhcnRpdGlvbmluZ1NjaGVtZXMoKQogewotICAgIEFTU0VSVChzY2hl
bWVSZWdpc3RyeUxvY2soKS5pc0hlbGQoKSk7CisgICAgQVNTRVJUKHNjaGVtZVJlZ2lzdHJ5TG9j
ay5pc0hlbGQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVSTFNjaGVtZXNNYXA+IHNj
aGVtZXM7CiAgICAgcmV0dXJuIHNjaGVtZXM7CiB9CiAKIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBz
ZXJ2aWNlV29ya2VyU2NoZW1lcygpCiB7Ci0gICAgQVNTRVJUKHNjaGVtZVJlZ2lzdHJ5TG9jaygp
LmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoc2NoZW1lUmVnaXN0cnlMb2NrLmlzSGVsZCgpKTsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VVJMU2NoZW1lc01hcD4gc2NoZW1lczsKICAgICByZXR1
cm4gc2NoZW1lczsKIH0KQEAgLTMwMiw3ICsyOTgsNyBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5Ojpz
aG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgaWYg
KHNjaGVtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTG9ja2VyPExv
Y2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2soKSk7CisgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihzY2hlbWVSZWdpc3RyeUxvY2spOwogICAgIHJldHVybiBsb2NhbFVSTFNjaGVtZXMoKS5jb250
YWlucyhzY2hlbWUpOwogfQogCkBAIC0zMTEsNyArMzA3LDcgQEAgdm9pZCBTY2hlbWVSZWdpc3Ry
eTo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAg
IGlmIChzY2hlbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIo
c2NoZW1lUmVnaXN0cnlMb2NrKTsKICAgICBzY2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMoKS5hZGQo
c2NoZW1lKTsKIH0KIApAQCAtMzIwLDcgKzMxNiw3IEBAIGJvb2wgU2NoZW1lUmVnaXN0cnk6OnNo
b3VsZFRyZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICBp
ZiAoc2NoZW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMb2NrZXI8
TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4gbG9j
a2VyKHNjaGVtZVJlZ2lzdHJ5TG9jayk7CiAgICAgcmV0dXJuIHNjaGVtZXNXaXRoVW5pcXVlT3Jp
Z2lucygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKQEAgLTMyOSw3ICszMjUsNyBAQCB2b2lkIFNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0
cmluZyYgc2NoZW1lKQogICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKCkpOworICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKTsKICAgICBkaXNwbGF5SXNvbGF0
ZWRVUkxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7CiB9CiAKQEAgLTMzOCw3ICszMzQsNyBAQCBib29s
IFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNv
bnN0IFN0cmluZyYgc2NoZW1lKQogICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2Nr
KCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKTsKICAgICBy
ZXR1cm4gZGlzcGxheUlzb2xhdGVkVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAK
QEAgLTM0Nyw3ICszNDMsNyBAQCB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVt
ZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIGlmIChzY2hlbWUuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0
cnlMb2NrKCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKTsK
ICAgICBzZWN1cmVTY2hlbWVzKCkuYWRkKHNjaGVtZSk7CiB9CiAKQEAgLTM1Niw3ICszNTIsNyBA
QCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0
IFN0cmluZyYgc2NoZW1lKQogICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKCkp
OworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0cnlMb2NrKTsKICAgICByZXR1
cm4gc2VjdXJlU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKQEAgLTM5Myw3ICszODks
NyBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25z
dCBTdHJpbmcmIHNjaGVtZSkKICAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jaygp
KTsKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jayk7CiAgICAgcmV0
dXJuIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7
CiB9CiAKQEAgLTQwMiw3ICszOTgsNyBAQCB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlckFz
Q2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgaWYg
KHNjaGVtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTG9ja2VyPExvY2s+IGxv
Y2tlcihzY2hlbWVSZWdpc3RyeUxvY2soKSk7CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hl
bWVSZWdpc3RyeUxvY2spOwogICAgIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygp
LmFkZChzY2hlbWUpOwogfQogCkBAIC00NTksNyArNDU1LDcgQEAgdm9pZCBTY2hlbWVSZWdpc3Ry
eTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShjb25z
dCBTdHIKICAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
b2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jaygpKTsKKyAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jayk7CiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
QnlwYXNzaW5nU2NoZW1lcygpLmFkZChzY2hlbWUpOwogfQogCkBAIC00NjgsNyArNDY0LDcgQEAg
dm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVtb3ZlVVJMU2NoZW1lUmVnaXN0ZXJlZEFzQnlwYXNzaW5n
Q29udGVudFNlY3VyaXR5UG9saWN5KGMKICAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jaygp
KTsKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jayk7CiAgICAgQ29u
dGVudFNlY3VyaXR5UG9saWN5QnlwYXNzaW5nU2NoZW1lcygpLnJlbW92ZShzY2hlbWUpOwogfQog
CkBAIC00NzcsNyArNDczLDcgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlw
YXNzQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFN0cmluZyYgc2NoZW0KICAgICBpZiAoc2No
ZW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNj
aGVtZVJlZ2lzdHJ5TG9jayk7CiAgICAgcmV0dXJuIENvbnRlbnRTZWN1cml0eVBvbGljeUJ5cGFz
c2luZ1NjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQogCkBAIC00OTgsNyArNDk0LDcgQEAg
dm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgaWYgKHNjaGVtZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2soKSk7
CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2spOwogICAgIGNhY2hl
UGFydGl0aW9uaW5nU2NoZW1lcygpLmFkZChzY2hlbWUpOwogfQogCkBAIC01MDcsNyArNTAzLDcg
QEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkUGFydGl0aW9uQ2FjaGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgaWYgKHNjaGVtZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxv
Y2soKSk7CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihzY2hlbWVSZWdpc3RyeUxvY2spOwogICAg
IHJldHVybiBjYWNoZVBhcnRpdGlvbmluZ1NjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQog
CkBAIC01MTYsNyArNTEyLDcgQEAgdm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hl
bWVTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZShjb25zdCBTdHJpbmcmIHNjaGUKICAgICBpZiAoc2No
ZW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2Vy
KHNjaGVtZVJlZ2lzdHJ5TG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJl
Z2lzdHJ5TG9jayk7CiAgICAgc2VydmljZVdvcmtlclNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKIH0K
IApAQCAtNTMyLDEzICs1MjgsMTMgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6Y2FuU2VydmljZVdv
cmtlcnNIYW5kbGVVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lz
dHJ5TG9jaygpKTsKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKHNjaGVtZVJlZ2lzdHJ5TG9jayk7
CiAgICAgcmV0dXJuIHNlcnZpY2VXb3JrZXJTY2hlbWVzKCkuY29udGFpbnMoc2NoZW1lKTsKIH0K
IAogYm9vbCBTY2hlbWVSZWdpc3RyeTo6aXNTZXJ2aWNlV29ya2VyQ29udGFpbmVyQ3VzdG9tU2No
ZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2No
ZW1lUmVnaXN0cnlMb2NrKCkpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2NoZW1lUmVnaXN0
cnlMb2NrKTsKICAgICByZXR1cm4gIXNjaGVtZS5pc051bGwoKSAmJiBzZXJ2aWNlV29ya2VyU2No
ZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAK
</data>
<flag name="review"
          id="363920"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>