<?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>233403</bug_id>
          
          <creation_ts>2021-11-20 16:44:38 -0800</creation_ts>
          <short_desc>Clarify behavior of ScrollAnimator::scroll()</short_desc>
          <delta_ts>2021-11-22 13:31:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Scrolling</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>clord</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pdr</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>1817159</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-20 16:44:38 -0800</bug_when>
    <thetext>Clarify behavior of ScrollAnimator::scroll()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817160</commentid>
    <comment_count>1</comment_count>
      <attachid>444910</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-20 16:44:55 -0800</bug_when>
    <thetext>Created attachment 444910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817169</commentid>
    <comment_count>2</comment_count>
      <attachid>444915</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-20 21:53:24 -0800</bug_when>
    <thetext>Created attachment 444915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817199</commentid>
    <comment_count>3</comment_count>
      <attachid>444915</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-11-21 10:33:34 -0800</bug_when>
    <thetext>Comment on attachment 444915
Patch

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

&gt; Source/WebCore/platform/ScrollTypes.h:174
&gt; +inline ScrollEventAxis axisFromDirection(ScrollDirection direction)

You could make this constexpr.

&gt; Source/WebCore/platform/ScrollTypes.h:194
&gt; +inline void setValueForAxis(FloatSize&amp; size, ScrollEventAxis axis, float value)

I think this reference parameter makes this more confusing than necessary, and probably isn&apos;t a performance win over just returning a new FloatSize.

An alternative that might make sense would be making a subclass or wrapper class of FloatSize called something like ScrollDelta that has this function.

&gt; Source/WebCore/platform/ScrollTypes.h:211
&gt; +inline void setValueForAxis(FloatPoint&amp; point, ScrollEventAxis axis, float value)

Same here as setValueForAxis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817259</commentid>
    <comment_count>4</comment_count>
      <attachid>444915</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-11-22 02:46:29 -0800</bug_when>
    <thetext>Comment on attachment 444915
Patch

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

Drive-by from a non-reviewer that has some stake in this part of the code - looks good to me, just some small bits and bobs I think might be worth addressing.

&gt; Source/WebCore/dom/Element.cpp:-1124
&gt;      ScrollDirection direction = ScrollDown;
&gt; -    if (units &lt; 0) {
&gt; +    if (units &lt; 0)
&gt;          direction = ScrollUp;
&gt; -        units = -units;
&gt; -    }

Maybe it&apos;s a style thing, but could this not just be condensed to a one-line `ScrollDirection direction = (units &lt; 0) ? ScrollUp : ScrollDown;` now? I think it&apos;d read nicer, though would understand opposition to a ternary.

&gt; Source/WebCore/dom/Element.h:178
&gt; +    // These are only used by WebKitLegacy DOM API.

Great to have this comment here, I wonder if it&apos;d be nice to add even more separation somehow, either via an interface (LegacyScrolling or something) or via the use of a friend class and making these private.

&gt; Source/WebCore/page/FrameView.cpp:3839
&gt; +    if (granularity != ScrollGranularity::Page || axis == ScrollEventAxis::Horizontal)

If this function does nothing when not vertical, paged scrolling, would it make more sense to name this function something different and adjust the call-site instead? I suppose that&apos;s a bigger change, but it feels weird to me to have a whole function that takes two parameters whether to decide to do anything at all.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:74
&gt; +        behavior.remove(ScrollBehavior::RespectScrollSnap);

If this function is no longer re-entrant, should this flag still be removed? It might actually be useful later on to determine whether the scroll position may have been adjusted(?)

&gt; Source/WebCore/platform/ScrollTypes.h:182
&gt; +    return ScrollEventAxis::Vertical;

I guess it would be nice to have an ASSERT_NOT_REACHED() before this.

&gt; Source/WebCore/platform/ScrollTypes.h:191
&gt; +    return 0;

Same here re assert.

&gt; Source/WebCore/platform/ScrollableArea.h:229
&gt; +        return nullptr;

Again, I think it would be nice to assert here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817328</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-22 12:03:25 -0800</bug_when>
    <thetext>Sorry Chris, I committed before I saw your comments. I&apos;ll address your comments in a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817334</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-22 13:30:33 -0800</bug_when>
    <thetext>Comments addressed in https://trac.webkit.org/changeset/286119/webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817335</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-22 13:31:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/85683219&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444910</attachid>
            <date>2021-11-20 16:44:55 -0800</date>
            <delta_ts>2021-11-20 21:53:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233403-20211120164454.patch</filename>
            <type>text/plain</type>
            <size>36517</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWVlNTdkMDlmZjRkZjhl
