<?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>145318</bug_id>
          
          <creation_ts>2015-05-22 14:00:14 -0700</creation_ts>
          <short_desc>[iOS] scrollIntoViewIfNeeded is not working with scroll-snap points</short_desc>
          <delta_ts>2017-05-19 01:04:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=145216</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>172349</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096944</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-22 14:00:14 -0700</bug_when>
    <thetext>In Bug 145216, I corrected a problem where programmatic scrolls did not update the scroll snap state.

Unfortunately, I did not recognize that these changes were not sufficient to correct the problem in iOS, because many of the ScrollAnimator methods used on Mac are stubbed out on iOS.

This needs to be corrected so that the iOS ScrollAnimator knows about the current scroll snap offset index, so that its default &apos;0&apos; value doesn&apos;t keep getting retrieved by WebCore code and resetting the offset.

It may be that iOS should keep around a ScrollController object so that we can share the axis offset handling code between the two ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096945</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-22 14:00:55 -0700</bug_when>
    <thetext>This bug manifests as a scroll area (with snap points), where calling &apos;scrollIntoViewIfNeeded&quot; causes the right scroll snap region to move into view, only to flash back to the zeroth scroll element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096946</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-05-22 14:01:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/21081501&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103121</commentid>
    <comment_count>3</comment_count>
      <attachid>255161</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-18 18:25:21 -0700</bug_when>
    <thetext>Created attachment 255161
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103168</commentid>
    <comment_count>4</comment_count>
      <attachid>255172</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-18 22:09:21 -0700</bug_when>
    <thetext>Created attachment 255172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103292</commentid>
    <comment_count>5</comment_count>
      <attachid>255172</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-19 10:48:38 -0700</bug_when>
    <thetext>Comment on attachment 255172
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:54
&gt; +        HorizontalSnapOffsetIndex,
&gt; +        VerticalSnapOffsetIndex,

Maybe these should have &quot;Current&quot; in the name.

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:115
&gt; +    unsigned m_currentHorizontalSnapPointIndex { 0 };
&gt; +    unsigned m_currentVerticalSnapPointIndex { 0 };

Do we need to distinguish between &quot;not set&quot; and 0?

&gt; Source/WebCore/platform/cocoa/ScrollController.mm:134
&gt;      , m_lastMomentumScrollTimestamp(0)
&gt; +#if ENABLE(RUBBER_BANDING)
&gt;      , m_startTime(0)

Could use C++11 initialization to avoid these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103304</commentid>
    <comment_count>6</comment_count>
      <attachid>255172</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-19 11:04:08 -0700</bug_when>
    <thetext>Comment on attachment 255172
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:54
&gt;&gt; +        VerticalSnapOffsetIndex,
&gt; 
&gt; Maybe these should have &quot;Current&quot; in the name.

I like that better. I&apos;ll change to that.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:115
&gt;&gt; +    unsigned m_currentVerticalSnapPointIndex { 0 };
&gt; 
&gt; Do we need to distinguish between &quot;not set&quot; and 0?

No. &quot;non set&quot; is indicated by empty snap offset vectors.

&gt;&gt; Source/WebCore/platform/cocoa/ScrollController.mm:134
&gt;&gt;      , m_startTime(0)
&gt; 
&gt; Could use C++11 initialization to avoid these.

Good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103365</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-19 12:25:39 -0700</bug_when>
    <thetext>Committed r185762: &lt;http://trac.webkit.org/changeset/185762&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255161</attachid>
            <date>2015-06-18 18:25:21 -0700</date>
            <delta_ts>2015-06-18 22:09:18 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-145318-20150618182443.patch</filename>
            <type>text/plain</type>
            <size>52948</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTczMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDE1LTA2LTE4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIHNjcm9sbEludG9W
