<?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>209415</bug_id>
          
          <creation_ts>2020-03-23 02:48:40 -0700</creation_ts>
          <short_desc>[Web Animations] ElementAnimationRareData is created too frequently</short_desc>
          <delta_ts>2020-03-23 14:40:47 -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>Animations</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="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1632772</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-03-23 02:48:40 -0700</bug_when>
    <thetext>[Web Animations] ElementAnimationRareData is created too frequently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632774</commentid>
    <comment_count>1</comment_count>
      <attachid>394248</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-03-23 02:52:25 -0700</bug_when>
    <thetext>Created attachment 394248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632792</commentid>
    <comment_count>2</comment_count>
      <attachid>394252</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-03-23 04:28:10 -0700</bug_when>
    <thetext>Created attachment 394252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632794</commentid>
    <comment_count>3</comment_count>
      <attachid>394252</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-23 04:38:15 -0700</bug_when>
    <thetext>Comment on attachment 394252
Patch

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

&gt; Source/WebCore/animation/AnimationTimeline.cpp:226
&gt; +    if (const auto* transitions = element.transitions()) {

No particular reason to spell out const here explicitly.

&gt; Source/WebCore/dom/Element.cpp:3833
&gt; +const PropertyToTransitionMap* Element::completedTransitionsByProperty() const
&gt; +{
&gt; +    if (auto* animationData = animationRareData())
&gt; +        return &amp;animationRareData()-&gt;completedTransitionsByProperty();
&gt; +    return nullptr;
&gt; +}
&gt; +
&gt; +const PropertyToTransitionMap* Element::runningTransitionsByProperty() const
&gt; +{
&gt; +    if (auto* animationData = animationRareData())
&gt; +        return &amp;animationRareData()-&gt;runningTransitionsByProperty();
&gt; +    return nullptr;
&gt; +}

Instead of exposing the maps, perhaps you could just have 

RefPtr&lt;CSSTransition&gt; Element::completedTransitionForProperty(CSSProperty)

Seems like that&apos;s the only thing these are used for and it would simplify the call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632795</commentid>
    <comment_count>4</comment_count>
      <attachid>394252</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-23 04:42:02 -0700</bug_when>
    <thetext>Comment on attachment 394252
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:3833
&gt;&gt; +}
&gt; 
&gt; Instead of exposing the maps, perhaps you could just have 
&gt; 
&gt; RefPtr&lt;CSSTransition&gt; Element::completedTransitionForProperty(CSSProperty)
&gt; 
&gt; Seems like that&apos;s the only thing these are used for and it would simplify the call sites.

Or even just

bool Element::hasCompletedTransitionForProperty(CSSProperty)

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632806</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-03-23 05:41:30 -0700</bug_when>
    <thetext>Committed r258834: &lt;https://trac.webkit.org/changeset/258834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632808</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-23 05:42:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/60771170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633020</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-23 14:11:02 -0700</bug_when>
    <thetext>New warnings:

[1031/1697] Building CXX object Source/WebCore/CMakeFiles...es/WebCore/unified-sources/UnifiedSource-be65d27a-7.cpp.o
In file included from DerivedSources/WebCore/unified-sources/UnifiedSource-be65d27a-7.cpp:8:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘const AnimationCollection* WebCore::Element::webAnimations() const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3802:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3802 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘const AnimationCollection* WebCore::Element::cssAnimations() const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3809:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3809 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘const AnimationCollection* WebCore::Element::transitions() const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3816:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3816 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘bool WebCore::Element::hasCompletedTransitionsForProperty(WebCore::CSSPropertyID) const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3823:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3823 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘bool WebCore::Element::hasRunningTransitionsForProperty(WebCore::CSSPropertyID) const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3830:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3830 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp: In member function ‘bool WebCore::Element::hasRunningTransitions() const’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/dom/Element.cpp:3837:15: warning: unused variable ‘animationData’ [-Wunused-variable]
 3837 |     if (auto* animationData = animationRareData())
      |               ^~~~~~~~~~~~~


Solution is to just remove the unnecessary variable declaration... OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633022</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-23 14:12:07 -0700</bug_when>
    <thetext>Planning to commit this:


diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp
index b64ebb1239b1..d4d7b143e082 100644
--- a/Source/WebCore/dom/Element.cpp
+++ b/Source/WebCore/dom/Element.cpp
@@ -3799,42 +3799,42 @@ OptionSet&lt;AnimationImpact&gt; Element::applyKeyframeEffects(RenderStyle&amp; targetStyl
 
 const AnimationCollection* Element::webAnimations() const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return &amp;animationRareData()-&gt;webAnimations();
     return nullptr;
 }
 
 const AnimationCollection* Element::cssAnimations() const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return &amp;animationRareData()-&gt;cssAnimations();
     return nullptr;
 }
 
 const AnimationCollection* Element::transitions() const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return &amp;animationRareData()-&gt;transitions();
     return nullptr;
 }
 
 bool Element::hasCompletedTransitionsForProperty(CSSPropertyID property) const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return animationRareData()-&gt;completedTransitionsByProperty().contains(property);
     return false;
 }
 
 bool Element::hasRunningTransitionsForProperty(CSSPropertyID property) const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return animationRareData()-&gt;runningTransitionsByProperty().contains(property);
     return false;
 }
 
 bool Element::hasRunningTransitions() const
 {
-    if (auto* animationData = animationRareData())
+    if (animationRareData())
         return !animationRareData()-&gt;runningTransitionsByProperty().isEmpty();
     return false;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633035</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-23 14:40:47 -0700</bug_when>
    <thetext>Bug #209438</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394248</attachid>
            <date>2020-03-23 02:52:25 -0700</date>
            <delta_ts>2020-03-23 04:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209415-20200323105223.patch</filename>
            <type>text/plain</type>
            <size>14607</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjNkNDkyMDNmYTZlMjZk
MTM4ZjVjZWMyYjdjMDc0NjFmZWE5MGI3Ni4uY2Y0M2Q3MDRiM2FkNDgyYWFiNzVlM2IzOTY4ZGU2
ZDBiZWMzMDc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTAzLTIzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBBbmltYXRpb25z
XSBFbGVtZW50QW5pbWF0aW9uUmFyZURhdGEgaXMgY3JlYXRlZCB0b28gZnJlcXVlbnRseQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NDE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHZhcmlvdXMg
YWNjZXNzb3JzIG9uIEVsZW1lbnQgdG8gYWNjZXNzIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25z
IHdpbGwgZW5zdXJlIHRoZXJlIGlzIGEgYmFja2luZworICAgICAgICBFbGVtZW50QW5pbWF0aW9u
UmFyZURhdGEgb2JqZWN0LiBIb3dldmVyLCBpbiBhIGxvdCBvZiBjYXNlcywgc3VjaCBhcyB3aGVu
IHdlIGNvbnNpZGVyIHdoZXRoZXIgQ1NTCisgICAgICAgIFRyYW5zaXRpb25zIHNob3VsZCBiZSBj
cmVhdGVkLCB1cGRhdGVkIG9yIHJlbW92ZWQgdW5kZXIgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudCgpLAorICAgICAgICB3ZSBlbmQgdXAgbm90IG5lZWRp
bmcgdG8gYWN0dWFsbHkgYWNjZXNzIHRoZSBkYXRhIHN0cnVjdHVyZXMgb24gRWxlbWVudEFuaW1h
dGlvblJhcmVEYXRhLgorCisgICAgICAgIFdlIG5vdyBhZGQgYSBuZXcgRWxlbWVudDo6aGFzQW5p
bWF0aW9uUmFyZURhdGEoKSBtZXRob2Qgd2hpY2ggd2UgdXNlIHRvIGdhdGUgbW9zdCBjYWxscyB0
byBhY2Nlc3MgdGhlCisgICAgICAgIEVsZW1lbnRBbmltYXRpb25SYXJlRGF0YSBkYXRhIHN0cnVj
dHVyZXMgdGhyb3VnaCBFbGVtZW50IHdoaWNoIG1lYW5zIHRoYXQgZm9yIGVsZW1lbnRzIHRoYXQg
ZG8gbm90IGFjdHVhbGx5CisgICAgICAgIG5lZWQgdG8gY3JlYXRlIGFuaW1hdGlvbnMgb3IgdHJh
bnNpdGlvbnMsIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYSBjcmVhdGVkIEVsZW1lbnRBbmltYXRpb25S
YXJlRGF0YS4KKworICAgICAgICBObyB0ZXN0IGJlY2F1c2UgdGhlcmUgaXMgbm8gY2hhbmdlIGlu
IHZpc2libGUgYmVoYXZpb3IuCisKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGltZWxpbmU6OmFuaW1hdGlvbnNG
b3JFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lOjp3
aWxsRGVzdHJveVJlbmRlcmVyRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25UaW1lbGluZTo6Y2FuY2VsRGVjbGFyYXRpdmVBbmltYXRpb25zRm9yRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JF
bGVtZW50QW5kUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGltZWxpbmU6
OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudCk6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblRpbWVsaW5lLmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6aGFzQW5pbWF0aW9uUmFyZURhdGEgY29uc3QpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6CisKIDIwMjAtMDMtMjMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViIEFuaW1hdGlvbnNdIEZpeCB0aGUgdHlwbyBmb3IgRWxl
bWVudEFuaW1hdGlvblJhcmVEYXRhOjpjb21wbGV0ZWRUcmFuc2l0aW9uQnlQcm9wZXJ0eSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAppbmRleCA4
Y2UzYjI0MDIwMjkzN2E5ZjdjN2IwYjZlNDg4ZTBkN2QzNjVmMzM4Li4xZDc0NGFhMDg1ZTgzYmZk
MDU5Y2Y3OGFjZDU0MDU4NmVjYTY5YTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25UaW1lbGluZS5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBWZWN0b3I8UmVmUHRy
PFdlYkFuaW1hdGlvbj4+IEFuaW1hdGlvblRpbWVsaW5lOjphbmltYXRpb25zRm9yRWxlbWVudChF
bGVtZW50JiBlbAogICAgICAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBlbGVtZW50LmVuc3Vy
ZUtleWZyYW1lRWZmZWN0U3RhY2soKS5zb3J0ZWRFZmZlY3RzKCkpCiAgICAgICAgICAgICAgICAg
YW5pbWF0aW9ucy5hcHBlbmQoZWZmZWN0LT5hbmltYXRpb24oKSk7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgeworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNBbmltYXRpb25SYXJlRGF0YSgpKSB7
CiAgICAgICAgIGNvbnN0IGF1dG8mIGNzc1RyYW5zaXRpb25zID0gZWxlbWVudC50cmFuc2l0aW9u
cygpOwogICAgICAgICBhbmltYXRpb25zLmFwcGVuZFJhbmdlKGNzc1RyYW5zaXRpb25zLmJlZ2lu
KCksIGNzc1RyYW5zaXRpb25zLmVuZCgpKTsKICAgICAgICAgY29uc3QgYXV0byYgY3NzQW5pbWF0
aW9ucyA9IGVsZW1lbnQuY3NzQW5pbWF0aW9ucygpOwpAQCAtMTkwLDYgKzE5MCw5IEBAIHZvaWQg
QW5pbWF0aW9uVGltZWxpbmU6OnJlbW92ZUNTU0FuaW1hdGlvbkNyZWF0ZWRCeU1hcmt1cChFbGVt
ZW50JiBlbGVtZW50LCBDU1NBCiAKIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OndpbGxEZXN0cm95
UmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CisgICAgaWYgKCFlbGVtZW50
Lmhhc0FuaW1hdGlvblJhcmVEYXRhKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoYXV0
byYgY3NzVHJhbnNpdGlvbiA6IGVsZW1lbnQudHJhbnNpdGlvbnMoKSkKICAgICAgICAgY3NzVHJh
bnNpdGlvbi0+Y2FuY2VsKFdlYkFuaW1hdGlvbjo6U2lsZW50bHk6Olllcyk7CiAKQEAgLTIxOSw2
ICsyMjIsOSBAQCB2b2lkIEFuaW1hdGlvblRpbWVsaW5lOjp3aWxsQ2hhbmdlUmVuZGVyZXJGb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiAKIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OmNhbmNl
bERlY2xhcmF0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKKyAg
ICBpZiAoIWVsZW1lbnQuaGFzQW5pbWF0aW9uUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZm9yIChhdXRvJiBjc3NUcmFuc2l0aW9uIDogZWxlbWVudC50cmFuc2l0aW9ucygpKQog
ICAgICAgICBjc3NUcmFuc2l0aW9uLT5jYW5jZWwoKTsKICAgICBmb3IgKGF1dG8mIGNzc0FuaW1h
dGlvbiA6IGVsZW1lbnQuY3NzQW5pbWF0aW9ucygpKSB7CkBAIC0zODUsNyArMzkxLDcgQEAgc3Rh
dGljIHZvaWQgY29tcGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVzSW5TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEhhc2hTZXQKICAgICB9CiB9CiAKLXZvaWQgQW5pbWF0aW9uVGltZWxpbmU6
OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1l
bnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBhZnRlckNoYW5nZVN0eWxlLCBQcm9wZXJ0eVRvVHJhbnNp
dGlvbk1hcCYgcnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSwgUHJvcGVydHlUb1RyYW5zaXRp
b25NYXAmIGNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSwgY29uc3QgTW9ub3RvbmljVGlt
ZSBnZW5lcmF0aW9uVGltZSkKK3ZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5z
aXRpb25zRm9yRWxlbWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlJiBhZnRlckNoYW5nZVN0eWxlLCBjb25zdCBNb25vdG9uaWNUaW1lIGdlbmVyYXRpb25U
aW1lKQogewogICAgIGNvbnN0IEFuaW1hdGlvbiogbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uID0g
bnVsbHB0cjsKICAgICBpZiAoYXV0byogdHJhbnNpdGlvbnMgPSBhZnRlckNoYW5nZVN0eWxlLnRy
YW5zaXRpb25zKCkpIHsKQEAgLTM5OSwxMiArNDA1LDEyIEBAIHZvaWQgQW5pbWF0aW9uVGltZWxp
bmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVs
ZW1lCiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2l0aW9ucy0xLyNi
ZWZvcmUtY2hhbmdlLXN0eWxlCiAgICAgLy8gRGVmaW5lIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxl
IGFzIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgYWxsIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnQg
YXMgb2YgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudCwgZXhjZXB0IHdpdGgKICAgICAv
LyBhbnkgc3R5bGVzIGRlcml2ZWQgZnJvbSBkZWNsYXJhdGl2ZSBhbmltYXRpb25zIHN1Y2ggYXMg
Q1NTIFRyYW5zaXRpb25zLCBDU1MgQW5pbWF0aW9ucywgYW5kIFNNSUwgQW5pbWF0aW9ucyB1cGRh
dGVkIHRvIHRoZSBjdXJyZW50IHRpbWUuCi0gICAgYm9vbCBoYXNSdW5uaW5nVHJhbnNpdGlvbiA9
IHJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkuY29udGFpbnMocHJvcGVydHkpOworICAgIGJv
b2wgaGFzUnVubmluZ1RyYW5zaXRpb24gPSBlbGVtZW50Lmhhc0FuaW1hdGlvblJhcmVEYXRhKCkg
JiYgZWxlbWVudC5ydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuY29udGFpbnMocHJvcGVy
dHkpOwogICAgIGF1dG8gYmVmb3JlQ2hhbmdlU3R5bGUgPSBbJl0oKSB7CiAgICAgICAgIGlmICho
YXNSdW5uaW5nVHJhbnNpdGlvbiAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQ
cm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHkpKSB7CiAgICAgICAgICAgICAvLyBJbiBjYXNl
IHdlIGhhdmUgYW4gYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbiBydW5uaW5nIGZvciB0aGlzIGVsZW1l
bnQsIHdlIG5lZWQgdG8gZ2V0IGl0cyBjb21wdXRlZCBzdHlsZSBhcyB0aGUgYmVmb3JlLWNoYW5n
ZSBzdHlsZQogICAgICAgICAgICAgLy8gc2luY2Ugb3RoZXJ3aXNlIHRoZSBhbmltYXRlZCB2YWx1
ZSBmb3IgdGhhdCBwcm9wZXJ0eSB3b24ndCBiZSB2aXNpYmxlLgotICAgICAgICAgICAgYXV0byog
cnVubmluZ1RyYW5zaXRpb24gPSBydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5LmdldChwcm9w
ZXJ0eSk7CisgICAgICAgICAgICBhdXRvKiBydW5uaW5nVHJhbnNpdGlvbiA9IGVsZW1lbnQucnVu
bmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLmdldChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBp
ZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KHJ1bm5pbmdUcmFuc2l0aW9uLT5lZmZlY3QoKSkpIHsKICAg
ICAgICAgICAgICAgICBhdXRvJiBrZXlmcmFtZUVmZmVjdCA9ICpkb3duY2FzdDxLZXlmcmFtZUVm
ZmVjdD4ocnVubmluZ1RyYW5zaXRpb24tPmVmZmVjdCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
a2V5ZnJhbWVFZmZlY3QuaXNSdW5uaW5nQWNjZWxlcmF0ZWQoKSkgewpAQCAtNDM2LDcgKzQ0Miw3
IEBAIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVu
dEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1lCiAgICAgaWYgKCFoYXNSdW5uaW5nVHJhbnNpdGlv
bgogICAgICAgICAmJiAhQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9w
ZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkKICAgICAgICAgJiYg
Q1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHks
ICZiZWZvcmVDaGFuZ2VTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpCi0gICAgICAgICYmICFwcm9w
ZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVy
Q2hhbmdlU3R5bGUsIGNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSkKKyAgICAgICAgJiYg
IXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0eSwg
YWZ0ZXJDaGFuZ2VTdHlsZSwgZWxlbWVudC5jb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHko
KSkKICAgICAgICAgJiYgbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRpb25Db21i
aW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7CiAgICAgICAgIC8v
IDEuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgogICAgICAgICAvLyAgIC0gdGhl
IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3Bl
cnR5LApAQCAtNDQ2LDcgKzQ1Miw3IEBAIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNT
U1RyYW5zaXRpb25zRm9yRWxlbWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1lCiAgICAgICAg
IC8vICAgLSB0aGUgY29tYmluZWQgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIDBzLAogCiAgICAg
ICAgIC8vIHRoZW4gaW1wbGVtZW50YXRpb25zIG11c3QgcmVtb3ZlIHRoZSBjb21wbGV0ZWQgdHJh
bnNpdGlvbiAoaWYgcHJlc2VudCkgZnJvbSB0aGUgc2V0IG9mIGNvbXBsZXRlZCB0cmFuc2l0aW9u
cwotICAgICAgICBjb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkucmVtb3ZlKHByb3BlcnR5
KTsKKyAgICAgICAgZWxlbWVudC5jb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1v
dmUocHJvcGVydHkpOwogCiAgICAgICAgIC8vIGFuZCBzdGFydCBhIHRyYW5zaXRpb24gd2hvc2U6
CiAgICAgICAgIC8vICAgLSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFu
Z2UgZXZlbnQgcGx1cyB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKQEAgLTQ1OSwyNSAr
NDY1LDI1IEBAIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9y
RWxlbWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1lCiAgICAgICAgIGF1dG8gZHVyYXRpb24g
PSBTZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CiAgICAgICAg
IGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSA9IGJlZm9yZUNoYW5nZVN0eWxlOwog
ICAgICAgICBhdXRvIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IgPSAxOwotICAgICAgICBydW5u
aW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5LnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3Jl
YXRlKGVsZW1lbnQsIHByb3BlcnR5LCBnZW5lcmF0aW9uVGltZSwgKm1hdGNoaW5nQmFja2luZ0Fu
aW1hdGlvbiwgJmJlZm9yZUNoYW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVy
YXRpb24sIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0Zh
Y3RvcikpOwotICAgIH0gZWxzZSBpZiAoY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5LmNv
bnRhaW5zKHByb3BlcnR5KSAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNp
dGlvbkluTWFwKHByb3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBjb21wbGV0ZWRUcmFuc2l0aW9u
c0J5UHJvcGVydHkpKSB7CisgICAgICAgIGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eSgpLnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3JlYXRlKGVsZW1lbnQsIHByb3Bl
cnR5LCBnZW5lcmF0aW9uVGltZSwgKm1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiwgJmJlZm9yZUNo
YW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0Fk
anVzdGVkU3RhcnRTdHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcikpOworICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC5oYXNBbmltYXRpb25SYXJlRGF0YSgpICYmIGVsZW1lbnQuY29tcGxldGVk
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuY29udGFpbnMocHJvcGVydHkpICYmICFwcm9wZXJ0eUlu
U3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdl
U3R5bGUsIGVsZW1lbnQuY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkpKSB7CiAgICAg
ICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGVsZW1lbnQgaGFzIGEgY29tcGxldGVkIHRyYW5z
aXRpb24gZm9yIHRoZSBwcm9wZXJ0eSBhbmQgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgY29tcGxldGVk
IHRyYW5zaXRpb24gaXMgZGlmZmVyZW50IGZyb20KICAgICAgICAgLy8gICAgdGhlIGFmdGVyLWNo
YW5nZSBzdHlsZSBmb3IgdGhlIHByb3BlcnR5LCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IHJl
bW92ZSB0aGUgY29tcGxldGVkIHRyYW5zaXRpb24gZnJvbSB0aGUgc2V0IG9mIGNvbXBsZXRlZCB0
cmFuc2l0aW9ucy4KLSAgICAgICAgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5LnJlbW92
ZShwcm9wZXJ0eSk7CisgICAgICAgIGVsZW1lbnQuY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3Bl
cnR5KCkucmVtb3ZlKHByb3BlcnR5KTsKICAgICB9CiAKLSAgICBoYXNSdW5uaW5nVHJhbnNpdGlv
biA9IHJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkuY29udGFpbnMocHJvcGVydHkpOwotICAg
IGlmICgoaGFzUnVubmluZ1RyYW5zaXRpb24gfHwgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3Bl
cnR5LmNvbnRhaW5zKHByb3BlcnR5KSkgJiYgIW1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgewor
ICAgIGhhc1J1bm5pbmdUcmFuc2l0aW9uID0gZWxlbWVudC5oYXNBbmltYXRpb25SYXJlRGF0YSgp
ICYmIGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLmNvbnRhaW5zKHByb3Bl
cnR5KTsKKyAgICBpZiAoKGhhc1J1bm5pbmdUcmFuc2l0aW9uIHx8IChlbGVtZW50Lmhhc0FuaW1h
dGlvblJhcmVEYXRhKCkgJiYgZWxlbWVudC5jb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHko
KS5jb250YWlucyhwcm9wZXJ0eSkpKSAmJiAhbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSB7CiAg
ICAgICAgIC8vIDMuIElmIHRoZSBlbGVtZW50IGhhcyBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciBj
b21wbGV0ZWQgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LCBhbmQgdGhlcmUgaXMgbm90IGEg
bWF0Y2hpbmcgdHJhbnNpdGlvbi1wcm9wZXJ0eQogICAgICAgICAvLyAgICB2YWx1ZSwgdGhlbiBp
bXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciByZW1v
dmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZyb20gdGhlIHNldCBvZiBjb21wbGV0ZWQgdHJh
bnNpdGlvbnMuCiAgICAgICAgIGlmIChoYXNSdW5uaW5nVHJhbnNpdGlvbikKLSAgICAgICAgICAg
IHJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkudGFrZShwcm9wZXJ0eSktPmNhbmNlbCgpOwor
ICAgICAgICAgICAgZWxlbWVudC5ydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkudGFrZShw
cm9wZXJ0eSktPmNhbmNlbCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wbGV0ZWRU
cmFuc2l0aW9uc0J5UHJvcGVydHkucmVtb3ZlKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGVsZW1l
bnQuY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkucmVtb3ZlKHByb3BlcnR5KTsKICAg
ICB9CiAKLSAgICBpZiAobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHJ1bm5pbmdUcmFuc2l0
aW9uc0J5UHJvcGVydHkuY29udGFpbnMocHJvcGVydHkpICYmICFwcm9wZXJ0eUluU3R5bGVNYXRj
aGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIHJ1
bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkpKSB7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNseVJ1
bm5pbmdUcmFuc2l0aW9uID0gcnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eS50YWtlKHByb3Bl
cnR5KTsKKyAgICBpZiAobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIChlbGVtZW50Lmhhc0Fu
aW1hdGlvblJhcmVEYXRhKCkgJiYgZWxlbWVudC5ydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5
KCkuY29udGFpbnMocHJvcGVydHkpKSAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9y
VHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBlbGVtZW50LnJ1bm5p
bmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24gPSBlbGVtZW50LnJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS50
YWtlKHByb3BlcnR5KTsKICAgICAgICAgYXV0byYgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9u
Q3VycmVudFN0eWxlID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jdXJyZW50U3R5bGUo
KTsKICAgICAgICAgLy8gNC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVubmluZyB0cmFuc2l0aW9u
IGZvciB0aGUgcHJvcGVydHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJhbnNpdGlvbi1wcm9wZXJ0
eSB2YWx1ZSwgYW5kIHRoZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcKICAgICAgICAgLy8gICAg
dHJhbnNpdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0
aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVuOgpAQCAtNTQ5LDkgKzU1NSw2IEBAIHZvaWQgQW5p
bWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBSCiAgICAgLy8gU2VjdGlvbiAzICJTdGFydGluZyBvZiB0cmFuc2l0aW9u
cyIgZnJvbSB0aGUgQ1NTIFRyYW5zaXRpb25zIExldmVsIDEgc3BlY2lmaWNhdGlvbi4KICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zaXRpb25zLTEvI3N0YXJ0aW5nCiAK
LSAgICBhdXRvJiBydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5ID0gZWxlbWVudC5ydW5uaW5n
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7Ci0gICAgYXV0byYgY29tcGxldGVkVHJhbnNpdGlvbnNC
eVByb3BlcnR5ID0gZWxlbWVudC5jb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKTsKLQog
ICAgIGF1dG8gZ2VuZXJhdGlvblRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIC8v
IEZpcnN0LCBsZXQncyBjb21waWxlIHRoZSBsaXN0IG9mIGFsbCBDU1MgcHJvcGVydGllcyBmb3Vu
ZCBpbiB0aGUgY3VycmVudCBzdHlsZSBhbmQgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZS4KQEAgLTU2
NywxMyArNTcwLDEzIEBAIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRp
b25zRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSCiAgICAgICAgICAgICBhdXRv
IHByb3BlcnR5ID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChwcm9w
ZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7CiAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYg
KmlzU2hvcnRoYW5kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXBk
YXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHks
IGN1cnJlbnRTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgcnVubmluZ1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eSwgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5LCBnZW5lcmF0aW9uVGltZSk7Cisg
ICAgICAgICAgICB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0eShlbGVt
ZW50LCBwcm9wZXJ0eSwgY3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBnZW5lcmF0aW9u
VGltZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoYXV0
byBwcm9wZXJ0eSA6IHRyYW5zaXRpb25Qcm9wZXJ0aWVzKQotICAgICAgICB1cGRhdGVDU1NUcmFu
c2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgY3VycmVudFN0
eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5LCBjb21w
bGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHksIGdlbmVyYXRpb25UaW1lKTsKKyAgICAgICAgdXBk
YXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHks
IGN1cnJlbnRTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgZ2VuZXJhdGlvblRpbWUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQW5pbWF0aW9uVGltZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRp
b25UaW1lbGluZS5oCmluZGV4IGZmMGY2MTFjNjQ3ZGFmZmY5YmQ4MjM4MGI3NGVkZWM0MGJmOWI5
ZDQuLmNlOWZiYTIwZWY5ZDUxM2E2YjEwZDNiMTk4ZTQ4NTBjYjliODU4OTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oCkBAIC04NSw3ICs4NSw3IEBA
IHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUdsb2JhbFBvc2l0aW9uKFdl
YkFuaW1hdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5k
UHJvcGVydHkoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBhZnRlckNoYW5nZVN0eWxlLCBQcm9wZXJ0eVRv
VHJhbnNpdGlvbk1hcCYsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiwgY29uc3QgTW9ub3Rvbmlj
VGltZSk7CisgICAgdm9pZCB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0
eShFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5bGUsIGNvbnN0IE1vbm90b25pY1Rp
bWUpOwogICAgIHZvaWQgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKEVsZW1lbnQm
LCBDU1NBbmltYXRpb24mKTsKIAogICAgIE1hcmthYmxlPFNlY29uZHMsIFNlY29uZHM6Ok1hcmth
YmxlVHJhaXRzPiBtX2N1cnJlbnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGI5N2Q1
ZmZlMWJjYmJlNzVhZmEzMDlmNzk1ZmY4YzZlYmM5ZjA1ODYuLjcxZmFhYmVjZWMwYTFiY2Q0Y2E5
ZTA5N2QzMTAwYTE1OWE3MzY0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTM3NDgsNiAr
Mzc0OCwxMSBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGEqIEVsZW1lbnQ6OmludGVyc2VjdGlv
bk9ic2VydmVyRGF0YUlmRXhpc3RzKCkKIAogI2VuZGlmCiAKK2Jvb2wgRWxlbWVudDo6aGFzQW5p
bWF0aW9uUmFyZURhdGEoKSBjb25zdAoreworICAgIHJldHVybiBhbmltYXRpb25SYXJlRGF0YSgp
OworfQorCiBFbGVtZW50QW5pbWF0aW9uUmFyZURhdGEqIEVsZW1lbnQ6OmFuaW1hdGlvblJhcmVE
YXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0
YSgpLT5lbGVtZW50QW5pbWF0aW9uUmFyZURhdGEoKSA6IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAppbmRleCAzYjI1Mzg2Y2I3ZjhhY2E5Y2EwYzdjNTkzYzhmMGQ2NGZlNGRlN2I2Li43ZmFlZmQ5
OGExOTdhMWUxMzM5ZDA3ZmI5OTIyMjkxMmI2ZDNlM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAg
LTQ4Nyw2ICs0ODcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNLZXlmcmFtZUVmZmVjdHMoKSBj
b25zdDsKICAgICBPcHRpb25TZXQ8QW5pbWF0aW9uSW1wYWN0PiBhcHBseUtleWZyYW1lRWZmZWN0
cyhSZW5kZXJTdHlsZSYpOwogCisgICAgYm9vbCBoYXNBbmltYXRpb25SYXJlRGF0YSgpIGNvbnN0
OwogICAgIEFuaW1hdGlvbkNvbGxlY3Rpb24mIHdlYkFuaW1hdGlvbnMoKTsKICAgICBBbmltYXRp
b25Db2xsZWN0aW9uJiBjc3NBbmltYXRpb25zKCk7CiAgICAgQW5pbWF0aW9uQ29sbGVjdGlvbiYg
dHJhbnNpdGlvbnMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394252</attachid>
            <date>2020-03-23 04:28:10 -0700</date>
            <delta_ts>2020-03-23 04:38:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209415-20200323122809.patch</filename>
            <type>text/plain</type>
            <size>26304</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjNkNDkyMDNmYTZlMjZk
MTM4ZjVjZWMyYjdjMDc0NjFmZWE5MGI3Ni4uODJjNGMxMDAxYmQyNTAxYzMwN2JlNWIwZmY1NTA0
ZjFlZTM4NzkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTAzLTIzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBBbmltYXRpb25z
XSBFbGVtZW50QW5pbWF0aW9uUmFyZURhdGEgaXMgY3JlYXRlZCB0b28gZnJlcXVlbnRseQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NDE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHZhcmlvdXMg
YWNjZXNzb3JzIG9uIEVsZW1lbnQgdG8gYWNjZXNzIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25z
IHdpbGwgZW5zdXJlIHRoZXJlIGlzIGEgYmFja2luZworICAgICAgICBFbGVtZW50QW5pbWF0aW9u
UmFyZURhdGEgb2JqZWN0LiBIb3dldmVyLCBpbiBhIGxvdCBvZiBjYXNlcywgc3VjaCBhcyB3aGVu
IHdlIGNvbnNpZGVyIHdoZXRoZXIgQ1NTCisgICAgICAgIFRyYW5zaXRpb25zIHNob3VsZCBiZSBj
cmVhdGVkLCB1cGRhdGVkIG9yIHJlbW92ZWQgdW5kZXIgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudCgpLAorICAgICAgICB3ZSBlbmQgdXAgbm90IG5lZWRp
bmcgdG8gYWN0dWFsbHkgYWNjZXNzIHRoZSBkYXRhIHN0cnVjdHVyZXMgb24gRWxlbWVudEFuaW1h
dGlvblJhcmVEYXRhLgorCisgICAgICAgIFdlIG5vdyBtYWtlcyB0aGUgdmFyaW91cyBtZXRob2Rz
IG9uIEVsZW1lbnQgdG8gYWNjZXNzIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zIGBjb25zdCBU
KmAgYW5kIGFkZCBlbnN1cmUqKCkKKyAgICAgICAgbWV0aG9kcyB0byBhY2Nlc3MgdGhlIGNvbGxl
Y3Rpb25zIGZvciBtb2RpZmljYXRpb24uCisKKyAgICAgICAgTm8gdGVzdCBiZWNhdXNlIHRoZXJl
IGlzIG5vIGNoYW5nZSBpbiB2aXNpYmxlIGJlaGF2aW9yLgorCisgICAgICAgICogYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblRpbWVs
aW5lOjphbmltYXRpb25XYXNBZGRlZFRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZyb21FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZy
b21MaXN0c0Zvck93bmluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGlt
ZWxpbmU6OmFuaW1hdGlvbnNGb3JFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvblRpbWVsaW5lOjp3aWxsRGVzdHJveVJlbmRlcmVyRm9yRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6Y2FuY2VsRGVjbGFyYXRpdmVBbmltYXRpb25z
Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6dXBkYXRl
Q1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudCk6CisgICAg
ICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmg6CisgICAgICAgICogYW5pbWF0aW9u
L0RvY3VtZW50VGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGlu
ZTo6dHJhbnNpdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3ZWJBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmNzc0FuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6dHJhbnNpdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6Y29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlV2ViQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjplbnN1cmVDU1NBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmVuc3VyZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVu
c3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjplbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OndlYkFuaW1hdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Y3NzQW5pbWF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp0cmFuc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
Ojpjb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6cnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL0VsZW1lbnQuaDoKKwogMjAyMC0wMy0yMyAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gRml4IHRoZSB0eXBv
IGZvciBFbGVtZW50QW5pbWF0aW9uUmFyZURhdGE6OmNvbXBsZXRlZFRyYW5zaXRpb25CeVByb3Bl
cnR5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3Bw
CmluZGV4IDhjZTNiMjQwMjAyOTM3YTlmN2M3YjBiNmU0ODhlMGQ3ZDM2NWYzMzguLmE2MTA5ZTA3
YzczY2Y4MDJhNGUxYjE3YWNmYzQwZGI1ZWQ4NjBhNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcApAQCAtMTAyLDExICsxMDIsMTEgQEAgT3B0
aW9uYWw8ZG91YmxlPiBBbmltYXRpb25UaW1lbGluZTo6YmluZGluZ3NDdXJyZW50VGltZSgpCiB2
b2lkIEFuaW1hdGlvblRpbWVsaW5lOjphbmltYXRpb25XYXNBZGRlZFRvRWxlbWVudChXZWJBbmlt
YXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXM8Q1NTVHJh
bnNpdGlvbj4oYW5pbWF0aW9uKSAmJiBkb3duY2FzdDxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24p
Lm93bmluZ0VsZW1lbnQoKSA9PSAmZWxlbWVudCkKLSAgICAgICAgZWxlbWVudC50cmFuc2l0aW9u
cygpLmFkZCgmYW5pbWF0aW9uKTsKKyAgICAgICAgZWxlbWVudC5lbnN1cmVUcmFuc2l0aW9ucygp
LmFkZCgmYW5pbWF0aW9uKTsKICAgICBlbHNlIGlmIChpczxDU1NBbmltYXRpb24+KGFuaW1hdGlv
bikgJiYgZG93bmNhc3Q8Q1NTQW5pbWF0aW9uPihhbmltYXRpb24pLm93bmluZ0VsZW1lbnQoKSA9
PSAmZWxlbWVudCkKLSAgICAgICAgZWxlbWVudC5jc3NBbmltYXRpb25zKCkuYWRkKCZhbmltYXRp
b24pOworICAgICAgICBlbGVtZW50LmVuc3VyZUNTU0FuaW1hdGlvbnMoKS5hZGQoJmFuaW1hdGlv
bik7CiAgICAgZWxzZQotICAgICAgICBlbGVtZW50LndlYkFuaW1hdGlvbnMoKS5hZGQoJmFuaW1h
dGlvbik7CisgICAgICAgIGVsZW1lbnQuZW5zdXJlV2ViQW5pbWF0aW9ucygpLmFkZCgmYW5pbWF0
aW9uKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFw
KENTU1RyYW5zaXRpb24mIHRyYW5zaXRpb24sIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiBjc3NU
cmFuc2l0aW9uc0J5UHJvcGVydHkpCkBAIC0xMjEsOSArMTIxLDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKENTU1RyYW5zaXRpb24mIHRyYW5zaXRpb24s
IFByb3BlcnQKIAogdm9pZCBBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZy
b21FbGVtZW50KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIGVsZW1lbnQudHJhbnNpdGlvbnMoKS5yZW1vdmUoJmFuaW1hdGlvbik7Ci0gICAgZWxlbWVu
dC5jc3NBbmltYXRpb25zKCkucmVtb3ZlKCZhbmltYXRpb24pOwotICAgIGVsZW1lbnQud2ViQW5p
bWF0aW9ucygpLnJlbW92ZSgmYW5pbWF0aW9uKTsKKyAgICBlbGVtZW50LmVuc3VyZVRyYW5zaXRp
b25zKCkucmVtb3ZlKCZhbmltYXRpb24pOworICAgIGVsZW1lbnQuZW5zdXJlQ1NTQW5pbWF0aW9u
cygpLnJlbW92ZSgmYW5pbWF0aW9uKTsKKyAgICBlbGVtZW50LmVuc3VyZVdlYkFuaW1hdGlvbnMo
KS5yZW1vdmUoJmFuaW1hdGlvbik7CiAKICAgICAvLyBOb3csIGlmIHdlJ3JlIGRlYWxpbmcgd2l0
aCBhIENTUyBUcmFuc2l0aW9uLCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgbV9lbGVtZW50VG9SdW5u
aW5nQ1NTVHJhbnNpdGlvbkJ5Q1NTUHJvcGVydHlJRCBtYXAuCiAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBkbyB0aGlzIGZvciBDU1MgQW5pbWF0aW9ucyBiZWNhdXNlIHRoZWlyIHRpbWluZyBjYW4g
YmUgc2V0IHZpYSBDU1MgdG8gZW5kLCB3aGljaCB3b3VsZCBjYXVzZSB0aGlzCkBAIC0xMzksOCAr
MTM5LDggQEAgdm9pZCBBbmltYXRpb25UaW1lbGluZTo6cmVtb3ZlRGVjbGFyYXRpdmVBbmltYXRp
b25Gcm9tTGlzdHNGb3JPd25pbmdFbGVtZW50KFdlYkEKIAogICAgIGlmIChpczxDU1NUcmFuc2l0
aW9uPihhbmltYXRpb24pKSB7CiAgICAgICAgIGF1dG8mIHRyYW5zaXRpb24gPSBkb3duY2FzdDxD
U1NUcmFuc2l0aW9uPihhbmltYXRpb24pOwotICAgICAgICBpZiAoIXJlbW92ZUNTU1RyYW5zaXRp
b25Gcm9tTWFwKHRyYW5zaXRpb24sIGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0
eSgpKSkKLSAgICAgICAgICAgIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKHRyYW5zaXRpb24s
IGVsZW1lbnQuY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkpOworICAgICAgICBpZiAo
IXJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKHRyYW5zaXRpb24sIGVsZW1lbnQuZW5zdXJlUnVu
bmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKSkKKyAgICAgICAgICAgIHJlbW92ZUNTU1RyYW5z
aXRpb25Gcm9tTWFwKHRyYW5zaXRpb24sIGVsZW1lbnQuZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlv
bnNCeVByb3BlcnR5KCkpOwogICAgIH0KIH0KIApAQCAtMTU0LDEyICsxNTQsMTIgQEAgVmVjdG9y
PFJlZlB0cjxXZWJBbmltYXRpb24+PiBBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uc0ZvckVs
ZW1lbnQoRWxlbWVudCYgZWwKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChlZmZl
Y3QtPmFuaW1hdGlvbigpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0
IGF1dG8mIGNzc1RyYW5zaXRpb25zID0gZWxlbWVudC50cmFuc2l0aW9ucygpOwotICAgICAgICBh
bmltYXRpb25zLmFwcGVuZFJhbmdlKGNzc1RyYW5zaXRpb25zLmJlZ2luKCksIGNzc1RyYW5zaXRp
b25zLmVuZCgpKTsKLSAgICAgICAgY29uc3QgYXV0byYgY3NzQW5pbWF0aW9ucyA9IGVsZW1lbnQu
Y3NzQW5pbWF0aW9ucygpOwotICAgICAgICBhbmltYXRpb25zLmFwcGVuZFJhbmdlKGNzc0FuaW1h
dGlvbnMuYmVnaW4oKSwgY3NzQW5pbWF0aW9ucy5lbmQoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8m
IHdlYkFuaW1hdGlvbnMgPSBlbGVtZW50LndlYkFuaW1hdGlvbnMoKTsKLSAgICAgICAgYW5pbWF0
aW9ucy5hcHBlbmRSYW5nZSh3ZWJBbmltYXRpb25zLmJlZ2luKCksIHdlYkFuaW1hdGlvbnMuZW5k
KCkpOworICAgICAgICBpZiAoY29uc3QgYXV0byogY3NzVHJhbnNpdGlvbnMgPSBlbGVtZW50LnRy
YW5zaXRpb25zKCkpCisgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZFJhbmdlKGNzc1RyYW5z
aXRpb25zLT5iZWdpbigpLCBjc3NUcmFuc2l0aW9ucy0+ZW5kKCkpOworICAgICAgICBpZiAoY29u
c3QgYXV0byogY3NzQW5pbWF0aW9ucyA9IGVsZW1lbnQuY3NzQW5pbWF0aW9ucygpKQorICAgICAg
ICAgICAgYW5pbWF0aW9ucy5hcHBlbmRSYW5nZShjc3NBbmltYXRpb25zLT5iZWdpbigpLCBjc3NB
bmltYXRpb25zLT5lbmQoKSk7CisgICAgICAgIGlmIChjb25zdCBhdXRvKiB3ZWJBbmltYXRpb25z
ID0gZWxlbWVudC53ZWJBbmltYXRpb25zKCkpCisgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVu
ZFJhbmdlKHdlYkFuaW1hdGlvbnMtPmJlZ2luKCksIHdlYkFuaW1hdGlvbnMtPmVuZCgpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gYW5pbWF0aW9uczsKQEAgLTE5MCwxMyArMTkwLDE3IEBAIHZvaWQg
QW5pbWF0aW9uVGltZWxpbmU6OnJlbW92ZUNTU0FuaW1hdGlvbkNyZWF0ZWRCeU1hcmt1cChFbGVt
ZW50JiBlbGVtZW50LCBDU1NBCiAKIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OndpbGxEZXN0cm95
UmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZm9yIChhdXRvJiBj
c3NUcmFuc2l0aW9uIDogZWxlbWVudC50cmFuc2l0aW9ucygpKQotICAgICAgICBjc3NUcmFuc2l0
aW9uLT5jYW5jZWwoV2ViQW5pbWF0aW9uOjpTaWxlbnRseTo6WWVzKTsKKyAgICBpZiAoY29uc3Qg
YXV0byogdHJhbnNpdGlvbnMgPSBlbGVtZW50LnRyYW5zaXRpb25zKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjc3NUcmFuc2l0aW9uIDogKnRyYW5zaXRpb25zKQorICAgICAgICAgICAgY3NzVHJh
bnNpdGlvbi0+Y2FuY2VsKFdlYkFuaW1hdGlvbjo6U2lsZW50bHk6Olllcyk7CisgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBjc3NBbmltYXRpb24gOiBlbGVtZW50LmNzc0FuaW1hdGlvbnMoKSkgewot
ICAgICAgICBpZiAoaXM8Q1NTQW5pbWF0aW9uPihjc3NBbmltYXRpb24pKQotICAgICAgICAgICAg
cmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKGVsZW1lbnQsIGRvd25jYXN0PENTU0Fu
aW1hdGlvbj4oKmNzc0FuaW1hdGlvbikpOwotICAgICAgICBjc3NBbmltYXRpb24tPmNhbmNlbChX
ZWJBbmltYXRpb246OlNpbGVudGx5OjpZZXMpOworICAgIGlmIChjb25zdCBhdXRvKiBjc3NBbmlt
YXRpb25zID0gZWxlbWVudC5jc3NBbmltYXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBj
c3NBbmltYXRpb24gOiAqY3NzQW5pbWF0aW9ucykgeworICAgICAgICAgICAgaWYgKGlzPENTU0Fu
aW1hdGlvbj4oY3NzQW5pbWF0aW9uKSkKKyAgICAgICAgICAgICAgICByZW1vdmVDU1NBbmltYXRp
b25DcmVhdGVkQnlNYXJrdXAoZWxlbWVudCwgZG93bmNhc3Q8Q1NTQW5pbWF0aW9uPigqY3NzQW5p
bWF0aW9uKSk7CisgICAgICAgICAgICBjc3NBbmltYXRpb24tPmNhbmNlbChXZWJBbmltYXRpb246
OlNpbGVudGx5OjpZZXMpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMTksMTIgKzIyMywx
NyBAQCB2b2lkIEFuaW1hdGlvblRpbWVsaW5lOjp3aWxsQ2hhbmdlUmVuZGVyZXJGb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCiAKIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OmNhbmNlbERlY2xh
cmF0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBmb3Ig
KGF1dG8mIGNzc1RyYW5zaXRpb24gOiBlbGVtZW50LnRyYW5zaXRpb25zKCkpCi0gICAgICAgIGNz
c1RyYW5zaXRpb24tPmNhbmNlbCgpOwotICAgIGZvciAoYXV0byYgY3NzQW5pbWF0aW9uIDogZWxl
bWVudC5jc3NBbmltYXRpb25zKCkpIHsKLSAgICAgICAgaWYgKGlzPENTU0FuaW1hdGlvbj4oY3Nz
QW5pbWF0aW9uKSkKLSAgICAgICAgICAgIHJlbW92ZUNTU0FuaW1hdGlvbkNyZWF0ZWRCeU1hcmt1
cChlbGVtZW50LCBkb3duY2FzdDxDU1NBbmltYXRpb24+KCpjc3NBbmltYXRpb24pKTsKLSAgICAg
ICAgY3NzQW5pbWF0aW9uLT5jYW5jZWwoKTsKKyAgICBpZiAoY29uc3QgYXV0byogdHJhbnNpdGlv
bnMgPSBlbGVtZW50LnRyYW5zaXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjc3NUcmFu
c2l0aW9uIDogKnRyYW5zaXRpb25zKQorICAgICAgICAgICAgY3NzVHJhbnNpdGlvbi0+Y2FuY2Vs
KCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0IGF1dG8qIGNzc0FuaW1hdGlvbnMgPSBlbGVtZW50
LmNzc0FuaW1hdGlvbnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGNzc0FuaW1hdGlvbiA6ICpj
c3NBbmltYXRpb25zKSB7CisgICAgICAgICAgICBpZiAoaXM8Q1NTQW5pbWF0aW9uPihjc3NBbmlt
YXRpb24pKQorICAgICAgICAgICAgICAgIHJlbW92ZUNTU0FuaW1hdGlvbkNyZWF0ZWRCeU1hcmt1
cChlbGVtZW50LCBkb3duY2FzdDxDU1NBbmltYXRpb24+KCpjc3NBbmltYXRpb24pKTsKKyAgICAg
ICAgICAgIGNzc0FuaW1hdGlvbi0+Y2FuY2VsKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAg
LTM4NSw3ICszOTQsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlVHJhbnNpdGlvblByb3BlcnRpZXNJ
blN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSGFzaFNldAogICAgIH0KIH0KIAotdm9p
ZCBBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJv
cGVydHkoRWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVu
ZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5
bGUsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiBydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5
LCBQcm9wZXJ0eVRvVHJhbnNpdGlvbk1hcCYgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5
LCBjb25zdCBNb25vdG9uaWNUaW1lIGdlbmVyYXRpb25UaW1lKQordm9pZCBBbmltYXRpb25UaW1l
bGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkoRWxlbWVudCYg
ZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5bGUsIGNvbnN0IE1vbm90
b25pY1RpbWUgZ2VuZXJhdGlvblRpbWUpCiB7CiAgICAgY29uc3QgQW5pbWF0aW9uKiBtYXRjaGlu
Z0JhY2tpbmdBbmltYXRpb24gPSBudWxscHRyOwogICAgIGlmIChhdXRvKiB0cmFuc2l0aW9ucyA9
IGFmdGVyQ2hhbmdlU3R5bGUudHJhbnNpdGlvbnMoKSkgewpAQCAtMzk5LDEyICs0MDgsMTIgQEAg
dm9pZCBBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5k
UHJvcGVydHkoRWxlbWVudCYgZWxlbWUKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcv
Y3NzLXRyYW5zaXRpb25zLTEvI2JlZm9yZS1jaGFuZ2Utc3R5bGUKICAgICAvLyBEZWZpbmUgdGhl
IGJlZm9yZS1jaGFuZ2Ugc3R5bGUgYXMgdGhlIGNvbXB1dGVkIHZhbHVlcyBvZiBhbGwgcHJvcGVy
dGllcyBvbiB0aGUgZWxlbWVudCBhcyBvZiB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50
LCBleGNlcHQgd2l0aAogICAgIC8vIGFueSBzdHlsZXMgZGVyaXZlZCBmcm9tIGRlY2xhcmF0aXZl
IGFuaW1hdGlvbnMgc3VjaCBhcyBDU1MgVHJhbnNpdGlvbnMsIENTUyBBbmltYXRpb25zLCBhbmQg
U01JTCBBbmltYXRpb25zIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZS4KLSAgICBib29sIGhh
c1J1bm5pbmdUcmFuc2l0aW9uID0gcnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eS5jb250YWlu
cyhwcm9wZXJ0eSk7CisgICAgYm9vbCBoYXNSdW5uaW5nVHJhbnNpdGlvbiA9IGVsZW1lbnQucnVu
bmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpICYmIGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25z
QnlQcm9wZXJ0eSgpLT5jb250YWlucyhwcm9wZXJ0eSk7CiAgICAgYXV0byBiZWZvcmVDaGFuZ2VT
dHlsZSA9IFsmXSgpIHsKICAgICAgICAgaWYgKGhhc1J1bm5pbmdUcmFuc2l0aW9uICYmIENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0
eSkpIHsKICAgICAgICAgICAgIC8vIEluIGNhc2Ugd2UgaGF2ZSBhbiBhY2NlbGVyYXRlZCB0cmFu
c2l0aW9uIHJ1bm5pbmcgZm9yIHRoaXMgZWxlbWVudCwgd2UgbmVlZCB0byBnZXQgaXRzIGNvbXB1
dGVkIHN0eWxlIGFzIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlCiAgICAgICAgICAgICAvLyBzaW5j
ZSBvdGhlcndpc2UgdGhlIGFuaW1hdGVkIHZhbHVlIGZvciB0aGF0IHByb3BlcnR5IHdvbid0IGJl
IHZpc2libGUuCi0gICAgICAgICAgICBhdXRvKiBydW5uaW5nVHJhbnNpdGlvbiA9IHJ1bm5pbmdU
cmFuc2l0aW9uc0J5UHJvcGVydHkuZ2V0KHByb3BlcnR5KTsKKyAgICAgICAgICAgIGF1dG8qIHJ1
bm5pbmdUcmFuc2l0aW9uID0gZWxlbWVudC5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3Bl
cnR5KCkuZ2V0KHByb3BlcnR5KTsKICAgICAgICAgICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4o
cnVubmluZ1RyYW5zaXRpb24tPmVmZmVjdCgpKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGtl
eWZyYW1lRWZmZWN0ID0gKmRvd25jYXN0PEtleWZyYW1lRWZmZWN0PihydW5uaW5nVHJhbnNpdGlv
bi0+ZWZmZWN0KCkpOwogICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUVmZmVjdC5pc1J1bm5p
bmdBY2NlbGVyYXRlZCgpKSB7CkBAIC00MzYsNyArNDQ1LDcgQEAgdm9pZCBBbmltYXRpb25UaW1l
bGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkoRWxlbWVudCYg
ZWxlbWUKICAgICBpZiAoIWhhc1J1bm5pbmdUcmFuc2l0aW9uCiAgICAgICAgICYmICFDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmYmVmb3JlQ2hhbmdlU3R5
bGUsICZhZnRlckNoYW5nZVN0eWxlKQogICAgICAgICAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAm
YWZ0ZXJDaGFuZ2VTdHlsZSkKLSAgICAgICAgJiYgIXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1
ZUZvclRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgY29tcGxldGVk
VHJhbnNpdGlvbnNCeVByb3BlcnR5KQorICAgICAgICAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hl
c1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBlbGVt
ZW50LmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKQogICAgICAgICAmJiBt
YXRjaGluZ0JhY2tpbmdBbmltYXRpb24gJiYgdHJhbnNpdGlvbkNvbWJpbmVkRHVyYXRpb24obWF0
Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSA+IDApIHsKICAgICAgICAgLy8gMS4gSWYgYWxsIG9mIHRo
ZSBmb2xsb3dpbmcgYXJlIHRydWU6CiAgICAgICAgIC8vICAgLSB0aGUgZWxlbWVudCBkb2VzIG5v
dCBoYXZlIGEgcnVubmluZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksCkBAIC00NDYsNyAr
NDU1LDcgQEAgdm9pZCBBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JF
bGVtZW50QW5kUHJvcGVydHkoRWxlbWVudCYgZWxlbWUKICAgICAgICAgLy8gICAtIHRoZSBjb21i
aW5lZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoYW4gMHMsCiAKICAgICAgICAgLy8gdGhlbiBpbXBs
ZW1lbnRhdGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIChpZiBwcmVz
ZW50KSBmcm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25zCi0gICAgICAgIGNvbXBs
ZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eS5yZW1vdmUocHJvcGVydHkpOworICAgICAgICBlbGVt
ZW50LmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0
eSk7CiAKICAgICAgICAgLy8gYW5kIHN0YXJ0IGEgdHJhbnNpdGlvbiB3aG9zZToKICAgICAgICAg
Ly8gICAtIHN0YXJ0IHRpbWUgaXMgdGhlIHRpbWUgb2YgdGhlIHN0eWxlIGNoYW5nZSBldmVudCBw
bHVzIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9uIGRlbGF5LApAQCAtNDU5LDI1ICs0NjgsMjUgQEAg
dm9pZCBBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5k
UHJvcGVydHkoRWxlbWVudCYgZWxlbWUKICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMo
bWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKICAgICAgICAgYXV0byYgcmV2
ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlID0gYmVmb3JlQ2hhbmdlU3R5bGU7CiAgICAgICAgIGF1
dG8gcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvciA9IDE7Ci0gICAgICAgIHJ1bm5pbmdUcmFuc2l0
aW9uc0J5UHJvcGVydHkuc2V0KHByb3BlcnR5LCBDU1NUcmFuc2l0aW9uOjpjcmVhdGUoZWxlbWVu
dCwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLCAm
YmVmb3JlQ2hhbmdlU3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2
ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7Ci0g
ICAgfSBlbHNlIGlmIChjb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkuY29udGFpbnMocHJv
cGVydHkpICYmICFwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAo
cHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIGNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0
eSkpIHsKKyAgICAgICAgZWxlbWVudC5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5
KCkuc2V0KHByb3BlcnR5LCBDU1NUcmFuc2l0aW9uOjpjcmVhdGUoZWxlbWVudCwgcHJvcGVydHks
IGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLCAmYmVmb3JlQ2hhbmdl
U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2ZXJzaW5nQWRqdXN0
ZWRTdGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7CisgICAgfSBlbHNlIGlm
IChlbGVtZW50LmNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpICYmIGVsZW1lbnQuY29t
cGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCktPmNvbnRhaW5zKHByb3BlcnR5KSAmJiAhcHJv
cGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRl
ckNoYW5nZVN0eWxlLCBlbGVtZW50LmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0
eSgpKSkgewogICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBlbGVtZW50IGhhcyBhIGNv
bXBsZXRlZCB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHkgYW5kIHRoZSBlbmQgdmFsdWUgb2Yg
dGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGlzIGRpZmZlcmVudCBmcm9tCiAgICAgICAgIC8vICAg
IHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgZm9yIHRoZSBwcm9wZXJ0eSwgdGhlbiBpbXBsZW1lbnRh
dGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZyb20gdGhlIHNldCBv
ZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMuCi0gICAgICAgIGNvbXBsZXRlZFRyYW5zaXRpb25zQnlQ
cm9wZXJ0eS5yZW1vdmUocHJvcGVydHkpOworICAgICAgICBlbGVtZW50LmVuc3VyZUNvbXBsZXRl
ZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0eSk7CiAgICAgfQogCi0gICAg
aGFzUnVubmluZ1RyYW5zaXRpb24gPSBydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5LmNvbnRh
aW5zKHByb3BlcnR5KTsKLSAgICBpZiAoKGhhc1J1bm5pbmdUcmFuc2l0aW9uIHx8IGNvbXBsZXRl
ZFRyYW5zaXRpb25zQnlQcm9wZXJ0eS5jb250YWlucyhwcm9wZXJ0eSkpICYmICFtYXRjaGluZ0Jh
Y2tpbmdBbmltYXRpb24pIHsKKyAgICBoYXNSdW5uaW5nVHJhbnNpdGlvbiA9IGVsZW1lbnQucnVu
bmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpICYmIGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25z
QnlQcm9wZXJ0eSgpLT5jb250YWlucyhwcm9wZXJ0eSk7CisgICAgaWYgKChoYXNSdW5uaW5nVHJh
bnNpdGlvbiB8fCAoZWxlbWVudC5jb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSAmJiBl
bGVtZW50LmNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLT5jb250YWlucyhwcm9wZXJ0
eSkpKSAmJiAhbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSB7CiAgICAgICAgIC8vIDMuIElmIHRo
ZSBlbGVtZW50IGhhcyBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciBjb21wbGV0ZWQgdHJhbnNpdGlv
biBmb3IgdGhlIHByb3BlcnR5LCBhbmQgdGhlcmUgaXMgbm90IGEgbWF0Y2hpbmcgdHJhbnNpdGlv
bi1wcm9wZXJ0eQogICAgICAgICAvLyAgICB2YWx1ZSwgdGhlbiBpbXBsZW1lbnRhdGlvbnMgbXVz
dCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciByZW1vdmUgdGhlIGNvbXBsZXRlZCB0
cmFuc2l0aW9uIGZyb20gdGhlIHNldCBvZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMuCiAgICAgICAg
IGlmIChoYXNSdW5uaW5nVHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJ1bm5pbmdUcmFuc2l0aW9u
c0J5UHJvcGVydHkudGFrZShwcm9wZXJ0eSktPmNhbmNlbCgpOworICAgICAgICAgICAgZWxlbWVu
dC5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkudGFrZShwcm9wZXJ0eSktPmNh
bmNlbCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wbGV0ZWRUcmFuc2l0aW9uc0J5
UHJvcGVydHkucmVtb3ZlKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGVsZW1lbnQuZW5zdXJlQ29t
cGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkucmVtb3ZlKHByb3BlcnR5KTsKICAgICB9CiAK
LSAgICBpZiAobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHJ1bm5pbmdUcmFuc2l0aW9uc0J5
UHJvcGVydHkuY29udGFpbnMocHJvcGVydHkpICYmICFwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFs
dWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIHJ1bm5pbmdU
cmFuc2l0aW9uc0J5UHJvcGVydHkpKSB7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNseVJ1bm5pbmdU
cmFuc2l0aW9uID0gcnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eS50YWtlKHByb3BlcnR5KTsK
KyAgICBpZiAobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIChlbGVtZW50LnJ1bm5pbmdUcmFu
c2l0aW9uc0J5UHJvcGVydHkoKSAmJiBlbGVtZW50LnJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVy
dHkoKS0+Y29udGFpbnMocHJvcGVydHkpKSAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVl
Rm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBlbGVtZW50LmVu
c3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2
aW91c2x5UnVubmluZ1RyYW5zaXRpb24gPSBlbGVtZW50LmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9u
c0J5UHJvcGVydHkoKS50YWtlKHByb3BlcnR5KTsKICAgICAgICAgYXV0byYgcHJldmlvdXNseVJ1
bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9u
LT5jdXJyZW50U3R5bGUoKTsKICAgICAgICAgLy8gNC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVu
bmluZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJh
bnNpdGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kIHRoZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcK
ICAgICAgICAgLy8gICAgdHJhbnNpdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVuOgpAQCAtNTE1LDcgKzUy
NCw3IEBAIHZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxl
bWVudEFuZFByb3BlcnR5KEVsZW1lbnQmIGVsZW1lCiAgICAgICAgICAgICBhdXRvIGRlbGF5ID0g
bWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLT5kZWxheSgpIDwgMCA/IFNlY29uZHMobWF0Y2hpbmdC
YWNraW5nQW5pbWF0aW9uLT5kZWxheSgpKSAqIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IgOiBT
ZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSk7CiAgICAgICAgICAgICBh
dXRvIGR1cmF0aW9uID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmR1cmF0aW9u
KCkpICogcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcjsKIAotICAgICAgICAgICAgZWxlbWVudC5y
dW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3BlcnR5LCBDU1NUcmFuc2l0aW9u
OjpjcmVhdGUoZWxlbWVudCwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNr
aW5nQW5pbWF0aW9uLCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCBh
ZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVzdGVkU3RhcnRT
dHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcikpOworICAgICAgICAgICAgZWxlbWVudC5l
bnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3BlcnR5LCBDU1NUcmFu
c2l0aW9uOjpjcmVhdGUoZWxlbWVudCwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hp
bmdCYWNraW5nQW5pbWF0aW9uLCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0
eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVzdGVk
U3RhcnRTdHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcikpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5j
ZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdU
cmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsKQEAgLTUzMSw3ICs1NDAsNyBAQCB2b2lkIEFu
aW1hdGlvblRpbWVsaW5lOjp1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0
eShFbGVtZW50JiBlbGVtZQogICAgICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0
Y2hpbmdCYWNraW5nQW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKICAgICAgICAgICAgIGF1dG8mIHJl
dmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSA9IGN1cnJlbnRTdHlsZTsKICAgICAgICAgICAgIGF1
dG8gcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvciA9IDE7Ci0gICAgICAgICAgICBlbGVtZW50LnJ1
bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQocHJvcGVydHksIENTU1RyYW5zaXRpb246
OmNyZWF0ZShlbGVtZW50LCBwcm9wZXJ0eSwgZ2VuZXJhdGlvblRpbWUsICptYXRjaGluZ0JhY2tp
bmdBbmltYXRpb24sICZwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsIGFm
dGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0
eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7CisgICAgICAgICAgICBlbGVtZW50LmVu
c3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQocHJvcGVydHksIENTU1RyYW5z
aXRpb246OmNyZWF0ZShlbGVtZW50LCBwcm9wZXJ0eSwgZ2VuZXJhdGlvblRpbWUsICptYXRjaGlu
Z0JhY2tpbmdBbmltYXRpb24sICZwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5
bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2ZXJzaW5nQWRqdXN0ZWRT
dGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC01NDAsMTggKzU0OSwxNyBAQCB2b2lkIEFuaW1hdGlvblRpbWVsaW5lOjp1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUgogewogICAg
IC8vIEluIGNhc2UgdGhpcyBlbGVtZW50IGlzIG5ld2x5IGdldHRpbmcgYSAiZGlzcGxheTogbm9u
ZSIgd2UgbmVlZCB0byBjYW5jZWwgYWxsIG9mIGl0cyB0cmFuc2l0aW9ucyBhbmQgZGlzcmVnYXJk
IG5ldyBvbmVzLgogICAgIGlmIChjdXJyZW50U3R5bGUuaGFzVHJhbnNpdGlvbnMoKSAmJiBjdXJy
ZW50U3R5bGUuZGlzcGxheSgpICE9IERpc3BsYXlUeXBlOjpOb25lICYmIGFmdGVyQ2hhbmdlU3R5
bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpOb25lKSB7Ci0gICAgICAgIGF1dG8gcnVubmlu
Z1RyYW5zaXRpb25zID0gZWxlbWVudC5ydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgY3NzVHJhbnNpdGlvbnNCeUNTU1Byb3BlcnR5SURNYXBJ
dGVtIDogcnVubmluZ1RyYW5zaXRpb25zKQotICAgICAgICAgICAgY3NzVHJhbnNpdGlvbnNCeUNT
U1Byb3BlcnR5SURNYXBJdGVtLnZhbHVlLT5jYW5jZWxGcm9tU3R5bGUoKTsKKyAgICAgICAgaWYg
KGVsZW1lbnQucnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICBh
dXRvIHJ1bm5pbmdUcmFuc2l0aW9ucyA9IGVsZW1lbnQuZW5zdXJlUnVubmluZ1RyYW5zaXRpb25z
QnlQcm9wZXJ0eSgpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjc3NUcmFuc2l0aW9u
c0J5Q1NTUHJvcGVydHlJRE1hcEl0ZW0gOiBydW5uaW5nVHJhbnNpdGlvbnMpCisgICAgICAgICAg
ICAgICAgY3NzVHJhbnNpdGlvbnNCeUNTU1Byb3BlcnR5SURNYXBJdGVtLnZhbHVlLT5jYW5jZWxG
cm9tU3R5bGUoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
U2VjdGlvbiAzICJTdGFydGluZyBvZiB0cmFuc2l0aW9ucyIgZnJvbSB0aGUgQ1NTIFRyYW5zaXRp
b25zIExldmVsIDEgc3BlY2lmaWNhdGlvbi4KICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLXRyYW5zaXRpb25zLTEvI3N0YXJ0aW5nCiAKLSAgICBhdXRvJiBydW5uaW5nVHJhbnNp
dGlvbnNCeVByb3BlcnR5ID0gZWxlbWVudC5ydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7
Ci0gICAgYXV0byYgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5ID0gZWxlbWVudC5jb21w
bGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKTsKLQogICAgIGF1dG8gZ2VuZXJhdGlvblRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIC8vIEZpcnN0LCBsZXQncyBjb21waWxlIHRo
ZSBsaXN0IG9mIGFsbCBDU1MgcHJvcGVydGllcyBmb3VuZCBpbiB0aGUgY3VycmVudCBzdHlsZSBh
bmQgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZS4KQEAgLTU2NywxMyArNTc1LDEzIEBAIHZvaWQgQW5p
bWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBSCiAgICAgICAgICAgICBhdXRvIHByb3BlcnR5ID0gQ1NTUHJvcGVydHlB
bmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7
CiAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVt
ZW50QW5kUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHksIGN1cnJlbnRTdHlsZSwgYWZ0ZXJDaGFu
Z2VTdHlsZSwgcnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSwgY29tcGxldGVkVHJhbnNpdGlv
bnNCeVByb3BlcnR5LCBnZW5lcmF0aW9uVGltZSk7CisgICAgICAgICAgICB1cGRhdGVDU1NUcmFu
c2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgY3VycmVudFN0
eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBnZW5lcmF0aW9uVGltZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoYXV0byBwcm9wZXJ0eSA6IHRyYW5zaXRpb25Q
cm9wZXJ0aWVzKQotICAgICAgICB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9w
ZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgY3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBy
dW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5LCBjb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVy
dHksIGdlbmVyYXRpb25UaW1lKTsKKyAgICAgICAgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVt
ZW50QW5kUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHksIGN1cnJlbnRTdHlsZSwgYWZ0ZXJDaGFu
Z2VTdHlsZSwgZ2VuZXJhdGlvblRpbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaCBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oCmluZGV4IGZmMGY2
MTFjNjQ3ZGFmZmY5YmQ4MjM4MGI3NGVkZWM0MGJmOWI5ZDQuLmNlOWZiYTIwZWY5ZDUxM2E2YjEw
ZDNiMTk4ZTQ4NTBjYjliODU4OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25UaW1lbGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Bbmlt
YXRpb25UaW1lbGluZS5oCkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZUdsb2JhbFBvc2l0aW9uKFdlYkFuaW1hdGlvbiYpOwotICAgIHZvaWQg
dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50QW5kUHJvcGVydHkoRWxlbWVudCYsIENTU1By
b3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlJiBhZnRlckNoYW5nZVN0eWxlLCBQcm9wZXJ0eVRvVHJhbnNpdGlvbk1hcCYsIFByb3BlcnR5
VG9UcmFuc2l0aW9uTWFwJiwgY29uc3QgTW9ub3RvbmljVGltZSk7CisgICAgdm9pZCB1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvckVsZW1lbnRBbmRQcm9wZXJ0eShFbGVtZW50JiwgQ1NTUHJvcGVydHlJ
RCwgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFm
dGVyQ2hhbmdlU3R5bGUsIGNvbnN0IE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgcmVtb3ZlQ1NT
QW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKEVsZW1lbnQmLCBDU1NBbmltYXRpb24mKTsKIAogICAg
IE1hcmthYmxlPFNlY29uZHMsIFNlY29uZHM6Ok1hcmthYmxlVHJhaXRzPiBtX2N1cnJlbnRUaW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuY3BwCmluZGV4
IDQzYTQzZDAwYmJkZjdmMjA4ZDdiN2ZhNTZmZjEyMzZjNWU3NWJmYTguLmJiOWZhOGNjYTYwYWEz
NDUxMjg4ODNlMDA1Y2M5NzkxZjdmYjljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vRG9jdW1lbnRUaW1lbGluZS5jcHAKQEAgLTU0Nyw3ICs1NDcsNyBAQCB2b2lkIERvY3VtZW50
VGltZWxpbmU6OnRyYW5zaXRpb25EaWRDb21wbGV0ZShSZWZQdHI8Q1NTVHJhbnNpdGlvbj4gdHJh
bnNpdGlvbikKICAgICByZW1vdmVBbmltYXRpb24oKnRyYW5zaXRpb24pOwogICAgIGlmIChpczxL
ZXlmcmFtZUVmZmVjdD4odHJhbnNpdGlvbi0+ZWZmZWN0KCkpKSB7CiAgICAgICAgIGlmIChhdXRv
KiB0YXJnZXQgPSBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4odHJhbnNpdGlvbi0+ZWZmZWN0KCkp
LT50YXJnZXQoKSkKLSAgICAgICAgICAgIHRhcmdldC0+Y29tcGxldGVkVHJhbnNpdGlvbnNCeVBy
b3BlcnR5KCkuc2V0KHRyYW5zaXRpb24tPnByb3BlcnR5KCksIHRyYW5zaXRpb24pOworICAgICAg
ICAgICAgdGFyZ2V0LT5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQo
dHJhbnNpdGlvbi0+cHJvcGVydHkoKSwgdHJhbnNpdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggYjk3ZDVmZmUxYmNiYmU3NWFmYTMwOWY3OTVmZjhjNmViYzlmMDU4
Ni4uZGY5ZThiNzU5OWY1YzU4MTVkZjA5MzUxNzIyMmEzYzlkNWU0MWU1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMzc5NywxNyArMzc5Nyw1MiBAQCBPcHRpb25TZXQ8QW5pbWF0aW9uSW1w
YWN0PiBFbGVtZW50OjphcHBseUtleWZyYW1lRWZmZWN0cyhSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5
bAogICAgIHJldHVybiBpbXBhY3Q7CiB9CiAKLUFuaW1hdGlvbkNvbGxlY3Rpb24mIEVsZW1lbnQ6
OndlYkFuaW1hdGlvbnMoKQorY29uc3QgQW5pbWF0aW9uQ29sbGVjdGlvbiogRWxlbWVudDo6d2Vi
QW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGFuaW1hdGlvbkRhdGEgPSBhbmlt
YXRpb25SYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gJmFuaW1hdGlvblJhcmVEYXRhKCktPndl
YkFuaW1hdGlvbnMoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29uc3QgQW5pbWF0aW9u
Q29sbGVjdGlvbiogRWxlbWVudDo6Y3NzQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8qIGFuaW1hdGlvbkRhdGEgPSBhbmltYXRpb25SYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4g
JmFuaW1hdGlvblJhcmVEYXRhKCktPmNzc0FuaW1hdGlvbnMoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworY29uc3QgQW5pbWF0aW9uQ29sbGVjdGlvbiogRWxlbWVudDo6dHJhbnNpdGlvbnMo
KSBjb25zdAoreworICAgIGlmIChhdXRvKiBhbmltYXRpb25EYXRhID0gYW5pbWF0aW9uUmFyZURh
dGEoKSkKKyAgICAgICAgcmV0dXJuICZhbmltYXRpb25SYXJlRGF0YSgpLT50cmFuc2l0aW9ucygp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitjb25zdCBQcm9wZXJ0eVRvVHJhbnNpdGlvbk1h
cCogRWxlbWVudDo6Y29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byogYW5pbWF0aW9uRGF0YSA9IGFuaW1hdGlvblJhcmVEYXRhKCkpCisgICAgICAg
IHJldHVybiAmYW5pbWF0aW9uUmFyZURhdGEoKS0+Y29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3Bl
cnR5KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0IFByb3BlcnR5VG9UcmFuc2l0
aW9uTWFwKiBFbGVtZW50OjpydW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkgY29uc3QKK3sK
KyAgICBpZiAoYXV0byogYW5pbWF0aW9uRGF0YSA9IGFuaW1hdGlvblJhcmVEYXRhKCkpCisgICAg
ICAgIHJldHVybiAmYW5pbWF0aW9uUmFyZURhdGEoKS0+cnVubmluZ1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eSgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBbmltYXRpb25Db2xsZWN0aW9uJiBF
bGVtZW50OjplbnN1cmVXZWJBbmltYXRpb25zKCkKIHsKICAgICByZXR1cm4gZW5zdXJlQW5pbWF0
aW9uUmFyZURhdGEoKS53ZWJBbmltYXRpb25zKCk7CiB9CiAKLUFuaW1hdGlvbkNvbGxlY3Rpb24m
IEVsZW1lbnQ6OmNzc0FuaW1hdGlvbnMoKQorQW5pbWF0aW9uQ29sbGVjdGlvbiYgRWxlbWVudDo6
ZW5zdXJlQ1NTQW5pbWF0aW9ucygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUFuaW1hdGlvblJhcmVE
YXRhKCkuY3NzQW5pbWF0aW9ucygpOwogfQogCi1BbmltYXRpb25Db2xsZWN0aW9uJiBFbGVtZW50
Ojp0cmFuc2l0aW9ucygpCitBbmltYXRpb25Db2xsZWN0aW9uJiBFbGVtZW50OjplbnN1cmVUcmFu
c2l0aW9ucygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUFuaW1hdGlvblJhcmVEYXRhKCkudHJhbnNp
dGlvbnMoKTsKIH0KQEAgLTM4MjIsMTIgKzM4NTcsMTIgQEAgdm9pZCBFbGVtZW50OjpzZXRBbmlt
YXRpb25zQ3JlYXRlZEJ5TWFya3VwKENTU0FuaW1hdGlvbkNvbGxlY3Rpb24mJiBhbmltYXRpb25z
KQogICAgIGVuc3VyZUFuaW1hdGlvblJhcmVEYXRhKCkuc2V0QW5pbWF0aW9uc0NyZWF0ZWRCeU1h
cmt1cChXVEZNb3ZlKGFuaW1hdGlvbnMpKTsKIH0KIAotUHJvcGVydHlUb1RyYW5zaXRpb25NYXAm
IEVsZW1lbnQ6OmNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpCitQcm9wZXJ0eVRvVHJh
bnNpdGlvbk1hcCYgRWxlbWVudDo6ZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5
KCkKIHsKICAgICByZXR1cm4gZW5zdXJlQW5pbWF0aW9uUmFyZURhdGEoKS5jb21wbGV0ZWRUcmFu
c2l0aW9uc0J5UHJvcGVydHkoKTsKIH0KIAotUHJvcGVydHlUb1RyYW5zaXRpb25NYXAmIEVsZW1l
bnQ6OnJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKQorUHJvcGVydHlUb1RyYW5zaXRpb25N
YXAmIEVsZW1lbnQ6OmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKQogewogICAg
IHJldHVybiBlbnN1cmVBbmltYXRpb25SYXJlRGF0YSgpLnJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJv
cGVydHkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDNiMjUzODZjYjdmOGFjYTljYTBjN2M1
OTNjOGYwZDY0ZmU0ZGU3YjYuLmMzZjliMTcxZTczYzYwOGIxMTQ2NDY5ODcyN2E3NjU5NGIyMTAz
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNDg3LDEzICs0ODcsMTggQEAgcHVibGljOgogICAg
IGJvb2wgaGFzS2V5ZnJhbWVFZmZlY3RzKCkgY29uc3Q7CiAgICAgT3B0aW9uU2V0PEFuaW1hdGlv
bkltcGFjdD4gYXBwbHlLZXlmcmFtZUVmZmVjdHMoUmVuZGVyU3R5bGUmKTsKIAotICAgIEFuaW1h
dGlvbkNvbGxlY3Rpb24mIHdlYkFuaW1hdGlvbnMoKTsKLSAgICBBbmltYXRpb25Db2xsZWN0aW9u
JiBjc3NBbmltYXRpb25zKCk7Ci0gICAgQW5pbWF0aW9uQ29sbGVjdGlvbiYgdHJhbnNpdGlvbnMo
KTsKKyAgICBjb25zdCBBbmltYXRpb25Db2xsZWN0aW9uKiB3ZWJBbmltYXRpb25zKCkgY29uc3Q7
CisgICAgY29uc3QgQW5pbWF0aW9uQ29sbGVjdGlvbiogY3NzQW5pbWF0aW9ucygpIGNvbnN0Owor
ICAgIGNvbnN0IEFuaW1hdGlvbkNvbGxlY3Rpb24qIHRyYW5zaXRpb25zKCkgY29uc3Q7CisgICAg
Y29uc3QgUHJvcGVydHlUb1RyYW5zaXRpb25NYXAqIGNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9w
ZXJ0eSgpIGNvbnN0OworICAgIGNvbnN0IFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwKiBydW5uaW5n
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCkgY29uc3Q7CisgICAgQW5pbWF0aW9uQ29sbGVjdGlvbiYg
ZW5zdXJlV2ViQW5pbWF0aW9ucygpOworICAgIEFuaW1hdGlvbkNvbGxlY3Rpb24mIGVuc3VyZUNT
U0FuaW1hdGlvbnMoKTsKKyAgICBBbmltYXRpb25Db2xsZWN0aW9uJiBlbnN1cmVUcmFuc2l0aW9u
cygpOworICAgIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiBlbnN1cmVDb21wbGV0ZWRUcmFuc2l0
aW9uc0J5UHJvcGVydHkoKTsKKyAgICBQcm9wZXJ0eVRvVHJhbnNpdGlvbk1hcCYgZW5zdXJlUnVu
bmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpOwogICAgIENTU0FuaW1hdGlvbkNvbGxlY3Rpb24m
IGFuaW1hdGlvbnNDcmVhdGVkQnlNYXJrdXAoKTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNDcmVh
dGVkQnlNYXJrdXAoQ1NTQW5pbWF0aW9uQ29sbGVjdGlvbiYmKTsKLSAgICBQcm9wZXJ0eVRvVHJh
bnNpdGlvbk1hcCYgY29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7Ci0gICAgUHJvcGVy
dHlUb1RyYW5zaXRpb25NYXAmIHJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKTsKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5z
RnVsbFNjcmVlbkVsZW1lbnQoKSBjb25zdDsK
</data>
<flag name="review"
          id="409672"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>