ODAwYmZiMTJkNWJkYjkwMDg3ZGM0ZjkwOS4uYTYzNjU2YmVkZDk4OWNiYWM4NDRkN2IzM2JlZDUw
MTMzY2QyYWZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIxLTExLTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIENsYXJpZnkgYmVo
YXZpb3Igb2YgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM0MDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAg
ICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEJ5
VW5pdHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9y
Rml4ZWRDb250ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRlbHRhRnJv
bVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZl
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU6OmFkanVzdGVkU2Nyb2xsRGVzdGluYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpheGlz
RnJvbURpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvckF4aXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0VmFsdWVGb3JBeGlzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6YWRqdXN0U2Ny
b2xsU3RlcEZvckZpeGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bG9naWNhbFNjcm9s
bCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMjEtMTEtMTcgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggV2hlZWxFdmVu
dFRlc3RNb25pdG9yIGFib3V0IHNjcm9sbCBhbmltYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNWQ3YjFiZTI2MTY0MGNmMTQxMGVjYTNlYzkxNzNhNDA4OWFmZDE4ZC4uZDc4MzBjY2Zk
NjhjYzk3NzNjN2M0N2MxZjlhMjYwYjI4ZTFmOGNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMTExOCwxMiArMTExOCwxMSBAQCB2b2lkIEVsZW1lbnQ6OnNjcm9sbEJ5VW5pdHMoaW50IHVu
aXRzLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgaWYgKHVuaXRz
IDwgMCkgeworICAgIGlmICh1bml0cyA8IDApCiAgICAgICAgIGRpcmVjdGlvbiA9IFNjcm9sbFVw
OwotICAgICAgICB1bml0cyA9IC11bml0czsKLSAgICB9Ci0gICAgRWxlbWVudCogc3RvcEVsZW1l
bnQgPSB0aGlzOwotICAgIGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgdW5pdHMsICZzdG9wRWxlbWVudCk7CisKKyAgICBhdXRvKiBz
dG9wRWxlbWVudCA9IHRoaXM7CisgICAgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzdGQ6OmFicyh1bml0cyksICZzdG9wRWxlbWVu
dCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsQnlMaW5lcyhpbnQgbGluZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAppbmRleCAwNGNlNjVkZTZlODcyY2YwOTNkMmNjYWYwZGYxOGFiOTZlN2E0ZTgyLi5i
MDk2N2FiNWViMjg1N2UzNzI1NWM3NGE0NmI3ZDE2Y2NiYjA2YzdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKQEAgLTE3NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRv
KGNvbnN0IFNjcm9sbFRvT3B0aW9ucyYsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQsIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCA9IFNjcm9sbFNuYXBQb2lu
dFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCk7CiAgICAgdm9pZCBzY3JvbGxUbyhkb3VibGUgeCwg
ZG91YmxlIHkpOwogCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBXZWJLaXRMZWdhY3kg
RE9NIEFQSS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbEJ5TGluZXMoaW50IGxpbmVz
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbEJ5UGFnZXMoaW50IHBhZ2VzKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDM3NjM5Y2NlMjk5NjZlZmZkOWExODE5OTIy
NzhlN2ViMjAxYjg0ODAuLmVlZjg3ZDZkMjZlMGYxZWUwNjRmMDQzNWNkZWZmMmYwN2E3ZjJhNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTM4MzQsOSArMzgzNCw5IEBAIHZvaWQg
RnJhbWVWaWV3OjpzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYgcG9zaXRpb24sIFNjCiAgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3Jv
bGxUeXBlKTsKIH0KIAotZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRD
b250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Zsb2F0IEZyYW1lVmlldzo6YWRqdXN0U2Nyb2xs
U3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxFdmVudEF4aXMgYXhpcywgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgaWYgKGdyYW51bGFyaXR5ICE9IFNj
cm9sbEdyYW51bGFyaXR5OjpQYWdlIHx8IG9yaWVudGF0aW9uID09IFNjcm9sbGJhck9yaWVudGF0
aW9uOjpIb3Jpem9udGFsKQorICAgIGlmIChncmFudWxhcml0eSAhPSBTY3JvbGxHcmFudWxhcml0
eTo6UGFnZSB8fCBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKICAgICAgICAg
cmV0dXJuIHN0ZXA7CiAKICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25l
ZE9iamVjdHMgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggNDEzMzFkY2Uz
YzJjOGY1ZGE4ZjViODZhN2Q4OTY1YTRlYjQwNTk2Zi4uNzE2MTFjYzE2MzFmMmE2YTVjZTc1ZDgy
NGRmZGQyZDA1MzBmNzY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC02NjEsNyArNjYx
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZp
bmFsOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVy
dGllcygpIGNvbnN0OwogCi0gICAgZmxvYXQgYWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVu
dChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpIGZp
bmFsOworICAgIGZsb2F0IGFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoZmxvYXQgc3Rl
cCwgU2Nyb2xsRXZlbnRBeGlzLCBTY3JvbGxHcmFudWxhcml0eSkgZmluYWw7CiAKICAgICB2b2lk
IGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAKaW5kZXggMDUwYzY2ZjhjYjg1N2UwN2VkNmRkNmVjNmRhNmZhZTViNTYy
ZDY2MC4uODRjNzlmMDgyZTRkNzM2ZmUxYzA0NDFkZWU1NTU4MWNiOGRiYzA2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtNjMsMjggKzYzLDI3IEBA
IFNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IoKQogICAgIG1fc2Nyb2xsQ29udHJvbGxl
ci5zdG9wQWxsVGltZXJzKCk7CiB9CiAKLWJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlv
cj4gYmVoYXZpb3IpCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgZmxvYXQgc2Nyb2xsRGVsdGEsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4g
YmVoYXZpb3IpCiB7CisgICAgQVNTRVJUKHNjcm9sbERlbHRhID49IDApOwogICAgIG1fc2Nyb2xs
YWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5zZXRTY3JvbGxiYXJBbmltYXRpb25zVW5z
dXNwZW5kZWRCeVVzZXJJbnRlcmFjdGlvbih0cnVlKTsKIAotICAgIGF1dG8gZGVsdGEgPSBkZWx0
YUZyb21TdGVwKG9yaWVudGF0aW9uLCBzdGVwLCBtdWx0aXBsaWVyKTsKLSAgICBpZiAoYmVoYXZp
b3IuY29udGFpbnMoU2Nyb2xsQmVoYXZpb3I6OkRvRGlyZWN0aW9uYWxTbmFwcGluZykpIHsKLSAg
ICAgICAgYmVoYXZpb3IucmVtb3ZlKFNjcm9sbEJlaGF2aW9yOjpEb0RpcmVjdGlvbmFsU25hcHBp
bmcpOworICAgIGF1dG8gYXhpcyA9IGF4aXNGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7CisgICAg
YXV0byBkZWx0YSA9IGRlbHRhRnJvbVN0ZXAoZGlyZWN0aW9uLCBzY3JvbGxEZWx0YSk7CisKKyAg
ICBpZiAoYmVoYXZpb3IuY29udGFpbnMoU2Nyb2xsQmVoYXZpb3I6OlJlc3BlY3RTY3JvbGxTbmFw
KSkgeworICAgICAgICBiZWhhdmlvci5yZW1vdmUoU2Nyb2xsQmVoYXZpb3I6OlJlc3BlY3RTY3Jv
bGxTbmFwKTsKICAgICAgICAgaWYgKCFtX3Njcm9sbENvbnRyb2xsZXIudXNlc1Njcm9sbFNuYXAo
KSkKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9u
LCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllciwgYmVoYXZpb3IpOworICAgICAgICAgICAg
cmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoZGlyZWN0aW9uLCBzY3JvbGxEZWx0YSwgYmVo
YXZpb3IpOwogCiAgICAgICAgIGF1dG8gY3VycmVudE9mZnNldCA9IG9mZnNldEZyb21Qb3NpdGlv
bihjdXJyZW50UG9zaXRpb24oKSk7CiAgICAgICAgIGF1dG8gbmV3T2Zmc2V0ID0gY3VycmVudE9m
ZnNldCArIGRlbHRhOwotICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWwpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbENv
bnRyb2xsZXIuYWRqdXN0ZWRTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIG5ld09mZnNldCwgbXVsdGlwbGllciwgY3VycmVudE9mZnNldC54KCkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFkobV9zY3JvbGxDb250cm9sbGVyLmFk
anVzdGVkU2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbmV3T2Zm
c2V0LCBtdWx0aXBsaWVyLCBjdXJyZW50T2Zmc2V0LnkoKSkpOwotCi0gICAgICAgIGF1dG8gbmV3
RGVsdGEgPSBuZXdPZmZzZXQgLSBjdXJyZW50T2Zmc2V0OwotICAgICAgICBpZiAob3JpZW50YXRp
b24gPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWwpCi0gICAgICAgICAgICByZXR1
cm4gc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBncmFudWxhcml0eSwg
bmV3RGVsdGEud2lkdGgoKSwgMS4wLCBiZWhhdmlvcik7CisgICAgICAgIAorICAgICAgICBhdXRv
IHZlbG9jaXR5ID0gY29weXNpZ25mKDEuMGYsIHZhbHVlRm9yQXhpcyhkZWx0YSwgYXhpcykpOwor
ICAgICAgICBhdXRvIG5ld09mZnNldE9uQXhpcyA9IG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3Rl
ZFNjcm9sbERlc3RpbmF0aW9uKGF4aXMsIG5ld09mZnNldCwgdmVsb2NpdHksIHZhbHVlRm9yQXhp
cyhjdXJyZW50T2Zmc2V0LCBheGlzKSk7CiAKLSAgICAgICAgcmV0dXJuIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbjo6VmVydGljYWwsIGdyYW51bGFyaXR5LCBuZXdEZWx0YS5oZWlnaHQoKSwg
MS4wLCBiZWhhdmlvcik7CisgICAgICAgIGF1dG8gYXhpc0RlbHRhID0gbmV3T2Zmc2V0T25BeGlz
IC0gdmFsdWVGb3JBeGlzKGN1cnJlbnRPZmZzZXQsIGF4aXMpOworICAgICAgICByZXR1cm4gc2Ny
b2xsKGRpcmVjdGlvbiwgYXhpc0RlbHRhLCBiZWhhdmlvcik7CiAgICAgfQogCiAgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgJiYgcGxhdGZvcm1BbGxvd3NT
Y3JvbGxBbmltYXRpb24oKSAmJiAhYmVoYXZpb3IuY29udGFpbnMoU2Nyb2xsQmVoYXZpb3I6Ok5l
dmVyQW5pbWF0ZSkpIHsKQEAgLTE0MSwxNCArMTQwLDIwIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5p
bWF0b3I6OnBvc2l0aW9uRnJvbU9mZnNldChjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpIGNvbnN0
CiAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zm
c2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpKSk7CiB9CiAK
LUZsb2F0U2l6ZSBTY3JvbGxBbmltYXRvcjo6ZGVsdGFGcm9tU3RlcChTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK0Zsb2F0U2l6
ZSBTY3JvbGxBbmltYXRvcjo6ZGVsdGFGcm9tU3RlcChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBmbG9hdCBzdGVwKQogewotICAgIEZsb2F0U2l6ZSBkZWx0YTsKLSAgICBpZiAob3JpZW50YXRp
b24gPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWwpCi0gICAgICAgIGRlbHRhLnNl
dFdpZHRoKHN0ZXAgKiBtdWx0aXBsaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbHRhLnNldEhl
aWdodChzdGVwICogbXVsdGlwbGllcik7Ci0gICAgcmV0dXJuIGRlbHRhOworICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxVcDoKKyAgICAgICAgcmV0dXJuIHsgMCwgLXN0
ZXAgfTsKKyAgICBjYXNlIFNjcm9sbERvd246CisgICAgICAgIHJldHVybiB7IDAsIHN0ZXAgfTsK
KyAgICBjYXNlIFNjcm9sbExlZnQ6CisgICAgICAgIHJldHVybiB7IC1zdGVwLCAwIH07CisgICAg
Y2FzZSBTY3JvbGxSaWdodDoKKyAgICAgICAgcmV0dXJuIHsgc3RlcCwgMCB9OworICAgIH0KKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmFjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSgpIGNvbnN0CkBAIC0yMDYsMjggKzIxMSwyNyBAQCBib29sIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkK
ICAgICAgICAgfHwgKGRlbHRhWSA+IDAgJiYgbWF4QmFja3dhcmRTY3JvbGxEZWx0YS5oZWlnaHQo
KSA+IDApKSB7CiAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogCi0gICAgICAgIE9wdGlvblNldDxT
Y3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IoU2Nyb2xsQmVoYXZpb3I6OkRvRGlyZWN0aW9uYWxTbmFw
cGluZyk7CisgICAgICAgIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IgPSB7IFNj
cm9sbEJlaGF2aW9yOjpSZXNwZWN0U2Nyb2xsU25hcCB9OwogICAgICAgICBpZiAoZS5oYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzKCkpCiAgICAgICAgICAgICBiZWhhdmlvci5hZGQoU2Nyb2xsQmVo
YXZpb3I6Ok5ldmVyQW5pbWF0ZSk7CiAKICAgICAgICAgaWYgKGRlbHRhWSkgewotICAgICAgICAg
ICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhWSA8IDA7Ci0gICAgICAgICAgICAgICAg
ZGVsdGFZID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJs
ZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCi0gICAgICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb246OlZlcnRpY2FsLCBTY3JvbGxHcmFudWxhcml0eTo6UGl4
ZWwsIHZlcnRpY2FsU2Nyb2xsYmFyLT5waXhlbFN0ZXAoKSwgLWRlbHRhWSwgYmVoYXZpb3IpOwor
ICAgICAgICAgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50
KQorICAgICAgICAgICAgICAgIGRlbHRhWSA9IHN0ZDo6Y29weXNpZ24oU2Nyb2xsYmFyOjpwYWdl
U3RlcERlbHRhKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUhlaWdodCgpKSwgZGVsdGFZKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBzY3JvbGxEaXJlY3Rpb24gPSBkZWx0YVkgPCAw
ID8gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duIDogU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxV
cDsgLy8gV2hlZWwgZGVsdGFzIGFyZSByZXZlcnNlZCBmcm9tIHNjcm9sbGluZyBkaXJlY3Rpb24u
CisgICAgICAgICAgICBhdXRvIHNjcm9sbERlbHRhID0gdmVydGljYWxTY3JvbGxiYXItPnBpeGVs
U3RlcCgpICogc3RkOjphYnMoZGVsdGFZKTsKKyAgICAgICAgICAgIHNjcm9sbChzY3JvbGxEaXJl
Y3Rpb24sIHNjcm9sbERlbHRhLCBiZWhhdmlvcik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
ZGVsdGFYKSB7Ci0gICAgICAgICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFn
ZVdoZWVsRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFYIDwg
MDsKLSAgICAgICAgICAgICAgICBkZWx0YVggPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9z
Y3JvbGxhYmxlQXJlYS52aXNpYmxlV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZ2F0
aXZlKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAtZGVsdGFYOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBT
Y3JvbGxHcmFudWxhcml0eTo6UGl4ZWwsIGhvcml6b250YWxTY3JvbGxiYXItPnBpeGVsU3RlcCgp
LCAtZGVsdGFYLCBiZWhhdmlvcik7CisgICAgICAgICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09
IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpCisgICAgICAgICAgICAgICAgZGVsdGFYID0gc3RkOjpj
b3B5c2lnbihTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxl
V2lkdGgoKSksIGRlbHRhWCk7CisKKyAgICAgICAgICAgIGF1dG8gc2Nyb2xsRGlyZWN0aW9uID0g
ZGVsdGFYIDwgMCA/IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQgOiBTY3JvbGxEaXJlY3Rp
b246OlNjcm9sbExlZnQ7IC8vIFdoZWVsIGRlbHRhcyBhcmUgcmV2ZXJzZWQgZnJvbSBzY3JvbGxp
bmcgZGlyZWN0aW9uLgorICAgICAgICAgICAgYXV0byBzY3JvbGxEZWx0YSA9IGhvcml6b250YWxT
Y3JvbGxiYXItPnBpeGVsU3RlcCgpICogc3RkOjphYnMoZGVsdGFYKTsKKworICAgICAgICAgICAg
c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsRGVsdGEsIGJlaGF2aW9yKTsKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCmluZGV4IDRlYTU4NGFiN2U2YWY1YzU3NWM5ZDg3MDRjN2IzMTBjYTU5YTU2
NWIuLjQxMjdkM2NjN2Q2ZGJhZjg1ZGJkMjEzN2VkODVlZTRkMGFmZWNjNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtNjYsMTUgKzY2LDE1IEBAIHB1Ymxp
YzoKICAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmdl
dCgpOyB9CiAKICAgICBlbnVtIFNjcm9sbEJlaGF2aW9yIHsKLSAgICAgICAgRG9EaXJlY3Rpb25h
bFNuYXBwaW5nID0gMSA8PCAwLAotICAgICAgICBOZXZlckFuaW1hdGUgPSAxIDw8IDEsCisgICAg
ICAgIFJlc3BlY3RTY3JvbGxTbmFwICAgPSAxIDw8IDAsCisgICAgICAgIE5ldmVyQW5pbWF0ZSAg
ICAgICAgPSAxIDw8IDEsCiAgICAgfTsKIAogICAgIC8vIENvbXB1dGVzIGEgc2Nyb2xsIGRlc3Rp
bmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIFJldHVybnMgZmFsc2UgaWYKICAgICAv
LyBhbHJlYWR5IGF0IHRoZSBkZXN0aW5hdGlvbi4gIE90aGVyd2lzZSwgc3RhcnRzIHNjcm9sbGlu
ZyB0b3dhcmRzIHRoZQogICAgIC8vIGRlc3RpbmF0aW9uIGFuZCByZXR1cm5zIHRydWUuICBTY3Jv
bGxpbmcgbWF5IGJlIGltbWVkaWF0ZSBvciBhbmltYXRlZC4KICAgICAvLyBUaGUgYmFzZSBjbGFz
cyBpbXBsZW1lbnRhdGlvbiBhbHdheXMgc2Nyb2xscyBpbW1lZGlhdGVseSwgbmV2ZXIgYW5pbWF0
ZXMuCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZp
b3I+KTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIGZsb2F0IGRlbHRhLCBPcHRp
b25TZXQ8U2Nyb2xsQmVoYXZpb3I+KTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxUb1Bvc2l0
aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CiAgICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CkBAIC0xNzEsNyArMTcxLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIHNjcm9sbEFuaW1hdGlvbkVuYWJsZWQoKSBjb25zdCBmaW5hbDsKICNlbmRpZgog
Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBkZWx0YUZyb21TdGVwKFNjcm9sbGJhck9yaWVudGF0aW9u
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGRl
bHRhRnJvbVN0ZXAoU2Nyb2xsRGlyZWN0aW9uLCBmbG9hdCBzdGVwKTsKIAogcHJvdGVjdGVkOgog
ICAgIFNjcm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCmluZGV4IDVkZmQ3MTFi
ZDBiNGRlZGIzMGY4OGFlYjQ1NmQ4ZGUxMjJjNzNiNDMuLjI3YmFmMTMxMjhhMDBkMWJhNGMxMDBm
ZmU1YWY1ZmI3NTgwMGU1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgZmxvYXQgU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGU6OmFkanVzdGVkU2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIEYKIHsKICAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcE9mZnNldHNGb3JBeGlz
KGF4aXMpOwogICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0aW5hdGlvbk9mZnNldC54KCkg
OiBkZXN0aW5hdGlvbk9mZnNldC55KCk7CisgICAgICAgIHJldHVybiB2YWx1ZUZvckF4aXMoZGVz
dGluYXRpb25PZmZzZXQsIGF4aXMpOwogCiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBv
cmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7CiAgICAgaWYgKG9yaWdpbmFsT2Zmc2V0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKaW5kZXggZjhmMzkyYmUwZGQyMTYyZmE1NWFm
NTY3MmQxN2IzODg4YjE5NjY3Mi4uYzE1NTg3YTc4NzZlNzc0OWI2MDI3MGQwNGVlNjYwMmNhYjAz
NDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCkBAIC0yNSw2ICsyNSw4
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewpAQCAtMTY5LDYgKzE3MSw1MSBAQCBlbnVtIGNsYXNzIFNjcm9sbEV2ZW50QXhpcyA6IHVp
bnQ4X3QgewogICAgIFZlcnRpY2FsCiB9OwogCitpbmxpbmUgU2Nyb2xsRXZlbnRBeGlzIGF4aXNG
cm9tRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbFVwOiByZXR1cm4gU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbDsKKyAgICBjYXNlIFNjcm9sbERvd246IHJldHVybiBTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsOworICAgIGNhc2UgU2Nyb2xsTGVmdDogcmV0dXJuIFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbDsKKyAgICBjYXNlIFNjcm9sbFJpZ2h0OiByZXR1cm4gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsOworICAgIH0KKyAgICByZXR1cm4gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDsK
K30KKworaW5saW5lIGZsb2F0IHZhbHVlRm9yQXhpcyhGbG9hdFNpemUgc2l6ZSwgU2Nyb2xsRXZl
bnRBeGlzIGF4aXMpCit7CisgICAgc3dpdGNoIChheGlzKSB7CisgICAgY2FzZSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWw6IHJldHVybiBzaXplLndpZHRoKCk7CisgICAgY2FzZSBTY3JvbGxF
dmVudEF4aXM6OlZlcnRpY2FsOiByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlRm9yQXhpcyhGbG9hdFNpemUmIHNpemUs
IFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGF4aXMp
IHsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDogcmV0dXJuIHNpemUuc2V0
V2lkdGgodmFsdWUpOworICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDogcmV0dXJu
IHNpemUuc2V0SGVpZ2h0KHZhbHVlKTsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCB2YWx1ZUZv
ckF4aXMoRmxvYXRQb2ludCBwb2ludCwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgc3dp
dGNoIChheGlzKSB7CisgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6IHJldHVy
biBwb2ludC54KCk7CisgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOiByZXR1cm4g
cG9pbnQueSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIHZvaWQgc2V0VmFs
dWVGb3JBeGlzKEZsb2F0UG9pbnQmIHBvaW50LCBTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQg
dmFsdWUpCit7CisgICAgc3dpdGNoIChheGlzKSB7CisgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWw6IHJldHVybiBwb2ludC5zZXRYKHZhbHVlKTsKKyAgICBjYXNlIFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWw6IHJldHVybiBwb2ludC5zZXRZKHZhbHVlKTsKKyAgICB9Cit9CisK
IGVudW0gU2Nyb2xsYmFyQ29udHJvbFN0YXRlTWFzayB7CiAgICAgQWN0aXZlU2Nyb2xsYmFyU3Rh
dGUgPSAxLAogICAgIEVuYWJsZWRTY3JvbGxiYXJTdGF0ZSA9IDEgPDwgMSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCA4ZjIwY2VjODU0MTNiZWFkY2I0
N2I3ZTIxODAzOWQ3ZTI0Njg4ZTg3Li43ODAzMjc3NmU1YmZlMDcxMWM4ZWVhNzg4YjIyMGMxMGYw
MmMxZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBA
IC05MSwyMCArOTEsMjAgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNv
bnN0IEludFBvaW50JiBvcmlnaW4pCiAgICAgfQogfQogCi1mbG9hdCBTY3JvbGxhYmxlQXJlYTo6
YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpCitmbG9hdCBTY3JvbGxhYmxlQXJlYTo6YWRqdXN0
U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxFdmVudEF4aXMsIFNj
cm9sbEdyYW51bGFyaXR5KQogewogICAgIHJldHVybiBzdGVwOwogfQogCi1ib29sIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29sIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCkKIHsKLSAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbjsKKyAgICBTY3JvbGxFdmVudEF4aXMgYXhpczsKICAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhcjsKICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBT
Y3JvbGxEb3duKSB7Ci0gICAgICAgIG9yaWVudGF0aW9uID0gU2Nyb2xsYmFyT3JpZW50YXRpb246
OlZlcnRpY2FsOworICAgICAgICBheGlzID0gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDsKICAg
ICAgICAgc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBvcmllbnRhdGlvbiA9IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsOworICAg
ICAgICBheGlzID0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOwogICAgICAgICBzY3JvbGxi
YXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgfQogCkBAIC0xMjcsMTEgKzEyNyw5IEBA
IGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlm
IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCi0gICAg
ICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKLQotICAgIHN0ZXAgPSBhZGp1c3RTY3JvbGxT
dGVwRm9yRml4ZWRDb250ZW50KHN0ZXAsIG9yaWVudGF0aW9uLCBncmFudWxhcml0eSk7Ci0gICAg
cmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuc2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwg
c3RlcCwgbXVsdGlwbGllciwgU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEJlaGF2aW9yOjpEb0RpcmVj
dGlvbmFsU25hcHBpbmcpOworICAgIHN0ZXAgPSBhZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250
ZW50KHN0ZXAsIGF4aXMsIGdyYW51bGFyaXR5KTsKKyAgICBhdXRvIHNjcm9sbERlbHRhID0gc3Rl
cCAqIHN0ZXBDb3VudDsKKyAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5zY3JvbGwoZGlyZWN0
aW9uLCBzY3JvbGxEZWx0YSwgU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEJlaGF2aW9yOjpSZXNwZWN0
U2Nyb2xsU25hcCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvUG9zaXRpb25X
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4
IDc5Nzk5N2MyZWE3YWE5ZjhjZGM5ZThhN2Q5ZDhmNDQ0ODcxOGI1MzEuLjU1YTNjNWNhY2Y0MGJj
ZGQxOGNhNmUwOTZiY2E2MTM1YjgyMjVkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzTGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UERGUGx1Z2luKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQgPSAxKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
KTsKIApAQCAtMzYyLDcgKzM2Miw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFNjcm9sbE9y
aWdpbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZvaWQgcmVzZXRTY3JvbGxPcmlnaW5DaGFuZ2Vk
KCkgeyBtX3Njcm9sbE9yaWdpbkNoYW5nZWQgPSBmYWxzZTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0
ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZs
b2F0IHN0ZXAsIFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsR3JhbnVsYXJpdHkpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBJbnRSZWN0JikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmlu
ZGV4IDcxMGUxMDRlNzFlNzZhYzIyMzhhYzc5ZWU0YWUwYzU3NDJjYWU5YWYuLjkyOTEwNzdhZTk3
Nzc2NTI3YjY4Y2NkYTkzZDA2ODhlMjAxOTcxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCkBAIC04OTMsMTAgKzg5MywxMCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5z
aWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1ib29s
IFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9w
RWxlbWVudCkKK2Jvb2wgUmVuZGVyQm94OjpzY3JvbGxMYXllcihTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50
LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBs
YXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKHNj
cm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEgJiYgc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzdGVwQ291bnQpKSB7CiAgICAg
ICAgIGlmIChzdG9wRWxlbWVudCkKICAgICAgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQo
KTsKIApAQCAtOTA2LDkgKzkwNiw5IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGxMYXllcihTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRCb3gsIGNvbnN0IEludFBv
aW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCkKK2Jvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIHVu
c2lnbmVkIHN0ZXBDb3VudCwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0
Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0gICAgaWYg
KHNjcm9sbExheWVyKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVt
ZW50KSkKKyAgICBpZiAoc2Nyb2xsTGF5ZXIoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RlcENv
dW50LCBzdG9wRWxlbWVudCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHN0b3BF
bGVtZW50ICYmICpzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgPT0gZWxlbWVudCgpKQpAQCAt
OTE3LDEyICs5MTcsMTIgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKICAgICBSZW5kZXJCbG9j
ayogbmV4dFNjcm9sbEJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBpZiAobmV4dFNj
cm9sbEJsb2NrICYmICFuZXh0U2Nyb2xsQmxvY2stPmlzUmVuZGVyVmlldygpKQotICAgICAgICBy
ZXR1cm4gbmV4dFNjcm9sbEJsb2NrLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7
CisgICAgICAgIHJldHVybiBuZXh0U2Nyb2xsQmxvY2stPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBzdGVwQ291bnQsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29s
dXRlUG9pbnQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJveDo6bG9n
aWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKK2Jvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENv
dW50LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNl
OwogICAgIApAQCAtOTMwLDkgKzkzMCw5IEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xs
KFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIE9uIE1hYyBvbmx5IHdlIHJlc2V0IHRoZSBpbmxp
bmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVudCBzY3JvbGwgKGUuZy4s
IGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsR3Jh
bnVsYXJpdHk6OkRvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBzY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJk
LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpLCBTY3JvbGxHcmFudWxhcml0eTo6RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAg
ICAgICAgICAgc2Nyb2xsZWQgPSBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNp
Y2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxHcmFudWxh
cml0eTo6RG9jdW1lbnQsIHN0ZXBDb3VudCk7CiAjZW5kaWYKLSAgICAgICAgaWYgKHNjcm9sbGFi
bGVBcmVhLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
KGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIHN0ZXBD
b3VudCkpCiAgICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2Nyb2xsZWQpIHsKQEAgLTk0Nyw3ICs5NDcsNyBAQCBib29sIFJlbmRlckJveDo6bG9naWNh
bFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dAogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoYiAm
JiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5sb2dpY2FsU2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKKyAgICAgICAg
cmV0dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RlcENvdW50
LCBzdG9wRWxlbWVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKaW5kZXggOGYwODYzNWM1NGQzMjI0M2RhMzk4ODc2NGVlNDNlYjRmMzZj
YzJkYy4uZTM0MjY3OGQxYzQzNjM5ODY1NzkwODdhNWM0ZTUyMDMxZDZiMDU0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNDkyLDggKzQ5Miw4IEBAIG92ZXJyaWRlOwog
ICAgIGludCBpbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBpbnQg
c2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCgpOyB9CiAgICAgaW50IHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyLCBSZW5kZXJC
b3gqIHN0YXJ0Qm94ID0gbnVsbHB0ciwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0
ZVBvaW50ID0gSW50UG9pbnQoKSk7Ci0gICAgdmlydHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Ny
b2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIg
PSAxLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBD
b3VudCA9IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51bGxwdHIsIFJlbmRlckJveCogc3Rh
cnRCb3ggPSBudWxscHRyLCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQg
PSBJbnRQb2ludCgpKTsKKyAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dp
Y2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50ID0gMSwg
RWxlbWVudCoqIHN0b3BFbGVtZW50ID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CkBAIC03NDQsNyArNzQ0LDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlR3JpZFBvc2l0aW9uQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBib29s
IHNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCk7CisgICAgYm9vbCBzY3JvbGxMYXllcihT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQsIEVs
ZW1lbnQqKiBzdG9wRWxlbWVudCk7CiAKICAgICBib29sIGZpeGVkRWxlbWVudExheXNPdXRSZWxh
dGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmluZGV4IDYwMDBlZDQ5YTQ3
YTkwNjQ2MDI2ZGNmNmFlOWEyYjBmZmVkZmRkMzQuLmRkYmU5YTQxNmYzZjk3ZWZmMzIzMjAyZDYw
ODQwZjIwMjc2ODdiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMzgzLDcgKzM4Myw3IEBAIGJvb2wgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQsIEVsZW1lbnQqKiwgUmVuZGVyQm94KiwgY29uc3QgSW50UG9pbnQmKQor
Ym9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1bnNpZ25lZCwgRWxlbWVudCoqLCBS
ZW5kZXJCb3gqLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgaWYgKCFpczxQbHVnaW5WaWV3QmFz
ZT4od2lkZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTEsMTAgKzM5MSwxMCBA
QCBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZwogICAgIHJldHVybiBkb3duY2FzdDxQbHVnaW5WaWV3
QmFzZT4oKndpZGdldCgpKS5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiB9CiAKLWJv
b2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCitib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0
Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50LCBFbGVtZW50Kiogc3Rv
cEVsZW1lbnQpCiB7CiAgICAgLy8gUGx1Z2lucyBkb24ndCBleHBvc2UgYSB3cml0aW5nIGRpcmVj
dGlvbiwgc28gYXNzdW1pbmcgaG9yaXpvbnRhbCBMVFIuCi0gICAgcmV0dXJuIHNjcm9sbChsb2dp
Y2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHRydWUsIGZhbHNlKSwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIHN0b3BFbGVtZW50KTsKKyAgICByZXR1cm4gc2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgdHJ1ZSwgZmFsc2UpLCBncmFudWxhcml0eSwgc3RlcENvdW50LCBzdG9wRWxl
bWVudCk7CiB9CiAKIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKaW5kZXggZWI2YmQ0MzYy
MWRiMmUwNmMxY2FkYWFkNzM2Y2NiZTM2Yjg5NGFiNi4uZjFmZDlmZjA1ZGRhOTU3YzY0NjRkMTQ3
MDdjOTQyMWJhODM4NWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmgKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIGZpbmFsOwogCi0gICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9
IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51bGxwdHIsIFJlbmRlckJveCogc3RhcnRCb3gg
PSBudWxscHRyLCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQgPSBJbnRQ
b2ludCgpKSBmaW5hbDsKLSAgICBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9w
RWxlbWVudCkgZmluYWw7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50ID0gMSwgRWxlbWVudCoqIHN0b3BFbGVtZW50
ID0gbnVsbHB0ciwgUmVuZGVyQm94KiBzdGFydEJveCA9IG51bGxwdHIsIGNvbnN0IEludFBvaW50
JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCA9IEludFBvaW50KCkpIGZpbmFsOworICAgIGJvb2wg
bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwg
dW5zaWduZWQgc3RlcENvdW50LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpIGZpbmFsOwogCiAgICAg
dm9pZCBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3NlZChib29sKTsKICAgICBi
b29sIGlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAKaW5kZXggMWRkMmM3YzQ5NjI0Y2VmYzBhNjM1NTY0YzY3ZTE5YWFjNmJj
NjA3Ny4uNjFiMDhjYTBmMjYwZTU4ODg3YzFlNWY4MTY1OTkzOTViZjI3MDlmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcApAQCAtMTQ3Nyw5ICsxNDc3LDkgQEAgYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGMKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIHVuc2lnbmVkIHN0ZXBDb3VudCkKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzdGVwQ291bnQpOwog
fQogCiBib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oCmluZGV4IDhkNDUxODc4MjYxYTYwNTEzMmRkYzMwNTRlZDZhOWQwMjViYzNlNTMuLjYzNjcy
OTlkMWNmMTQwNjkwMzA1ZGZkYmFmNmU2NmQ0NzVhZWY2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtMTI3LDcg
KzEyNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgp
OwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyU3RlcHMoKTsKIAotICAgIGJvb2wgc2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsK
KyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNp
Z25lZCBzdGVwQ291bnQgPSAxKTsKIAogcHVibGljOgogICAgIC8vIEFsbCBtZXRob2RzIGluIHRo
aXMgc2VjdGlvbiBvdmVycmlkZSBTY3JvbGxhYmxlYUFyZWEgbWV0aG9kcyAoZmluYWwpLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IGY0YTNlM2EwM2Nm
MmM5ZTY4NTcxY2JkOTkzOWM1MGMwNWQ5MmM2NGUuLjljMDdjODA5YjkwMTM5NDAyOTY1MjM3MjZh
ZDdmMzQ4MDJhNzUyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTYxNSwxNCArNjE1LDE0IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bGlzdEluZGV4
SXNWaXNpYmxlKGludCBpbmRleCkKICAgICByZXR1cm4gaW5kZXggPj0gZmlyc3RJbmRleCAmJiBp
bmRleCA8IGVuZEluZGV4OwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciwgRWxlbWVudCoqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRQb2ludCYpCitib29s
IFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50LCBFbGVtZW50KiosIFJl
bmRlckJveCosIGNvbnN0IEludFBvaW50JikKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzdGVwQ291bnQp
OwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyLCBFbGVtZW50KiopCitib29sIFJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3JvbGwo
U2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQsIEVsZW1lbnQqKikKIHsKLSAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVybiBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
LCBncmFudWxhcml0eSwgc3RlcENvdW50KTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1
ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgKaW5kZXggNWI2NzBlMmIxOWM4ZDlhYjk1MmQxNGY5OThhNTYxZmM1Y2ViMzYx
OS4uZTA0NGIxZTdjNDM0NDkyYzUyYjE3YzY0OTFjNTU2NzM1YzNiMmU0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
IAogICAgIGludCBzaXplKCkgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgRWxlbWVudCoqIHN0
b3BFbGVtZW50ID0gbnVsbHB0ciwgUmVuZGVyQm94KiBzdGFydEJveCA9IG51bGxwdHIsIGNvbnN0
IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCA9IEludFBvaW50KCkpIG92ZXJyaWRl
OworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIHVu
c2lnbmVkIHN0ZXBDb3VudCA9IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51bGxwdHIsIFJl
bmRlckJveCogc3RhcnRCb3ggPSBudWxscHRyLCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFi
c29sdXRlUG9pbnQgPSBJbnRQb2ludCgpKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2Nyb2xsZWRU
b1RvcCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgc2Nyb2xsZWRUb0JvdHRvbSgpIGNvbnN0IGZp
bmFsOwpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1BvaW50SW5PdmVy
Zmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbklu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIG92ZXJyaWRl
OwogCi0gICAgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgRWxlbWVudCoqIHN0b3BFbGVtZW50
ID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQgPSAxLCBF
bGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyKSBvdmVycmlkZTsKIAogICAgIHZvaWQgY29t
cHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBM
YXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5k
ZXggMjk3ZWI2ZWU2YzA3NzRiMzA5YTEyMTg5NDExODllMzBjYjJjZWM2ZS4uYTRmNzE5YzUxODFi
ZWVjMmE0YjcyYmIxOTVjZmI0NmYyMTE1OWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM5Niwy
NCArMzk2LDI0IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxU
b3AoaW50IG5ld1RvcCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DCiAgICAgICAgIGlubmVyVGV4dEVs
ZW1lbnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNv
bHV0ZVBvaW50KQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgdW5z
aWduZWQgc3RlcENvdW50LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRC
b3gsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCkKIHsKICAgICBhdXRv
KiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEg
PSByZW5kZXJlci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cjsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEgJiYgc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEgJiYgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBzdGVwQ291bnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxv
Y2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVs
ZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CisgICAgcmV0dXJuIFJl
bmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXBDb3VudCwg
c3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQorYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQs
IEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKICAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKICAgICBhdXRvKiBzY3JvbGxhYmxlQXJlYSA9
IGxheWVyID8gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgIGlmIChzY3Jv
bGxhYmxlQXJlYSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRp
cmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAg
aWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3JvbGwobG9naWNhbFRvUGh5
c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBzdGVwQ291bnQp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dp
Y2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50
KTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXBDb3VudCwgc3RvcEVsZW1lbnQpOwogfQogCiBIVE1MSW5wdXRFbGVt
ZW50JiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgKaW5kZXggNDkxZGFhNmI3ZmU1Y2ZmNDIwMGRiZGQ0NDQwYjkzZWMwNzc3OTRlYy4u
OTAyZTIyMzdkZDdlY2U3MDMzNzU0ODJjMGU2MDY1ZjFiY2FlNDIxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApA
QCAtNTksOCArNTksOCBAQCBwcml2YXRlOgogICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIHNldFNjcm9sbExlZnQoaW50LCBjb25zdCBTY3JvbGxQb3NpdGlv
bkNoYW5nZU9wdGlvbnMmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNjcm9sbFRvcChpbnQsIGNv
bnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIGJvb2wgc2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIg
PSAxLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyLCBSZW5kZXJCb3gqIHN0YXJ0Qm94
ID0gbnVsbHB0ciwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50ID0gSW50
UG9pbnQoKSkgZmluYWw7Ci0gICAgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgRWxlbWVudCoq
IHN0b3BFbGVtZW50ID0gMCkgZmluYWw7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50ID0gMSwgRWxlbWVudCoqIHN0
b3BFbGVtZW50ID0gbnVsbHB0ciwgUmVuZGVyQm94KiBzdGFydEJveCA9IG51bGxwdHIsIGNvbnN0
IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCA9IEludFBvaW50KCkpIGZpbmFsOwor
ICAgIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50ID0gMSwgRWxlbWVudCoqIHN0b3BFbGVtZW50ID0g
bnVsbHB0cikgZmluYWw7CiAKICAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKICAgICBm
bG9hdCBnZXRBdmVyYWdlQ2hhcldpZHRoKCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444915</attachid>
            <date>2021-11-20 21:53:24 -0800</date>
            <delta_ts>2021-11-21 10:33:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233403-20211120215323.patch</filename>
            <type>text/plain</type>
            <size>39704</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM5M2E1ZWFjNDI4OTAz