aWV3SWZOZWVkZWQgaXMgbm90IHdvcmtpbmcgd2l0aCBzY3JvbGwtc25hcCBwb2ludHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTMxOAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjEwODE1MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Q3VycmVudEhv
cml6b250YWxTbmFwUG9pbnRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYWJsZUFy
ZWFQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6dmVydGljYWxTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OnNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyk6CisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpob3Jpem9udGFsU25hcE9mZnNldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnZlcnRpY2FsU25hcE9mZnNl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGU6OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzZXRDdXJyZW50SG9yaXpv
bnRhbFNuYXBQb2ludEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlOjpzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50
SW5kaWNlc0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWU6OmhhbmRsZVdoZWVsRXZlbnRQaGFzZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9s
bGluZ1RyZWVJT1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUlPUzo6Zml4
ZWRQb3NpdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUlPUzo6Y3Vy
cmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L2lvcy9TY3JvbGxpbmdUcmVlSU9TLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVCZWZvcmVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zmc2V0
T25BeGlzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3Jv
bGxTbmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxT
bmFwSW5kZXhEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVw
ZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9mZnNldE9uQXhpcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp1
cGRhdGVTY3JvbGxTbmFwU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXJDbGllbnQ6On5T
Y3JvbGxDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xs
ZXJDbGllbnQ6OmRlZmVyVGVzdHNGb3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Q29udHJvbGxlckNsaWVudDo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXJDbGllbnQ6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRl
eERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzZXRTY3Jv
bGxTbmFwSW5kZXhEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENv
bnRyb2xsZXIubW06CisgICAgICAgIChzeXN0ZW1VcHRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsV2hlZWxNdWx0aXBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xs
ZXI6OlNjcm9sbENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRvd2FyZFplcm8p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpz
dGFydFNuYXBSdWJiZXJiYW5kVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxTbmFwUG9pbnRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpoYXNBY3RpdmVTY3JvbGxTbmFwVGltZXJGb3JB
eGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2
ZW50Rm9yU2Nyb2xsU25hcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVTY3JvbGxTbmFwU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250
cm9sbGVyOjpzdGFydFNjcm9sbFNuYXBUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxD
b250cm9sbGVyOjppbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNG
b3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5TY3Jv
bGxTbmFwQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmNv
bXB1dGVHbGlkZURlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnVw
ZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXIpOgorCiAyMDE1LTA2
LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm92aWRlIGEg
d2F5IGZvciB3ZWIgZGV2ZWxvcGVycyB0byBkcmF3IGEgVGhlbWUtc3BlY2lmaWMgV2lyZWxlc3Mg
UGxheWJhY2sgaWNvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4NTY4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDkgQEAgdm9pZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZQogCiAgICAgaWYgKGNvbnN0IFZlY3RvcjxMYXlv
dXRVbml0PiogdmVydGljYWxTbmFwT2Zmc2V0cyA9IGZyYW1lVmlldy52ZXJ0aWNhbFNuYXBPZmZz
ZXRzKCkpCiAgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdCgq
bm9kZSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgKnZlcnRpY2FsU25hcE9mZnNldHMsIG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICBub2RlLT5zZXRDdXJyZW50SG9yaXpv
bnRhbFNuYXBQb2ludEluZGV4KGZyYW1lVmlldy5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkpOworICAgIG5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGZyYW1l
Vmlldy5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCkBAIC00ODQsNiArNDg3LDggQEAgdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOjp1cGRhdGVPdgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgICAgIHNl
dFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdCgqbm9kZSwgU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdHZW9tZXRyeS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRz
LCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICBzZXRTdGF0ZVNjcm9sbGlu
Z05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWws
IHNjcm9sbGluZ0dlb21ldHJ5LT52ZXJ0aWNhbFNuYXBPZmZzZXRzLCBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgICAgICBub2RlLT5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2lu
dEluZGV4KHNjcm9sbGluZ0dlb21ldHJ5LT5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KTsKKyAgICAgICAgbm9kZS0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoc2Nyb2xs
aW5nR2VvbWV0cnktPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTsKICNlbmRpZgogICAg
IH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDE4NTY4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzY2hlZHVsZVVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChTY3JvbGxp
bmdOb2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHByb2dyYW1tYXRpY1Njcm9sbCwgU2V0
T3JTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbik7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwgdW5zaWdu
ZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNhbEluZGV4KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwg
dW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNhbEluZGV4KTsKICAgICB2
b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxl
QXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJl
YXNvbikgY29uc3Q7CiAgICAgdm9pZCByZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxF
dmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAkocmV2aXNpb24gMTg1NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCw4IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBWZWN0b3I8TGF5
b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzOwogICAgICAgICBWZWN0b3I8TGF5b3V0VW5p
dD4gdmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXg7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAJKHJldmlzaW9uIDE4NTY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsx
MjMsMjQgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcgogICAgIG1f
dmVydGljYWxTbmFwT2Zmc2V0cyA9IHNuYXBPZmZzZXRzOwogICAgIHNldFByb3BlcnR5Q2hhbmdl
ZChWZXJ0aWNhbFNuYXBPZmZzZXRzKTsKIH0KKwordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgaWYgKG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA9PSBpbmRleCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJ
bmRleCA9IGluZGV4OworICAgIHNldFByb3BlcnR5Q2hhbmdlZChIb3Jpem9udGFsU25hcE9mZnNl
dEluZGV4KTsKK30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEN1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmIChtX2N1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID09IGluZGV4KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OworICAgIHNl
dFByb3BlcnR5Q2hhbmdlZChWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCk7Cit9CiAjZW5kaWYKIAog
dm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGFibGVBcmVhUGFyYW1l
dGVycyhjb25zdCBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTg1NjgwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CiAgICAgICAgIEhvcml6b250YWxTbmFwT2Zmc2V0cywKICAgICAgICAgVmVydGljYWxTbmFwT2Zm
c2V0cywKKyAgICAgICAgSG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCwKKyAgICAgICAgVmVydGlj
YWxTbmFwT2Zmc2V0SW5kZXgsCiAjZW5kaWYKICAgICAgICAgRXhwZWN0c1doZWVsRXZlbnRUZXN0
VHJpZ2dlciwKICAgICB9OwpAQCAtNzUsNiArNzcsMTIgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxTbmFwT2Zmc2V0czsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmVydGljYWxT
bmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisKKyAgICB1bnNpZ25lZCBjdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50SG9yaXpv
bnRhbFNuYXBQb2ludEluZGV4OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkKTsKKworICAgIHVuc2lnbmVkIGN1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQpOwogI2VuZGlmCiAKICAgICBjb25zdCBTY3Jv
bGxhYmxlQXJlYVBhcmFtZXRlcnMmIHNjcm9sbGFibGVBcmVhUGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOyB9CkBAIC0xMDMsNiArMTExLDggQEAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIFZlY3RvcjxmbG9hdD4g
bV9ob3Jpem9udGFsU25hcE9mZnNldHM7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZlcnRpY2FsU25h
cE9mZnNldHM7CisgICAgdW5zaWduZWQgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggeyAw
IH07CiAjZW5kaWYKICAgICBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMgbV9zY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnM7CiAgICAgYm9vbCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50
c1Byb2dyYW1tYXRpY1Njcm9sbCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODU2ODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDggQEAgcHVibGljOgogICAgIC8vIGFuZCBjYWxsIHNjcm9sbGluZ1RyZWVO
b2RlRGlkU2Nyb2xsKCkuCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNjcm9sbFBv
c2l0aW9uQ2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhTY3JvbGxpbmdOb2RlSUQsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIGluVXNlckludGVyYXRp
b24pOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJ
bmRpY2VzRGlkQ2hhbmdlKFNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5z
aWduZWQgdmVydGljYWwpID0gMDsKKwogICAgIEZsb2F0UG9pbnQgbWFpbkZyYW1lU2Nyb2xsUG9z
aXRpb24oKTsKICAgICAKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUuY3BwCShyZXZpc2lvbiAxODU2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYg
KzczLDEyIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUIKIAogICAg
IGlmIChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKICAgICAgICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0g
c3RhdGUudmVydGljYWxTbmFwT2Zmc2V0cygpOworCisgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0
SW5kZXgpKQorICAgICAgICBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBzdGF0
ZS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisKKyAgICBpZiAoc3RhdGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0SW5kZXgpKQorICAgICAgICBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0g
c3RhdGUuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKICNlbmRpZgogCiAgICAgaWYg
KHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGFibGVBcmVhUGFyYW1zKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24g
MTg1NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTAgQEAgcHVibGljOgog
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgaG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU25hcE9mZnNl
dHM7IH0KICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOyB9CisgICAgdW5zaWduZWQgY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleDsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eDsgfQorICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25l
ZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQor
ICAgIHZvaWQgc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgp
IHsgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OyB9CiAjZW5kaWYKIAog
cHJvdGVjdGVkOgpAQCAtOTksNiArMTAzLDggQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQogICAgIFZlY3RvcjxmbG9hdD4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7CiAg
ICAgVmVjdG9yPGZsb2F0PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CisgICAgdW5zaWduZWQgbV9j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggeyAwIH07CiAjZW5kaWYKICAgICBTY3JvbGxhYmxl
QXJlYVBhcmFtZXRlcnMgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGlu
Z1RyZWUuY3BwCShyZXZpc2lvbiAxODU2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiAr
MTExLDE3IEBAIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpzY3JvbGxpbmdUcmUKICAgICB9
KTsKIH0KIAordm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRp
Y2VzRGlkQ2hhbmdlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWws
IHVuc2lnbmVkIHZlcnRpY2FsKQoreworICAgIGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I+
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKKyAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Njcm9sbGluZ0Nvb3JkaW5hdG9yLCBub2RlSUQsIGhvcml6
b250YWwsIHZlcnRpY2FsXSB7CisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRBY3Rp
dmVTY3JvbGxTbmFwSW5kaWNlcyhub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsKTsKKyAgICB9
KTsKK30KKwogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpo
YW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNj
cm9sbGluZ1RyZWUuaAkocmV2aXNpb24gMTg1NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDcgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFRocmVhZGVkU2Nyb2xsaW5nVHJlZShB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsaW5n
VHJlZU5vZGVEaWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgU2V0T3JTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA9IFN5bmNTY3JvbGxp
bmdMYXllclBvc2l0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRp
Y2VzRGlkQ2hhbmdlKFNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWdu
ZWQgdmVydGljYWwpIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGhhbmRs
ZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVk
IGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVJT1MuY3BwCShyZXZpc2lvbiAxODU2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2
ICsxMTgsMTcgQEAgRmxvYXRSZWN0IFNjcm9sbGluZ1RyZWVJT1M6OmZpeGVkUG9zaXRpbwogICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKIH0KIAordm9pZCBTY3JvbGxpbmdUcmVlSU9TOjpjdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQgbm9kZUlE
LCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAoIW1f
c2Nyb2xsaW5nQ29vcmRpbmF0b3IpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcj4gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX3Njcm9s
bGluZ0Nvb3JkaW5hdG9yOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Njcm9sbGluZ0Nvb3JkaW5h
dG9yLCBub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsXSB7CisgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhub2RlSUQsIGhvcml6b250YWws
IHZlcnRpY2FsKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVJT1MuaAkocmV2aXNpb24gMTg1
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVJ
T1MuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29u
c3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIFNldE9yU3luY1Njcm9sbGluZ0xheWVyUG9z
aXRpb24gPSBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbikgb3ZlcnJpZGU7CiAKKyAgICB2b2lk
IGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJ
RCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpIG92ZXJyaWRlOworCiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgZml4ZWRQb3NpdGlvblJlY3QoKSBvdmVycmlkZTsKIAogICAg
IFJlZlB0cjxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJl
dmlzaW9uIDE4NTY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcs
NiArMTM3LDEyIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzoKIAog
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKICAgICAgICAgbV9z
Y3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCwgY29udmVydFRvTGF5b3V0VW5pdHMoc2Nyb2xsaW5nU3RhdGVOb2RlLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkpOworCisgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgpKQorICAg
ICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KCkpOworICAgIAorICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRJ
bmRleCkpCisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5j
dXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKICNlbmRpZgogCiAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpFeHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKSkKQEAgLTU1Myw3ICs1NTksNyBAQCBz
dGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zCiAgICAgICAgIFdURkxvZ0Fs
d2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8gdGhyZWFkZWQgc2Nyb2xsaW5nIG1vZGUuIFRp
bWU6ICVmXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKIH0KIAotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQogTGF5b3V0VW5pdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjOjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CiB7CiAg
ICAgY29uc3QgRmxvYXRQb2ludCYgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlz
aW9uIDE4NTY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
QW5pbWF0b3I+IFNjcm9sbEFuCiAKIFNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcihTY3Jv
bGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVhKHNjcm9s
bGFibGVBcmVhKQotI2lmIChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpKSAmJiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkg
fHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICwgbV9zY3JvbGxDb250cm9sbGVyKCp0aGlz
KQogI2VuZGlmCiAgICAgLCBtX2N1cnJlbnRQb3NYKDApCkBAIC04NCwxMSArODQsMTMgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRobwogICAgIHVwZGF0ZUFjdGl2ZVNj
cm9sbFNuYXBJbmRleEZvck9mZnNldCgpOwogfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaWYgUExB
VEZPUk0oTUFDKQogYm9vbCBTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3Jv
bGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICByZXR1
cm4gbV9zY3JvbGxDb250cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVl
bEV2ZW50KTsKIH0KKyNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxT
bmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdAogewpAQCAtMTgwLDcgKzE4Miw3IEBAIEZsb2F0UG9p
bnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGkKIAogdm9pZCBTY3JvbGxBbmltYXRvcjo6
dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCkKIHsKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JP
ZmZzZXQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSk7CiAgICAgaWYgKG1fc2Nyb2xsQ29u
dHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSkgewogICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgobV9zY3JvbGxD
b250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsKSk7CkBAIC0xOTUsMTAgKzE5NywxMCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpu
b3RpZnlQb3NpdGlvbkNoYW5nCiAgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0K
IAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLXZvaWQgU2Ny
b2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBT
dGF0ZSgpCiB7Ci0gICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycyhtX3Njcm9sbGFibGVBcmVhKTsKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRl
U2Nyb2xsU25hcFN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOwogfQogCiBMYXlvdXRVbml0IFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9u
IDE4NTY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLSNpZiAoRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KSB8fCBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICNpbmNsdWRlICJT
Y3JvbGxDb250cm9sbGVyLmgiCiAjZW5kaWYKIApAQCAtNTIsNyArNTIsNyBAQCBjbGFzcyBTY3Jv
bGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIGNsYXNzIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjsKIAotI2lmIChFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpKSAmJiBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQogY2xhc3MgU2Nyb2xsQW5pbWF0b3IgOiBwcml2YXRlIFNjcm9s
bENvbnRyb2xsZXJDbGllbnQgewogI2Vsc2UKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKQEAgLTEy
OCw5ICsxMjgsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVh
c29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRl
OwogI2VuZGlmCiAgICAgCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0o
TUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaWYgUExBVEZPUk0oTUFDKQogICAg
IGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisjZW5k
aWYKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwogICAgIExheW91dFVuaXQgc2Ny
b2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3Zl
cnJpZGU7CiAgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsK
QEAgLTE0NCw3ICsxNDYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgbV9z
Y3JvbGxhYmxlQXJlYTsKICAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3doZWVs
RXZlbnRUZXN0VHJpZ2dlcjsKLSNpZiAoRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBTY3JvbGxDb250cm9sbGVyIG1f
c2Nyb2xsQ29udHJvbGxlcjsKICNlbmRpZgogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdl
IGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4NTY4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQoY28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBoYW5kbGVkRXZlbnQg
PSBzY3JvbGxBbmltYXRvcigpLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCiAgICAgaWYgKHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4
RGlkQ2hhbmdlKCkpIHsKICAgICAgICAgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eChzY3JvbGxBbmltYXRvcigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKSk7CiAgICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CkBAIC00NjEsMTAgKzQ2MSw4IEBAIEludFBvaW50IFNj
cm9sbGFibGVBcmVhOjpuZWFyZXN0QWN0aXZlU24KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCkKIHsKLSNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFNjcm9s
bEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwot
I2VuZGlmCisgICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsK
IAogICAgIGlmIChpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
LmgJKHJldmlzaW9uIDE4NTY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Nj
cm9sbENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBTY3JvbGxDb250cm9sbGVyX2gKICNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCiAKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSB8fCBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgpAQCAtNTEsNiArNTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
U2Nyb2xsQ29udHJvbGxlckNsaWVudCgpIHsgfQogCiBwdWJsaWM6CisjaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93c1Zl
cnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CiAgICAgdmly
dHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSA9IDA7CkBAIC03NywxMSArNzgsMTIgQEAgcHVi
bGljOgogICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhl
IG92ZXJoYW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQogICAgIC8vIHRoZSBwYWdl
IHRvIHNjcm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOworI2VuZGlm
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpE
ZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBjb25zdCB7IC8qIERvIG5vdGhpbmcgKi8gfQogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVm
ZXJUZXN0VHJpZ2dlclJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KIAotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9s
bE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcykKQEAgLTExNCw0MSArMTE2
LDUwIEBAIGNsYXNzIFNjcm9sbENvbnRyb2xsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNj
cm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYpOwogCisjaWYgUExBVEZPUk0o
TUFDKQogICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKKyNlbmRpZgogCiAgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCB1cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhT
Y3JvbGxFdmVudEF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYpOwotICAgIHVuc2lnbmVk
IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKICAg
ICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1
bnNpZ25lZCk7CiAgICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChp
bnQgeCwgaW50IHkpOwogICAgIGJvb2wgYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KICAgICB2
b2lkIHNldFNjcm9sbFNuYXBJbmRleERpZENoYW5nZShib29sIHN0YXRlKSB7IG1fYWN0aXZlU2Ny
b2xsU25hcEluZGV4RGlkQ2hhbmdlID0gc3RhdGU7IH0KKyAgICB1bnNpZ25lZCBhY3RpdmVTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CisgICAgdm9pZCB1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CiAgICAgYm9vbCBoYXNBY3RpdmVTY3JvbGxTbmFwVGltZXJGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZgogCiBwcml2YXRlOgorI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2b2lkIHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1l
cigpOwogICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKICAgICB2b2lkIHNuYXBS
dWJiZXJCYW5kKCk7CiAgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKIAogICAg
IGJvb2wgc2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKTsKKyNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYg
UExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgTGF5b3V0VW5p
dCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHNl
dE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywg
aW50KTsKKyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc2Nyb2xsU25hcFBvaW50U3RhdGUo
U2Nyb2xsRXZlbnRBeGlzKTsKKyAgICBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc2Ny
b2xsU25hcFBvaW50U3RhdGUoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICAgICB2b2lk
IHZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHN0YXJ0U2Nyb2xsU25h
cFRpbWVyKFNjcm9sbEV2ZW50QXhpcyk7CiAgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNj
cm9sbEV2ZW50QXhpcyk7CiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhTY3Jv
bGxFdmVudEF4aXMpIGNvbnN0OwogICAgIHZvaWQgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAg
ICAgYm9vbCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKLSAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgaW50KTsKIAogICAgIHZvaWQg
YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsU25hcFN0YXRl
KTsKICAgICB2b2lkIHNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoU2Nyb2xsRXZlbnRBeGlzKTsK
QEAgLTE1Nyw5ICsxNjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFy
YW1ldGVycyhTY3JvbGxFdmVudEF4aXMsIGJvb2wpOwogICAgIGZsb2F0IGNvbXB1dGVTbmFwRGVs
dGEoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRlR2xpZGVEZWx0YShT
Y3JvbGxFdmVudEF4aXMpIGNvbnN0OwotCi0gICAgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNj
cm9sbFNuYXBQb2ludFN0YXRlKFNjcm9sbEV2ZW50QXhpcyk7Ci0gICAgY29uc3QgU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUmIHNjcm9sbFNuYXBQb2ludFN0YXRlKFNjcm9sbEV2ZW50QXhpcykgY29u
c3Q7CisjZW5kaWYKICNlbmRpZgogCiAgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9jbGll
bnQ7CkBAIC0xNjksMjAgKzE3OCwyNCBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX3N0cmV0
Y2hTY3JvbGxGb3JjZTsKICAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OwogCisjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgogICAgIENG
VGltZUludGVydmFsIG1fc3RhcnRUaW1lOwogICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsK
ICAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKICAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2Np
dHk7CiAgICAgUnVuTG9vcDo6VGltZXI8U2Nyb2xsQ29udHJvbGxlcj4gbV9zbmFwUnViYmVyYmFu
ZFRpbWVyOworI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9S
TShNQUMpCi0gICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gY29uc29saWRhdGUgYm90aCB0aW1l
cnMgaW50byBvbmUgdmFyaWFibGUuCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+IG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBTdGF0ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+
IG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIEZJ
WE1FOiBGaW5kIGEgd2F5IHRvIGNvbnNvbGlkYXRlIGJvdGggdGltZXJzIGludG8gb25lIHZhcmlh
YmxlLgogICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9sbENvbnRyb2xsZXI+IG1faG9yaXpvbnRhbFNj
cm9sbFNuYXBUaW1lcjsKICAgICBSdW5Mb29wOjpUaW1lcjxTY3JvbGxDb250cm9sbGVyPiBtX3Zl
cnRpY2FsU2Nyb2xsU25hcFRpbWVyOwogI2VuZGlmCisjZW5kaWYKIAogICAgIGJvb2wgbV9pblNj
cm9sbEdlc3R1cmUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jl
c3MgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9TY3JvbGxDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxODU2ODEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw4ICszOCw5IEBACiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNlbmRpZgogCi0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKIAorI2lmIFBMQVRGT1JNKE1BQykKIHN0YXRpYyBOU1RpbWVJ
bnRlcnZhbCBzeXN0ZW1VcHRpbWUoKQogewogICAgIGlmIChbW05TUHJvY2Vzc0luZm8gcHJvY2Vz
c0luZm9dIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVtVXB0aW1lKV0pCkBAIC02
MiwxMyArNjMsMTUgQEAgc3RhdGljIE5TVGltZUludGVydmFsIHN5c3RlbVVwdGltZSgpCiAgICAg
fQogICAgIHJldHVybiAwOwogfQotCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9j
aXR5WmVyb2luZ1RpbWVvdXQgPSAwLjEwZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5k
RGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7CiBzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVy
YmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgc25hcE1hZ25pdHVkZU1heCA9IDI1OwpAQCAtODUsNiArODgsNyBAQCBzdGF0aWMgY29u
c3QgZmxvYXQgbWF4VGFyZ2V0V2hlZWxEZWx0YSA9CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluVGFy
Z2V0V2hlZWxEZWx0YSA9IDMuNTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQogZW51bSBj
bGFzcyBXaGVlbEV2ZW50U3RhdHVzIHsKICAgICBVc2VyU2Nyb2xsQmVnaW4sCiAgICAgVXNlclNj
cm9sbGluZywKQEAgLTEyMSwxMiArMTI1LDE1IEBAIHN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKQogICAgIH0KICAgICByZXR1cm4gbXVsdGlwbGllcjsKIH0KKyNlbmRpZgogCiBT
Y3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQm
IGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wKDApCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICwgbV9zdGFy
dFRpbWUoMCkKICAgICAsIG1fc25hcFJ1YmJlcmJhbmRUaW1lcihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCisjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiAgICAgLCBt
X2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmU2Ny
b2xsQ29udHJvbGxlcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKQogICAgICwgbV92
ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZTY3JvbGxD
b250cm9sbGVyOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKQpAQCAtMTM0LDkgKzE0MSwx
MCBAQCBTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sCiB7CiB9CiAKKyNp
ZiBQTEFURk9STShNQUMpCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgIGlmICghcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTMyMCw3ICszMjgsOSBAQCBib29sIFNj
cm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
KyNlbmRpZgogCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogc3RhdGljIGlubGluZSBmbG9h
dCByb3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQogewogICAgIHJldHVybiBudW0gPiAwID8gY2Vp
bGYobnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7CkBAIC0zOTYsMTMgKzQwNiwxOCBA
QCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltCiAgICAgICAgICAgICBz
dG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOwogICAgIH0KIH0KKyNlbmRpZgogCiBib29sIFNjcm9s
bENvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAogeworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykgJiYgUExBVEZPUk0oTUFDKQogICAgIGlmICghbV9pblNjcm9sbEdl
c3R1cmUgJiYgIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmICFtX3NuYXBSdWJiZXJiYW5k
VGltZXJJc0FjdGl2ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFtX2Ns
aWVudC5zdHJldGNoQW1vdW50KCkuaXNaZXJvKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgogfQogCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdApAQCAtNDE0LDYgKzQyOSw3IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aXNT
Y3JvbGxTbmFwSW5Qcm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1l
cigpCiB7CiAgICAgbV9jbGllbnQuc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7CkBAIC00NjAs
OCArNDc2LDkgQEAgYm9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSQogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CisjZW5kaWYKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
ICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUmIFNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbFNuYXBQb2ludFN0YXRlKFNj
cm9sbEV2ZW50QXhpcyBheGlzKQogewogICAgIEFTU0VSVChheGlzICE9IFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCB8fCBtX2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpOwpAQCAtNDc4LDYg
KzQ5NSw3IEBAIGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBTY3JvbGxDb24KICAgICBy
ZXR1cm4gKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/ICptX2hvcml6b250
YWxTY3JvbGxTbmFwU3RhdGUgOiAqbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZTsKIH0KIAorI2lm
IFBMQVRGT1JNKE1BQykKIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFzQWN0aXZlU2Nyb2xsU25h
cFRpbWVyRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKIHsKICAgICByZXR1cm4g
KGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/IG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lci5pc0FjdGl2ZSgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2
ZSgpOwpAQCAtNTk3LDggKzYxNSw5IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1do
ZWVsRXZlbnQKIAogICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAKLXZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKGNvbnN0IFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xs
U25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICAv
LyBGSVhNRTogQ3VycmVudGx5LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJlIHJlY3JlYXRlZCBl
dmVuIHRob3VnaCB0aGUgc25hcCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRhdGVkLgogICAgIGlm
IChzY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkKQEAgLTYyMiw2ICs2NDEs
NyBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQCiAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxTbmFwU3RhdGUgPSAhc25hcFBvaW50cy5pc0VtcHR5KCkgPyBzdGQ6Om1h
a2VfdW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPihTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsLCBzbmFwUG9pbnRzKSA6IG51bGxwdHI7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCiB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQogewogICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9sbENvbnRyb2xsZXI+JiBzY3JvbGxTbmFw
VGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1faG9yaXpvbnRh
bFNjcm9sbFNuYXBUaW1lciA6IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXI7CkBAIC02OTksNiAr
NzE5LDcgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjppbml0aWFsaXplR2xpZGVQYQogICAgIHNu
YXBTdGF0ZS5tX2dsaWRlTWFnbml0dWRlID0gKHNuYXBTdGF0ZS5tX2dsaWRlSW5pdGlhbFdoZWVs
RGVsdGEgKyB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpIC8gMjsKICAgICBzbmFwU3RhdGUubV9nbGlk
ZVBoYXNlU2hpZnQgPSBhY29zKChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIC0g
dGFyZ2V0RmluYWxXaGVlbERlbHRhKSAvIChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERl
bHRhICsgdGFyZ2V0RmluYWxXaGVlbERlbHRhKSk7CiB9CisjZW5kaWYKIAogdW5zaWduZWQgU2Ny
b2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4
aXMgYXhpcykgY29uc3QKIHsKQEAgLTc0NSw2ICs3NjYsNyBAQCB2b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OnNldEFjdGl2ZVNjcm9sbFNuCiAgICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhG
b3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHkpOwogfQogCisjaWYg
UExBVEZPUk0oTUFDKQogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmlt
YXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKIHsK
ICAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0
YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOwpAQCAtODg2LDYgKzkwOCw3IEBAIGZs
b2F0IFNjcm9sbENvbnRyb2xsZXI6OmNvbXB1dGVHbGlkZURlbHQKICAgICByZXR1cm4gZ2xpZGVE
ZWx0YTsKIH0KICNlbmRpZgorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHJldmlzaW9uIDE4NTY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMzLDYgKzM5MzMsOCBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsCiAgICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nR2VvbWV0cnkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gKm9mZnNldHM7CiAg
ICAgICAgICAgICBpZiAoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBvZmZzZXRzID0gbGF5ZXIu
dmVydGljYWxTbmFwT2Zmc2V0cygpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5
LnZlcnRpY2FsU25hcE9mZnNldHMgPSAqb2Zmc2V0czsKKyAgICAgICAgICAgIHNjcm9sbGluZ0dl
b21ldHJ5LmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBsYXllci5jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5j
dXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9IGxheWVyLmN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCk7CiAjZW5kaWYKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT51
cGRhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUobm9kZUlELCBiYWNraW5nLT5zY3JvbGxpbmdMYXll
cigpLCBiYWNraW5nLT5zY3JvbGxpbmdDb250ZW50c0xheWVyKCksICZzY3JvbGxpbmdHZW9tZXRy
eSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTczMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE1
LTA2LTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtp
T1NdIHNjcm9sbEludG9WaWV3SWZOZWVkZWQgaXMgbm90IHdvcmtpbmcgd2l0aCBzY3JvbGwtc25h
cCBwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTMxOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjEwODE1MDE+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvU2Nyb2xsaW5nL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoQXJndW1l
bnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjplbmNvZGUpOgorICAgICAgICAo
QXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6
OnZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2Vz
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVNjcm9sbGluZ1RyZWU6OmNyZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludEluZGljZXNE
aWRDaGFuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5n
VHJlZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaDoKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
bW06CisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dp
bGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKToKKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xs
Vmlld0RpZFNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1M6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW06
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVz
dFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5t
bToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbFBv
c2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvcjo6Y3VycmVudFNuYXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZSk6CisKIDIw
MTUtMDYtMTggIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBB
VktpdCB1c2FnZSBvZiBwaXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTg1NjgwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGkKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIFNDUk9M
TElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxT
bmFwT2Zmc2V0cywgaG9yaXpvbnRhbFNuYXBPZmZzZXRzKQogICAgIFNDUk9MTElOR19OT0RFX0VO
Q09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMsIHZl
cnRpY2FsU25hcE9mZnNldHMpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCwgY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleCkKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCwgY3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgpCiAjZW5kaWYKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVBhcmFtcywgc2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbikKQEAgLTIwMCw2ICsyMDIsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5n
U3RhdGVTY3JvbGxpCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBTQ1JPTExJTkdf
Tk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9m
ZnNldHMsIFZlY3RvcjxmbG9hdD4sIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk7CiAgICAgU0NS
T0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxT
bmFwT2Zmc2V0cywgVmVjdG9yPGZsb2F0Piwgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyk7CisgICAg
U0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpv
bnRhbFNuYXBPZmZzZXRJbmRleCwgdW5zaWduZWQsIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldEluZGV4LCB1bnNpZ25lZCwgc2V0Q3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXgpOwogI2VuZGlmCiAgICAgU0NST0xMSU5HX05PREVfREVDT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMsIFNjcm9s
bGFibGVBcmVhUGFyYW1ldGVycywgc2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcAkocmV2aXNp
b24gMTg1NjgwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1
OSwxMSBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnZpCiAgICAgbV9z
Y3JvbGxpbmdUcmVlLT52aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcobm9kZUlE
LCBmaXhlZFBvc2l0aW9uUmVjdCwgc2NhbGUpOwogfQogCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6
OlNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZl
cnRpY2FsKQoreworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpDdXJyZW50U25hcFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKG5v
ZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpKTsKK30KKwogLy8gVGhpcyBjb21lcyBmcm9tIHRo
ZSBzY3JvbGxpbmcgdHJlZS4KIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6
c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGVkTm9kZUlE
LCBjb25zdCBGbG9hdFBvaW50JiBuZXdTY3JvbGxQb3NpdGlvbiwgU2V0T3JTeW5jU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKQogewpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGlu
Zy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgJKHJldmlzaW9uIDE4NTY4MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAg
ICAvLyBDYWxsZWQgZXh0ZXJuYWxseSB3aGVuIG5hdGl2ZSB2aWV3cyBtb3ZlIGFyb3VuZC4KICAg
ICB2b2lkIHZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhXZWJDb3JlOjpTY3Jv
bGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3Qs
IGRvdWJsZSBzY2FsZSk7CiAKKyAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hh
bmdlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWdu
ZWQgdmVydGljYWwpOworCiAgICAgLy8gRklYTUU6IGV4cG9zZSB0aGUgdHJlZSBhbmQgcGFzcyB0
aGlzIHRvIHRoYXQ/CiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBs
YXRmb3JtV2hlZWxFdmVudCYpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCShyZXZp
c2lvbiAxODU2ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90
ZVNjcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDExIEBAIFBh
c3NSZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFJlbW90ZVNjcm8KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAordm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNl
c0RpZENoYW5nZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1
bnNpZ25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3Vy
cmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Uobm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0aWNh
bCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVt
b3RlU2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODU2ODApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6U2V0T3JT
eW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA9IFdlYkNvcmU6OlN5bmNTY3JvbGxpbmdMYXllclBv
c2l0aW9uKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVSZXF1
ZXN0c1Njcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwp
IG92ZXJyaWRlOworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2Vi
Q29yZTo6U2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0
aWNhbCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUmVtb3RlU2Nyb2xsaW5n
VHJlZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Jik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9s
bGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCShyZXZpc2lv
biAxODU2ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDkgKzQ0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG92ZXJmbG93U2Nyb2xsRGlkRW5kKCk7CiAg
ICAgdm9pZCBvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7CiAgICAgdm9p
ZCBzY3JvbGxWaWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBib29sIGlu
VXNlckludGVyYXRpb24pOworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFu
Z2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpOwogCiAgICAgQ0FMYXll
ciAqc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVyLmdldCgpOyB9Ci0K
KyAgICAKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
UyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TLm1tCShyZXZpc2lvbiAxODU2ODEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC04MywxMSArODMsMjkgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEVu
ZERyYWdnaW5nOihVSVNjcgogICAgIENHRmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdldENv
bnRlbnRPZmZzZXQtPng7CiAgICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENvbnRl
bnRPZmZzZXQtPnk7CiAKLSAgICB1bnNpZ25lZCBpZ25vcmU7Ci0gICAgaWYgKCFfc2Nyb2xsaW5n
VHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSAmJiBob3Jpem9udGFs
VGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXpl
LndpZHRoKQotICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gY2xvc2VzdFNuYXBPZmZz
ZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCksIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGlnbm9yZSk7Ci0gICAgaWYgKCFf
c2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkgJiYgdmVy
dGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRT
aXplLmhlaWdodCkKLSAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IGNsb3Nlc3RTbmFw
T2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIGlnbm9yZSk7CisgICAgdW5zaWdu
ZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlLT5j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgdW5zaWduZWQgb3JpZ2luYWxW
ZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2Fs
U25hcFBvaW50SW5kZXgoKTsKKworICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9u
dGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7Cisg
ICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZs
b2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygp
LCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxp
bmdUcmVlTm9kZS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7Cisg
ICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBz
Y3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9m
ZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoIV9zY3Jv
bGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAg
ICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0g
Y2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVy
dGljYWxTbmFwT2Zmc2V0cygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwor
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxU
YXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAgICAgICAgICB0YXJn
ZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAg
IGlmIChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2Rl
LT5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkKKyAgICAgICAgfHwgb3JpZ2luYWxW
ZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KCkpIHsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCgpKTsKKyAgICB9CiB9CiAjZW5kaWYKIApAQCAtMjgzLDYgKzMwMSwx
NCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJCiAgICAgc2Nyb2xs
aW5nVHJlZSgpLnNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhzY3Jv
bGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIGluVXNlckludGVyYXRpb24pOwogfQogCit2
b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmN1cnJlbnRTbmFwUG9p
bnRJbmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2Fs
KQoreworICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHNjcm9sbGluZ1RyZWUoKS5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5n
ZShzY3JvbGxpbmdOb2RlSUQoKSwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQkocmV2aXNpb24gMTg1NjgwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTUgKzExNiwxNyBAQCB2b2lkIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNjCiB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1Np
emUgbWF4U2Nyb2xsT2Zmc2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dGbG9hdCB0b3BJbnNldCwg
Q0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNldCkKIHsKICAgICAvLyBUaGUgYm91bmRzIGNoZWNr
aW5nIHdpdGggbWF4U2Nyb2xsT2Zmc2V0cyBpcyB0byBlbnN1cmUgdGhhdCB3ZSB3b24ndCBpbnRl
cmZlcmUgd2l0aCBydWJiZXItYmFuZGluZyB3aGVuIHNjcm9sbGluZyB0byB0aGUgZWRnZSBvZiB0
aGUgcGFnZS4KLSAgICBpZiAoc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3Jl
OjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPngg
PiAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRoKSB7
CisgICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsKSkgewogICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9j
aXR5LngsIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk7Ci0gICAgICAgIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnggPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy53aWR0
aCwgcG90ZW50aWFsU25hcFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRhcmdldENvbnRlbnRPZmZz
ZXQtPnggPiAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndp
ZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0
PihtYXhTY3JvbGxPZmZzZXRzLndpZHRoLCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0K
IAotICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwpICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPiAwICYmIHRh
cmdldENvbnRlbnRPZmZzZXQtPnkgPCBtYXhTY3JvbGxPZmZzZXRzLmhlaWdodCkgeworICAgIGlm
IChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpKSB7CiAgICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNs
b3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnksIG1fY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOwogICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRp
b24gLT0gdG9wSW5zZXQ7Ci0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBzdGQ6Om1p
bjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7
CisgICAgICAgIGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT55ID4gMCAmJiB0YXJnZXRDb250ZW50
T2Zmc2V0LT55IDwgbWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQpCisgICAgICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT55ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMuaGVpZ2h0
LCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxODU2ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gUmVzcG9uZCB0
byBVSSBwcm9jZXNzIGNoYW5nZXMuCiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JO
b2RlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRpb24pOworICAgIHZvaWQgY3VycmVu
dFNuYXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQs
IHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKTsKIAogICAgIFdlYlBhZ2Uq
IG1fd2ViUGFnZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGlu
Zy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTg1NjgwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjQsNiArMjQsNyBAQAogCiBtZXNzYWdlcyAtPiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvciB7CiAgICAgU2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZSh1aW50NjRfdCBub2RlSUQs
IFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRp
b24pOworICAgIEN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzQ2hhbmdlZEZvck5vZGUodWludDY0X3Qg
bm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCk7CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IubW0JKHJldmlzaW9uIDE4NTY4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIsNiArMTAyLDExIEBAIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNjcm9sbFAKICAgICBzY2hlZHVsZVVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9s
bChub2RlSUQsIHNjcm9sbFBvc2l0aW9uLCBmYWxzZSAvKiBGSVhNRSAqLywgc3luY0xheWVyUG9z
aXRpb24gPyBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA6IFNldFNjcm9sbGluZ0xheWVyUG9z
aXRpb24pOwogfQogCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjdXJyZW50U25h
cFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2ln
bmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKQoreworICAgIHNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRpY2VzKG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255172</attachid>
            <date>2015-06-18 22:09:21 -0700</date>
            <delta_ts>2015-06-19 10:48:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145318-20150618220843.patch</filename>
            <type>text/plain</type>
            <size>53458</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE1LTA2LTE4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIHNjcm9sbEludG9W