NzMzNWNkNzE5YmI2MTQ4YzYzOGM5ODE0YS4uYTJkNDFiMmJlOTJjMzViYjUyODEyZTkzMmI4ZDM4
MGFiMDE2YzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIxLTExLTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIENsYXJpZnkgdGhl
IGJlaGF2aW9yIG9mIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNDAzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCgpIHdh
cyBoYXJkIHRvIHJlYXNvbiBhYm91dC4gSXQgdXNlZCBTY3JvbGxiYXJPcmllbnRhdGlvbiBidXQg
ZGlkbid0CisgICAgICAgIGRvIGFueXRoaW5nIHdpdGggc2Nyb2xsYmFycy4gSXQgdG9vayBTY3Jv
bGxHcmFudWxhcml0eSwgInN0ZXAiIGFuZCAibXVsdGlwbGllciIgYW5kIGl0CisgICAgICAgIHdh
c24ndCBjbGVhciB3aGV0aGVyIHN0ZXAgaGFkIGFscmVhZHkgYWNjb3VudGVkIGZvciBTY3JvbGxH
cmFudWxhcml0eSwgYW5kIHdoZXRoZXIKKyAgICAgICAgbXVsdGlwbGllciB3YXMgYW55dGhpbmcg
b3RoZXIgdGhhbiAxIG9yIC0xLiBPbmUgb2YgdGhlIGJlaGF2aW9ycyB3YXMgRG9EaXJlY3Rpb25h
bFNuYXBwaW5nCisgICAgICAgIGJ1dCBpdCB3YXNuJ3QgY2xlYXIgaWYgdGhlICJkaXJlY3Rpb25h
bCIgb3IgInNuYXBwaW5nIiBwYXJ0IG9mIHRoYXQgd2FzIGltcG9ydGFudC4gSXQgYWxzbworICAg
ICAgICBjYWxsZWQgaXRzZWxmLgorCisgICAgICAgIEJyaW5nIGNsYXJpdHkgYnkgdXNpbmcgJ3Vu
c2lnbmVkIHN0ZXBDb3VudCcgaW4gYWxsIHRoZSBjYWxsZXJzLCB1c2luZyBTY3JvbGxFdmVudEF4
aXMKKyAgICAgICAgaW5zdGVhZCBvZiBTY3JvbGxiYXJPcmllbnRhdGlvbiwgYW5kIGhhdmluZyBh
IHNpbmdsZSAiZGVsdGEiIGFyZ3VtZW50LiBJdCBubyBsb25nZXIKKyAgICAgICAgY2FsbHMgaXRz
ZWxmLCBpbnN0ZWFkIGp1c3QgY29udGludWluZyBmcm9tIHRoZSBzbmFwcGluZyBicmFuY2guCisg
ICAgICAgIAorICAgICAgICBBZGQgc29tZSBoZWxwZXJzIHRoYXQgZWFzZSBpbnRlcmFjdGlvbnMg
d2l0aCBGbG9hdFBvaW50L0Zsb2F0U2l6ZSBhbmQgU2Nyb2xsRXZlbnRBeGlzLgorCisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2Nyb2xsQnlV
bml0cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JG
aXhlZENvbnRlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6ZGVsdGFGcm9t
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZTo6YWRqdXN0ZWRTY3JvbGxEZXN0aW5hdGlvbiBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmF4aXNG
cm9tRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yQXhpcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRWYWx1ZUZvckF4aXMpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjphZGp1c3RTY3Jv
bGxTdGVwRm9yRml4ZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpzY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojpsb2dpY2FsU2Nyb2xs
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKwogMjAyMS0xMS0yMCAgQWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0lGQ11bSW50ZWdyYXRpb25dIEluaXRp
YWxpemUgbGF5b3V0IGJveCBnZW9tZXRyaWVzIGZvciBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA1ZDdiMWJlMjYxNjQwY2YxNDEwZWNhM2VjOTE3
M2E0MDg5YWZkMThkLi5kNzgzMGNjZmQ2OGNjOTc3M2M3YzQ3YzFmOWEyNjBiMjhlMWY4Y2Q3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMTE4LDEyICsxMTE4LDExIEBAIHZvaWQgRWxlbWVu
dDo6c2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMsIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uID0gU2Ny
b2xsRG93bjsKLSAgICBpZiAodW5pdHMgPCAwKSB7CisgICAgaWYgKHVuaXRzIDwgMCkKICAgICAg
ICAgZGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAgIHVuaXRzID0gLXVuaXRzOwotICAgIH0K
LSAgICBFbGVtZW50KiBzdG9wRWxlbWVudCA9IHRoaXM7Ci0gICAgZG93bmNhc3Q8UmVuZGVyQm94
PigqcmVuZGVyZXIpLnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB1bml0cywgJnN0b3BF
bGVtZW50KTsKKworICAgIGF1dG8qIHN0b3BFbGVtZW50ID0gdGhpczsKKyAgICBkb3duY2FzdDxS
ZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZDo6
YWJzKHVuaXRzKSwgJnN0b3BFbGVtZW50KTsKIH0KIAogdm9pZCBFbGVtZW50OjpzY3JvbGxCeUxp
bmVzKGludCBsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDA0Y2U2NWRlNmU4NzJjZjA5M2Qy
Y2NhZjBkZjE4YWI5NmU3YTRlODIuLmIwOTY3YWI1ZWIyODU3ZTM3MjU1Yzc0YTQ2YjdkMTZjY2Ji
MDZjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMTc1LDYgKzE3NSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsVG9PcHRpb25zJiwgU2Nyb2xsQ2xh
bXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9u
TWV0aG9kID0gU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KTsKICAgICB2
b2lkIHNjcm9sbFRvKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAKKyAgICAvLyBUaGVzZSBhcmUgb25s
eSB1c2VkIGJ5IFdlYktpdExlZ2FjeSBET00gQVBJLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Nyb2xsQnlMaW5lcyhpbnQgbGluZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xs
QnlQYWdlcyhpbnQgcGFnZXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggZThhYjE4NjdkNGQyZDM3MGFmMjMwZjFhZGM1NDI1YTRmMGI3ZjMzMy4uZWMzZTQyMGU3OWJi
MWI1ZGNmNzAxMzU1ZDFhY2U2OWJmODg2NDE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtNDMwMCwxMSArNDMwMCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0
QmFja3NwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQmIGV2ZW50KQogCiBmbG9hdCBFdmVu
dEhhbmRsZXI6OnNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZdIHsK
LSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8IGRp
cmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd24pCi0gICAgICAgICAgICByZXR1
cm4gbV9mcmFtZS52aWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIHJldHVybiBt
X2ZyYW1lLnZpZXcoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0oKTsKKyAgICBhdXRv
IHNjcm9sbGJhciA9IG1fZnJhbWUudmlldygpLT5zY3JvbGxiYXJGb3JEaXJlY3Rpb24oZGlyZWN0
aW9uKTsKIAogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFNjcm9sbEdyYW51
bGFyaXR5OjpMaW5lOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGViYjc4NzlmZDk1
NzcwYTRkYjIyYjE4MzcyMDM0YTMzNDVhMjRmMzUuLjAyM2ZlMmVjYjc5ZjIyNjg3NzE4OTllYWIz
NWQ4M2E5ZDkxODVkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTM4MzQsOSAr
MzgzNCw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjCiAgICAgc2V0Q3VycmVudFNjcm9sbFR5
cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKIH0KIAotZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3Jv
bGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Zsb2F0IEZyYW1lVmll
dzo6YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxFdmVu
dEF4aXMgYXhpcywgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgaWYgKGdy
YW51bGFyaXR5ICE9IFNjcm9sbEdyYW51bGFyaXR5OjpQYWdlIHx8IG9yaWVudGF0aW9uID09IFNj
cm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsKQorICAgIGlmIChncmFudWxhcml0eSAhPSBT
Y3JvbGxHcmFudWxhcml0eTo6UGFnZSB8fCBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCkKICAgICAgICAgcmV0dXJuIHN0ZXA7CiAKICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFz
aFNldCogcG9zaXRpb25lZE9iamVjdHMgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
aW5kZXggMzA0ODBlZWM5ZjM5NzE3MGU3OTI0MTk2YmMzNjQ1NGJmNjE0MTI0My4uMzZiM2UxNzEw
NDM0ODcwYTFlNmJjNWUxZDNjNjZjMzQxOWIyMmU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CkBAIC02NjEsNyArNjYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3JT
Y3JvbGxTbmFwUHJvcGVydGllcygpIGNvbnN0OwogCi0gICAgZmxvYXQgYWRqdXN0U2Nyb2xsU3Rl
cEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkpIGZpbmFsOworICAgIGZsb2F0IGFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENv
bnRlbnQoZmxvYXQgc3RlcCwgU2Nyb2xsRXZlbnRBeGlzLCBTY3JvbGxHcmFudWxhcml0eSkgZmlu
YWw7CiAKICAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCmluZGV4
IGU1YWQyZmRjMTRkNGE2NWNlZGVjNjk0ODM5ZDMyMjA4ZDY5NjVkNzEuLmZkODA0YTJlNDZiY2Fk
YmZlZGNjMjgzOGY1YzNkZTYxOGU2MWIzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCkBAIC0xNDcsMTIgKzE0Nyw3
IEBAIHZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQ
b3NpdGlvbihNb25vdG9uaWNUaW1lIGN1cnJlCiAKIGZsb2F0IEtleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3I6OnNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KSBjb25zdAogewotICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZd
IHsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8
IGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd24pCi0gICAgICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFy
KCk7Ci0gICAgICAgIHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkuaG9y
aXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0oKTsKLQorICAgIGF1dG8gc2Nyb2xsYmFyID0gbV9z
Y3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhckZvckRpcmVjdGlvbihkaXJl
Y3Rpb24pOwogICAgIGlmIChzY3JvbGxiYXIpIHsKICAgICAgICAgc3dpdGNoIChncmFudWxhcml0
eSkgewogICAgICAgICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5OjpMaW5lOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDA1MGM2NmY4Y2I4NTdlMDdlZDZk
ZDZlYzZkYTZmYWU1YjU2MmQ2NjAuLmNjNmEzMWYwN2I5YTE1ZmIyYTJmZTliZmIxZWQ4ZTBiMDhh
YjNjNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAg
LTYzLDI4ICs2MywyMyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKCkKICAgICBt
X3Njcm9sbENvbnRyb2xsZXIuc3RvcEFsbFRpbWVycygpOwogfQogCi1ib29sIFNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25T
ZXQ8U2Nyb2xsQmVoYXZpb3I+IGJlaGF2aW9yKQorYm9vbCBTY3JvbGxBbmltYXRvcjo6c2luZ2xl
QXhpc1Njcm9sbChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVsdGEsIE9wdGlv
blNldDxTY3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IpCiB7CiAgICAgbV9zY3JvbGxhYmxlQXJlYS5z
Y3JvbGxiYXJzQ29udHJvbGxlcigpLnNldFNjcm9sbGJhckFuaW1hdGlvbnNVbnN1c3BlbmRlZEJ5
VXNlckludGVyYWN0aW9uKHRydWUpOwogCi0gICAgYXV0byBkZWx0YSA9IGRlbHRhRnJvbVN0ZXAo
b3JpZW50YXRpb24sIHN0ZXAsIG11bHRpcGxpZXIpOwotICAgIGlmIChiZWhhdmlvci5jb250YWlu
cyhTY3JvbGxCZWhhdmlvcjo6RG9EaXJlY3Rpb25hbFNuYXBwaW5nKSkgewotICAgICAgICBiZWhh
dmlvci5yZW1vdmUoU2Nyb2xsQmVoYXZpb3I6OkRvRGlyZWN0aW9uYWxTbmFwcGluZyk7Ci0gICAg
ICAgIGlmICghbV9zY3JvbGxDb250cm9sbGVyLnVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHks
IHN0ZXAsIG11bHRpcGxpZXIsIGJlaGF2aW9yKTsKLQotICAgICAgICBhdXRvIGN1cnJlbnRPZmZz
ZXQgPSBvZmZzZXRGcm9tUG9zaXRpb24oY3VycmVudFBvc2l0aW9uKCkpOwotICAgICAgICBhdXRv
IG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgKyBkZWx0YTsKLSAgICAgICAgaWYgKG9yaWVudGF0
aW9uID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsKQotICAgICAgICAgICAgbmV3
T2Zmc2V0LnNldFgobV9zY3JvbGxDb250cm9sbGVyLmFkanVzdGVkU2Nyb2xsRGVzdGluYXRpb24o
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQsIG11bHRpcGxpZXIsIGN1cnJl
bnRPZmZzZXQueCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRZ
KG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3RlZFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIG5ld09mZnNldCwgbXVsdGlwbGllciwgY3VycmVudE9mZnNldC55KCkp
KTsKLQotICAgICAgICBhdXRvIG5ld0RlbHRhID0gbmV3T2Zmc2V0IC0gY3VycmVudE9mZnNldDsK
LSAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCwgZ3JhbnVsYXJpdHksIG5ld0RlbHRhLndpZHRoKCksIDEuMCwgYmVoYXZpb3IpOwot
Ci0gICAgICAgIHJldHVybiBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb246OlZlcnRpY2FsLCBn
cmFudWxhcml0eSwgbmV3RGVsdGEuaGVpZ2h0KCksIDEuMCwgYmVoYXZpb3IpOworICAgIEZsb2F0
U2l6ZSBkZWx0YTsKKyAgICBzZXRWYWx1ZUZvckF4aXMoZGVsdGEsIGF4aXMsIHNjcm9sbERlbHRh
KTsKKworICAgIGlmIChiZWhhdmlvci5jb250YWlucyhTY3JvbGxCZWhhdmlvcjo6UmVzcGVjdFNj
cm9sbFNuYXApKSB7CisgICAgICAgIGJlaGF2aW9yLnJlbW92ZShTY3JvbGxCZWhhdmlvcjo6UmVz
cGVjdFNjcm9sbFNuYXApOworICAgICAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLnVzZXNTY3Jv
bGxTbmFwKCkpIHsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudE9mZnNldCA9IG9mZnNldEZyb21Q
b3NpdGlvbihjdXJyZW50UG9zaXRpb24oKSk7CisgICAgICAgICAgICBhdXRvIG5ld09mZnNldCA9
IGN1cnJlbnRPZmZzZXQgKyBkZWx0YTsKKyAgICAgICAgICAgIGF1dG8gdmVsb2NpdHkgPSBjb3B5
c2lnbmYoMS4wZiwgc2Nyb2xsRGVsdGEpOworICAgICAgICAgICAgYXV0byBuZXdPZmZzZXRPbkF4
aXMgPSBtX3Njcm9sbENvbnRyb2xsZXIuYWRqdXN0ZWRTY3JvbGxEZXN0aW5hdGlvbihheGlzLCBu
ZXdPZmZzZXQsIHZlbG9jaXR5LCB2YWx1ZUZvckF4aXMoY3VycmVudE9mZnNldCwgYXhpcykpOwor
ICAgICAgICAgICAgc2V0VmFsdWVGb3JBeGlzKG5ld09mZnNldCwgYXhpcywgbmV3T2Zmc2V0T25B
eGlzKTsKKyAgICAgICAgICAgIGRlbHRhID0gbmV3T2Zmc2V0IC0gY3VycmVudE9mZnNldDsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9y
RW5hYmxlZCgpICYmIHBsYXRmb3JtQWxsb3dzU2Nyb2xsQW5pbWF0aW9uKCkgJiYgIWJlaGF2aW9y
LmNvbnRhaW5zKFNjcm9sbEJlaGF2aW9yOjpOZXZlckFuaW1hdGUpKSB7CkBAIC0xNDEsMTYgKzEz
Niw2IEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OnBvc2l0aW9uRnJvbU9mZnNldChjb25z
dCBGbG9hdFBvaW50JiBvZmZzZXQpIGNvbnN0CiAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbE9yaWdpbigpKSk7CiB9CiAKLUZsb2F0U2l6ZSBTY3JvbGxBbmltYXRvcjo6ZGVs
dGFGcm9tU3RlcChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcikKLXsKLSAgICBGbG9hdFNpemUgZGVsdGE7Ci0gICAgaWYgKG9yaWVu
dGF0aW9uID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsKQotICAgICAgICBkZWx0
YS5zZXRXaWR0aChzdGVwICogbXVsdGlwbGllcik7Ci0gICAgZWxzZQotICAgICAgICBkZWx0YS5z
ZXRIZWlnaHQoc3RlcCAqIG11bHRpcGxpZXIpOwotICAgIHJldHVybiBkZWx0YTsKLX0KLQogYm9v
bCBTY3JvbGxBbmltYXRvcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleERp
ZENoYW5nZSgpOwpAQCAtMjA2LDI4ICsxOTEsMjQgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgICAgIHx8IChk
ZWx0YVkgPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSkgewogICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKIAotICAgICAgICBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+
IGJlaGF2aW9yKFNjcm9sbEJlaGF2aW9yOjpEb0RpcmVjdGlvbmFsU25hcHBpbmcpOworICAgICAg
ICBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+IGJlaGF2aW9yID0geyBTY3JvbGxCZWhhdmlvcjo6
UmVzcGVjdFNjcm9sbFNuYXAgfTsKICAgICAgICAgaWYgKGUuaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcygpKQogICAgICAgICAgICAgYmVoYXZpb3IuYWRkKFNjcm9sbEJlaGF2aW9yOjpOZXZlckFu
aW1hdGUpOwogCiAgICAgICAgIGlmIChkZWx0YVkpIHsKLSAgICAgICAgICAgIGlmIChlLmdyYW51
bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewotICAgICAgICAgICAgICAgIGJv
b2wgbmVnYXRpdmUgPSBkZWx0YVkgPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWSA9IFNjcm9s
bGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLnZpc2libGVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
PSAtZGVsdGFZOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uOjpWZXJ0aWNhbCwgU2Nyb2xsR3JhbnVsYXJpdHk6OlBpeGVsLCB2ZXJ0aWNhbFNj
cm9sbGJhci0+cGl4ZWxTdGVwKCksIC1kZWx0YVksIGJlaGF2aW9yKTsKKyAgICAgICAgICAgIGlm
IChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkKKyAgICAgICAgICAg
ICAgICBkZWx0YVkgPSBzdGQ6OmNvcHlzaWduKFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Nj
cm9sbGFibGVBcmVhLnZpc2libGVIZWlnaHQoKSksIGRlbHRhWSk7CisKKyAgICAgICAgICAgIGF1
dG8gc2Nyb2xsRGVsdGEgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCkgKiAtZGVsdGFZ
OyAvLyBXaGVlbCBkZWx0YXMgYXJlIHJldmVyc2VkIGZyb20gc2Nyb2xsaW5nIGRpcmVjdGlvbi4K
KyAgICAgICAgICAgIHNpbmdsZUF4aXNTY3JvbGwoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwg
c2Nyb2xsRGVsdGEsIGJlaGF2aW9yKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkZWx0YVgp
IHsKLSAgICAgICAgICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxF
dmVudCkgewotICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFi
bGVBcmVhLnZpc2libGVXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCi0g
ICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IC1kZWx0YVg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWwsIFNjcm9sbEdy
YW51bGFyaXR5OjpQaXhlbCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCksIC1kZWx0
YVgsIGJlaGF2aW9yKTsKKyAgICAgICAgICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xs
QnlQYWdlV2hlZWxFdmVudCkKKyAgICAgICAgICAgICAgICBkZWx0YVggPSBzdGQ6OmNvcHlzaWdu
KFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLnZpc2libGVXaWR0aCgp
KSwgZGVsdGFYKTsKKworICAgICAgICAgICAgYXV0byBzY3JvbGxEZWx0YSA9IGhvcml6b250YWxT
Y3JvbGxiYXItPnBpeGVsU3RlcCgpICogLWRlbHRhWDsgLy8gV2hlZWwgZGVsdGFzIGFyZSByZXZl
cnNlZCBmcm9tIHNjcm9sbGluZyBkaXJlY3Rpb24uCisgICAgICAgICAgICBzaW5nbGVBeGlzU2Ny
b2xsKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Nyb2xsRGVsdGEsIGJlaGF2aW9yKTsK
ICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gaGFuZGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDRlYTU4NGFiN2U2YWY1YzU3NWM5ZDg3MDRjN2Iz
MTBjYTU5YTU2NWIuLjIyNzQ3NTdkOTNiNTdhZWM5YzMyZGY3ZDJkMDJhM2VmZDAxMzRjNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtNjYsMTUgKzY2LDE1
IEBAIHB1YmxpYzoKICAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9rZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmdldCgpOyB9CiAKICAgICBlbnVtIFNjcm9sbEJlaGF2aW9yIHsKLSAgICAgICAgRG9E
aXJlY3Rpb25hbFNuYXBwaW5nID0gMSA8PCAwLAotICAgICAgICBOZXZlckFuaW1hdGUgPSAxIDw8
IDEsCisgICAgICAgIFJlc3BlY3RTY3JvbGxTbmFwICAgPSAxIDw8IDAsCisgICAgICAgIE5ldmVy
QW5pbWF0ZSAgICAgICAgPSAxIDw8IDEsCiAgICAgfTsKIAogICAgIC8vIENvbXB1dGVzIGEgc2Ny
b2xsIGRlc3RpbmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIFJldHVybnMgZmFsc2Ug
aWYKLSAgICAvLyBhbHJlYWR5IGF0IHRoZSBkZXN0aW5hdGlvbi4gIE90aGVyd2lzZSwgc3RhcnRz
IHNjcm9sbGluZyB0b3dhcmRzIHRoZQotICAgIC8vIGRlc3RpbmF0aW9uIGFuZCByZXR1cm5zIHRy
dWUuICBTY3JvbGxpbmcgbWF5IGJlIGltbWVkaWF0ZSBvciBhbmltYXRlZC4KKyAgICAvLyBhbHJl
YWR5IGF0IHRoZSBkZXN0aW5hdGlvbi4gT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRvd2Fy
ZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gU2Nyb2xsaW5nIG1h
eSBiZSBpbW1lZGlhdGUgb3IgYW5pbWF0ZWQuCiAgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVt
ZW50YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgotICAg
IGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgT3B0aW9uU2V0PFNjcm9sbEJlaGF2aW9yPik7Cisg
ICAgYm9vbCBzaW5nbGVBeGlzU2Nyb2xsKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEsIE9w
dGlvblNldDxTY3JvbGxCZWhhdmlvcj4pOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbFRvUG9z
aXRpb25XaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKICAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRo
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKQEAgLTE3MSw4ICsxNzEsNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgc2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogI2VuZGlm
CiAKLSAgICBzdGF0aWMgRmxvYXRTaXplIGRlbHRhRnJvbVN0ZXAoU2Nyb2xsYmFyT3JpZW50YXRp
b24sIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotCiBwcm90ZWN0ZWQ6CiAgICAgU2Ny
b2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgUmVmUHRyPFdoZWVsRXZlbnRUZXN0
TW9uaXRvcj4gbV93aGVlbEV2ZW50VGVzdE1vbml0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKaW5kZXggNWRmZDcxMWJkMGI0
ZGVkYjMwZjg4YWViNDU2ZDhkZTEyMmM3M2I0My4uMjdiYWYxMzEyOGEwMGQxYmE0YzEwMGZmZTVh
ZjVmYjc1ODAwZTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFNuYXBBbmltYXRvclN0YXRlLmNwcApAQCAtODMsNyArODMsNyBAQCBmbG9hdCBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZTo6YWRqdXN0ZWRTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMg
YXhpcywgRgogewogICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0c0ZvckF4aXMoYXhp
cyk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBheGlzID09
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRl
c3RpbmF0aW9uT2Zmc2V0LnkoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlRm9yQXhpcyhkZXN0aW5h
dGlvbk9mZnNldCwgYXhpcyk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdp
bmFsT2Zmc2V0SW5MYXlvdXRVbml0czsKICAgICBpZiAob3JpZ2luYWxPZmZzZXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAppbmRleCBmOGYzOTJiZTBkZDIxNjJmYTU1YWY1Njcy
ZDE3YjM4ODhiMTk2NjcyLi5jMTU1ODdhNzg3NmU3NzQ5YjYwMjcwZDA0ZWU2NjAyY2FiMDM0MWVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKQEAgLTI1LDYgKzI1LDggQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxv
YXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC0xNjksNiArMTcxLDUxIEBAIGVudW0gY2xhc3MgU2Nyb2xsRXZlbnRBeGlzIDogdWludDhf
dCB7CiAgICAgVmVydGljYWwKIH07CiAKK2lubGluZSBTY3JvbGxFdmVudEF4aXMgYXhpc0Zyb21E
aXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVj
dGlvbikgeworICAgIGNhc2UgU2Nyb2xsVXA6IHJldHVybiBTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsOworICAgIGNhc2UgU2Nyb2xsRG93bjogcmV0dXJuIFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWw7CisgICAgY2FzZSBTY3JvbGxMZWZ0OiByZXR1cm4gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsOworICAgIGNhc2UgU2Nyb2xsUmlnaHQ6IHJldHVybiBTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWw7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOworfQor
CitpbmxpbmUgZmxvYXQgdmFsdWVGb3JBeGlzKEZsb2F0U2l6ZSBzaXplLCBTY3JvbGxFdmVudEF4
aXMgYXhpcykKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbDogcmV0dXJuIHNpemUud2lkdGgoKTsKKyAgICBjYXNlIFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWw6IHJldHVybiBzaXplLmhlaWdodCgpOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworaW5saW5lIHZvaWQgc2V0VmFsdWVGb3JBeGlzKEZsb2F0U2l6ZSYgc2l6ZSwgU2Ny
b2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IHZhbHVlKQoreworICAgIHN3aXRjaCAoYXhpcykgewor
ICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOiByZXR1cm4gc2l6ZS5zZXRXaWR0
aCh2YWx1ZSk7CisgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOiByZXR1cm4gc2l6
ZS5zZXRIZWlnaHQodmFsdWUpOworICAgIH0KK30KKworaW5saW5lIGZsb2F0IHZhbHVlRm9yQXhp
cyhGbG9hdFBvaW50IHBvaW50LCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBzd2l0Y2gg
KGF4aXMpIHsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDogcmV0dXJuIHBv
aW50LngoKTsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6IHJldHVybiBwb2lu
dC55KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZUZv
ckF4aXMoRmxvYXRQb2ludCYgcG9pbnQsIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbDogcmV0dXJuIHBvaW50LnNldFgodmFsdWUpOworICAgIGNhc2UgU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbDogcmV0dXJuIHBvaW50LnNldFkodmFsdWUpOworICAgIH0KK30KKwogZW51
bSBTY3JvbGxiYXJDb250cm9sU3RhdGVNYXNrIHsKICAgICBBY3RpdmVTY3JvbGxiYXJTdGF0ZSA9
IDEsCiAgICAgRW5hYmxlZFNjcm9sbGJhclN0YXRlID0gMSA8PCAxLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDhmMjBjZWM4NTQxM2JlYWRjYjQ3Yjdl
MjE4MDM5ZDdlMjQ2ODhlODcuLjBmMGE4Y2JmYTBjMDZhYWUyZjA0YzUyOTE4MDdmOWExOWI5MDBj
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTkx
LDIzICs5MSwxNCBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3Qg
SW50UG9pbnQmIG9yaWdpbikKICAgICB9CiB9CiAKLWZsb2F0IFNjcm9sbGFibGVBcmVhOjphZGp1
c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSkKK2Zsb2F0IFNjcm9sbGFibGVBcmVhOjphZGp1c3RTY3Jv
bGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xs
R3JhbnVsYXJpdHkpCiB7CiAgICAgcmV0dXJuIHN0ZXA7CiB9CiAKLWJvb2wgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgdW5zaWduZWQgc3RlcENvdW50KQogewotICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyOwotICAgIGlmIChkaXJlY3Rpb24gPT0g
U2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKLSAgICAgICAgb3JpZW50YXRp
b24gPSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0gICAgICAgIHNjcm9sbGJhciA9
IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3JpZW50YXRpb24g
PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKLSAgICAgICAgc2Nyb2xsYmFyID0g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0KLQorICAgIGF1dG8qIHNjcm9sbGJhciA9IHNj
cm9sbGJhckZvckRpcmVjdGlvbihkaXJlY3Rpb24pOwogICAgIGlmICghc2Nyb2xsYmFyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEyNywxMSArMTE4LDE0IEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGF1dG8gYXhpcyA9IGF4aXNG
cm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7CisgICAgc3RlcCA9IGFkanVzdFNjcm9sbFN0ZXBGb3JG
aXhlZENvbnRlbnQoc3RlcCwgYXhpcywgZ3JhbnVsYXJpdHkpOworICAgIGF1dG8gc2Nyb2xsRGVs
dGEgPSBzdGVwICogc3RlcENvdW50OworICAgIAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xs
VXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCi0gICAgICAgIG11bHRpcGxpZXIgPSAtbXVs
dGlwbGllcjsKKyAgICAgICAgc2Nyb2xsRGVsdGEgPSAtc2Nyb2xsRGVsdGE7CiAKLSAgICBzdGVw
ID0gYWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChzdGVwLCBvcmllbnRhdGlvbiwgZ3Jh
bnVsYXJpdHkpOwotICAgIHJldHVybiBzY3JvbGxBbmltYXRvcigpLnNjcm9sbChvcmllbnRhdGlv
biwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIsIFNjcm9sbEFuaW1hdG9yOjpTY3JvbGxC
ZWhhdmlvcjo6RG9EaXJlY3Rpb25hbFNuYXBwaW5nKTsKKyAgICByZXR1cm4gc2Nyb2xsQW5pbWF0
b3IoKS5zaW5nbGVBeGlzU2Nyb2xsKGF4aXMsIHNjcm9sbERlbHRhLCBTY3JvbGxBbmltYXRvcjo6
U2Nyb2xsQmVoYXZpb3I6OlJlc3BlY3RTY3JvbGxTbmFwKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24sIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmgKaW5kZXggN2E3ZDMwZWNkNjAxMzFkYzFjMmY2MWI0OGVmYjY4ZWU5
YTkxZWI2Ni4uODMxMTcxNzg4YzczMDMxZDYwMjY2MDJkN2I2ZGE2NzhlZDQwMGVmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQREZQbHVnaW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIHVuc2lnbmVk
IHN0ZXBDb3VudCA9IDEpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9Qb3NpdGlv
bldpdGhBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9Qb3Np
dGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwogCkBAIC0yMTYsNiArMjE2LDE5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhckZv
ckRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTY3JvbGxVcDoKKyAgICAgICAg
Y2FzZSBTY3JvbGxEb3duOgorICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7
CisgICAgICAgIGNhc2UgU2Nyb2xsTGVmdDoKKyAgICAgICAgY2FzZSBTY3JvbGxSaWdodDoKKyAg
ICAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CiAgICAgYm9vbCBzY3JvbGxP
cmlnaW5DaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPcmlnaW5DaGFuZ2VkOyB9CiAK
QEAgLTM2NSw3ICszNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4o
Y29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHJlc2V0U2Nyb2xsT3JpZ2luQ2hhbmdlZCgpIHsg
bV9zY3JvbGxPcmlnaW5DaGFuZ2VkID0gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgZmxvYXQgYWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBz
dGVwLCBTY3JvbGxFdmVudEF4aXMsIFNjcm9sbEdyYW51bGFyaXR5KTsKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50
UmVjdCYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA2
MTU5ZDZiYWE3ZDJhYjRjMTQ0NDNmMTBmNTBjYTk2NzU5OGRlZmJlLi5kZjhlNGU4NWY1ODg5Mjhk
NWRmMDA5MzEzODA1NWZlMzk5NTI3YjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtODkzLDEwICs4OTMsMTAgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Ny
b2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBSZW5k
ZXJCb3g6OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1l
bnQpCitib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCwgRWxl
bWVudCoqIHN0b3BFbGVtZW50KQogewogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgIGlmIChzY3JvbGxh
YmxlQXJlYSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpKSB7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVh
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RlcENvdW50KSkgewogICAgICAgICBp
ZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAK
QEAgLTkwNiw5ICs5MDYsOSBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxl
bWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYg
d2hlZWxFdmVudEFic29sdXRlUG9pbnQpCitib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1bnNpZ25l
ZCBzdGVwQ291bnQsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwg
Y29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQogewotICAgIGlmIChzY3Jv
bGxMYXllcihkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCkp
CisgICAgaWYgKHNjcm9sbExheWVyKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXBDb3VudCwg
c3RvcEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChzdG9wRWxlbWVu
dCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQoKSkKQEAgLTkxNywx
MiArOTE3LDEyIEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgUmVuZGVyQmxvY2sqIG5l
eHRTY3JvbGxCbG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgaWYgKG5leHRTY3JvbGxC
bG9jayAmJiAhbmV4dFNjcm9sbEJsb2NrLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJu
IG5leHRTY3JvbGxCbG9jay0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOworICAg
ICAgICByZXR1cm4gbmV4dFNjcm9sbEJsb2NrLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc3RlcENvdW50LCBzdG9wRWxlbWVudCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxT
Y3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiti
b29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCwg
RWxlbWVudCoqIHN0b3BFbGVtZW50KQogewogICAgIGJvb2wgc2Nyb2xsZWQgPSBmYWxzZTsKICAg
ICAKQEAgLTkzMCw5ICs5MzAsOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3Jv
bGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRp
cmVjdGlvbiBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0
aW5nIEhvbWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEdyYW51bGFy
aXR5OjpEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9sbGVkID0gc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSwgU2Nyb2xsR3JhbnVsYXJpdHk6OkRvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAg
ICAgIHNjcm9sbGVkID0gc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsR3JhbnVsYXJpdHk6
OkRvY3VtZW50LCBzdGVwQ291bnQpOwogI2VuZGlmCi0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChsb2dp
Y2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBzdGVwQ291bnQp
KQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNj
cm9sbGVkKSB7CkBAIC05NDcsNyArOTQ3LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXQKIAog
ICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGIgJiYgIWIt
PmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+bG9naWNhbFNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CisgICAgICAgIHJldHVy
biBiLT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXBDb3VudCwgc3Rv
cEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCmluZGV4IDhmMDg2MzVjNTRkMzIyNDNkYTM5ODg3NjRlZTQzZWI0ZjM2Y2MyZGMu
LmUzNDI2NzhkMWM0MzYzOTg2NTc5MDg3YTVjNGU1MjAzMWQ2YjA1NDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTQ5Miw4ICs0OTIsOCBAQCBvdmVycmlkZTsKICAgICBp
bnQgaW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9s
bGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsgfQogICAgIGludCBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpIDogdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOyB9Ci0gICAgdmlydHVhbCBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSwgRWxlbWVudCoqIHN0b3BFbGVtZW50ID0gbnVsbHB0ciwgUmVuZGVyQm94KiBz
dGFydEJveCA9IG51bGxwdHIsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2lu
dCA9IEludFBvaW50KCkpOwotICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwg
RWxlbWVudCoqIHN0b3BFbGVtZW50ID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNpZ25lZCBzdGVwQ291bnQg
PSAxLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyLCBSZW5kZXJCb3gqIHN0YXJ0Qm94
ID0gbnVsbHB0ciwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50ID0gSW50
UG9pbnQoKSk7CisgICAgdmlydHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCA9IDEsIEVsZW1l
bnQqKiBzdG9wRWxlbWVudCA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYpOwpAQCAtNzQ0LDcgKzc0NCw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHVwZGF0ZUdyaWRQb3NpdGlvbkFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgYm9vbCBzY3Jv
bGxMYXllcihTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpOworICAgIGJvb2wgc2Nyb2xsTGF5ZXIoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50LCBFbGVtZW50
Kiogc3RvcEVsZW1lbnQpOwogCiAgICAgYm9vbCBmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVU
b0ZyYW1lKGNvbnN0IEZyYW1lVmlldyYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCA2MDAwZWQ0OWE0N2E5MDY0
NjAyNmRjZjZhZTlhMmIwZmZlZGZkZDM0Li5kZGJlOWE0MTZmM2Y5N2VmZjMyMzIwMmQ2MDg0MGYy
MDI3Njg3YjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAKQEAgLTM4Myw3ICszODMsNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
cwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0LCBFbGVtZW50KiosIFJlbmRlckJveCosIGNvbnN0IEludFBvaW50JikKK2Jvb2wg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQsIEVsZW1lbnQqKiwgUmVuZGVy
Qm94KiwgY29uc3QgSW50UG9pbnQmKQogewogICAgIGlmICghaXM8UGx1Z2luVmlld0Jhc2U+KHdp
ZGdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzkxLDEwICszOTEsMTAgQEAgYm9v
bCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGcKICAgICByZXR1cm4gZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+
KCp3aWRnZXQoKSkuc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogfQogCi1ib29sIFJl
bmRlckVtYmVkZGVkT2JqZWN0Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6bG9n
aWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCwgRWxlbWVudCoqIHN0b3BFbGVt
ZW50KQogewogICAgIC8vIFBsdWdpbnMgZG9uJ3QgZXhwb3NlIGEgd3JpdGluZyBkaXJlY3Rpb24s
IHNvIGFzc3VtaW5nIGhvcml6b250YWwgTFRSLgotICAgIHJldHVybiBzY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCB0cnVlLCBmYWxzZSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
LCBzdG9wRWxlbWVudCk7CisgICAgcmV0dXJuIHNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIHRydWUsIGZhbHNlKSwgZ3JhbnVsYXJpdHksIHN0ZXBDb3VudCwgc3RvcEVsZW1lbnQp
OwogfQogCiBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFibGVQbHVnaW5J
bmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCmluZGV4IGViNmJkNDM2MjFkYjJl
MDZjMWNhZGFhZDczNmNjYmUzNmI4OTRhYjYuLmYxZmQ5ZmYwNWRkYTk1N2M2NDY0ZDE0NzA3Yzk0
MjFiYTgzODVmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5oCkBAIC03OSw4ICs3OSw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKIAotICAgIGJvb2wgc2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBF
bGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyLCBSZW5kZXJCb3gqIHN0YXJ0Qm94ID0gbnVs
bHB0ciwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50ID0gSW50UG9pbnQo
KSkgZmluYWw7Ci0gICAgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1l
bnQpIGZpbmFsOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCA9IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51
bGxwdHIsIFJlbmRlckJveCogc3RhcnRCb3ggPSBudWxscHRyLCBjb25zdCBJbnRQb2ludCYgd2hl
ZWxFdmVudEFic29sdXRlUG9pbnQgPSBJbnRQb2ludCgpKSBmaW5hbDsKKyAgICBib29sIGxvZ2lj
YWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIHVuc2ln
bmVkIHN0ZXBDb3VudCwgRWxlbWVudCoqIHN0b3BFbGVtZW50KSBmaW5hbDsKIAogICAgIHZvaWQg
c2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7CiAgICAgYm9vbCBp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuY3BwCmluZGV4IDE5NTcyYzJkMGU0YTI1YTk3MzFhZDU2ZTkyMDZlMjY2MDJiODc5MTcu
LmZhMWFlYTQ0ODA0Y2I1MTkzYTA0YjllOGVkNWI1MDAyMGMzY2FjZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAK
QEAgLTE0OTEsOSArMTQ5MSw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0
VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1
bnNpZ25lZCBzdGVwQ291bnQpCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RlcENvdW50KTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApp
bmRleCBkMDRiODA2NTc2MmEyMGQyMWJiM2VjMmE3YmJkOWMzOTAzMzNjZTc4Li43YWM4Y2RkYmIw
OTQzMjM3YzEyN2FmOGY2N2U0ZWZhZWFmYmY1ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKQEAgLTEzMCw3ICsxMzAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKICAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGJhclN0ZXBzKCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisgICAg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgdW5zaWduZWQg
c3RlcENvdW50ID0gMSk7CiAKIHB1YmxpYzoKICAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNl
Y3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCBmNGEzZTNhMDNjZjJjOWU2
ODU3MWNiZDk5MzljNTBjMDVkOTJjNjRlLi45YzA3YzgwOWI5MDEzOTQwMjk2NTIzNzI2YWQ3ZjM0
ODAyYTc1MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CkBAIC02MTUsMTQgKzYxNSwxNCBAQCBib29sIFJlbmRlckxpc3RCb3g6Omxpc3RJbmRleElzVmlz
aWJsZShpbnQgaW5kZXgpCiAgICAgcmV0dXJuIGluZGV4ID49IGZpcnN0SW5kZXggJiYgaW5kZXgg
PCBlbmRJbmRleDsKIH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIsIEVsZW1lbnQqKiwgUmVuZGVyQm94KiwgY29uc3QgSW50UG9pbnQmKQorYm9vbCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCwgRWxlbWVudCoqLCBSZW5kZXJC
b3gqLCBjb25zdCBJbnRQb2ludCYpCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RlcENvdW50KTsKIH0K
IAotYm9vbCBSZW5kZXJMaXN0Qm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgRWxlbWVudCoqKQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9s
bExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgdW5zaWduZWQgc3RlcENvdW50LCBFbGVtZW50KiopCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3Jh
bnVsYXJpdHksIHN0ZXBDb3VudCk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oCmluZGV4IDViNjcwZTJiMTljOGQ5YWI5NTJkMTRmOTk4YTU2MWZjNWNlYjM2MTkuLmUw
NDRiMWU3YzQzNDQ5MmM1MmIxN2M2NDkxYzU1NjczNWMzYjJlNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAg
ICBpbnQgc2l6ZSgpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCA9IG51bGxwdHIsIFJlbmRlckJveCogc3RhcnRCb3ggPSBudWxscHRyLCBjb25zdCBJbnRQ
b2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQgPSBJbnRQb2ludCgpKSBvdmVycmlkZTsKKyAg
ICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCB1bnNpZ25l
ZCBzdGVwQ291bnQgPSAxLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQgPSBudWxscHRyLCBSZW5kZXJC
b3gqIHN0YXJ0Qm94ID0gbnVsbHB0ciwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0
ZVBvaW50ID0gSW50UG9pbnQoKSkgb3ZlcnJpZGU7CiAKICAgICBib29sIHNjcm9sbGVkVG9Ub3Ao
KSBjb25zdCBmaW5hbDsKICAgICBib29sIHNjcm9sbGVkVG9Cb3R0b20oKSBjb25zdCBmaW5hbDsK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dD
b250cm9sKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBvdmVycmlkZTsKIAot
ICAgIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51
bGxwdHIpIG92ZXJyaWRlOworICAgIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50ID0gMSwgRWxlbWVu
dCoqIHN0b3BFbGVtZW50ID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0
VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDI5
N2ViNmVlNmMwNzc0YjMwOWExMjE4OTQxMTg5ZTMwY2IyY2VjNmUuLmE0ZjcxOWM1MTgxYmVlYzJh
NGI3MmJiMTk1Y2ZiNDZmMjExNTllZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zOTYsMjQgKzM5
NiwyNCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2Nyb2xsVG9wKGlu
dCBuZXdUb3AsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQwogICAgICAgICBpbm5lclRleHRFbGVtZW50
KCktPnNldFNjcm9sbFRvcChuZXdUb3ApOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQs
IFJlbmRlckJveCogc3RhcnRCb3gsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQ
b2ludCkKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIHVuc2lnbmVk
IHN0ZXBDb3VudCwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBj
b25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7CiAgICAgYXV0byogcmVu
ZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVu
ZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgaWYgKHNjcm9sbGFibGVB
cmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3Rl
cENvdW50KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50
LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOworICAgIHJldHVybiBSZW5kZXJC
bG9ja0Zsb3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzdGVwQ291bnQsIHN0b3BF
bGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCi1ib29sIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgdW5zaWduZWQgc3RlcENvdW50LCBFbGVt
ZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYXV0byogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50
KCktPnJlbmRlcmVyKCktPmxheWVyKCk7CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXll
ciA/IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKLSAgICBpZiAoc2Nyb2xsYWJs
ZUFyZWEgJiYgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rp
b24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGlmIChz
Y3JvbGxhYmxlQXJlYSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgc3RlcENvdW50KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7Cisg
ICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBzdGVwQ291bnQsIHN0b3BFbGVtZW50KTsKIH0KIAogSFRNTElucHV0RWxlbWVudCYg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oCmluZGV4IDQ5MWRhYTZiN2ZlNWNmZjQyMDBkYmRkNDQ0MGI5M2VjMDc3Nzk0ZWMuLjkwMmUy
MjM3ZGQ3ZWNlNzAzMzc1NDgyYzBlNjA2NWYxYmNhZTQyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTU5
LDggKzU5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFu
Z2VPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTY3JvbGxUb3AoaW50LCBjb25zdCBT
Y3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmKSBvdmVycmlkZTsKLSAgICBib29sIHNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwg
RWxlbWVudCoqIHN0b3BFbGVtZW50ID0gbnVsbHB0ciwgUmVuZGVyQm94KiBzdGFydEJveCA9IG51
bGxwdHIsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCA9IEludFBvaW50
KCkpIGZpbmFsOwotICAgIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIEVsZW1lbnQqKiBzdG9w
RWxlbWVudCA9IDApIGZpbmFsOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIHVuc2lnbmVkIHN0ZXBDb3VudCA9IDEsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCA9IG51bGxwdHIsIFJlbmRlckJveCogc3RhcnRCb3ggPSBudWxscHRyLCBjb25zdCBJbnRQ
b2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQgPSBJbnRQb2ludCgpKSBmaW5hbDsKKyAgICBi
b29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIHVuc2lnbmVkIHN0ZXBDb3VudCA9IDEsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCA9IG51bGxw
dHIpIGZpbmFsOwogCiAgICAgaW50IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgZmxvYXQg
Z2V0QXZlcmFnZUNoYXJXaWR0aCgpIG92ZXJyaWRlOwo=
</data>
<flag name="review"
          id="470032"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>