aWV3SWZOZWVkZWQgaXMgbm90IHdvcmtpbmcgd2l0aCBzY3JvbGwtc25hcCBwb2ludHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTMxOAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjEwODE1MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIHRoZSBTY3JvbGxDb250cm9sbGVyIGluIGlPUyB0byB0
cmFjayB0aGUgc2Nyb2xsIHNuYXAgcG9pbnQgc3RhdGUuCisgICAgICAgIFdlIGRvIG5vdCBuZWVk
IHRoZSBhbmltYXRpb24gaW1wbGVtZW50YXRpb24gb3IgdGltZXJzIHNpbmNlIHRoZSBhY3R1YWwK
KyAgICAgICAgYW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkgVUlLaXQuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbGV0cyB1cyBjb21tdW5pY2F0ZSB0aGUgY3VycmVudCBvZmZzZXQgaW50byB0aGUgc2Ny
b2xsIHNuYXAKKyAgICAgICAgb2Zmc2V0IHZlY3RvciBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIGFu
ZCBSZW1vdGVTY3JvbGxpbmdUcmVlIHNvIHRoYXQKKyAgICAgICAgYm90aCBzaWRlcyBzdGF5IGlu
IHN5bmMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHVzZXIgZ2VzdHVyZXMgb3Igc3R5bGUKKyAgICAg
ICAgdXBkYXRlcyBoYXZlIGNhdXNlZCB1cyB0byBzaGlmdCB0byBhIGRpZmZlcmVudCBzbmFwIHBv
aW50LgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdMYXlvdXRVcGRhdGVkKTogU2V0IHRoZQorICAgICAgICBjdXJyZW50IGhvcml6b250YWwg
YW5kIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldCBpbmRpY2VzLgorICAgICAgICAoV2ViQ29y
ZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvci5oOiBNYXJrIHRoZSBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcworICAgICAgICBmb3Ig
ZXhwb3J0IHNvIHRoYXQgaXQgY2FuIGJlIHJlYWNoZWQgYnkgdGhlIFVJUHJvY2Vzcy4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOiBLZWVwIHRyYWNrIG9m
IGhvcml6b250YWwgYW5kCisgICAgICAgIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldCBpbmRp
Y2VzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNl
dEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgpOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6
dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOiBVcGRhdGUgdGhlIHNjcm9sbCBzbmFwCisgICAgICAgIHBv
aW50IG9mZnNldCBpbmRpY2VzIGlmIGVpdGhlciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlOjpjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNldEN1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXgpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlOjpzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2Vz
RGlkQ2hhbmdlKTogTmV3IG1ldGhvZAorICAgICAgICB0byBoYW5kbGUgbm90aWZpY2F0aW9ucyBh
Ym91dCBzY3JvbGwgc25hcCBpbmRleCBjaGFuZ2VzIGZyb20gdGhlIFVJUHJvY2Vzcy4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlSU9TOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSk6IE5l
dyBtZXRob2QKKyAgICAgICAgdG8gaGFuZGxlIG5vdGlmaWNhdGlvbnMgYWJvdXQgc2Nyb2xsIHNu
YXAgaW5kZXggY2hhbmdlcyBmcm9tIHRoZSBVSVByb2Nlc3MuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVJT1MuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUJlZm9yZUNoaWxk
cmVuKTogVXBkYXRlIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IGN1cnJlbnQgb2Zmc2V0IGlu
ZGljZXMgaWYgdGhleSBoYXZlIGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxPZmZzZXRPbkF4aXMpOiBSZW1vdmUgdW5u
ZWVkZWQKKyAgICAgICAgUExBVEZPUk0oTUFDKSBtYWNyby4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Ny
b2xsQW5pbWF0b3IpOiBXZSBoYXZlIGEgU2Nyb2xsQ29udHJvbGxlciBpZiB3ZSBhcmUKKyAgICAg
ICAgc3VwcG9ydGluZyBzY3JvbGwgc25hcCBwb2ludHMgb3IgcnViYmVyIGJhbmRpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKTogVGhpcyBtZXRob2QgaXMgbm90IG5lZWRlZAorICAgICAgICBmb3IgaU9TIGJ1aWxkcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVBY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JPZmZzZXQpOiBFbmFibGUgdGhpcyBvbiBpT1MuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKTogUmVuYW1lZCBmcm9tICd1cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMnCisgICAgICAgIGFuZCBlbmFibGVkIG9uIGlPUy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNB
bmRUaW1lcnMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6
IEVuYWJsZSBzb21lIHNjcm9sbCBzbmFwIG1ldGhvZHMgb24gaU9TLgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpoYW5kbGVXaGVlbEV2ZW50KTogRW5hYmxlIHNjcm9sbCBzbmFwIGluZGV4IGJvb2trZWVwaW5n
IG9uIGlPUywgdG9vLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSk6IFJldmlzZSB0byBjYWxsICd1cGRhdGVTY3JvbGxTbmFwU3RhdGUnIGlu
c3RlYWQKKyAgICAgICAgb2YgJ3VwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycycuCisgICAg
ICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oOiBFbmFibGUgc29tZSBtZXRo
b2RzIG9uIGlPUy4gUmVvcmRlciBtZXRob2RzIHRvCisgICAgICAgIHJlZHVjZSB0aGUgbnVtYmVy
IG9mIG1hY3JvcyBuZWVkZWQgdG8gZG8gc28uCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Ny
b2xsQ29udHJvbGxlci5tbToKKyAgICAgICAgKHN5c3RlbVVwdGltZSk6IE9ubHkgYnVpbGQgZm9y
IE1hYy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xs
ZXIpOiBEaXNhYmxlIHJ1YmJlciBiYW5kLXNwZWNpZmljIG1lbWJlcnMgb24gaU9TLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6IE9ubHkgYnVp
bGQgdGhpcyBvbiBNYWMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjppc1J1
YmJlckJhbmRJblByb2dyZXNzKTogQWx3YXlzIHJldHVybiAnZmFsc2UnIG9uIGlPUy4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcik6
IE9ubHkgYnVpbGQgdGhpcyBvbiBNYWMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxTbmFwUG9pbnRTdGF0ZSk6IEVu
YWJsZSBvbiBpT1MuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpoYXNBY3Rp
dmVTY3JvbGxTbmFwVGltZXJGb3JBeGlzKTogT25seSBidWlsZCBvbiBNYWMuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUpOiByZW5hbWVk
IGZyb20gJ3VwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycycKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKTogT25seSBidWlsZCBvbiBN
YWMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjppbml0aWFsaXplR2xpZGVQ
YXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjph
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKTogRW5hYmxlIG9uIGlPUy4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zm
c2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNj
cm9sbFNuYXBBbmltYXRpb24pOiBPbmx5IGJ1aWxkIG9uIE1hYy4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OmNvbXB1dGVHbGlkZURlbHRhKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxD
b29yZGluYXRlZExheWVyKTogQ2FwdHVyZSBhbnkgY2hhbmdlcyBpbiBzY3JvbGwKKyAgICAgICAg
c25hcCBvZmZzZXQgaW5kaWNlcy4KKwogMjAxNS0wNi0xOCAgSmVyZW15IEpvbmVzICA8amVyZW15
akBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBVSVdpbmRvdyBmb3IgZnVsbHNjcmVlbiB2
aWRlbyBmb3Igc2VsZWN0ZWQgY2xpZW50cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShy
ZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw5IEBA
IHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWUKIAogICAgIGlmIChjb25z
dCBWZWN0b3I8TGF5b3V0VW5pdD4qIHZlcnRpY2FsU25hcE9mZnNldHMgPSBmcmFtZVZpZXcudmVy
dGljYWxTbmFwT2Zmc2V0cygpKQogICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zm
c2V0c0FzRmxvYXQoKm5vZGUsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsICp2ZXJ0aWNhbFNu
YXBPZmZzZXRzLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgbm9kZS0+c2V0
Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChmcmFtZVZpZXcuY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCgpKTsKKyAgICBub2RlLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9p
bnRJbmRleChmcmFtZVZpZXcuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNDg0LDYgKzQ4Nyw4IEBAIHZvaWQgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlT3YKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUs
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Nyb2xsaW5nR2VvbWV0cnktPmhvcml6b250
YWxTbmFwT2Zmc2V0cywgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgc2V0
U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBzY3JvbGxpbmdHZW9tZXRyeS0+dmVydGljYWxTbmFwT2Zmc2V0cywgbV9w
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgbm9kZS0+c2V0Q3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxpbmdHZW9tZXRyeS0+Y3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk7CisgICAgICAgIG5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4KHNjcm9sbGluZ0dlb21ldHJ5LT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk7
CiAjZW5kaWYKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxODU3
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2NoZWR1bGVVcGRhdGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNT
Y3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBwcm9ncmFtbWF0
aWNTY3JvbGwsIFNldE9yU3luY1Njcm9sbGluZ0xheWVyUG9zaXRpb24pOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhTY3JvbGxpbmdO
b2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhTY3Jv
bGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJ
bmRleCk7CiAgICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVy
VGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCw2ICsxNjgsOCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAg
ICAgVmVjdG9yPExheW91dFVuaXQ+IGhvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICAgICAgVmVj
dG9yPExheW91dFVuaXQ+IHZlcnRpY2FsU25hcE9mZnNldHM7CisgICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4OwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuY3BwCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjMsNiArMTIzLDI0IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRWZXIKICAgICBtX3ZlcnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKICAgICBzZXRQ
cm9wZXJ0eUNoYW5nZWQoVmVydGljYWxTbmFwT2Zmc2V0cyk7CiB9CisKK3ZvaWQgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHVu
c2lnbmVkIGluZGV4KQoreworICAgIGlmIChtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXggPT0gaW5kZXgpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXggPSBpbmRleDsKKyAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoSG9yaXpv
bnRhbFNuYXBPZmZzZXRJbmRleCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBpZiAobV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9PSBpbmRleCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSBp
bmRleDsKKyAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoVmVydGljYWxTbmFwT2Zmc2V0SW5kZXgpOwor
fQogI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQogICAgICAgICBIb3Jpem9udGFsU25hcE9mZnNldHMsCiAgICAgICAgIFZl
cnRpY2FsU25hcE9mZnNldHMsCisgICAgICAgIEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgsCisg
ICAgICAgIFZlcnRpY2FsU25hcE9mZnNldEluZGV4LAogI2VuZGlmCiAgICAgICAgIEV4cGVjdHNX
aGVlbEV2ZW50VGVzdFRyaWdnZXIsCiAgICAgfTsKQEAgLTc1LDYgKzc3LDEyIEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZlcnRpY2FsU25hcE9mZnNldHMoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFZlcnRpY2FsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgdW5z
aWduZWQgY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCk7CisKKyAgICB1
bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkKTsKICNlbmRpZgogCiAg
ICAgY29uc3QgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzJiBzY3JvbGxhYmxlQXJlYVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVyczsgfQpAQCAtMTAz
LDYgKzExMSw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBW
ZWN0b3I8ZmxvYXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOwogICAgIFZlY3RvcjxmbG9hdD4g
bV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIG1f
c2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOwogICAgIGJvb2wgbV9yZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwgeyBmYWxzZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkocmV2aXNpb24gMTg1
NzM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw4IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgY2FsbCBz
Y3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbCgpLgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcoU2Nyb2xsaW5n
Tm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBp
blVzZXJJbnRlcmF0aW9uKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjdXJy
ZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhv
cml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSA9IDA7CisKICAgICBGbG9hdFBvaW50IG1haW5G
cmFtZVNjcm9sbFBvc2l0aW9uKCk7CiAgICAgCiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTg1NzM0KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3MywxMiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp1
cGRhdGVCCiAKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCiAgICAgICAgIG1fdmVydGljYWxT
bmFwT2Zmc2V0cyA9IHN0YXRlLnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKworICAgIGlmIChzdGF0
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9u
dGFsU25hcE9mZnNldEluZGV4KSkKKyAgICAgICAgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2lu
dEluZGV4ID0gc3RhdGUuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOworCisgICAg
aWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlZlcnRpY2FsU25hcE9mZnNldEluZGV4KSkKKyAgICAgICAgbV9jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCA9IHN0YXRlLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CiAjZW5k
aWYKIAogICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVBhcmFtcykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDEw
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpv
bnRhbFNuYXBPZmZzZXRzOyB9CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWxTbmFw
T2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTbmFwT2Zmc2V0czsgfQorICAgIHVu
c2lnbmVkIGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXg7IH0KKyAgICB1bnNpZ25lZCBjdXJyZW50
VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2Fs
U25hcFBvaW50SW5kZXg7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
ID0gaW5kZXg7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVu
c2lnbmVkIGluZGV4KSB7IG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSBpbmRleDsg
fQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTk5LDYgKzEwMyw4IEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBWZWN0b3I8ZmxvYXQ+IG1faG9yaXpvbnRhbFNu
YXBPZmZzZXRzOwogICAgIFZlY3RvcjxmbG9hdD4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAg
IHVuc2lnbmVkIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAg
ICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAkocmV2aXNpb24gMTg1NzM0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDYgKzExMSwxNyBAQCB2b2lkIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6c2Nyb2xs
aW5nVHJlCiAgICAgfSk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpjdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25l
ZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsaW5n
Q29vcmRpbmF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yPiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fc2Nyb2xsaW5nQ29vcmRpbmF0
b3I7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzY3JvbGxpbmdDb29yZGluYXRvciwg
bm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0aWNhbF0geworICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMobm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0
aWNhbCk7CisgICAgfSk7Cit9CisKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
IHBoYXNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRT
Y3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw2ICs2MCw3IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBUaHJlYWRlZFNj
cm9sbGluZ1RyZWUoQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciopOwogCiAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxv
YXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIFNldE9yU3luY1Njcm9sbGluZ0xheWVyUG9zaXRpb24g
PSBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6
b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBvdmVycmlkZTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UpIG92
ZXJyaWRlOwogICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMoU2Nyb2xsaW5nTm9k
ZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVkIHZlcnRpY2FsSW5kZXgpIG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVJT1MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2lvcy9TY3JvbGxpbmdUcmVlSU9TLmNwcAkocmV2aXNpb24gMTg1NzM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVJT1MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsNiArMTE4LDE3IEBAIEZsb2F0UmVjdCBTY3JvbGxpbmdUcmVlSU9TOjpmaXhl
ZFBvc2l0aW8KICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nVHJl
ZUlPUzo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2ViQ29yZTo6U2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpCit7
CisgICAgaWYgKCFtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I+IHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtzY3Jv
bGxpbmdDb29yZGluYXRvciwgbm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0aWNhbF0geworICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMobm9kZUlE
LCBob3Jpem9udGFsLCB2ZXJ0aWNhbCk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUlPUy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlSU9TLmgJ
KHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbChTY3JvbGxp
bmdOb2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBTZXRPclN5bmNTY3Jv
bGxpbmdMYXllclBvc2l0aW9uID0gU3luY1Njcm9sbGluZ0xheWVyUG9zaXRpb24pIG92ZXJyaWRl
OwogCisgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBv
dmVycmlkZTsKKwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpeGVkUG9zaXRpb25SZWN0KCkgb3Zl
cnJpZGU7CiAKICAgICBSZWZQdHI8QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxp
bmdDb29yZGluYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTWFjLm1tCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTM3LDYgKzEzNywxMiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWM6CiAKICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykp
CiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRl
Tm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpv
bnRhbFNuYXBPZmZzZXRJbmRleCkpCisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CisgICAg
CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCkpCisgICAgICAgIG1f
c2Nyb2xsQ29udHJvbGxlci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCgpKTsKICNlbmRpZgogCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpFeHBlY3RzV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKSkKQEAgLTU1Myw3ICs1NTksNyBAQCBzdGF0aWMgdm9pZCBsb2dUaHJl
YWRlZFNjcm9sbGluZ01vZGUodW5zCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBT
d2l0Y2hpbmcgdG8gdGhyZWFkZWQgc2Nyb2xsaW5nIG1vZGUuIFRpbWU6ICVmXG4iLCBXVEY6Om1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKIH0KIAotI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogTGF5
b3V0VW5pdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxPZmZzZXRP
bkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CiB7CiAgICAgY29uc3QgRmxvYXRQb2lu
dCYgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDE4NTczNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
CiAKIFNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKQotI2lmIChF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFU
Rk9STShNQUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQogICAgICwgbV9zY3JvbGxDb250cm9sbGVyKCp0aGlzKQogI2VuZGlmCiAgICAgLCBt
X2N1cnJlbnRQb3NYKDApCkBAIC04NCwxMSArODQsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsVG9PZmZzZXRXaXRobwogICAgIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvck9m
ZnNldCgpOwogfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFD
KQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaWYgUExBVEZPUk0oTUFDKQogYm9vbCBT
Y3JvbGxBbmltYXRvcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250cm9s
bGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KTsKIH0KKyNlbmRp
ZgogCiBib29sIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2Uo
KSBjb25zdAogewpAQCAtMTgwLDcgKzE4Miw3IEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6
OmN1cnJlbnRQb3NpdGkKIAogdm9pZCBTY3JvbGxBbmltYXRvcjo6dXBkYXRlQWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yT2Zmc2V0KCkKIHsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQ
TEFURk9STShNQUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBtX3Njcm9sbENv
bnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQobV9jdXJyZW50UG9z
WCwgbV9jdXJyZW50UG9zWSk7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlci5hY3RpdmVTY3Jv
bGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSkgewogICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNldEN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNj
cm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CkBAIC0x
OTUsMTAgKzE5NywxMCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5n
CiAgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBv
aW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0KIAotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0
ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCiB7Ci0gICAgbV9z
Y3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycyhtX3Njcm9sbGFi
bGVBcmVhKTsKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFN0YXRlKG1f
c2Nyb2xsYWJsZUFyZWEpOwogfQogCiBMYXlvdXRVbml0IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxP
ZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAKLSNpZiAoRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSB8fCBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykg
fHwgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgi
CiAjZW5kaWYKIApAQCAtNTIsNyArNTIsNyBAQCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNz
IFNjcm9sbGJhcjsKIGNsYXNzIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjsKIAotI2lmIChFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFURk9STShN
QUMpCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQogY2xhc3MgU2Nyb2xsQW5pbWF0b3IgOiBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQg
ewogI2Vsc2UKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKQEAgLTEyOCw5ICsxMjgsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6
OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAgICAgCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGJvb2wgcHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0
ZVNjcm9sbFNuYXBTdGF0ZSgpOwogICAgIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNj
cm9sbEV2ZW50QXhpcykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxP
bkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBh
Y3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKQEAgLTE0NCw3ICsxNDYsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAg
ICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3doZWVsRXZlbnRUZXN0VHJpZ2dlcjsK
LSNpZiAoRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSkg
JiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApIHx8IEVOQUJMRShS
VUJCRVJfQkFORElORykKICAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsK
ICNlbmRpZgogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxv
YXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5
MCw3IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY28KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBoYW5kbGVkRXZlbnQgPSBzY3JvbGxBbmltYXRvcigp
LmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgaWYg
KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpIHsKICAg
ICAgICAgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRvcigp
LmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KSk7CiAgICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbEFuaW1h
dG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKSk7CkBAIC00NjEsMTAgKzQ2MSw4IEBAIEludFBvaW50IFNjcm9sbGFibGVBcmVhOjpuZWFy
ZXN0QWN0aXZlU24KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRl
KCkKIHsKLSNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0
b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwotI2VuZGlmCisgICAgICAgIHNj
cm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKIAogICAgIGlmIChpc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4NTcz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTY3JvbGxDb250cm9sbGVy
X2gKICNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCiAKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSB8fCBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgpAQCAt
NTEsNiArNTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+U2Nyb2xsQ29udHJvbGxlckNs
aWVudCgpIHsgfQogCiBwdWJsaWM6CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIHN0cmV0
Y2hBbW91bnQoKSA9IDA7CkBAIC03NywxMSArNzgsMTIgQEAgcHVibGljOgogICAgIC8vIElmIHRo
ZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEsIHRo
aXMgZnVuY3Rpb24gd2lsbCBjYXVzZQogICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0aGUg
bmVhcmVzdCBib3VuZGFyeSBwb2ludC4KICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9z
aXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOworI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVB
cmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVh
c29uKSBjb25zdCB7IC8qIERvIG5vdGhpbmcgKi8gfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVU
ZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNv
bikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApICYmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVu
dEF4aXMsIGZsb2F0IGRlbHRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25h
cFRpbWVyKFNjcm9sbEV2ZW50QXhpcykKQEAgLTExNCw0MSArMTE2LDUwIEBAIGNsYXNzIFNjcm9s
bENvbnRyb2xsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNjcm9sbENvbnRyb2xsZXIoU2Ny
b2xsQ29udHJvbGxlckNsaWVudCYpOwogCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGJvb2wgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyNlbmRpZgogCiAgICAg
Ym9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Q7CiAgICAgYm9vbCBpc1Njcm9sbFNu
YXBJblByb2dyZXNzKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQ
TEFURk9STShNQUMpCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNB
bmRUaW1lcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXMsIGNv
bnN0IFZlY3RvcjxMYXlvdXRVbml0PiYpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKICAgICB2b2lkIHNldEFjdGl2ZVNj
cm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChpbnQgeCwgaW50IHkpOwogICAg
IGJvb2wgYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KICAgICB2b2lkIHNldFNjcm9sbFNuYXBJ
bmRleERpZENoYW5nZShib29sIHN0YXRlKSB7IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hh
bmdlID0gc3RhdGU7IH0KKyAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUo
Y29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYm9vbCBwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAg
ICAgYm9vbCBoYXNBY3RpdmVTY3JvbGxTbmFwVGltZXJGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykg
Y29uc3Q7CiAjZW5kaWYKKyNlbmRpZgogCiBwcml2YXRlOgorI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKICAgICB2b2lkIHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpOwogICAgIHZvaWQgc3Rv
cFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKICAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CiAgICAg
dm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKIAogICAgIGJvb2wgc2hvdWxkUnViYmVy
QmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyNl
bmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4
aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgaW50KTsKKyAgICBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZSYgc2Nyb2xsU25hcFBvaW50U3RhdGUoU2Nyb2xsRXZlbnRBeGlzKTsK
KyAgICBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc2Nyb2xsU25hcFBvaW50U3RhdGUo
U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBob3Jp
em9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsU25h
cFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50
QXhpcyk7CiAgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyk7CiAK
LSAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0
OwogICAgIHZvaWQgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwT25BeGlzKFNjcm9sbEV2
ZW50QXhpcywgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAgICAgYm9vbCBzaG91bGRPdmVy
cmlkZVdoZWVsRXZlbnQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KSBjb25zdDsKLSAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpcywgaW50KTsKIAogICAgIHZvaWQgYmVnaW5TY3JvbGxTbmFwQW5p
bWF0aW9uKFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsU25hcFN0YXRlKTsKICAgICB2b2lkIHNjcm9s
bFNuYXBBbmltYXRpb25VcGRhdGUoU2Nyb2xsRXZlbnRBeGlzKTsKQEAgLTE1Nyw5ICsxNjgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhTY3JvbGxFdmVu
dEF4aXMsIGJvb2wpOwogICAgIGZsb2F0IGNvbXB1dGVTbmFwRGVsdGEoU2Nyb2xsRXZlbnRBeGlz
KSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRlR2xpZGVEZWx0YShTY3JvbGxFdmVudEF4aXMpIGNv
bnN0OwotCi0gICAgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNjcm9sbFNuYXBQb2ludFN0YXRl
KFNjcm9sbEV2ZW50QXhpcyk7Ci0gICAgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNj
cm9sbFNuYXBQb2ludFN0YXRlKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CisjZW5kaWYKICNlbmRp
ZgogCiAgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7CkBAIC0xNjksMjAgKzE3
OCwyNCBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKICAg
ICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OwogCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQogICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgogICAgIENGVGltZUludGVydmFsIG1fc3Rh
cnRUaW1lOwogICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKICAgICBGbG9hdFBvaW50IG1f
b3JpZ09yaWdpbjsKICAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CiAgICAgUnVuTG9vcDo6
VGltZXI8U2Nyb2xsQ29udHJvbGxlcj4gbV9zbmFwUnViYmVyYmFuZFRpbWVyOworI2VuZGlmCiAK
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgLy8gRklY
TUU6IEZpbmQgYSB3YXkgdG8gY29uc29saWRhdGUgYm90aCB0aW1lcnMgaW50byBvbmUgdmFyaWFi
bGUuCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU+IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+IG1fdmVydGljYWxTY3JvbGxT
bmFwU3RhdGU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRv
IGNvbnNvbGlkYXRlIGJvdGggdGltZXJzIGludG8gb25lIHZhcmlhYmxlLgogICAgIFJ1bkxvb3A6
OlRpbWVyPFNjcm9sbENvbnRyb2xsZXI+IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lcjsKICAg
ICBSdW5Mb29wOjpUaW1lcjxTY3JvbGxDb250cm9sbGVyPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRp
bWVyOwogI2VuZGlmCisjZW5kaWYKIAogICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmUgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgeyBmYWxzZSB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
Lm1tCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
Y3JvbGxDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw5IEBACiAjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIAorI2lmIFBMQVRGT1JNKE1BQykKIHN0YXRpYyBOU1RpbWVJbnRlcnZhbCBzeXN0ZW1VcHRp
bWUoKQogewogICAgIGlmIChbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVtVXB0aW1lKV0pCkBAIC02MiwxMyArNjMsMTUgQEAgc3Rh
dGljIE5TVGltZUludGVydmFsIHN5c3RlbVVwdGltZSgpCiAgICAgfQogICAgIHJldHVybiAwOwog
fQotCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQogc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQg
PSAwLjEwZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0
Y2hSYXRpbyA9IDE7CiBzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJl
ZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiBzdGF0aWMgY29uc3QgZmxvYXQgc25hcE1hZ25pdHVk
ZU1heCA9IDI1OwpAQCAtODUsNiArODgsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWF4VGFyZ2V0
V2hlZWxEZWx0YSA9CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluVGFyZ2V0V2hlZWxEZWx0YSA9IDMu
NTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBXaGVlbEV2ZW50U3Rh
dHVzIHsKICAgICBVc2VyU2Nyb2xsQmVnaW4sCiAgICAgVXNlclNjcm9sbGluZywKQEAgLTEyMSwx
MiArMTI1LDE1IEBAIHN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQogICAgIH0K
ICAgICByZXR1cm4gbXVsdGlwbGllcjsKIH0KKyNlbmRpZgogCiBTY3JvbGxDb250cm9sbGVyOjpT
Y3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKICAgICA6IG1f
Y2xpZW50KGNsaWVudCkKICAgICAsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wKDApCisj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICwgbV9zdGFydFRpbWUoMCkKICAgICAsIG1f
c25hcFJ1YmJlcmJhbmRUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZTY3JvbGxDb250
cm9sbGVyOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCisjZW5kaWYKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hvcml6b250YWxTY3JvbGxT
bmFwVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmU2Nyb2xsQ29udHJvbGxlcjo6aG9y
aXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKQogICAgICwgbV92ZXJ0aWNhbFNjcm9sbFNuYXBU
aW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZTY3JvbGxDb250cm9sbGVyOjp2ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKQpAQCAtMTM0LDkgKzE0MSwxMCBAQCBTY3JvbGxDb250cm9s
bGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sCiB7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCiBi
b29sIFNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQogewotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBM
QVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGlmICghcHJvY2Vz
c1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKQEAgLTMyMCw3ICszMjgsOSBAQCBib29sIFNjcm9sbENvbnRyb2xsZXI6Omhh
bmRsZVdoZWVsRXZlbnQoCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQogc3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvd2FyZFplcm8o
ZmxvYXQgbnVtKQogewogICAgIHJldHVybiBudW0gPiAwID8gY2VpbGYobnVtIC0gMC41ZikgOiBm
bG9vcmYobnVtICsgMC41Zik7CkBAIC0zOTYsMTMgKzQwNiwxOCBAQCB2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltCiAgICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRU
aW1lcigpOwogICAgIH0KIH0KKyNlbmRpZgogCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAogeworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykg
JiYgUExBVEZPUk0oTUFDKQogICAgIGlmICghbV9pblNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzICYmICFtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFtX2NsaWVudC5zdHJldGNoQW1vdW50
KCkuaXNaZXJvKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiBib29s
IFNjcm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdApAQCAtNDE0
LDYgKzQyOSw3IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aXNTY3JvbGxTbmFwSW5Qcm8KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiB2b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpCiB7CiAgICAgbV9jbGll
bnQuc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7CkBAIC00NjAsOCArNDc2LDkgQEAgYm9vbCBT
Y3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSQogCiAgICAgcmV0dXJuIHRydWU7CiB9
CisjZW5kaWYKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIFNj
cm9sbENvbnRyb2xsZXI6OnNjcm9sbFNuYXBQb2ludFN0YXRlKFNjcm9sbEV2ZW50QXhpcyBheGlz
KQogewogICAgIEFTU0VSVChheGlzICE9IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCB8fCBt
X2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpOwpAQCAtNDc4LDYgKzQ5NSw3IEBAIGNvbnN0IFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlJiBTY3JvbGxDb24KICAgICByZXR1cm4gKGF4aXMgPT0gU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/ICptX2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUg
OiAqbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKIGJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFzQWN0aXZlU2Nyb2xsU25hcFRpbWVyRm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXMgYXhpcykgY29uc3QKIHsKICAgICByZXR1cm4gKGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKSA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2
ZSgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5pc0FjdGl2ZSgpOwpAQCAtNTk3LDggKzYx
NSw5IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnQKIAogICAgIHJl
dHVybiB0cnVlOwogfQorI2VuZGlmCiAKLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Ny
b2xsQW5pbWF0b3JzQW5kVGltZXJzKGNvbnN0IFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNj
cm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICAvLyBGSVhNRTogQ3VycmVudGx5
LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJlIHJlY3JlYXRlZCBldmVuIHRob3VnaCB0aGUgc25h
cCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRhdGVkLgogICAgIGlmIChzY3JvbGxhYmxlQXJlYS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKSkKQEAgLTYyMiw2ICs2NDEsNyBAQCB2b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQCiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFw
U3RhdGUgPSAhc25hcFBvaW50cy5pc0VtcHR5KCkgPyBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbFNu
YXBBbmltYXRvclN0YXRlPihTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBzbmFwUG9pbnRzKSA6
IG51bGxwdHI7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBheGlzKQogewogICAgIFJ1bkxv
b3A6OlRpbWVyPFNjcm9sbENvbnRyb2xsZXI+JiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA6
IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXI7CkBAIC02OTksNiArNzE5LDcgQEAgdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjppbml0aWFsaXplR2xpZGVQYQogICAgIHNuYXBTdGF0ZS5tX2dsaWRlTWFn
bml0dWRlID0gKHNuYXBTdGF0ZS5tX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKyB0YXJnZXRGaW5h
bFdoZWVsRGVsdGEpIC8gMjsKICAgICBzbmFwU3RhdGUubV9nbGlkZVBoYXNlU2hpZnQgPSBhY29z
KChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIC0gdGFyZ2V0RmluYWxXaGVlbERl
bHRhKSAvIChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFyZ2V0RmluYWxX
aGVlbERlbHRhKSk7CiB9CisjZW5kaWYKIAogdW5zaWduZWQgU2Nyb2xsQ29udHJvbGxlcjo6YWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKIHsK
QEAgLTc0NSw2ICs3NjYsNyBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldEFjdGl2ZVNjcm9s
bFNuCiAgICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHkpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQogdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKIHsKICAgICBBU1NFUlQobmV3U3Rh
dGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6U25hcHBpbmcpOwpAQCAtODg2LDYgKzkwOCw3IEBAIGZsb2F0IFNjcm9sbENvbnRyb2xs
ZXI6OmNvbXB1dGVHbGlkZURlbHQKICAgICByZXR1cm4gZ2xpZGVEZWx0YTsKIH0KICNlbmRpZgor
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE4
NTczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMzLDYgKzM5MzMsOCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsCiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0
cnkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gKm9mZnNldHM7CiAgICAgICAgICAgICBpZiAoY29u
c3QgVmVjdG9yPExheW91dFVuaXQ+KiBvZmZzZXRzID0gbGF5ZXIudmVydGljYWxTbmFwT2Zmc2V0
cygpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LnZlcnRpY2FsU25hcE9mZnNl
dHMgPSAqb2Zmc2V0czsKKyAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXggPSBsYXllci5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCk7CisgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCA9IGxheWVyLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CiAjZW5k
aWYKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT51cGRhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUobm9kZUlELCBiYWNraW5nLT5zY3JvbGxpbmdMYXllcigpLCBiYWNraW5nLT5zY3Jv
bGxpbmdDb250ZW50c0xheWVyKCksICZzY3JvbGxpbmdHZW9tZXRyeSk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE1LTA2LTE4ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIHNjcm9sbEludG9WaWV3
SWZOZWVkZWQgaXMgbm90IHdvcmtpbmcgd2l0aCBzY3JvbGwtc25hcCBwb2ludHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTMxOAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjEwODE1MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU+OjplbmNvZGUpOiBIYW5kbGUgc2Nyb2xsIHNuYXAgcG9pbnQgb2Zm
c2V0IGluZGljZXMuCisgICAgICAgIChBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZT46OmRlY29kZSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKTogQWRkZWQuIFNlbmQgbWVzc2FnZQorICAgICAgICB0byBXZWJQcm9jZXNzIHdoZW4g
c2Nyb2xsIHNuYXAgaW5kaWNlcyBoYXZlIGNoYW5nZWQuCisgICAgICAgICogVUlQcm9jZXNzL1Nj
cm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Up
OiBBZGRlZC4gTm90aWZ5IHRoZQorICAgICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5IHdoZW4gc2Nyb2xsIHNuYXAgaW5kaWNlcyBoYXZlIGNoYW5nZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MubW06CisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVs
ZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVu
dE9mZnNldDpdKTogUmV2aXNlZC4KKyAgICAgICAgSWRlbnRpZnkgY2hhbmdlcyBpbiB0aGUgY3Vy
cmVudCBzY3JvbGwgc25hcCBwb2ludCBvZmZzZXQgaW5kZXggKGluIGVpdGhlciB0aGUgaG9yaXpv
bnRhbCBvciB2ZXJ0aWNhbAorICAgICAgICBkaXJlY3Rpb25zKSwgYW5kIHNlbmQgYSBub3RpZmlj
YXRpb24gd2hlbiB0aGlzIGhhcHBlbnMuCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KTogQWRkZWQuIE5vdGlmeSB0aGUKKyAgICAgICAgU2Nyb2xsaW5nIFRyZWUgd2hlbiBpbmRpY2Vz
IGNoYW5nZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5OjphZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcpOiBSZXZpc2Vk
LiBBbHdheXMgY29tcHV0ZQorICAgICAgICB0aGUgbmV3IHNjcm9sbCBzbmFwIG9mZnNldCBpbmRl
eCAoZXZlbiB3aGVuIHdlIHdpbGwgcnViYmVyIGJhbmQpLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
U2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW46IEFk
ZCBhIG5ldyBtZXNzYWdlIHRvIHJlbGF5IGNoYW5nZXMgaW4gc2Nyb2xsCisgICAgICAgIHNuYXAg
aW5kZXguCisgICAgICAgICogV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKTogQWRkZWQuCisKIDIwMTUt
MDYtMTggIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBBVktp
dCB1c2FnZSBvZiBwaXAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTg1NzM0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGkKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIFNDUk9MTElO
R19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFw
T2Zmc2V0cywgaG9yaXpvbnRhbFNuYXBPZmZzZXRzKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09E
RShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRp
Y2FsU25hcE9mZnNldHMpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCwgY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCkKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCwgY3VycmVudFZlcnRpY2Fs
U25hcFBvaW50SW5kZXgpCiAjZW5kaWYKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVBhcmFtcywgc2Nyb2xsYWJsZUFy
ZWFQYXJhbWV0ZXJzKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvbikKQEAgLTIwMCw2ICsyMDIsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBTQ1JPTExJTkdfTk9E
RV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNl
dHMsIFZlY3RvcjxmbG9hdD4sIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk7CiAgICAgU0NST0xM
SU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0cywgVmVjdG9yPGZsb2F0Piwgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyk7CisgICAgU0NS
T0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRh
bFNuYXBPZmZzZXRJbmRleCwgdW5zaWduZWQsIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlZlcnRpY2FsU25hcE9mZnNldEluZGV4LCB1bnNpZ25lZCwgc2V0Q3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgpOwogI2VuZGlmCiAgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMsIFNjcm9sbGFi
bGVBcmVhUGFyYW1ldGVycywgc2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcAkocmV2aXNpb24g
MTg1NzM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSwx
MSBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnZpCiAgICAgbV9zY3Jv
bGxpbmdUcmVlLT52aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcobm9kZUlELCBm
aXhlZFBvc2l0aW9uUmVjdCwgc2NhbGUpOwogfQogCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6OlNj
cm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRp
Y2FsKQoreworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpDdXJyZW50U25hcFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKG5vZGVJ
RCwgaG9yaXpvbnRhbCwgdmVydGljYWwpKTsKK30KKwogLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBz
Y3JvbGxpbmcgdHJlZS4KIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Ny
b2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGVkTm9kZUlELCBj
b25zdCBGbG9hdFBvaW50JiBuZXdTY3JvbGxQb3NpdGlvbiwgU2V0T3JTeW5jU2Nyb2xsaW5nTGF5
ZXJQb3NpdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKQogewpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgJKHJldmlzaW9uIDE4NTczNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAv
LyBDYWxsZWQgZXh0ZXJuYWxseSB3aGVuIG5hdGl2ZSB2aWV3cyBtb3ZlIGFyb3VuZC4KICAgICB2
b2lkIHZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxp
bmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRv
dWJsZSBzY2FsZSk7CiAKKyAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQg
dmVydGljYWwpOworCiAgICAgLy8gRklYTUU6IGV4cG9zZSB0aGUgdHJlZSBhbmQgcGFzcyB0aGlz
IHRvIHRoYXQ/CiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudCYpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Nj
cm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCShyZXZpc2lv
biAxODU3MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNj
cm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDExIEBAIFBhc3NS
ZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFJlbW90ZVNjcm8KICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAordm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0Rp
ZENoYW5nZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNp
Z25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3VycmVu
dFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Uobm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0aWNhbCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3Rl
U2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6U2V0T3JTeW5j
U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA9IFdlYkNvcmU6OlN5bmNTY3JvbGxpbmdMYXllclBvc2l0
aW9uKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0
c1Njcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpIG92
ZXJyaWRlOworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2ViQ29y
ZTo6U2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNh
bCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUmVtb3RlU2Nyb2xsaW5nVHJl
ZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGlu
Zy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCShyZXZpc2lvbiAx
ODU3MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYg
KzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgb3ZlcmZsb3dTY3JvbGxEaWRFbmQoKTsKICAgICB2
b2lkIG92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKTsKICAgICB2b2lkIHNj
cm9sbFZpZXdEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGJvb2wgaW5Vc2Vy
SW50ZXJhdGlvbik7CisgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1
bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCk7CiAKICAgICBDQUxheWVyICpz
Y3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLm1tCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Ny
b2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MywxMSArODMsMjkgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERy
YWdnaW5nOihVSVNjcgogICAgIENHRmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdldENvbnRl
bnRPZmZzZXQtPng7CiAgICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENvbnRlbnRP
ZmZzZXQtPnk7CiAKLSAgICB1bnNpZ25lZCBpZ25vcmU7Ci0gICAgaWYgKCFfc2Nyb2xsaW5nVHJl
ZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSAmJiBob3Jpem9udGFsVGFy
Z2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndp
ZHRoKQotICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gY2xvc2VzdFNuYXBPZmZzZXQ8
ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRz
KCksIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGlnbm9yZSk7Ci0gICAgaWYgKCFfc2Ny
b2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkgJiYgdmVydGlj
YWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXpl
LmhlaWdodCkKLSAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IGNsb3Nlc3RTbmFwT2Zm
c2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNl
dHMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIGlnbm9yZSk7CisgICAgdW5zaWduZWQg
b3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJy
ZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0
aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXgoKTsKKworICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAg
ICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0
LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBo
b3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7CisgICAg
ICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3Jv
bGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNl
dC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoIV9zY3JvbGxp
bmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1
bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xv
c2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOworICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4
KGluZGV4KTsKKyAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJn
ZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAgICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlm
IChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlLT5j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkKKyAgICAgICAgfHwgb3JpZ2luYWxWZXJ0
aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KCkpIHsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50U25h
cFBvaW50SW5kaWNlc0RpZENoYW5nZShfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCgpKTsKKyAgICB9CiB9CiAjZW5kaWYKIApAQCAtMjgzLDYgKzMwMSwxNCBA
QCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJCiAgICAgc2Nyb2xsaW5n
VHJlZSgpLnNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhzY3JvbGxp
bmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIGluVXNlckludGVyYXRpb24pOwogfQogCit2b2lk
IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmN1cnJlbnRTbmFwUG9pbnRJ
bmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKQor
eworICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHNjcm9sbGluZ1RyZWUoKS5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShz
Y3JvbGxpbmdOb2RlSUQoKSwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQkocmV2aXNpb24gMTg1NzM0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTUgKzExNiwxNyBAQCB2b2lkIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNjCiB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1NpemUg
bWF4U2Nyb2xsT2Zmc2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dGbG9hdCB0b3BJbnNldCwgQ0dQ
b2ludCogdGFyZ2V0Q29udGVudE9mZnNldCkKIHsKICAgICAvLyBUaGUgYm91bmRzIGNoZWNraW5n
IHdpdGggbWF4U2Nyb2xsT2Zmc2V0cyBpcyB0byBlbnN1cmUgdGhhdCB3ZSB3b24ndCBpbnRlcmZl
cmUgd2l0aCBydWJiZXItYmFuZGluZyB3aGVuIHNjcm9sbGluZyB0byB0aGUgZWRnZSBvZiB0aGUg
cGFnZS4KLSAgICBpZiAoc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPiAw
ICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRoKSB7Cisg
ICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKSkgewogICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRp
b24gPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5
LngsIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk7Ci0gICAgICAgIHRhcmdldENv
bnRlbnRPZmZzZXQtPnggPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCwg
cG90ZW50aWFsU25hcFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRhcmdldENvbnRlbnRPZmZzZXQt
PnggPiAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRo
KQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0Piht
YXhTY3JvbGxPZmZzZXRzLndpZHRoLCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0KIAot
ICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwpICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPiAwICYmIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnkgPCBtYXhTY3JvbGxPZmZzZXRzLmhlaWdodCkgeworICAgIGlmIChz
aG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwpKSB7CiAgICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nl
c3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnksIG1fY3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOwogICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRpb24g
LT0gdG9wSW5zZXQ7Ci0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBzdGQ6Om1pbjxm
bG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7Cisg
ICAgICAgIGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT55ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zm
c2V0LT55IDwgbWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQpCisgICAgICAgICAgICB0YXJnZXRDb250
ZW50T2Zmc2V0LT55ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMuaGVpZ2h0LCBw
b3RlbnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxODU3MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gUmVzcG9uZCB0byBV
SSBwcm9jZXNzIGNoYW5nZXMuCiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2Rl
KFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRpb24pOworICAgIHZvaWQgY3VycmVudFNu
YXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIHVu
c2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKTsKIAogICAgIFdlYlBhZ2UqIG1f
d2ViUGFnZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTg1NzM0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsNiArMjQsNyBAQAogCiBtZXNzYWdlcyAtPiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ciB7CiAgICAgU2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZSh1aW50NjRfdCBub2RlSUQsIFdl
YkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRpb24p
OworICAgIEN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzQ2hhbmdlZEZvck5vZGUodWludDY0X3Qgbm9k
ZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCk7CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IubW0JKHJldmlzaW9uIDE4NTczNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNiArMTAyLDExIEBAIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNj
cm9sbFAKICAgICBzY2hlZHVsZVVwZGF0ZVNjcm9sbFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChu
b2RlSUQsIHNjcm9sbFBvc2l0aW9uLCBmYWxzZSAvKiBGSVhNRSAqLywgc3luY0xheWVyUG9zaXRp
b24gPyBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA6IFNldFNjcm9sbGluZ0xheWVyUG9zaXRp
b24pOwogfQogCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjdXJyZW50U25hcFBv
aW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVk
IGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKQoreworICAgIHNldEFjdGl2ZVNjcm9sbFNu
YXBJbmRpY2VzKG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCg==
</data>
<flag name="review"
          id="280218"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>