<?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>59753</bug_id>
          
          <creation_ts>2011-04-28 15:56:28 -0700</creation_ts>
          <short_desc>Chromium Mac: Fork ScrollAnimatorMac to ScrollAnimatorChromiumMac for overlay scrollbar support</short_desc>
          <delta_ts>2011-06-07 16:57:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>61347</dependson>
          <blocked>59728</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Sailesh Agrawal">sail</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>mihaip</cc>
    
    <cc>morrita</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>394851</commentid>
    <comment_count>0</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 15:56:28 -0700</bug_when>
    <thetext>This bug is to track the work to use ScrollAnimatorMac.mm in Chromium Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394865</commentid>
    <comment_count>1</comment_count>
      <attachid>91578</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 16:05:18 -0700</bug_when>
    <thetext>Created attachment 91578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394902</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-28 16:38:49 -0700</bug_when>
    <thetext>Please mark the patch review? when you want it reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394919</commentid>
    <comment_count>3</comment_count>
      <attachid>91589</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 16:52:06 -0700</bug_when>
    <thetext>Created attachment 91589
Fixed Objective-C symbol clash error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394932</commentid>
    <comment_count>4</comment_count>
      <attachid>91589</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-28 16:59:38 -0700</bug_when>
    <thetext>Comment on attachment 91589
Fixed Objective-C symbol clash error.

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

The changes to ScrollbarOverlayUtilitiesMac.h/mm appear to be changes from WebKit style braces to non WebKit style braces, except for one typo.  I&apos;d suggest not changing those files at all.

Why is the include guard on ScrollAnimatorMac changed?  Do we want to use ScrollAnimator on chromium mac even if ENABLE(SMOOTH_SCROLLING) is off?  That seems wrong, why not just turn SMOOTH_SCROLLING on if that&apos;s the behavior we want?  Is there code in ScrollAnimatorMac.mm currently that is not related to the SMOOTH_SCROLLING enable that should be refactored?

It seems you have some unintended changes in ScrollAnimatorMac.mm (like reodering the elasticDelta/reboundDelta functions for no obvious reason).

&gt; Source/WebCore/ChangeLog:10
&gt; +        No new tests. (OOPS!)

you can&apos;t do this, it will fail a presubmit check. replace this with some text explaining why this patch does not have layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394958</commentid>
    <comment_count>5</comment_count>
      <attachid>91598</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 17:15:41 -0700</bug_when>
    <thetext>Created attachment 91598
Fixed patch to not include changes from another branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394960</commentid>
    <comment_count>6</comment_count>
      <attachid>91589</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 17:16:33 -0700</bug_when>
    <thetext>Comment on attachment 91589
Fixed Objective-C symbol clash error.

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; you can&apos;t do this, it will fail a presubmit check. replace this with some text explaining why this patch does not have layout tests.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394966</commentid>
    <comment_count>7</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 17:18:40 -0700</bug_when>
    <thetext>&gt; The changes to ScrollbarOverlayUtilitiesMac.h/mm appear to be changes from WebKit style braces to non WebKit style braces, except for one typo.  I&apos;d suggest not changing those files at all.

Ooops, sorry. Forgot to rebase my branch. Fixed.

&gt; Why is the include guard on ScrollAnimatorMac changed?  Do we want to use ScrollAnimator on chromium mac even if ENABLE(SMOOTH_SCROLLING) is off?  That seems wrong, why not just turn SMOOTH_SCROLLING on if that&apos;s the behavior we want?  Is there code in ScrollAnimatorMac.mm currently that is not related to the SMOOTH_SCROLLING enable that should be refactored?
So I think enabling SMOOTH_SCROLLING should be separate from enabling overlay scrollbar. As far as I can tell there&apos;s no reason we have to have smooth scrolling to use ScrollAnimatorMac.mm

&gt; It seems you have some unintended changes in ScrollAnimatorMac.mm (like reodering the elasticDelta/reboundDelta functions for no obvious reason).
Fixed. Shouldn&apos;t have been in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394970</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 17:22:26 -0700</bug_when>
    <thetext>Attachment 91598 did not build on chromium:
Build output: http://queues.webkit.org/results/8520542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395484</commentid>
    <comment_count>9</comment_count>
      <attachid>91728</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-29 14:00:57 -0700</bug_when>
    <thetext>Created attachment 91728
Fixed some bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395488</commentid>
    <comment_count>10</comment_count>
      <attachid>91728</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-29 14:04:34 -0700</bug_when>
    <thetext>Comment on attachment 91728
Fixed some bugs

Oops, this patch has some problems. Removing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395500</commentid>
    <comment_count>11</comment_count>
      <attachid>91733</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-29 14:10:46 -0700</bug_when>
    <thetext>Created attachment 91733
Fixed change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396018</commentid>
    <comment_count>12</comment_count>
      <attachid>91733</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-05-01 13:27:44 -0700</bug_when>
    <thetext>Comment on attachment 91733
Fixed change log

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

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:29
&gt; +#if ENABLE(SMOOTH_SCROLLING) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))

Why doesn&apos;t Chromium on Mac just enable SMOOTH_SCROLLING if you want to take this code path.  Adding additional defines defeats the purpose of have fine grained enabled macros.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:54
&gt; +static NSPoint IntPointToNSPoint(WebCore::IntPoint point) {
&gt; +    return NSMakePoint(point.x(), point.y());
&gt; +}
&gt; +
&gt; +static WebCore::IntPoint NSPointToIntPoint(NSPoint point) {
&gt; +    return WebCore::IntPoint(point.x, point.y);
&gt; +}

{ needs to be on the next line. Function can&apos;t start with a capital.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:221
&gt; +    return IntPointToNSPoint(_animator-&gt;scrollableArea()-&gt;currentMousePosition());

Why is this necessary, IntPoint has a conversion to NSPoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396026</commentid>
    <comment_count>13</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-01 13:38:53 -0700</bug_when>
    <thetext>&gt; Why doesn&apos;t Chromium on Mac just enable SMOOTH_SCROLLING if you want to take this code path.  Adding additional defines defeats the purpose of have fine grained enabled macros.

I&apos;m not sure where we are when it comes to implementing smooth scrolling. I&apos;ll ask around but it would be nice to decouple these two features. http:://crbug.com/61140 tracks the smooth scrolling work.

I was talking to jamesr and he recommended refactoring ScrollAnimatorMac.mm so that the overlay code was in a separate file. What do you think about that idea?

&gt; Why is this necessary, IntPoint has a conversion to NSPoint.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396531</commentid>
    <comment_count>14</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-05-02 12:02:53 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I was talking to jamesr and he recommended refactoring ScrollAnimatorMac.mm so that the overlay code was in a separate file. What do you think about that idea?
&gt; 

Right now there are a lot of delegates implemented in ScrollAnimatorMac.mm, and I think it would be reasonable to move those into a different file. However, I definitely do not think that all of the overlay-related code should be moved to a different file. It&apos;s very much relevant to the animator, and I think the animator should continue to hold member variables that point to the delegates whether the delegates are implemented elsewhere or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397396</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-03 14:31:32 -0700</bug_when>
    <thetext>Without having a ton of knowledge about this code, I think it should be possible to turn overlays on without enabling the scroll animator (or at least the bits associated with smooth scrolling).  I think it&apos;s reasonable that the smooth scrolling logic here depend on overlay scrollbars being enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401327</commentid>
    <comment_count>16</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-10 10:50:30 -0700</bug_when>
    <thetext>&gt; However, I definitely do not think that all of the overlay-related code should be moved to a different file. It&apos;s very much relevant to the animator, and I think the animator should continue to hold member variables that point to the delegates whether the delegates are implemented elsewhere or not.

Hi Beth and Sam. It sounds like the best thing would be to temporarily fork ScrollAnimatorMac to ScrollAnimatorChromiumMac. I&apos;ll file a bug on myself to merge it back when smooth scrolling is enabled for Chromium (Peter is working on this right now).

Does this seem reasonable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403928</commentid>
    <comment_count>17</comment_count>
      <attachid>93526</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-13 16:06:38 -0700</bug_when>
    <thetext>Created attachment 93526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403934</commentid>
    <comment_count>18</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-13 16:11:25 -0700</bug_when>
    <thetext>Hi all, this latest patch addresses review comments and goes back to forking ScrollAnimatorMac.

I think this is much cleaner than using #ifdefs everywhere. This feature needs to make it into the next version fo Google Chrome so I&apos;d appreciate any help getting change moving forward.

I&apos;ll file a bug to track the work to merge it back to ScrollAnimatorMac once smooth scrolling is enabled for Google Chrome Mac.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404244</commentid>
    <comment_count>19</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-15 18:56:14 -0700</bug_when>
    <thetext>How about to make ScrollAnimatorChromiumMac a subclass of  ScrollAnimatorMac
and factor out chromium specific parts into a method and override it? 
Forked code is really hard to maintain and I hope we didn&apos;t have more....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404247</commentid>
    <comment_count>20</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-15 19:13:44 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; How about to make ScrollAnimatorChromiumMac a subclass of  ScrollAnimatorMac
&gt; and factor out chromium specific parts into a method and override it? 
&gt; Forked code is really hard to maintain and I hope we didn&apos;t have more....

Currently ScrollAnimatorMac is guarded by an #if ENABLE(SMOOTH_SCROLLING). To subclass it I would have to change that to:
    #if ENABLE(SMOOTH_SCROLLING) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))
As per comment 12 we want to avoid that.

At this point the lack of smooth scrolling is the only real difference between the Mac and Chrome version. Once we enable smooth scrolling I wouldn&apos;t even need a subclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404248</commentid>
    <comment_count>21</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-15 19:24:54 -0700</bug_when>
    <thetext>Ah I see. My comment was pointless... I&apos;m sorry for the interruption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406627</commentid>
    <comment_count>22</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-05-19 14:06:12 -0700</bug_when>
    <thetext>Sailesh and I talked about this on IRC. We agreed that this is okay for a temporary solution, but a bug should be filed to un-fork asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406653</commentid>
    <comment_count>23</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-19 14:32:40 -0700</bug_when>
    <thetext>Filed bug 61144 to track the work to merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac.

Beth and Sam, could I commit this change?

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406675</commentid>
    <comment_count>24</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-05-19 14:58:45 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Filed bug 61144 to track the work to merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac.
&gt; 
&gt; Beth and Sam, could I commit this change?
&gt; 
&gt; Thanks!

Yes, you can. You should get a Chromium person to r+ since in the end this patch will only affect Chromium. But yes, you can commit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408208</commentid>
    <comment_count>25</comment_count>
      <attachid>94473</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-23 13:28:34 -0700</bug_when>
    <thetext>Created attachment 94473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408210</commentid>
    <comment_count>26</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-23 13:30:19 -0700</bug_when>
    <thetext>Removed some unnecessary changes to ScrollAnimatorChromiumMac.mm. At this point the only changes to the forked code is renaming ScrollAnimatorMac to ScrollAnimatorChromiumMac and renaming ScrollbarThemeMac to ScrollbarThemeChromiumMac. Added this to the ChangeLog.

James could you take another look? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408216</commentid>
    <comment_count>27</comment_count>
      <attachid>94473</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 13:36:08 -0700</bug_when>
    <thetext>Comment on attachment 94473
Patch

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

Seems OK

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.h:55
&gt; +    ScrollAnimatorChromiumMac(ScrollableArea*);

should be explicit

&gt; Source/WebCore/platform/graphics/IntPoint.h:40
&gt; +#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))

should this just be #if OS(DARWIN)?

&gt; Source/WebCore/platform/graphics/IntPoint.h:122
&gt; +#if (PLATFORM(MAC) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)

should this just be #if OS(DARWIN) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408270</commentid>
    <comment_count>28</comment_count>
      <attachid>94485</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-23 14:05:59 -0700</bug_when>
    <thetext>Created attachment 94485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408272</commentid>
    <comment_count>29</comment_count>
      <attachid>94473</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-23 14:06:47 -0700</bug_when>
    <thetext>Comment on attachment 94473
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.h:55
&gt;&gt; +    ScrollAnimatorChromiumMac(ScrollableArea*);
&gt; 
&gt; should be explicit

Done.

&gt;&gt; Source/WebCore/platform/graphics/IntPoint.h:40
&gt;&gt; +#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))
&gt; 
&gt; should this just be #if OS(DARWIN)?

Done.

&gt;&gt; Source/WebCore/platform/graphics/IntPoint.h:122
&gt;&gt; +#if (PLATFORM(MAC) || (PLATFORM(CHROMIUM) &amp;&amp; OS(DARWIN))) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)
&gt; 
&gt; should this just be #if OS(DARWIN) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES) ?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408571</commentid>
    <comment_count>30</comment_count>
      <attachid>94485</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-23 19:04:14 -0700</bug_when>
    <thetext>Comment on attachment 94485
Patch

Clearing flags on attachment: 94485

Committed r87118: &lt;http://trac.webkit.org/changeset/87118&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408572</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-23 19:04:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410795</commentid>
    <comment_count>32</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 13:54:10 -0700</bug_when>
    <thetext>Re-opening bug since my change got backed out. Uploading a new patch in a second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410803</commentid>
    <comment_count>33</comment_count>
      <attachid>95034</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 13:57:56 -0700</bug_when>
    <thetext>Created attachment 95034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410808</commentid>
    <comment_count>34</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 14:02:31 -0700</bug_when>
    <thetext>This is a new patch that passes layout tests. See:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout_rel/builds/194
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout/builds/633
For comparison here&apos;s the output from the try bot with an empty change list:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout_rel/builds/191
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout/builds/631

The differences between this patch and the one that got reverted are:
 - disable smooth scrolling by adding and #ifdef in ScrollAnimatorChromiumMac::scroll()
 - adding IntPointMac.mm. This is used by some ScrollAnimatorChromiuMac code that&apos;s currently #ifdef&apos;ed out.
  - removed exceptions from test_expectations.txt that were added when my change was reverted

I&apos;m running browser tests and ui_tests locally and will update this bug with the results. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411051</commentid>
    <comment_count>35</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 17:51:43 -0700</bug_when>
    <thetext>&gt; I&apos;m running browser tests and ui_tests locally and will update this bug with the results. Thanks.

browser_tests passed. There were some errors in the ui_tests but I don&apos;t think they&apos;re related to my change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416699</commentid>
    <comment_count>36</comment_count>
      <attachid>95034</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-06-07 12:01:19 -0700</bug_when>
    <thetext>Comment on attachment 95034
Patch

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

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm:926
&gt; +    m_haveScrolledSincePageLoad = true;

Nit: Is this necessary? smoothScrollWithEvent is only called by handleWheelEvent, and you already set m_haveScrolledSincePageLoad to true there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416712</commentid>
    <comment_count>37</comment_count>
      <attachid>95034</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-06-07 12:11:03 -0700</bug_when>
    <thetext>Comment on attachment 95034
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm:926
&gt;&gt; +    m_haveScrolledSincePageLoad = true;
&gt; 
&gt; Nit: Is this necessary? smoothScrollWithEvent is only called by handleWheelEvent, and you already set m_haveScrolledSincePageLoad to true there.

This is all copy paste from the platform/mac/ScrollAnimatorMac.mm code. My goal is to keep the two files as similar as possible so that I can re-merge them once we have smooth scrolling on chromium mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416746</commentid>
    <comment_count>38</comment_count>
      <attachid>95034</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 12:56:26 -0700</bug_when>
    <thetext>Comment on attachment 95034
Patch

Rejecting attachment 95034 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
(offset -4 lines).
patching file Source/WebCore/platform/ScrollAnimator.cpp
patching file Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.h
patching file Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm
patching file Source/WebCore/platform/graphics/IntPoint.h
Hunk #1 succeeded at 38 (offset 1 line).
Hunk #2 succeeded at 126 (offset 6 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Mihai Parparita&apos;, u&apos;--...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8811198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416755</commentid>
    <comment_count>39</comment_count>
      <attachid>96292</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-06-07 13:26:35 -0700</bug_when>
    <thetext>Created attachment 96292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416933</commentid>
    <comment_count>40</comment_count>
      <attachid>96292</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 16:57:43 -0700</bug_when>
    <thetext>Comment on attachment 96292
Patch

Clearing flags on attachment: 96292

Committed r88286: &lt;http://trac.webkit.org/changeset/88286&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416935</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 16:57:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91578</attachid>
            <date>2011-04-28 16:05:18 -0700</date>
            <delta_ts>2011-04-28 16:52:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>animator.patch</filename>
            <type>text/plain</type>
            <size>6810</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2FiY2I0Li4wNzIxODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjEg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBDaHJv
bWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRvck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBUaGlzIGFkZHMgU2Nyb2xsQW5pbWF0b3JNYWMubW0gdG8gdGhlIENo
cm9taXVtIE1hYyBwcm9qZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0KKyAgICAgICAgKFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVX
aGVlbEV2ZW50KToKKworMjAxMS0wNC0yOCAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAg
Q2hyb21pdW0gTWFjOiBBZGQgc2Nyb2xsYmFyIG92ZXJsYXkgZHJhd2luZyBmdW5jdGlvbnMKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NzQxCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggNjBhY2VjNy4uZjY5OTk4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTEzNDAsNiArMTM0MCw3
IEBACiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwu
bW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dFxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL21hYy9QdXJnZWFibGVCdWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5k
ZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3RleHQvbWFj
L1NoYXBlQXJhYmljXFwuYyQnXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggMGVhZTg5Ny4uNjM4NTFmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JNYWNfaAogI2RlZmluZSBTY3JvbGxBbmltYXRvck1h
Y19oCiAKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKQEAgLTM2LDYgKzM2LDEwIEBA
CiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIlNjcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNNYWMuaCIKKyNlbmRpZgorCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIEBjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGU7CkBAIC0xNTQsNiArMTU4LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KSkKIAogI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yTWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBkYThmN2Q3Li44ZDNlYTlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSB8fCAoUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ck1hYy5oIgogCkBAIC0zOCwxMCArMzgsMzIgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1h
Yy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKworc3RhdGljIE5TUG9pbnQgSW50UG9pbnRUb05TUG9pbnQoV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQpIHsKKyAgICByZXR1cm4gTlNNYWtlUG9pbnQocG9pbnQueCgpLCBwb2lu
dC55KCkpOworfQorCitzdGF0aWMgV2ViQ29yZTo6SW50UG9pbnQgTlNQb2ludFRvSW50UG9pbnQo
TlNQb2ludCBwb2ludCkgeworICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludChwb2ludC54LCBw
b2ludC55KTsKK30KKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEw
XzYpIHx8IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEw
XzYKK0Bwcm90b2NvbCBOU0FuaW1hdGlvbkRlbGVnYXRlCitAZW5kCisKK0BpbnRlcmZhY2UgTlNQ
cm9jZXNzSW5mbyAoTlNPYmplY3QpCistIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7CitA
ZW5kCisjZW5kaWYKKwogQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRlbGVnYXRlOwogLSAodm9pZClf
c3RvcFJ1bjsKQEAgLTE5Niw3ICsyMTgsNyBAQCBzdGF0aWMgTlNTaXplIGFicyhOU1NpemUgc2l6
ZSkKICAgICBpZiAoIV9hbmltYXRvcikKICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwogCi0g
ICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRp
b24oKTsKKyAgICByZXR1cm4gSW50UG9pbnRUb05TUG9pbnQoX2FuaW1hdG9yLT5zY3JvbGxhYmxl
QXJlYSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKIH0KIAogLSAoTlNQb2ludClzY3JvbGxl
ckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50
KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClzY3JvbGxlckltcApAQCAtMjE3
LDkgKzIzOSw5IEBAIHN0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQogICAgIC8vIG9mIHRo
ZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFy
KCkgdG8gYXZvaWQgdGhpcwogICAgIC8vIGlzc3VlLgogICAgIGlmICghc2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1Bv
aW50OwogICAgIAotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7CisgICAgcmV0dXJuIElu
dFBvaW50VG9OU1BvaW50KHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhOU1Bv
aW50VG9JbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKSk7CiB9CiAKIC0gKHZvaWQpc2Nyb2xs
ZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJ
blJlY3Q6KE5TUmVjdClyZWN0CkBAIC03NzksMTUgKzgwMSwxNiBAQCBzdGF0aWMgZmxvYXQgZWxh
c3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlh
bFZlbG9jaQogICAgIHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkg
KiBlbGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7CiB9
CiAKLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEp
CitzdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQog
ewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEu
MGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKKyAgICByZXR1cm4gZGVsdGEgKiBy
dWJiZXJiYW5kU3RpZmZuZXNzOwogfQogCi1zdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKGZsb2F0IGRlbHRhKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorc3Rh
dGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKIHsKLSAg
ICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOworICAgIGZsb2F0IHN0aWZmbmVz
cyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOworICAgIHJldHVybiBkZWx0
YSAvIHN0aWZmbmVzczsKIH0KIAogc3RhdGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigp
CkBAIC04MDEsMTAgKzgyNCwxMyBAQCBzdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVy
KCkKICAgICByZXR1cm4gbXVsdGlwbGllcjsKIH0KIAorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQogewogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CiAKKyNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcygpKSB7CiAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50
KHdoZWVsRXZlbnQpOwogICAgICAgICByZXR1cm47CkBAIC04MzYsNiArODYyLDkgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiAgICAgfQogCiAgICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQp
OworI2Vsc2UKKyAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50
KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVHZXN0dXJlRXZl
bnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKQEAgLTkxMCw2ICs5
MzksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGlu
ZygpIGNvbnN0CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9sbFdpdGhFdmVu
dChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CisjaWYgRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKIAogICAg
IGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpOwpAQCAtMTA2MCw2
ICsxMDkwLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50
KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICAgICAgbV9pZ25vcmVNb21lbnR1
bVNjcm9sbHMgPSBmYWxzZTsKICAgICAgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAg
PSAwOwogICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpiZWdpblNj
cm9sbEdlc3R1cmUoKQpAQCAtMTIzMCw0ICsxMjYxLDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1
bWIKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9S
TShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91589</attachid>
            <date>2011-04-28 16:52:06 -0700</date>
            <delta_ts>2011-04-28 17:16:41 -0700</delta_ts>
            <desc>Fixed Objective-C symbol clash error.</desc>
            <filename>animator_2.patch</filename>
            <type>text/plain</type>
            <size>20061</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2FiY2I0Li4wNzIxODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjEg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBDaHJv
bWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRvck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBUaGlzIGFkZHMgU2Nyb2xsQW5pbWF0b3JNYWMubW0gdG8gdGhlIENo
cm9taXVtIE1hYyBwcm9qZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0KKyAgICAgICAgKFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVX
aGVlbEV2ZW50KToKKworMjAxMS0wNC0yOCAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAg
Q2hyb21pdW0gTWFjOiBBZGQgc2Nyb2xsYmFyIG92ZXJsYXkgZHJhd2luZyBmdW5jdGlvbnMKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NzQxCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggNjBhY2VjNy4uZjdlZDUwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExMjMsNiArMTEyMywx
MSBAQAogICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNv
cmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3JlUmVu
ZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29yZVJl
bmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9udENh
Y2hlPUNocm9taXVtV2ViQ29yZU9iakNXZWJGb250Q2FjaGUnLAorICAgICAgICAgICAgICAnU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21pdW1TY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZScsCisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlPUNocm9taXVtU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZScsCisgICAgICAg
ICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9Q2hyb21pdW1TY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj1DaHJvbWl1
bVNjcm9sbGJhclBhcnRBbmltYXRpb24nLAorICAgICAgICAgICAgICAnCiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAgICAgICAgJy4uLy4uLy4u
L1dlYktpdExpYnJhcmllcycsCkBAIC0xMzQwLDYgKzEzNDUsNyBAQAogICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL21hYy9LaWxsUmluZ01hY1xcLm1tJCddLAogICAgICAgICAgICAg
WydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHRcXC5t
bSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvUHVyZ2VhYmxlQnVm
ZmVyTWFjXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVUZXh0UmVuZGVyZXJcXC5tbSQnXSwKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJpY1xcLmMkJ10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJP
dmVybGF5VXRpbGl0aWVzTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLmgKaW5kZXggNWNlZjc5MC4uMDUxYmRhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc01hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMuaApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBOU1Nj
cm9sbGVySW1wUGFpcjsKIHR5cGVkZWYgTlNTY3JvbGxlckltcCogV0tTY3JvbGxiYXJQYWludGVy
UmVmOwogdHlwZWRlZiBOU1Njcm9sbGVySW1wUGFpciogV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZjsKIAotYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKTsKK2Jvb2wg
SXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCk7CiAKIC8vIFNjcm9sbGJhciBQYWludGVy
CiBib29sIHdrU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKHZvaWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc01hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW0KaW5kZXggNWU3Njk4OS4uYzI3ZGY0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0
aWxpdGllc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLm1tCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSA8
Q29jb2EvQ29jb2EuaD4KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoaXMgZmlsZSBj
b250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMuIFRoZXJlIGFyZSBu
byBwdWJsaWMKKy8vIFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBvdmVybGF5
IHNjcm9sbGJhcnMuIFRoZXJlIGFyZSBubyBwbHVibGljCiAvLyBBUElzIHlldCBvbiB0aGUgTWFj
IHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJzIHNvIHdlIHVzZSBwcml2YXRlIEFQSXMgdGhhdAot
Ly8gd2UgbG9vayB1cCBhdCBydW50aW1lLiBJZiB0aGUgcHJpdmF0ZSBBUElzIGRvbid0IGV4aXN0
IHRoZW4gdGhlIHdrTWFrZSoKKy8vIHdlIGxvb2t1cCBhdCBydW50aW1lLiBJZiB0aGUgcHJpdmF0
ZSBBUElzIGRvbid0IGV4aXN0IHRoZW4gdGhlIHdrTWFrZSoKIC8vIGZ1bmN0aW9ucyB3aWxsIHJl
dHVybiBuaWwuCiAvLwogLy8gTm90ZSwgdGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBjb3Bp
ZWQgZnJvbSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmguCkBAIC0xMDMsNDggKzEwMyw0MCBAQAog
CiBAZW5kCiAKLXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wQ2xhc3MoKQotewotICAg
IHN0YXRpYyBDbGFzcyByZXN1bHQgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAi
KTsKLSAgICByZXR1cm4gcmVzdWx0Oworc3RhdGljIENsYXNzIExvb2tVcE5TU2Nyb2xsZXJJbXBD
bGFzcygpIHsKKyAgc3RhdGljIENsYXNzIHJlc3VsdCA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNT
Y3JvbGxlckltcCIpOworICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ2xhc3MgbG9va1Vw
TlNTY3JvbGxlckltcFBhaXJDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHJlc3VsdCA9IE5T
Q2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKLSAgICByZXR1cm4gcmVzdWx0
Oworc3RhdGljIENsYXNzIExvb2tVcE5TU2Nyb2xsZXJJbXBQYWlyQ2xhc3MoKSB7CisgIHN0YXRp
YyBDbGFzcyByZXN1bHQgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIik7
CisgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBOU0NvbnRyb2xTaXplIHNjcm9sbGJhckNv
bnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9sU2l6ZSkKLXsKK3N0YXRpYyBOU0Nv
bnRyb2xTaXplIFNjcm9sbGJhckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9s
U2l6ZSkgewogICAgIHJldHVybiBjb250cm9sU2l6ZSA9PSBXZWJDb3JlOjpSZWd1bGFyU2Nyb2xs
YmFyID8gTlNSZWd1bGFyQ29udHJvbFNpemUgOiBOU1NtYWxsQ29udHJvbFNpemU7CiB9CiAKLWJv
b2wgd2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnModm9pZCkKLXsKK2Jvb2wg
d2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnModm9pZCkgewogICAgIGlmIChb
TlNTY3JvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNjcm9sbGVy
U3R5bGUpXSkKICAgICAgICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVyU3R5
bGVdOwogICAgIHJldHVybiBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7CiB9CiAKLWJvb2wgd2tTY3Jv
bGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQot
eworYm9vbCB3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoV0tTY3JvbGxiYXJQYWludGVy
UmVmIHBhaW50ZXIpIHsKICAgICByZXR1cm4gW3BhaW50ZXIgaXNIb3Jpem9udGFsXTsKIH0KIAot
Q0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVm
IHBhaW50ZXIpCi17CitDR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlcikgewogICAgIHJldHVybiBbcGFpbnRlciBrbm9iQWxwaGFd
OwogfQogCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldE92ZXJsYXlTdGF0ZShXS1Njcm9sbGJh
clBhaW50ZXJSZWYgcGFpbnRlciwgaW50IG92ZXJsYXlTY3JvbGxlclN0YXRlKQotewordm9pZCB3
a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIsIGludCBvdmVybGF5U2Nyb2xsZXJTdGF0ZSkgewogICAgIFtwYWludGVyIHNldE92ZXJs
YXlTY3JvbGxlclN0YXRlOm92ZXJsYXlTY3JvbGxlclN0YXRlCiAgICAgICAgICAgICAgICAgICAg
IGZvcmNlSW1tZWRpYXRlbHk6WUVTXTsKIH0KIAotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWlu
dChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFs
dWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCkKLXsKK3ZvaWQgd2tTY3Jv
bGxiYXJQYWludGVyUGFpbnQoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5h
YmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3Qp
IHsKICAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwogICAgIFtwYWludGVyIHNldEJv
dW5kc1NpemU6ZnJhbWVSZWN0LnNpemVdOwogICAgIFtwYWludGVyIHNldERvdWJsZVZhbHVlOnZh
bHVlXTsKQEAgLTE1OSwxNjcgKzE1MSwxMzcgQEAgdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWlu
dChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUKICAg
ICBbcGFpbnRlciBkcmF3S25vYl07CiB9CiAKLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxl
bmd0aChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKK2ludCB3a1Njcm9sbGJhck1p
bmltdW1UaHVtYkxlbmd0aChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikgewogICAgIHJl
dHVybiBbcGFpbnRlciBrbm9iTWluTGVuZ3RoXTsKIH0KIAotdm9pZCB3a1Njcm9sbGJhclBhaW50
ZXJTZXREZWxlZ2F0ZShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgaWQgc2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlKQotewordm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShX
S1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgaWQgc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
KSB7CiAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlXTsK
IH0KIAotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBwYWludGVyKQoteworQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhh
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKSB7CiAgICAgcmV0dXJuIFtwYWludGVyIHRy
YWNrQWxwaGFdOwogfQogCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFp
bnRlcihpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQoteworV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50ZXIoaW50IGNvbnRyb2xTaXplLCBib29sIGlz
SG9yaXpvbnRhbCkgewogICAgIHJldHVybiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50
ZXIobmlsLCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycygpLCBjb250cm9s
U2l6ZSwgaXNIb3Jpem9udGFsKTsKIH0KIAotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBj
b250cm9sU2l6ZSkKLXsKK2ludCB3a1Njcm9sbGJhclRoaWNrbmVzcyhpbnQgY29udHJvbFNpemUp
IHsKICAgICByZXR1cm4gW3drTWFrZVNjcm9sbGJhclBhaW50ZXIoY29udHJvbFNpemUsIGZhbHNl
KSB0cmFja0JveFdpZHRoXTsKIH0KIAotaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFsTGVuZ3Ro
TmVlZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17CitpbnQgd2tT
Y3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Njcm9sbGJhclBhaW50
ZXJSZWYgcGFpbnRlcikgewogICAgIC8vIFRPRE8oc2FpbCk6IFRoaXMgZG9lc24ndCBtYXRjaCB0
aGUgaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0U3lzdGVtSW50ZXJmYWNlLgogICAgIHJldHVybiB3
a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChwYWludGVyKTsKIH0KIAotV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihXS1Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17CitXS1Njcm9sbGJhclBhaW50
ZXJSZWYgd2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikgewogICAgIHJldHVybiBbY29udHJvbGxl
ciB2ZXJ0aWNhbFNjcm9sbGVySW1wXTsKIH0KIAotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrSG9y
aXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKK1dLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a0hvcml6
b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyUmVmIGNvbnRyb2xsZXIpIHsKICAgICByZXR1cm4gW2NvbnRyb2xsZXIgaG9yaXpvbnRh
bFNjcm9sbGVySW1wXTsKIH0KIAotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrTWFrZVNjcm9sbGJh
clJlcGxhY2VtZW50UGFpbnRlcihXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkUGFpbnRlciwgaW50
IG5ld1N0eWxlLCBpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIGlm
ICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCitXS1Njcm9sbGJhclBhaW50ZXJS
ZWYgd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBvbGRQYWludGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6
b250YWwpIHsKKyAgICBpZiAoIUlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbbG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkg
c2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xTaXplOnNjcm9sbGJhckNvbnRyb2xTaXplVG9O
U0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQorICAgIHJldHVybiBbTG9va1VwTlNTY3JvbGxlcklt
cENsYXNzKCkgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xTaXplOlNjcm9sbGJhckNvbnRy
b2xTaXplVG9OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6aXNIb3Jpem9udGFsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmdTY3JvbGxlckltcDpv
bGRQYWludGVyXTsKIH0KIAotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIsIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBwYWludGVyLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKK3ZvaWQgd2tTZXRQYWludGVy
Rm9yUGFpbnRlckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250
cm9sbGVyLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9vbCBpc0hvcml6b250YWwp
IHsKICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICBbY29udHJvbGxlciBzZXRIb3Jpem9u
dGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07CiAgICAgZWxzZQogICAgICAgICBbY29udHJvbGxlciBz
ZXRWZXJ0aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwogfQogCi12b2lkIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBh
aW50ZXIsIGludCBuZXdTdHlsZSkKLXsKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgcGFpbnRlciwgaW50IG5l
d1N0eWxlKSB7CiAgICAgW3BhaW50ZXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdTdHlsZV07CiB9CiAK
LUNHUmVjdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iUmVjdChXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlcikKLXsKK0NHUmVjdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iUmVjdChXS1Njcm9sbGJh
clBhaW50ZXJSZWYgcGFpbnRlcikgewogICAgIHJldHVybiBOU1JlY3RUb0NHUmVjdChOU1plcm9S
ZWN0KTsKIH0KIAotdm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxi
YXJQYWludGVyUmVmIHBhaW50ZXIsIENHRmxvYXQgYWxwaGEpCi17Cit2b2lkIHdrU2V0U2Nyb2xs
YmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgQ0dGbG9h
dCBhbHBoYSkgewogICAgIFtwYWludGVyIHNldEtub2JBbHBoYTphbHBoYV07CiB9CiAKLXZvaWQg
d2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlciwgQ0dGbG9hdCBhbHBoYSkKLXsKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tB
bHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgQ0dGbG9hdCBhbHBoYSkgewogICAg
IFtwYWludGVyIHNldFRyYWNrQWxwaGE6YWxwaGFdOwogfQogCi12b2lkIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlcktub2JTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgd2tTY3JvbGxl
cktub2JTdHlsZSBzdHlsZSkKLXsKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxl
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCB3a1Njcm9sbGVyS25vYlN0eWxlIHN0eWxl
KSB7CiAgICAgLy8gVE9ETyhzYWlsKTogQSBrbm9iIHN0eWxlIEFQSSBkb2Vzbid0IGV4aXN0IGlu
IHRoZSBzZWVkcyBjdXJyZW50bHkgYXZhaWxhYmxlLiAKIH0KIAotV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcihpZCBwYWludGVy
Q29udHJvbGxlckRlbGVnYXRlKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCitXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHdrTWFrZVNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyKGlkIHBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUpIHsKKyAgICBp
ZiAoIUlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIE5TU2Nyb2xsZXJJbXBQYWlyKiBjb250cm9sbGVyID0gW1tbbG9va1VwTlNTY3JvbGxl
ckltcFBhaXJDbGFzcygpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgTlNTY3JvbGxl
ckltcFBhaXIqIGNvbnRyb2xsZXIgPSBbW1tMb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKICAgICBbY29udHJvbGxlciBzZXREZWxlZ2F0ZTpw
YWludGVyQ29udHJvbGxlckRlbGVnYXRlXTsKICAgICBbY29udHJvbGxlciBzZXRTY3JvbGxlclN0
eWxlOndrU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKCldOwogICAgIHJldHVy
biBjb250cm9sbGVyOwogfQogCi12b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Cit2b2lkIHdrQ29udGVudEFyZWFT
Y3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpIHsKICAg
ICBbY29udHJvbGxlciBjb250ZW50QXJlYVNjcm9sbGVkXTsKIH0KIAotdm9pZCB3a0NvbnRlbnRB
cmVhV2lsbFBhaW50KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikK
LXsKK3ZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmIGNvbnRyb2xsZXIpIHsKICAgICBbY29udHJvbGxlciBjb250ZW50QXJlYVdpbGxEcmF3
XTsKIH0KIAotdm9pZCB3a01vdXNlRW50ZXJlZENvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKK3ZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50
QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpIHsKICAgICBb
Y29udHJvbGxlciBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07CiB9CiAKLXZvaWQgd2tNb3VzZUV4
aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKK3ZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJSZWYgY29udHJvbGxlcikgewogICAgIFtjb250cm9sbGVyIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWFdOwogfQogCi12b2lkIHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEoV0tTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewordm9pZCB3a01vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikg
ewogICAgIFtjb250cm9sbGVyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKIH0KIAotdm9pZCB3
a1dpbGxTdGFydExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250
cm9sbGVyKQotewordm9pZCB3a1dpbGxTdGFydExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZiBjb250cm9sbGVyKSB7CiAgICAgW2NvbnRyb2xsZXIgc3RhcnRMaXZlUmVz
aXplXTsKIH0KIAotdm9pZCB3a0NvbnRlbnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Cit2b2lkIHdrQ29udGVudEFyZWFSZXNpemVkKFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikgewogICAgIFtjb250cm9s
bGVyIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKIH0KIAotdm9pZCB3a1dpbGxFbmRMaXZlUmVzaXpl
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKK3ZvaWQgd2tX
aWxsRW5kTGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xs
ZXIpIHsKICAgICBbY29udHJvbGxlciBlbmRMaXZlUmVzaXplXTsKIH0KIAotdm9pZCB3a0NvbnRl
bnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Ci17Cit2b2lkIHdrQ29udGVudEFyZWFEaWRTaG93KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJSZWYgY29udHJvbGxlcikgewogICAgIFtjb250cm9sbGVyIHdpbmRvd09yZGVyZWRJbl07CiB9
CiAKLXZvaWQgd2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZiBjb250cm9sbGVyKQotewordm9pZCB3a0NvbnRlbnRBcmVhRGlkSGlkZShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpIHsKICAgICBbY29udHJvbGxlciB3aW5k
b3dPcmRlcmVkT3V0XTsKIH0KIAotdm9pZCB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShXS1Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Cit2b2lkIHdrRGlkQmVnaW5T
Y3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikg
ewogICAgIFtjb250cm9sbGVyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CiB9CiAKLXZvaWQgd2tEaWRF
bmRTY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKK3ZvaWQgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYgY29udHJvbGxlcikgewogICAgIFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVd
OwogfQogCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewordm9pZCB3a1Njcm9sbGJh
clBhaW50ZXJGb3JjZUZsYXNoU2Nyb2xsZXJzKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYgY29udHJvbGxlcikgewogICAgIFtjb250cm9sbGVyIGZsYXNoU2Nyb2xsZXJzXTsKIH0KIAot
Ym9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKQoteworYm9vbCBJc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSB7CiAgICAgLy8gVE9ETyhzYWlsKTogRGlzYWJsZSBvdmVy
bGF5IHNjcm9sbGJhcnMgZm9yIG5vdyB1bnRpbCB0aGUgZm9sbG93aW5nIGlzc3VlcyBhcmUgZml4
ZWQ6CiAgICAgLy8gIzE6IEludmFsaWRhdGlvbiBpc3N1ZXMgY2F1c2VzIHRoZSBzY3JvbGxiYXIg
dG8gbGVhdmUgdHJhaWxpbmcgYXJ0aWZhY3RzLgogICAgIC8vICMyOiBWYXJpb3VzIG1lc3NhZ2Vz
IHN1Y2ggYXMgbGl2ZSByZXNpemUgc3RhcnRlZC9lbmRlZCBuZWVkIHRvIGJlIHBpcGVkIGZyb20g
dGhlIFVJLgpAQCAtMzI3LDggKzI4OSw4IEBAIGJvb2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkKICAgICAvLyAjNDogTmVlZCB0byBoYXZlIHRoZSB0aGVtZSBlbmdpbmUgZHJhdyB0
aGUgdGh1bWIuCiAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGljIGJvb2wgYXBpQXZhaWxh
YmxlID0gW2xvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc2Nyb2xsZXJJbXBXaXRoU3R5bGU6Y29udHJvbFNpemU6aG9yaXpvbnRhbDpyZXBsYWNp
bmdTY3JvbGxlckltcDopXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb29r
VXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNl
bGVjdG9yKHNjcm9sbGVyU3R5bGUpXTsKKyAgICBzdGF0aWMgYm9vbCBhcGlBdmFpbGFibGUgPSBb
TG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihz
Y3JvbGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9s
bGVySW1wOildICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0xvb2tVcE5TU2Ny
b2xsZXJJbXBQYWlyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Io
c2Nyb2xsZXJTdHlsZSldOwogICAgIHJldHVybiBhcGlBdmFpbGFibGU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggMGVhZTg5
Ny4uNjM4NTFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JNYWNf
aAogI2RlZmluZSBTY3JvbGxBbmltYXRvck1hY19oCiAKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9M
TElORykKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykgfHwgKFBMQVRGT1JNKENIUk9NSVVN
KSAmJiBPUyhEQVJXSU4pKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMuaCIKKyNlbmRpZgor
CiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsK
IEBjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CkBAIC0xNTQsNiArMTU4LDYgQEAgcHJp
dmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIAogI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9y
TWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5tbQppbmRleCBkYThmN2Q3Li44ZDNlYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikp
CiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1hYy5oIgogCkBAIC0zOCwxMCArMzgsMzIgQEAK
ICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKworc3RhdGljIE5TUG9pbnQg
SW50UG9pbnRUb05TUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIHsKKyAgICByZXR1cm4g
TlNNYWtlUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCitzdGF0aWMgV2ViQ29yZTo6
SW50UG9pbnQgTlNQb2ludFRvSW50UG9pbnQoTlNQb2ludCBwb2ludCkgeworICAgIHJldHVybiBX
ZWJDb3JlOjpJbnRQb2ludChwb2ludC54LCBwb2ludC55KTsKK30KKworI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzYKK0Bwcm90b2NvbCBOU0FuaW1hdGlvbkRlbGVn
YXRlCitAZW5kCisKK0BpbnRlcmZhY2UgTlNQcm9jZXNzSW5mbyAoTlNPYmplY3QpCistIChOU1Rp
bWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7CitAZW5kCisjZW5kaWYKKwogQGludGVyZmFjZSBOU09i
amVjdCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdh
dGU6KGlkKWRlbGVnYXRlOwogLSAodm9pZClfc3RvcFJ1bjsKQEAgLTE5Niw3ICsyMTgsNyBAQCBz
dGF0aWMgTlNTaXplIGFicyhOU1NpemUgc2l6ZSkKICAgICBpZiAoIV9hbmltYXRvcikKICAgICAg
ICAgcmV0dXJuIE5TWmVyb1BvaW50OwogCi0gICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAgICByZXR1cm4gSW50UG9pbnRUb05T
UG9pbnQoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigp
KTsKIH0KIAogLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBj
b252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVy
SW1wOihpZClzY3JvbGxlckltcApAQCAtMjE3LDkgKzIzOSw5IEBAIHN0YXRpYyBOU1NpemUgYWJz
KE5TU2l6ZSBzaXplKQogICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJhclRo
ZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQgdGhpcwogICAgIC8vIGlzc3Vl
LgogICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQo
KTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwogICAgIAotICAgIHJldHVybiBzY3JvbGxi
YXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNv
bnRlbnRBcmVhKSk7CisgICAgcmV0dXJuIEludFBvaW50VG9OU1BvaW50KHNjcm9sbGJhci0+Y29u
dmVydEZyb21Db250YWluaW5nVmlldyhOU1BvaW50VG9JbnRQb2ludChwb2ludEluQ29udGVudEFy
ZWEpKSk7CiB9CiAKIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIg
c2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0CkBAIC03NzksMTUg
KzgwMSwxNiBAQCBzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGlu
aXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaQogICAgIHJldHVybiAoaW5pdGlhbFBv
c2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICog
Y3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7CiB9CiAKLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFG
b3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCitzdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9y
RWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQogewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6
bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZm
bmVzczsKKyAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOwogfQogCi1zdGF0
aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQorI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQorc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91
bmREZWx0YShmbG9hdCBkZWx0YSkKIHsKLSAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3Rp
ZmZuZXNzOworICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5l
c3MsIDEuMGYpOworICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKIH0KIAogc3RhdGljIGZs
b2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCkBAIC04MDEsMTAgKzgyNCwxMyBAQCBzdGF0aWMg
ZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKICAgICByZXR1cm4gbXVsdGlwbGllcjsKIH0K
IAorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCA9IHRydWU7CiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
IXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpKSB7CiAgICAgICAgIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgICAgICByZXR1cm47
CkBAIC04MzYsNiArODYyLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxF
dmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAgICAgfQogCiAgICAgc21vb3Ro
U2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOworI2Vsc2UKKyAgICBTY3JvbGxBbmltYXRvcjo6
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQm
IGdlc3R1cmVFdmVudCkKQEAgLTkxMCw2ICs5MzksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpIGNvbnN0CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCiB7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gdHJ1ZTsKIAogICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS53aWR0aCgpOwpAQCAtMTA2MCw2ICsxMDkwLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKICAgICAgICAgbV9s
YXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwogICAgIH0KKyNlbmRpZgogfQogCiB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUoKQpAQCAtMTIzMCw0ICsxMjYx
LDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkK
</data>
<flag name="review"
          id="84443"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91598</attachid>
            <date>2011-04-28 17:15:41 -0700</date>
            <delta_ts>2011-04-29 14:01:22 -0700</delta_ts>
            <desc>Fixed patch to not include changes from another branch.</desc>
            <filename>animator_3.patch</filename>
            <type>text/plain</type>
            <size>7575</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2FiY2I0Li4zZTQ5NjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjEg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBDaHJv
bWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRvck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBUaGlzIGFkZHMgU2Nyb2xsQW5pbWF0b3JNYWMubW0gdG8gdGhlIENo
cm9taXVtIE1hYyBwcm9qZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBpbmNsdWRp
bmcgYW4gZXhpc3RpbmcgY2xhc3MgaW50byBDaHJvbWl1bSBNYWMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQorICAgICAgICAoU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQpOgor
CisyMDExLTA0LTI4ICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBDaHJvbWl1bSBNYWM6
IEFkZCBzY3JvbGxiYXIgb3ZlcmxheSBkcmF3aW5nIGZ1bmN0aW9ucwogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NDEKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA2MGFjZWM3Li5mN2VkNTA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTEyMyw2ICsxMTIzLDExIEBACiAgICAgICAg
ICAgICAgICdTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxi
YXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlm
aWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3JlUmVuZGVyVGhlbWVOb3Rp
ZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250Q2FjaGU9Q2hyb21pdW1X
ZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCisgICAgICAgICAgICAgICdTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlJywKKyAg
ICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU9Q2hyb21pdW1T
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCisg
ICAgICAgICAgICAgICdTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtU2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbicsCisgICAgICAgICAgICAgICcKICAgICAgICAgICAgIF0sCiAgICAgICAgICAg
ICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAnLi4vLi4vLi4vV2ViS2l0TGlicmFy
aWVzJywKQEAgLTEzNDAsNiArMTM0NSw3IEBACiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dFxcLm1tJCddLAogICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9QdXJnZWFibGVCdWZmZXJNYWNcXC5jcHAk
J10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNv
cmVTeXN0ZW1JbnRlcmZhY2VcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL3RleHQvbWFjL1NoYXBlQXJhYmljXFwuYyQnXSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggMGVhZTg5Ny4u
NjM4NTFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JNYWNfaAog
I2RlZmluZSBTY3JvbGxBbmltYXRvck1hY19oCiAKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBPUyhEQVJXSU4pKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMuaCIKKyNlbmRpZgorCiAj
aWZkZWYgX19PQkpDX18KIEBjbGFzcyBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIEBj
bGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CkBAIC0xNTQsNiArMTU4LDYgQEAgcHJpdmF0
ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9S
TShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIAogI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yTWFj
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5t
bQppbmRleCBkYThmN2Q3Li44ZDNlYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiAK
ICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1hYy5oIgogCkBAIC0zOCwxMCArMzgsMzIgQEAKICNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKworc3RhdGljIE5TUG9pbnQgSW50
UG9pbnRUb05TUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIHsKKyAgICByZXR1cm4gTlNN
YWtlUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCitzdGF0aWMgV2ViQ29yZTo6SW50
UG9pbnQgTlNQb2ludFRvSW50UG9pbnQoTlNQb2ludCBwb2ludCkgeworICAgIHJldHVybiBXZWJD
b3JlOjpJbnRQb2ludChwb2ludC54LCBwb2ludC55KTsKK30KKworI2VuZGlmCisKKyNpZiAhZGVm
aW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzYKK0Bwcm90b2NvbCBOU0FuaW1hdGlvbkRlbGVnYXRl
CitAZW5kCisKK0BpbnRlcmZhY2UgTlNQcm9jZXNzSW5mbyAoTlNPYmplY3QpCistIChOU1RpbWVJ
bnRlcnZhbClzeXN0ZW1VcHRpbWU7CitAZW5kCisjZW5kaWYKKwogQGludGVyZmFjZSBOU09iamVj
dCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6
KGlkKWRlbGVnYXRlOwogLSAodm9pZClfc3RvcFJ1bjsKQEAgLTE5Niw3ICsyMTgsNyBAQCBzdGF0
aWMgTlNTaXplIGFicyhOU1NpemUgc2l6ZSkKICAgICBpZiAoIV9hbmltYXRvcikKICAgICAgICAg
cmV0dXJuIE5TWmVyb1BvaW50OwogCi0gICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAgICByZXR1cm4gSW50UG9pbnRUb05TUG9p
bnQoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsK
IH0KIAogLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252
ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1w
OihpZClzY3JvbGxlckltcApAQCAtMjE3LDkgKzIzOSw5IEBAIHN0YXRpYyBOU1NpemUgYWJzKE5T
U2l6ZSBzaXplKQogICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJhclRoZW1l
TWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQgdGhpcwogICAgIC8vIGlzc3VlLgog
ICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoKTsK
KyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwogICAgIAotICAgIHJldHVybiBzY3JvbGxiYXIt
PmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRl
bnRBcmVhKSk7CisgICAgcmV0dXJuIEludFBvaW50VG9OU1BvaW50KHNjcm9sbGJhci0+Y29udmVy
dEZyb21Db250YWluaW5nVmlldyhOU1BvaW50VG9JbnRQb2ludChwb2ludEluQ29udGVudEFyZWEp
KSk7CiB9CiAKIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0
Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0CkBAIC03NzksMTUgKzgw
MSwxNiBAQCBzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRp
YWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaQogICAgIHJldHVybiAoaW5pdGlhbFBvc2l0
aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3Jp
dGljYWxEYW1wZW5pbmdGYWN0b3I7CiB9CiAKLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JS
ZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCitzdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKGZsb2F0IGRlbHRhKQogewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4
KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVz
czsKKyAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOwogfQogCi1zdGF0aWMg
ZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQorI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQorc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91bmRE
ZWx0YShmbG9hdCBkZWx0YSkKIHsKLSAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZu
ZXNzOworICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3Ms
IDEuMGYpOworICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKIH0KIAogc3RhdGljIGZsb2F0
IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCkBAIC04MDEsMTAgKzgyNCwxMyBAQCBzdGF0aWMgZmxv
YXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKICAgICByZXR1cm4gbXVsdGlwbGllcjsKIH0KIAor
I2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCA9IHRydWU7CiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAoIXdo
ZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpKSB7CiAgICAgICAgIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgICAgICByZXR1cm47CkBA
IC04MzYsNiArODYyLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVu
dChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAgICAgfQogCiAgICAgc21vb3RoU2Ny
b2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOworI2Vsc2UKKyAgICBTY3JvbGxBbmltYXRvcjo6aGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdl
c3R1cmVFdmVudCkKQEAgLTkxMCw2ICs5MzksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjph
bGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpIGNvbnN0CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkID0gdHJ1ZTsKIAogICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS53aWR0aCgpOwpAQCAtMTA2MCw2ICsxMDkwLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkK
ICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKICAgICAgICAgbV9sYXN0
TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwogICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUoKQpAQCAtMTIzMCw0ICsxMjYxLDQg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNv
bnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91728</attachid>
            <date>2011-04-29 14:00:57 -0700</date>
            <delta_ts>2011-04-29 14:04:34 -0700</delta_ts>
            <desc>Fixed some bugs</desc>
            <filename>fork_scroll_animator_4.patch</filename>
            <type>text/plain</type>
            <size>8140</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2FiY2I0Li4zZTQ5NjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjEg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBDaHJv
bWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRvck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBUaGlzIGFkZHMgU2Nyb2xsQW5pbWF0b3JNYWMubW0gdG8gdGhlIENo
cm9taXVtIE1hYyBwcm9qZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBpbmNsdWRp
bmcgYW4gZXhpc3RpbmcgY2xhc3MgaW50byBDaHJvbWl1bSBNYWMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQorICAgICAgICAoU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQpOgor
CisyMDExLTA0LTI4ICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBDaHJvbWl1bSBNYWM6
IEFkZCBzY3JvbGxiYXIgb3ZlcmxheSBkcmF3aW5nIGZ1bmN0aW9ucwogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NDEKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA2MGFjZWM3Li42ZDcxYzhlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTEyMyw2ICsxMTIzLDEwIEBACiAgICAgICAg
ICAgICAgICdTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxi
YXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlm
aWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3JlUmVuZGVyVGhlbWVOb3Rp
ZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250Q2FjaGU9Q2hyb21pdW1X
ZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCisgICAgICAgICAgICAgICdTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVs
ZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZScs
CisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3Jl
T2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCisgICAgICAgICAgICAgICdTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uJywK
ICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAg
ICAgICAnLi4vLi4vLi4vV2ViS2l0TGlicmFyaWVzJywKQEAgLTEzNDAsNiArMTM0NCw3IEBACiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10s
CiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dFxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21h
Yy9QdXJnZWFibGVCdWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VcXC5tbSQnXSwKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlclxc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3RleHQvbWFjL1NoYXBl
QXJhYmljXFwuYyQnXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAppbmRleCA2ZmM3OGU3Li40NWNjZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNp
ZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpICYmICEoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpCiBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3Jl
YXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDBlYWU4OTcuLjYzODUx
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNjcm9sbEFuaW1hdG9yTWFjX2gKICNkZWZp
bmUgU2Nyb2xsQW5pbWF0b3JNYWNfaAogCi0jaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisj
aWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1Mo
REFSV0lOKSkKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLmgiCisjZW5kaWYKKwogI2lmZGVm
IF9fT0JKQ19fCiBAY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CiBAY2xhc3Mg
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwpAQCAtMTU0LDYgKzE1OCw2IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQorI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSB8fCAoUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikpCiAKICNlbmRpZiAvLyBTY3JvbGxBbmltYXRvck1hY19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5k
ZXggZGE4ZjdkNy4uOGQzZWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogCiAjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMuaCIKIApAQCAtMzgsMTAgKzM4LDMyIEBACiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK3N0YXRpYyBOU1BvaW50IEludFBvaW50
VG9OU1BvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50KSB7CisgICAgcmV0dXJuIE5TTWFrZVBv
aW50KHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKworc3RhdGljIFdlYkNvcmU6OkludFBvaW50
IE5TUG9pbnRUb0ludFBvaW50KE5TUG9pbnQgcG9pbnQpIHsKKyAgICByZXR1cm4gV2ViQ29yZTo6
SW50UG9pbnQocG9pbnQueCwgcG9pbnQueSk7Cit9CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
TUFDX09TX1hfVkVSU0lPTl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwg
TUFDX09TX1hfVkVSU0lPTl8xMF82CitAcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQorQGVu
ZAorCitAaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKE5TT2JqZWN0KQorLSAoTlNUaW1lSW50ZXJ2
YWwpc3lzdGVtVXB0aW1lOworQGVuZAorI2VuZGlmCisKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFNj
cm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCiAtIChpZClpbml0V2l0aERlbGVnYXRlOihpZClk
ZWxlZ2F0ZTsKIC0gKHZvaWQpX3N0b3BSdW47CkBAIC0xOTYsNyArMjE4LDcgQEAgc3RhdGljIE5T
U2l6ZSBhYnMoTlNTaXplIHNpemUpCiAgICAgaWYgKCFfYW5pbWF0b3IpCiAgICAgICAgIHJldHVy
biBOU1plcm9Qb2ludDsKIAotICAgIHJldHVybiBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCkt
PmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CisgICAgcmV0dXJuIEludFBvaW50VG9OU1BvaW50KF9h
bmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSk7CiB9CiAK
IC0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgY29udmVydENv
bnRlbnRQb2ludDooTlNQb2ludClwb2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlckltcDooaWQp
c2Nyb2xsZXJJbXAKQEAgLTIxNyw5ICsyMzksOSBAQCBzdGF0aWMgTlNTaXplIGFicyhOU1NpemUg
c2l6ZSkKICAgICAvLyBvZiB0aGUgY2xlYW4tdXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZU1hYzo6
dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKICAgICAvLyBpc3N1ZS4KICAgICBp
ZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7CisgICAg
ICAgIHJldHVybiBOU1plcm9Qb2ludDsKICAgICAKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KFdlYkNvcmU6OkludFBvaW50KHBvaW50SW5Db250ZW50QXJl
YSkpOworICAgIHJldHVybiBJbnRQb2ludFRvTlNQb2ludChzY3JvbGxiYXItPmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXcoTlNQb2ludFRvSW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSkpOwog
fQogCiAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHNldENvbnRl
bnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVjdApAQCAtNzc5LDE1ICs4MDEsMTYg
QEAgc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9z
aXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2kKICAgICByZXR1cm4gKGluaXRpYWxQb3NpdGlvbiAr
ICgtaW5pdGlhbFZlbG9jaXR5ICogZWxhcHNlZFRpbWUgKiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2Fs
RGFtcGVuaW5nRmFjdG9yOwogfQogCi1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3Vu
ZERlbHRhKGZsb2F0IGRlbHRhKQorc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShmbG9hdCBkZWx0YSkKIHsKLSAgICBmbG9hdCBzdGlmZm5lc3MgPSBzdGQ6Om1heChydWJi
ZXJiYW5kU3RpZmZuZXNzLCAxLjBmKTsKLSAgICByZXR1cm4gZGVsdGEgLyBzdGlmZm5lc3M7Cisg
ICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsKIH0KIAotc3RhdGljIGZsb2F0
IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKKyNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKK3N0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEo
ZmxvYXQgZGVsdGEpCiB7Ci0gICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsK
KyAgICBmbG9hdCBzdGlmZm5lc3MgPSBzdGQ6Om1heChydWJiZXJiYW5kU3RpZmZuZXNzLCAxLjBm
KTsKKyAgICByZXR1cm4gZGVsdGEgLyBzdGlmZm5lc3M7CiB9CiAKIHN0YXRpYyBmbG9hdCBzY3Jv
bGxXaGVlbE11bHRpcGxpZXIoKQpAQCAtODAxLDEwICs4MjQsMTMgQEAgc3RhdGljIGZsb2F0IHNj
cm9sbFdoZWVsTXVsdGlwbGllcigpCiAgICAgcmV0dXJuIG11bHRpcGxpZXI7CiB9CiAKKyNlbmRp
ZgorCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQg
PSB0cnVlOwogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKCF3aGVlbEV2
ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkgewogICAgICAgICBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtODM2
LDYgKzg2Miw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgIH0KIAogICAgIHNtb290aFNjcm9sbFdp
dGhFdmVudCh3aGVlbEV2ZW50KTsKKyNlbHNlCisgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJl
RXZlbnQpCkBAIC05MTAsNiArOTM5LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
SG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdAogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
bW9vdGhTY3JvbGxXaXRoRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewor
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCA9IHRydWU7CiAKICAgICBmbG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEu
d2lkdGgoKTsKQEAgLTEwNjAsNiArMTA5MCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNt
b290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAgICAg
ICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CiAgICAgICAgIG1fbGFzdE1vbWVt
dHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKICAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6YmVnaW5TY3JvbGxHZXN0dXJlKCkKQEAgLTEyMzAsNCArMTI2MSw0IEBAIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJ
bnRSZWN0JiBzY3JvbGxlclRodW1iCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91733</attachid>
            <date>2011-04-29 14:10:46 -0700</date>
            <delta_ts>2011-05-13 16:06:33 -0700</delta_ts>
            <desc>Fixed change log</desc>
            <filename>fork_scroll_animator_4.patch</filename>
            <type>text/plain</type>
            <size>8223</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2FiY2I0Li5iZWRkNGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjMg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBDaHJv
bWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRvck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBUaGlzIGFkZHMgU2Nyb2xsQW5pbWF0b3JNYWMubW0gdG8gdGhlIENo
cm9taXVtIE1hYyBwcm9qZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBpbmNsdWRp
bmcgYW4gZXhpc3RpbmcgY2xhc3MgaW50byBDaHJvbWl1bSBNYWMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisgICAgICAgIChTY3JvbGxBbmltYXRv
ck1hYzo6aGFuZGxlV2hlZWxFdmVudCk6CisKKzIwMTEtMDQtMjggIFNhaWxlc2ggQWdyYXdhbCAg
PHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCiAgICAgICAgIENocm9taXVtIE1hYzogQWRkIHNjcm9sbGJhciBvdmVybGF5IGRyYXdpbmcg
ZnVuY3Rpb25zCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01OTc0MQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDYwYWNl
YzcuLjZkNzFjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0x
MTIzLDYgKzExMjMsMTAgQEAKICAgICAgICAgICAgICAgJ1Njcm9sbGJhclByZWZzT2JzZXJ2ZXI9
Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclByZWZzT2JzZXJ2ZXInLAogICAgICAgICAgICAg
ICAnV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3Jl
T2JqQ1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyJywKICAgICAgICAgICAg
ICAgJ1dlYkZvbnRDYWNoZT1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViRm9udENhY2hlJywKKyAgICAg
ICAgICAgICAgJ1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9i
akNTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScsCisgICAgICAgICAgICAgICdTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywK
KyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2Jq
Q1Njcm9sbGJhclBhcnRBbmltYXRpb24nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdp
bmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICcuLi8uLi8uLi9XZWJLaXRMaWJyYXJpZXMn
LApAQCAtMTM0MCw2ICsxMzQ0LDcgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvS2lsbFJpbmdNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0XFwubW0kJ10sCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1B1cmdlYWJsZUJ1ZmZlck1hY1xcLmNwcCQnXSwK
KyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWNc
XC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5
c3RlbUludGVyZmFjZVxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWNcXC5jJCddLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDZmYzc4ZTcuLjQ1Y2NlMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTQxLDcgKzQxLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIUVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2lmICFFTkFCTEUoU01PT1RIX1NDUk9MTElORykgJiYg
IShQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIFBhc3NPd25QdHI8U2Nyb2xsQW5p
bWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJs
ZUFyZWEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmgKaW5kZXggMGVhZTg5Ny4uNjM4NTFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
U2Nyb2xsQW5pbWF0b3JNYWNfaAogI2RlZmluZSBTY3JvbGxBbmltYXRvck1hY19oCiAKLSNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNNYWMuaCIKKyNlbmRpZgorCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBTY3JvbGxBbmltYXRp
b25IZWxwZXJEZWxlZ2F0ZTsKIEBjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CkBAIC0x
NTQsNiArMTU4LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIAogI2VuZGlm
IC8vIFNjcm9sbEFuaW1hdG9yTWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBkYThmN2Q3Li44ZDNlYTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSB8fCAoUExBVEZPUk0oQ0hST01J
VU0pICYmIE9TKERBUldJTikpCiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1hYy5oIgogCkBA
IC0zOCwxMCArMzgsMzIgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5j
bHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikK
Kworc3RhdGljIE5TUG9pbnQgSW50UG9pbnRUb05TUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQpIHsKKyAgICByZXR1cm4gTlNNYWtlUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkpOworfQor
CitzdGF0aWMgV2ViQ29yZTo6SW50UG9pbnQgTlNQb2ludFRvSW50UG9pbnQoTlNQb2ludCBwb2lu
dCkgeworICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludChwb2ludC54LCBwb2ludC55KTsKK30K
KworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8IE1BQ19P
U19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzYKK0Bwcm90b2Nv
bCBOU0FuaW1hdGlvbkRlbGVnYXRlCitAZW5kCisKK0BpbnRlcmZhY2UgTlNQcm9jZXNzSW5mbyAo
TlNPYmplY3QpCistIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7CitAZW5kCisjZW5kaWYK
KwogQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0g
KGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRlbGVnYXRlOwogLSAodm9pZClfc3RvcFJ1bjsKQEAg
LTE5Niw3ICsyMTgsNyBAQCBzdGF0aWMgTlNTaXplIGFicyhOU1NpemUgc2l6ZSkKICAgICBpZiAo
IV9hbmltYXRvcikKICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwogCi0gICAgcmV0dXJuIF9h
bmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4gSW50UG9pbnRUb05TUG9pbnQoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJy
ZW50TW91c2VQb3NpdGlvbigpKTsKIH0KIAogLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlk
KXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250
ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClzY3JvbGxlckltcApAQCAtMjE3LDkgKzIzOSw5IEBA
IHN0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQogICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3
b3JrIGluIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQg
dGhpcwogICAgIC8vIGlzc3VlLgogICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4g
V2ViQ29yZTo6SW50UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwogICAgIAot
ICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6
SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7CisgICAgcmV0dXJuIEludFBvaW50VG9OU1Bv
aW50KHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhOU1BvaW50VG9JbnRQb2lu
dChwb2ludEluQ29udGVudEFyZWEpKSk7CiB9CiAKIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihp
ZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVj
dClyZWN0CkBAIC03NzksMTUgKzgwMSwxNiBAQCBzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9y
VGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaQogICAg
IHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFwc2VkVGlt
ZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7CiB9CiAKLXN0YXRpYyBm
bG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCitzdGF0aWMgZmxv
YXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQogewotICAgIGZsb2F0
IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOwotICAgIHJl
dHVybiBkZWx0YSAvIHN0aWZmbmVzczsKKyAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3Rp
ZmZuZXNzOwogfQogCi1zdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZs
b2F0IGRlbHRhKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorc3RhdGljIGZsb2F0IGVs
YXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKIHsKLSAgICByZXR1cm4gZGVs
dGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOworICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4
KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOworICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVz
czsKIH0KIAogc3RhdGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCkBAIC04MDEsMTAg
KzgyNCwxMyBAQCBzdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKICAgICByZXR1
cm4gbXVsdGlwbGllcjsKIH0KIAorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omhh
bmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewogICAgIG1f
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CiAKKyNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKICAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygp
KSB7CiAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQp
OwogICAgICAgICByZXR1cm47CkBAIC04MzYsNiArODYyLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAg
ICAgfQogCiAgICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOworI2Vsc2UKKyAg
ICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNlbmRpZgog
fQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKQEAgLTkxMCw2ICs5MzksNyBAQCBib29s
IFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpIGNvbnN0CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAg
ICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKIAogICAgIGZsb2F0IGRlbHRh
WCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpOwpAQCAtMTA2MCw2ICsxMDkwLDcgQEAg
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBm
YWxzZTsKICAgICAgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwogICAgIH0K
KyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUo
KQpAQCAtMTIzMCw0ICsxMjYxLDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJs
ZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisj
ZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpIHx8IChQTEFURk9STShDSFJPTUlVTSkg
JiYgT1MoREFSV0lOKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93526</attachid>
            <date>2011-05-13 16:06:38 -0700</date>
            <delta_ts>2011-05-23 13:28:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59753-20110513160637.patch</filename>
            <type>text/plain</type>
            <size>62835</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYwODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYTExOGI2MDlmMmYxOGI1
ZmViNDI5OGEyZTk0YzhhOTJiOTEwMjFjLi44YjI1ZjczMDQ2ZWRjNTg5ZGIwNzMwZWZiMGM4YzA3
MWQ0NDRlZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTA1LTEzICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRv
ck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NTMKKworICAgICAgICBObyBuZXcgdGVz
dHMuIEp1c3QgZm9ya2luZyBTY3JvbGxBbmltYXRvck1hYyB0byBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNE
cmF3aW5nSW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBBZGRlZC4KKyAg
ICAgICAgKGFicyk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGlu
aXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGJvdW5kc10pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgX3BpeGVsQWxpZ25Qcm9wb3Nl
ZFNjcm9sbFBvc2l0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxl
Z2F0ZSBjb252ZXJ0U2l6ZVRvQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUgY29udmVydFNpemVGcm9tQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVydFNpemVUb0JhY2tpbmc6XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplRnJvbUJhY2tpbmc6XSk6
CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHN1cGVydmlld10pOgor
ICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBkb2N1bWVudFZpZXddKToK
KyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgd2luZG93XSk6CisgICAg
ICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9yZWN1cnNpdmVSZWNvbXB1dGVU
b29sVGlwc10pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
IGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBjb250ZW50QXJlYVJl
Y3RGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAg
ICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNv
bnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpjb252ZXJ0Q29udGVudFBvaW50
OnRvU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0
Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9s
bGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0
eWxlOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGluaXRXaXRoU2Nyb2xs
YmFyUGFpbnRlcjpwYXJ0OldlYkNvcmU6OnNjcm9sbEFuaW1hdG9yOldlYkNvcmU6OmFuaW1hdGVB
bHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBz
Y3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgaW5pdFdpdGhTY3JvbGxBbmltYXRvcjpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1bU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAo
LVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxheWVyXSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzZXRVcEFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFy
dDpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlv
bjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFu
aW1hdGVUcmFja0FscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDpvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkXSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxYUG9zaXRp
b25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bm90aXR5UG9zaXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRl
bnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0
YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlk
RW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9yaXpvbnRh
bFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OmVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWJvdW5k
RGVsdGFGb3JFbGFzdGljRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWxhc3RpY0RlbHRhRm9y
UmVib3VuZERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFdoZWVsTXVsdGlwbGllcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Omhh
bmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpwaW5uZWRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3Ro
U2Nyb2xsV2l0aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjplbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OnJvdW5kVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRvRGV2aWNlUGl4
ZWxUb3dhcmRaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklz
QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0
b3BTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorCiAyMDEx
LTA1LTA5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAKaW5kZXggNzBiODBkMWExYmUyZTJmOTQyYzExMzk4MzYyNmFkMzBjZDg1
ODkxNi4uYTkxMWQxNDU4MzcwMWYwMzBkYjE0ZDI1NTAwMTc4OWVlY2EyNzE5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExMjIsNiArMTEyMiwxMCBAQAogICAg
ICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Ny
b2xsYmFyUHJlZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3JlUmVuZGVyVGhlbWVO
b3RpZmljYXRpb25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29yZVJlbmRlclRoZW1l
Tm90aWZpY2F0aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9udENhY2hlPUNocm9t
aXVtV2ViQ29yZU9iakNXZWJGb250Q2FjaGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsQW5pbWF0
aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2Vi
Q29yZU9iakNTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFydEFuaW1hdGlv
bicsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAg
ICAgICAgICAgJy4uLy4uLy4uL1dlYktpdExpYnJhcmllcycsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
NmE3YThmYjZkYjBkMjI0ZjNhYWI5ODk1MDVkOTNkNTNmMmM3OGExNS4uYTFiMjI0YzExN2Q4YzU1
MzFhN2Y1Y2EzYzQ2NjI2ZDEzMDJkN2I5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzc4NSw2ICsz
Nzg1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc01hYy5tbScsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDZmYzc4ZTc0MDBlN2QyOTg3ZmVl
OGYwMTc1YTE0MDFhNWEyMTYzOTguLjQ1Y2NlMzkzZTVjZDk4YzI5ZmRkNzRiODQ5YzExN2E3NTEz
MjAxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAg
LTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0jaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2lmICFFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykgJiYgIShQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIFBhc3NPd25Q
dHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0
b3Ioc2Nyb2xsYWJsZUFyZWEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NGI4MWRiNDE4YmUwNzc2ZGI3Mzk5MGYwODQ0ZTNmMDI5NWU2YWU3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Y19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc01hYy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKK0BjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CisjZWxzZQorY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGU7CitjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CitjbGFzcyBTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFy
OworCitjbGFzcyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjIDogcHVibGljIFNjcm9sbEFuaW1h
dG9yIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKFNjcm9sbGFibGVB
cmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpOworCisgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworCisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KFBs
YXRmb3JtV2hlZWxFdmVudCYpOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7
CisjZW5kaWYKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsK
KworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQ
b3NpdGlvbik7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgp
OworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVsdGFZKTsKKworICAg
IHZvaWQgc2V0SXNEcmF3aW5nSW50b0xheWVyKGJvb2wgYikgeyBtX2RyYXdpbmdJbnRvTGF5ZXIg
PSBiOyB9CisgICAgYm9vbCBpc0RyYXdpbmdJbnRvTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdpbmdJbnRvTGF5ZXI7IH0KKworICAgIGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsgfQorCisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0
aXZlKCkgY29uc3Q7CisgICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICB2
b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisjZW5kaWYKKworICAgIHZvaWQgc2V0Vmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICBS
ZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOworICAgIFJldGFpblB0cjxTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZTsKKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBSZXRhaW5QdHI8V0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZj4gbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsK
KyAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlOworICAgIFJldGFpblB0cjxpZD4gbV9zY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGU7CisKKyAgICB2b2lkIGluaXRpYWxTY3JvbGxiYXJQYWludFRp
bWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICBUaW1lcjxT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjPiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyOwor
I2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExp
dmVSZXNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURp
ZEhpZGUoKSBjb25zdDsKKyAgICB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Owor
ICAgIHZvaWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lk
IGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworCisgICAgZmxvYXQg
YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0OworICAgIGZsb2F0
IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKKyAgICBGbG9h
dFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OworCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGJvb2wgYWxsb3dzVmVy
dGljYWxTdHJldGNoaW5nKCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRj
aGluZygpIGNvbnN0OworICAgIGJvb2wgcGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBm
bG9hdCBkZWx0YVkpOworICAgIHZvaWQgc25hcFJ1YmJlckJhbmQoKTsKKyAgICB2b2lkIHNuYXBS
dWJiZXJCYW5kVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopOwor
ICAgIHZvaWQgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAg
IHZvaWQgYmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAgdm9pZCBlbmRTY3JvbGxHZXN0dXJlKCk7
CisKKyAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlOworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3M7CisgICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xsczsKKyAgICAKKyAg
ICBDRlRpbWVJbnRlcnZhbCBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBGbG9h
dFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3Jv
bGxGb3JjZTsKKyAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgLy8gUnVi
YmVyIGJhbmQgc3RhdGUuCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7CisgICAgRmxv
YXRTaXplIG1fc3RhcnRTdHJldGNoOworICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOworICAg
IEZsb2F0U2l6ZSBtX29yaWdWZWxvY2l0eTsKKyAgICBUaW1lcjxTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjPiBtX3NuYXBSdWJiZXJCYW5kVGltZXI7CisjZW5kaWYKKyAgICBib29sIG1fZHJhd2lu
Z0ludG9MYXllcjsKKyAgICBib29sIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKKyAgICBJ
bnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzMzNmQyZGZkODUzNTFhZjVhZmI1ZDFiNjY0
YTdiZWFiNmQxZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQpAQCAtMCwwICsxLDEyNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZl
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEu
aCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWMuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNp
bmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgIWRlZmluZWQoTUFDX09TX1hfVkVSU0lP
Tl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwgTUFDX09TX1hfVkVSU0lP
Tl8xMF82CitAcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQorQGVuZAorCitAaW50ZXJmYWNl
IE5TUHJvY2Vzc0luZm8gKE5TT2JqZWN0KQorLSAoTlNUaW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1l
OworQGVuZAorI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhl
bHBlckRldGFpbHMpCistIChpZClpbml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKKy0gKHZv
aWQpX3N0b3BSdW47CistIChCT09MKV9pc0FuaW1hdGluZzsKKy0gKE5TUG9pbnQpdGFyZ2V0T3Jp
Z2luOworQGVuZAorCitAaW50ZXJmYWNlIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIDog
TlNPYmplY3QKK3sKKyAgICBXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5p
bWF0b3I7Cit9CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKK0BlbmQKKworc3RhdGljIE5TU2l6
ZSBhYnMoTlNTaXplIHNpemUpCit7CisgICAgTlNTaXplIGZpbmFsU2l6ZSA9IHNpemU7CisgICAg
aWYgKGZpbmFsU2l6ZS53aWR0aCA8IDApCisgICAgICAgIGZpbmFsU2l6ZS53aWR0aCA9IC1maW5h
bFNpemUud2lkdGg7CisgICAgaWYgKGZpbmFsU2l6ZS5oZWlnaHQgPCAwKQorICAgICAgICBmaW5h
bFNpemUuaGVpZ2h0ID0gLWZpbmFsU2l6ZS5oZWlnaHQ7CisgICAgcmV0dXJuIGZpbmFsU2l6ZTsg
ICAgCit9CisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZQor
CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKilzY3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2FuaW1hdG9yID0gc2Ny
b2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCistIChOU1JlY3QpYm91bmRz
Cit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OworCisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBfYW5pbWF0b3ItPmN1cnJl
bnRQb3NpdGlvbigpOworICAgIHJldHVybiBOU01ha2VSZWN0KGN1cnJlbnRQb3NpdGlvbi54KCks
IGN1cnJlbnRQb3NpdGlvbi55KCksIDAsIDApOworfQorCistICh2b2lkKV9pbW1lZGlhdGVTY3Jv
bGxUb1BvaW50OihOU1BvaW50KW5ld1Bvc2l0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisg
ICAgICAgIHJldHVybjsKKyAgICBfYW5pbWF0b3ItPmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3
UG9zaXRpb24pOworfQorCistIChOU1BvaW50KV9waXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3Np
dGlvbjooTlNQb2ludCluZXdPcmlnaW4KK3sKKyAgICByZXR1cm4gbmV3T3JpZ2luOworfQorCist
IChOU1NpemUpY29udmVydFNpemVUb0Jhc2U6KE5TU2l6ZSlzaXplCit7CisgICAgcmV0dXJuIGFi
cyhzaXplKTsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhc2U6KE5TU2l6ZSlzaXpl
Cit7CisgICAgcmV0dXJuIGFicyhzaXplKTsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplVG9C
YWNraW5nOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5T
U2l6ZSljb252ZXJ0U2l6ZUZyb21CYWNraW5nOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBh
YnMoc2l6ZSk7Cit9CisKKy0gKGlkKXN1cGVydmlldworeworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKGlkKWRvY3VtZW50VmlldworeworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGlkKXdpbmRv
dworeworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpX3JlY3Vyc2l2ZVJlY29tcHV0ZVRv
b2xUaXBzCit7Cit9CisKK0BlbmQKKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKwor
QGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QK
K3sKKyAgICBXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Cit9
CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFNjcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmlt
YXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9h
bmltYXRvciA9IDA7Cit9CisKKy0gKE5TUmVjdCljb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlcklt
cFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlcklt
cFBhaXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsK
KworICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplID0gX2FuaW1hdG9yLT5zY3JvbGxh
YmxlQXJlYSgpLT5jb250ZW50c1NpemUoKTsKKyAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCBj
b250ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKTsKK30KKworLSAoQk9P
TClpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgorewor
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX2FuaW1hdG9yKQor
ICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT5pbkxpdmVSZXNpemUoKTsKK30KKworLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5Db250
ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCit7CisgICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAg
IHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIHJldHVybiBfYW5pbWF0b3ItPnNjcm9sbGFibGVB
cmVhKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7Cit9CisKKy0gKE5TUG9pbnQpc2Nyb2xsZXJJ
bXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgY29udmVydENvbnRlbnRQb2ludDooTlNQb2ludClw
b2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAg
ICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSAwOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZilzY3JvbGxlckltcCkpCisgICAgICAgIHNjcm9sbGJhciA9IF9hbmltYXRv
ci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGVsc2UgCisg
ICAgICAgIHNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKKworICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9s
bGJhciBoZXJlIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCisgICAgLy8g
bWV0aG9kIHRvIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBo
YXMgYmVlbiBzZXQgdG8gMCBhbmQgdGhlCisgICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0
b3IgaGFzIGJlZW4gY2FsbGVkLiBXZSBzaG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKKyAg
ICAvLyBvZiB0aGUgY2xlYW4tdXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1
bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQgdGhpcworICAgIC8vIGlzc3VlLgorICAgIGlm
ICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisgICAgCisgICAgcmV0
dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhJbnRQb2ludChwb2ludElu
Q29udGVudEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVy
SW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKK3sK
KyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVj
dCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBk
YXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxl
clN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2FuaW1hdG9y
KQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVm
IHBhaW50ZXJDb250cm9sbGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Ny
b2xsZXJJbXBQYWlyOworICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIG1h
Y1RoZW1lID0gKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVm
IG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJv
bGxlcihwYWludGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRlcikgewor
ICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9y
LT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFj
ZW1lbnRQYWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNj
cm9sbGJhcih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAg
d2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIsIG5ld1Zl
cnRpY2FsUGFpbnRlciwgZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xs
YmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQg
dGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUg
cmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQg
bGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFj
VGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSk7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29yZTo6SW50
UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiBvbGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXJGb3JDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAob2xkSG9y
aXpvbnRhbFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCk7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFsUGFpbnRl
ciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFsUGFpbnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAg
ICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9s
bGJhciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWlu
dGVyQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRy
dWUpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRp
ZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBm
cmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdp
bGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJs
eSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRo
aWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhp
Y2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxh
eW91dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNj
cm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5kCisKK0Bp
bnRlcmZhY2UgU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7CisgICAgUmV0
YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAgICBXZWJD
b3JlOjpTY3JvbGxiYXJQYXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqIF9hbmltYXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7CisgICAgQ0dG
bG9hdCBfbmV3QWxwaGE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Ny
b2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFy
UGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJh
dGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjoo
V0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3Jv
bGxiYXJQYXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhh
IGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhEdXJhdGlvbjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJ
bk91dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9z
Y3JvbGxlclBhaW50ZXIgPSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0OworICAg
IF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9
PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9s
bGVyUGFpbnRlci5nZXQoKSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxl
clBhaW50ZXIuZ2V0KCkpOworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAorICAgIHJl
dHVybiBzZWxmOyAgICAKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0
aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnBy
b2dyZXNzXTsKKworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBD
R0Zsb2F0IGN1cnJlbnRBbHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkK
KyAgICAgICAgY3VycmVudEFscGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAg
Y3VycmVudEFscGhhID0gcHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6
OlRodW1iUGFydCkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3Jv
bGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAgICB3a1Nl
dFNjcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJl
bnRBbHBoYSk7CisKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhl
eSBwYWludCB0aGUgYW5pbWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3Jl
OjpJbnRSZWN0KDAsIDAsIHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9s
bGJhci0+aGVpZ2h0KCkpKTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpCisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNv
cmU6OkludFJlY3QoMCwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ry
b3llZAoreworICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9IDA7Cit9
CisKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVj
dDxOU0FuaW1hdGlvbkRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqIF9hbmltYXRvcjsKKworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uPiBfdmVydGljYWxLbm9iQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uPiBfaG9yaXpvbnRhbEtub2JBbmltYXRpb247CisKKyAgICBSZXRhaW5QdHI8U2Ny
b2xsYmFyUGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247CisgICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Cit9
CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQorCistIChpZClp
bml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
KilzY3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNjcm9sbEFu
aW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMK
K3sKKyAgICBbX3ZlcnRpY2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAg
ICBbX2hvcml6b250YWxLbm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgIFtf
dmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6
b250YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAoTlNSZWN0
KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7
Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sK
KyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICgh
X2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmICghX2FuaW1hdG9yLT5pc0Ry
YXdpbmdJbnRvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBhdHRlbXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCisgICAgc3RhdGlj
IENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVy
biBkdW1teUxheWVyOworfQorCistICh2b2lkKXNldFVwQW5pbWF0aW9uOihSZXRhaW5QdHI8U2Ny
b2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWlu
dGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6
OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJh
dGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJZiB0aGUgdXNlciBoYXMg
c2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBo
ZXJlLiAKKyAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAgICBib29s
IG11c3RBbmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CisK
KyAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVz
dEFuaW1hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfYW5pbWF0b3ItPnNjcm9sbGFi
bGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRl
KSB7CisgICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5p
dGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAgX2FuaW1h
dG9yLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJl
bnRseSBhbmltYXRpbmcsIHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgewor
ICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAg
ICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAocGFy
dCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRh
bChzY3JvbGxlclBhaW50ZXIpKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAg
ICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tTY3JvbGxiYXJQYWludGVyS25v
YlJlY3Qoc2Nyb2xsZXJQYWludGVyKSk7CisgICAgICAgICAgICBfYW5pbWF0b3ItPnNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7Cisg
ICAgfQorCisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdyb3VwaW5nXTsKKyAgICBbW05T
QW5pbWF0aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVyYXRpb246ZHVyYXRpb25dOwor
ICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Njcm9sbGJhclBhcnRBbmltYXRp
b24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnQ6cGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcjpfYW5pbWF0b3IgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpk
dXJhdGlvbl0pOworICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlv
bkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07CisgICAgW05TQW5pbWF0aW9uQ29udGV4
dCBlbmRHcm91cGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1w
IGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3Jv
bGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJ
c0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRp
b246X2hvcml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50
ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1
cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9u
Ol92ZXJ0aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBw
YXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRp
b246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBh
bmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3Jv
bGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJ
c0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRp
b246X2hvcml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWlu
dGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0Fs
cGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5p
bWF0aW9uOl92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBh
aW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNr
QWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClz
Y3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNVSW50ZWdlciluZXdP
dmVybGF5U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7Cisg
ICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClz
Y3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7CisgICAgW192ZXJ0
aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtf
aG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwor
ICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3ll
ZF07CisgICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5U
RVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4g
U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKHNjcm9s
bGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Ny
b2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVS
KQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKKyNlbmRpZgor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNl
KQorICAgICwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX2lnbm9y
ZU1vbWVudHVtU2Nyb2xscyhmYWxzZSkKKyAgICAsIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0
YW1wKDApCisgICAgLCBtX3N0YXJ0VGltZSgwKQorICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVy
KHRoaXMsICZTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmly
ZWQpCisjZW5kaWYKKyAgICAsIG1fZHJhd2luZ0ludG9MYXllcihmYWxzZSkKKyAgICAsIG1faGF2
ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmltYXRpb25I
ZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxw
ZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlLmdldCgpXSk7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsK
KyAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsK
KyAgICBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyNlbmRpZgor
fQorCitTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
YygpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwor
ICAgIFsoaWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpu
aWxdOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRv
ckRlc3Ryb3llZF07CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkg
c2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworI2VuZGlmCit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisgICAgaWYg
KCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiQXBw
bGVTY3JvbGxBbmltYXRpb25FbmFibGVkIl0pCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisK
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKKyAgICAgICAgcmV0dXJuIFNj
cm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0
aXBsaWVyKTsKKworICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVudFBvc1k7CisgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsgKHN0
ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOworICAgIGlmIChjdXJyZW50UG9zID09IG5ld1Bv
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNQb2ludCBuZXdQb2ludDsKKyAgICBp
ZiAoW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9pc0FuaW1hdGluZ10pIHsKKyAgICAg
ICAgTlNQb2ludCB0YXJnZXRPcmlnaW4gPSBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkg
dGFyZ2V0T3JpZ2luXTsKKyAgICAgICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gTlNNYWtlUG9pbnQobmV3UG9zLCB0YXJnZXRPcmlnaW4ueSkgOiBOU01h
a2VQb2ludCh0YXJnZXRPcmlnaW4ueCwgbmV3UG9zKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbmV3
UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtlUG9pbnQo
bmV3UG9zLCBtX2N1cnJlbnRQb3NZKSA6IE5TTWFrZVBvaW50KG1fY3VycmVudFBvc1gsIG5ld1Bv
cyk7CisKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgc2Nyb2xsVG9Qb2ludDpu
ZXdQb2ludF07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IG9mZnNldCkKK3sKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5d
OworICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKK30KKworZmxvYXQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkoZmxv
YXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisK
KyAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9sbGFibGVB
cmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdp
ZHRoKCkpLCAwKTsKK30KKworZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0
U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAg
aWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgp
KQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48
ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQo
KSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOworfQorCitGbG9hdFBv
aW50IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNl
c3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3Nj
cm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQorICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisKKyAgICBmbG9hdCBuZXdYID0gbWF4PGZsb2F0PihtaW48Zmxv
YXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgo
KSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgZmxvYXQgbmV3
WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJsZUFyZWEt
PmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdo
dCgpKSwgMCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBuZXdZKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQoreworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3Np
dGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOworIAor
ICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYmIGFkanVzdGVk
UG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2N1cnJlbnRQb3NYID0gYWRqdXN0ZWRQb3NpdGlvbi54KCk7CisgICAgbV9jdXJyZW50UG9z
WSA9IGFkanVzdGVkUG9zaXRpb24ueSgpOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVs
dGFYKGZsb2F0IGRlbHRhWCkKK3sKKyAgICBmbG9hdCBuZXdQb3NYID0gYWRqdXN0U2Nyb2xsWFBv
c2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWCArIGRlbHRhWCk7CisgICAgCisgICAgaWYg
KG5ld1Bvc1ggPT0gbV9jdXJyZW50UG9zWCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1f
Y3VycmVudFBvc1ggPSBuZXdQb3NYOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZ
KGZsb2F0IGRlbHRhWSkKK3sKKyAgICBmbG9hdCBuZXdQb3NZID0gYWRqdXN0U2Nyb2xsWVBvc2l0
aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWSArIGRlbHRhWSk7CisgICAgCisgICAgaWYgKG5l
d1Bvc1kgPT0gbV9jdXJyZW50UG9zWSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY3Vy
cmVudFBvc1kgPSBuZXdQb3NZOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpCit7
CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFTY3JvbGxl
ZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorICAgIFNjcm9s
bEFuaW1hdG9yOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Cit7CisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFXaWxsUGFpbnQobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0Cit7Cisj
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFbnRlcmVkQ29udGVudEFy
ZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgY29u
c3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tNb3VzZUV4aXRlZENv
bnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrV2lsbFN0
YXJ0TGl2ZVJlc2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCgp
IGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFy
ZWFSZXNpemVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dpbGxFbmRMaXZlUmVzaXpl
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkgY29uc3QKK3sK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURpZFNob3co
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAorewor
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhRGlkSGlkZSht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7
CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrRGlkQmVnaW5TY3JvbGxHZXN0
dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0
Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrRGlkRW5kU2Nyb2xsR2Vz
dHVyZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAg
ICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZl
VGhlbWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJh
clBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5n
ZXQoKSk7CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFpbnRlciwgZmFsc2UpOworICAgIGlmIChzY3JvbGxh
YmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVy
S25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFy
KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsK
KyAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpLCBuaWwsIGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGJhcik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBt
X3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFpbnRl
ciwgdHJ1ZSk7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQorICAg
ICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlciwgMSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgp
KS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHdrU2Nyb2xsYmFyUGFpbnRl
clNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNv
bnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmlsLCB0cnVlKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKK3sKKyAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKKworI2lmIFVTRShXS19TQ1JPTExCQVJf
UEFJTlRFUikKKyAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisgICAgICAg
IHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisKK3N0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxWZWxvY2l0eVplcm9pbmdU
aW1lb3V0ID0gMC4xMGY7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFN0aWZmbmVzcyA9
IDIwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJh
dGlvID0gMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVs
dGFCZWZvcmVTdHJldGNoID0gMTA7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZEFtcGxp
dHVkZSA9IDAuMzFmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRQZXJpb2QgPSAxLjZm
OworCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQ
b3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkKK3sKKyAg
ICBmbG9hdCBhbXBsaXR1ZGUgPSBydWJiZXJiYW5kQW1wbGl0dWRlOworICAgIGZsb2F0IHBlcmlv
ZCA9IHJ1YmJlcmJhbmRQZXJpb2Q7CisgICAgZmxvYXQgY3JpdGljYWxEYW1wZW5pbmdGYWN0b3Ig
PSBleHBmKCgtZWxhcHNlZFRpbWUgKiBydWJiZXJiYW5kU3RpZmZuZXNzKSAvIHBlcmlvZCk7Cisg
ICAgICAgICAgICAgCisgICAgcmV0dXJuIChpbml0aWFsUG9zaXRpb24gKyAoLWluaXRpYWxWZWxv
Y2l0eSAqIGVsYXBzZWRUaW1lICogYW1wbGl0dWRlKSkgKiBjcml0aWNhbERhbXBlbmluZ0ZhY3Rv
cjsKK30KKworc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBk
ZWx0YSkKK3sKKyAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOworfQorCisj
aWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9y
UmVib3VuZERlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6
bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOworICAgIHJldHVybiBkZWx0YSAvIHN0aWZm
bmVzczsKK30KKworc3RhdGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCit7CisgICAg
c3RhdGljIGZsb2F0IG11bHRpcGxpZXIgPSAtMTsKKyAgICBpZiAobXVsdGlwbGllciA8IDApIHsK
KyAgICAgICAgbXVsdGlwbGllciA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxXaGVlbE11bHRpcGxpZXIiXTsKKyAgICAgICAgaWYg
KG11bHRpcGxpZXIgPD0gMCkKKyAgICAgICAgICAgIG11bHRpcGxpZXIgPSAxOworICAgIH0KKyAg
ICByZXR1cm4gbXVsdGlwbGllcjsKK30KKworI2VuZGlmCisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKworI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Ny
b2xsaW5nRGVsdGFzKCkpIHsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBzb21ld2hhdCByb3VuZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVl
bCBldmVudHMKKyAgICAvLyB1cCB0byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFr
ZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBs
ZW1lbmF0YXRpb24gb2YgaGFuZGxlV2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCisgICAg
Ly8gd2hlZWwgZXZlbnQgaWYgdGhlcmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCisgICAgaWYgKGZh
YnNmKHdoZWVsRXZlbnQuZGVsdGFZKCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7
CisgICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAg
IFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFhbGxvd3NI
b3Jpem9udGFsU3RyZXRjaGluZygpKSB7CisgICAgICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHdoZWVsRXZlbnQuYWNjZXB0KCk7CisKKyAgICBib29sIGlzTW9tZXR1
bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlTm9uZSk7CisgICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChp
c01vbWV0dW1TY3JvbGxFdmVudCB8fCBtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkp
IHsKKyAgICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlRW5kZWQpCisgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc21vb3RoU2Nyb2xsV2l0aEV2
ZW50KHdoZWVsRXZlbnQpOworI2Vsc2UKKyAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxF
dmVudCh3aGVlbEV2ZW50KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2Vz
dHVyZUV2ZW50KQoreworICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGUpCisgICAgICAgIGJlZ2luU2Nyb2xsR2VzdHVyZSgp
OworICAgIGVsc2UKKyAgICAgICAgZW5kU2Nyb2xsR2VzdHVyZSgpOworfQorCitib29sIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZKQoreworICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworICAgIGlmIChmYWJzZihk
ZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFy
ZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0
KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArICsgbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5v
dCBwaW5uZWQgdG8gdGhlIGJvdHRvbQorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQo
bV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT3JpZ2luKCkueSgpKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAw
KSB7CisgICAgICAgIGlmIChkZWx0YVggPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5
aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBs
ZWZ0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
LngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRv
IHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQK
KyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVu
dHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3Qo
KS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAm
JiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1pdERlbHRhLmhlaWdodCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkp
IHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xs
YmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGlj
YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXIt
PmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOwor
ICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxT
dHJldGNoaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgo
KGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZT
Y3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlO
b25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxs
b3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCit7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKworICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS53aWR0aCgpOworICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5oZWlnaHQoKTsKKworICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1h
eSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50
byBvdmVyZmxvdy4KKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKwor
ICAgIGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwor
ICAgIGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwor
CisgICAgZGVsdGFYICs9IGV2ZW50Q29hbGxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZl
bnRDb2FsbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9sbGluZyB2
ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYgKGZhYnNm
KGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNl
CisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9
IGZhbHNlOworICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgPSBmYWxzZTsKKyAgICBi
b29sIHNob3VsZFN0cmV0Y2ggPSBmYWxzZTsKKyAgICAKKyAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworCisgICAgaXNIb3Jpem9u
dGFsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7CisgICAgaXNWZXJ0aWNhbGx5
U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKworICAgIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIHBoYXNlID0gd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCk7CisKKyAgICAvLyBJ
ZiB3ZSBhcmUgc3RhcnRpbmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRoZW4gZG8gc29tZSBzZXR1cC4K
KyAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIChwaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Q2hhbmdlZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKKwor
ICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBt
X2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUg
fHwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVt
dHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwgc2Nyb2xs
VmVsb2NpdHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5
LnNldFdpZHRoKGV2ZW50Q29hbGxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOworICAg
ICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxsZXNjZWREZWx0
YVkgLyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xs
VGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1l
c3RhbXAoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAg
ICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihk
ZWx0YVgsIDApKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hp
bmcgb25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAw
ICYmIChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJl
dGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVs
dGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJm
bG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0
cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChwaW5uZWRJ
bkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAw
ICYmIChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJl
dGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVs
dGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292
ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4K
KyAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1
aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsg
ZGVsdGFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9s
bERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAg
fHwgZGVsdGFZICE9IDApIHsKKyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRp
Y2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAg
ICBpZiAoZGVsdGFZICE9IDApIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVko
ZGVsdGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgewor
ICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAg
ICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAg
ICBldmVudENvYWxsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVs
dGFYICE9IDApICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5EaXJlY3Rp
b24oZGVsdGFYLCAwKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbW1l
ZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAg
ICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAgICAgICAg
ICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2FsbGVzY2VkRGVsdGFZID0g
MDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5
U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAg
ICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2Uo
ZmFsc2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7
CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICAgICAgICAg
IGlmICgocGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsbGVzY2VkRGVsdGFYLCBldmVudENvYWxs
ZXNjZWREZWx0YVkpIHx8IChmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVgpICsgZmFic2YoZXZl
bnRDb2FsbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3Rh
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVp
Z2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2Vp
bGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRo
KCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZv
cmNlLmhlaWdodCgpKSkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAgICAgICAg
RmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CisKKyAgICAg
ICAgICAgIGlmIChvcmlnT3JpZ2luICE9IG5ld09yaWdpbikgeworICAgICAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7Cisg
ICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAg
ICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3JvbGxHZXN0dXJlKCkKK3sK
KyAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKKworICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCA9IHRydWU7CisgICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVlOworICAgIG1fbW9t
ZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMgPSBmYWxzZTsKKyAgICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAg
bV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2hB
bW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNo
QW1vdW50LndpZHRoKCkpKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKKworICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIAorICAgIGlmIChtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRp
bWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjplbmRTY3Jv
bGxHZXN0dXJlKCkKK3sKKyAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7CisKKyAgICBzbmFwUnVi
YmVyQmFuZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJi
ZXJCYW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVz
dGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRh
ID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1fbW9tZW50dW1WZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9pblNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKKwor
ICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNl
RGF0ZV07CisgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICBtX29yaWdPcmln
aW4gPSBGbG9hdFBvaW50KCk7CisgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKwor
ICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFydFJlcGVhdGluZygxLjAvNjAuMCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sKKyAgICBy
ZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwor
fQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxv
YXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKKyAgICBpZiAo
ZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0gPSByb3VuZGVkTnVt
OworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChUaW1lcjxTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjPiopCit7CisgICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgeworICAgICAgICBDRlRpbWVJbnRlcnZh
bCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBt
X3N0YXJ0VGltZTsKKworICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkp
IHsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3Zlcmhh
bmdBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUo
KSkgeyAgICAKKyAgICAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwor
ICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAg
ICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJl
dGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQ
b2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1f
b3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2Nh
dGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gbV9zdGFydFN0cmV0
Y2g7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxvY2l0eTsKKwor
ICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZlciB2ZXJ0aWNh
bCBydWJiZXJiYW5kaW5nCisgICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVsb2NpdHkuaGVp
Z2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQorICAgICAgICAgICAgICAg
IG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8g
c2Nyb2xsIGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBt
X3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgICAgICBpZiAo
IWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpCisgICAgICAgICAgICAgICAgbV9v
cmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERv
bid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xs
IGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9s
bGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCF2U2Nyb2xs
ZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9j
aXR5LnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0UG9pbnQgZGVsdGEo
cm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9z
dGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1l
RGVsdGEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dh
cmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwg
LW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOworCisgICAgICAg
IGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgeworICAg
ICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKKwor
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdP
cmlnaW4pOworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJl
dGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9y
RWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOworICAgICAgICAgICAgbV9zdHJldGNo
U2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJl
dGNoLmhlaWdodCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbW1lZGlhdGVT
Y3JvbGxUb1BvaW50KG1fb3JpZ09yaWdpbik7CisKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkp
OworCisgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOworICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBG
bG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAg
ICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VS
ZWZlcmVuY2VEYXRlXTsKKyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkKK3sKKyAg
ICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgwLjEpOworfQorCiti
b29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNB
Y3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Nyb2xs
YmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9w
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCit7Cisg
ICAgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNjcm9sbGVycyhtX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpKTsKK30KKyNlbmRpZgorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3Jv
bGxlclRodW1iKQoreworICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xs
ZXJUaHVtYjsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJlY3RJblZpZXdDb29yZGlu
YXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxl
clRodW1iKTsKKworICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAg
IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuaAppbmRleCA0NmQ0OWViMzE0NGM2YTU2YTZiZjhmMzk1N2NiM2NmODcyYWY1
MDk1Li5jYjQ2MjBmZWQ1MjhjZTRkYzE5OGViZTgzYTQ4NjI0YWNjNDM2MTljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTM3LDcgKzM3LDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFS
V0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwog
dHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKQEAgLTExOSw3ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKSkpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IEludFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8gZG9u
J3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1Bv
aW50KCkgY29uc3Q7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94473</attachid>
            <date>2011-05-23 13:28:34 -0700</date>
            <delta_ts>2011-05-23 14:06:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59753-20110523132833.patch</filename>
            <type>text/plain</type>
            <size>62895</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYwODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYTExOGI2MDlmMmYxOGI1
ZmViNDI5OGEyZTk0YzhhOTJiOTEwMjFjLi41M2EyNGM0ZmZhOWQ3YzdhODlkMDYwYzBmZDRhNWI0
OGJmZTNjMTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTA1LTEzICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRv
ck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NTMKKworICAgICAgICBObyBuZXcgdGVz
dHMuIEp1c3QgZm9ya2luZyBTY3JvbGxBbmltYXRvck1hYyB0byBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNE
cmF3aW5nSW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBBZGRlZC4gRm9y
a2VkIGZyb20gU2Nyb2xsQW5pbWF0b3JNYWMgYW5kIHJlcGxhY2VkIGFsbCBpbnN0YW5jZXMgb2Yg
U2Nyb2xsQW5pbWF0b3JNYWMgd2l0aCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjIGFuZCBTY3Jv
bGxiYXJUaGVtZU1hYyB3aXRoIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuIFJlbW92ZWQgdGhl
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSBhcm91bmQgdGhlIGZpbGUuCisgICAgICAgIChhYnMp
OgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9s
bEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBib3VuZHNdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUgX2ltbWVkaWF0ZVNjcm9sbFRvUG9pbnQ6XSk6CisgICAgICAgICgtW1Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9waXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3Np
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVy
dFNpemVUb0Jhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
IGNvbnZlcnRTaXplRnJvbUJhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlIGNvbnZlcnRTaXplVG9CYWNraW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6ZUZyb21CYWNraW5nOl0pOgorICAgICAgICAo
LVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzdXBlcnZpZXddKToKKyAgICAgICAgKC1b
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgZG9jdW1lbnRWaWV3XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHdpbmRvd10pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHNdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBpbml0V2l0aFNj
cm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZv
clNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVy
SW1wOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNj
cm9sbGVySW1wUGFpcjpzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKToKKyAgICAg
ICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6
dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6
cGFydDpXZWJDb3JlOjpzY3JvbGxBbmltYXRvcjpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJh
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgc2V0VXBBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6V2ViQ29yZTo6
YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAg
ICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVHJhY2tB
bHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
c2Nyb2xsZXJJbXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgt
W1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6On5TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0
U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxU
b1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Omlt
bWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0aW9uQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQ
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVu
dHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjplbGFzdGlj
RGVsdGFGb3JUaW1lRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0
YSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxXaGVlbE11bHRpcGxpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlu
bmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpiZWdp
blNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRv
d2FyZFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVy
byk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKwogMjAxMS0wNS0wOSAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCmluZGV4IDcwYjgwZDFhMWJlMmUyZjk0MmMxMTM5ODM2MjZhZDMwY2Q4NTg5MTYuLmE5MTFk
MTQ1ODM3MDFmMDMwZGIxNGQyNTUwMDE3ODllZWNhMjcxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xMTIyLDYgKzExMjIsMTAgQEAKICAgICAgICAgICAgICAg
J1Njcm9sbGJhclByZWZzT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclByZWZz
T2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9u
T2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlv
bk9ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkZvbnRDYWNoZT1DaHJvbWl1bVdlYkNvcmVP
YmpDV2ViRm9udENhY2hlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScs
CisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9t
aXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAg
ICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhcnRBbmlt
YXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhcnRBbmltYXRpb24nLAogICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICcu
Li8uLi8uLi9XZWJLaXRMaWJyYXJpZXMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZhN2E4ZmI2ZGIw
ZDIyNGYzYWFiOTg5NTA1ZDkzZDUzZjJjNzhhMTUuLmExYjIyNGMxMTdkOGM1NTMxYTdmNWNhM2M0
NjYyNmQxMzAyZDdiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3ODUsNiArMzc4NSw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVy
bGF5VXRpbGl0aWVzTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCA2ZmM3OGU3NDAwZTdkMjk4N2ZlZThmMDE3NWExNDAx
YTVhMjE2Mzk4Li40NWNjZTM5M2U1Y2Q5OGMyOWZkZDc0Yjg0OWMxMTdhNzUxMzIwMTMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC00MSw3ICs0MSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpICYm
ICEoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFi
bGVBcmVhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRiODFkYjQxOGJl
MDc3NmRiNzM5OTBmMDg0NGUzZjAyOTVlNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaApAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGJh
ck92ZXJsYXlVdGlsaXRpZXNNYWMuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworQGNsYXNz
IFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlOworI2Vsc2UKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK2NsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3Mg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJs
aWM6CisgICAgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSopOworICAg
IHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKKworICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBz
dGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVs
RXZlbnQmKTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisj
ZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICB2b2lk
IGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwor
ICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKKyAgICB2b2lk
IGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CisKKyAgICB2b2lkIHNldElz
RHJhd2luZ0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAg
IGJvb2wgaXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xh
eWVyOyB9CisKKyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJl
dHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KKworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0
OworICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFZpc2libGVTY3JvbGxl
clRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlk
PiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CisKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CisgICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlOworCisgICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRp
bWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+Kik7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNlbmRpZgorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7
CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURp
ZFNob3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3Q7CisgICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKworICAgIGZsb2F0IGFkanVzdFNjcm9s
bFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBhZGp1c3RTY3Jv
bGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRj
aGluZygpIGNvbnN0OworICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25z
dDsKKyAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZ
KTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRp
bWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICB2b2lkIHNt
b290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGJlZ2lu
U2Nyb2xsR2VzdHVyZSgpOworICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgYm9v
bCBtX2luU2Nyb2xsR2VzdHVyZTsKKyAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNz
OworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7CisgICAgCisgICAgQ0ZUaW1lSW50
ZXJ2YWwgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Cisg
ICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIC8vIFJ1YmJlciBiYW5kIHN0
YXRlLgorICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0
YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBGbG9hdFNpemUg
bV9vcmlnVmVsb2NpdHk7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9z
bmFwUnViYmVyQmFuZFRpbWVyOworI2VuZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7
CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50UmVjdCBtX3Zp
c2libGVTY3JvbGxlclRodW1iUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWZjMjY4NGIwZjZlNDhhYmYzNmM1MDdlNzZiNzA5NDBhMGY5ZDVm
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KQEAgLTAsMCArMSwxMjQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYy5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtR2VzdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
LmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwg
TUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgorQHBy
b3RvY29sIE5TQW5pbWF0aW9uRGVsZWdhdGUKK0BlbmQKKworQGludGVyZmFjZSBOU1Byb2Nlc3NJ
bmZvIChOU09iamVjdCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNl
bmRpZgorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxz
KQorLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CistICh2b2lkKV9zdG9wUnVu
OworLSAoQk9PTClfaXNBbmltYXRpbmc7CistIChOU1BvaW50KXRhcmdldE9yaWdpbjsKK0BlbmQK
KworQGludGVyZmFjZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7
CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQor
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CitAZW5kCisKK3N0YXRpYyBOU1NpemUgYWJzKE5TU2l6
ZSBzaXplKQoreworICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOworICAgIGlmIChmaW5hbFNp
emUud2lkdGggPCAwKQorICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRo
OworICAgIGlmIChmaW5hbFNpemUuaGVpZ2h0IDwgMCkKKyAgICAgICAgZmluYWxTaXplLmhlaWdo
dCA9IC1maW5hbFNpemUuaGVpZ2h0OworICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAorfQorCitA
aW1wbGVtZW50YXRpb24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKKworLSAoaWQpaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyop
c2Nyb2xsQW5pbWF0b3IKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9y
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVk
Cit7CisgICAgX2FuaW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWJvdW5kcworeworICAgIGlm
ICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24o
KTsKKyAgICByZXR1cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9z
aXRpb24ueSgpLCAwLCAwKTsKK30KKworLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDoo
TlNQb2ludCluZXdQb3NpdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1
cm47CisgICAgX2FuaW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bvc2l0aW9uKTsK
K30KKworLSAoTlNQb2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRpb246KE5TUG9p
bnQpbmV3T3JpZ2luCit7CisgICAgcmV0dXJuIG5ld09yaWdpbjsKK30KKworLSAoTlNTaXplKWNv
bnZlcnRTaXplVG9CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9
CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJl
dHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFja2luZzooTlNT
aXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVy
dFNpemVGcm9tQmFja2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOwor
fQorCistIChpZClzdXBlcnZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZClkb2N1
bWVudFZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZCl3aW5kb3cKK3sKKyAgICBy
ZXR1cm4gbmlsOworfQorCistICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcworewor
fQorCitAZW5kCisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK0BpbnRlcmZhY2Ug
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyop
c2Nyb2xsQW5pbWF0b3I7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAw
OworfQorCistIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihpZClz
Y3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAg
ICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+
Y29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXpl
LndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVz
aXplRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0
dXJuIE5POworCisgICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZl
UmVzaXplKCk7Cit9CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JT
Y3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxlckltcFBhaXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNa
ZXJvUG9pbnQ7CisKKyAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJy
ZW50TW91c2VQb3NpdGlvbigpOworfQorCistIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooaWQp
c2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9pbnRJbkNvbnRl
bnRBcmVhIHRvU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBO
U1plcm9Qb2ludDsKKworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAg
ICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJhclBhaW50ZXJS
ZWYpc2Nyb2xsZXJJbXApKQorICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFi
bGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlIAorICAgICAgICBzY3Jv
bGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7
CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBz
aW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBi
ZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0
IHRvIDAgYW5kIHRoZQorICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVu
IGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhl
IGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5yZWdpc3RlclNj
cm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKKyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJh
cikKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7CisgICAgCisgICAgcmV0dXJu
IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJbnRQb2ludChw
b2ludEluQ29udGVudEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNj
cm9sbGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJl
Y3QKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFS
QU0ocmVjdCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBh
aXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNT
Y3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2Fu
aW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmIHBhaW50ZXJDb250cm9sbGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYpc2Nyb2xsZXJJbXBQYWlyOworICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMqIG1hY1RoZW1lID0gKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9y
Q29udHJvbGxlcihwYWludGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRl
cikgeworICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2Fu
aW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFy
UmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRl
ckZvclNjcm9sbGJhcih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAg
ICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIs
IG5ld1ZlcnRpY2FsUGFpbnRlciwgZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQg
c2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCBy
ZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFu
ZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAv
LyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNz
ID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJv
bFNpemUoKSk7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29y
ZTo6SW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNj
cm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAo
b2xkSG9yaXpvbnRhbFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFs
UGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFs
UGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKKyAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRh
bFNjcm9sbGJhciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJG
b3JQYWludGVyQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50
ZXIsIHRydWUpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBo
YXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAg
ICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJl
bG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBw
cm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9s
bGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAg
ICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZm
ZWN0IGxheW91dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0
b3ItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5k
CisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7Cisg
ICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAg
ICBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMqIF9hbmltYXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7Cisg
ICAgQ0dGbG9hdCBfbmV3QWxwaGE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Ny
b2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBo
YSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFp
bnRlcjooV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3Jl
OjpTY3JvbGxiYXJQYXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5l
d0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhEdXJhdGlvbjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlv
bkVhc2VJbk91dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIF9zY3JvbGxlclBhaW50ZXIgPSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0
OworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBf
cGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEo
X3Njcm9sbGVyUGFpbnRlci5nZXQoKSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9z
Y3JvbGxlclBhaW50ZXIuZ2V0KCkpOworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAor
ICAgIHJldHVybiBzZWxmOyAgICAKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5T
QW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dy
ZXNzOnByb2dyZXNzXTsKKworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBDR0Zsb2F0IGN1cnJlbnRBbHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdB
bHBoYSkKKyAgICAgICAgY3VycmVudEFscGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAg
ICAgICAgY3VycmVudEFscGhhID0gcHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdl
YkNvcmU6OlRodW1iUGFydCkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAg
ICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCks
IGN1cnJlbnRBbHBoYSk7CisKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRo
YXQgdGhleSBwYWludCB0aGUgYW5pbWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChX
ZWJDb3JlOjpJbnRSZWN0KDAsIDAsIHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkpCisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0
KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRv
ckRlc3Ryb3llZAoreworICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9
IDA7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBO
U09iamVjdDxOU0FuaW1hdGlvbkRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMqIF9hbmltYXRvcjsKKworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uPiBfdmVydGljYWxLbm9iQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbEtub2JBbmltYXRpb247CisKKyAgICBSZXRhaW5Q
dHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247CisgICAg
UmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRp
b247Cit9CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9u
czsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQorCist
IChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKilzY3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNj
cm9sbEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1h
dGlvbnMKK3sKKyAgICBbX3ZlcnRpY2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9u
XTsKKyAgICBbX2hvcml6b250YWxLbm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOwor
ICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBb
X2hvcml6b250YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAo
TlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4g
YVJlY3Q7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJl
Y3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmICghX2FuaW1hdG9y
LT5pc0RyYXdpbmdJbnRvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBhdHRlbXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCisgICAg
c3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAg
IHJldHVybiBkdW1teUxheWVyOworfQorCistICh2b2lkKXNldFVwQW5pbWF0aW9uOihSZXRhaW5Q
dHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xs
ZXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdl
YkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBo
YSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJZiB0aGUgdXNl
ciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmlt
YXRlZCBoZXJlLiAKKyAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAg
ICBib29sIG11c3RBbmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2Fk
KCk7CisKKyAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAm
JiAhbXVzdEFuaW1hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfYW5pbWF0b3ItPnNj
cm9sbGFibGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RB
bmltYXRlKSB7CisgICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUg
ZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAg
X2FuaW1hdG9yLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJl
IGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlv
bikgeworICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9u
XTsKKyAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBp
ZiAocGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFpbnRlcklzSG9y
aXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7
CisgICAgICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tTY3JvbGxiYXJQYWlu
dGVyS25vYlJlY3Qoc2Nyb2xsZXJQYWludGVyKSk7CisgICAgICAgICAgICBfYW5pbWF0b3ItPnNl
dFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3Qo
KSk7CisgICAgfQorCisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdyb3VwaW5nXTsKKyAg
ICBbW05TQW5pbWF0aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVyYXRpb246ZHVyYXRp
b25dOworICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Njcm9sbGJhclBhcnRB
bmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnQ6cGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcjpfYW5pbWF0
b3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJh
dGlvbjpkdXJhdGlvbl0pOworICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHNldEFu
aW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbc2Nyb2xs
YmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07CisgICAgW05TQW5pbWF0aW9u
Q29udGV4dCBlbmRHcm91cGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9s
bGVySW1wIGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAg
IHJldHVybjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAo
V0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBh
aW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBB
bmltYXRpb246X2hvcml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxl
clBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFs
cGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5p
bWF0aW9uOl92ZXJ0aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFp
bnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEg
ZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxl
ckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAg
IHJldHVybjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAo
V0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBh
aW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBB
bmltYXRpb246X2hvcml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xs
ZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdU
cmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNl
dFVwQW5pbWF0aW9uOl92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3Jv
bGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5l
d1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1w
OihpZClzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNVSW50ZWdl
ciluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlcklt
cCk7CisgICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAo
dm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7CisgICAg
W192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwor
ICAgIFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95
ZWRdOworICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRl
c3Ryb3llZF07CisgICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFS
X1BBSU5URVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
KHNjcm9sbGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAg
IDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9Q
QUlOVEVSKQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKKyNl
bmRpZgorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAsIG1faW5TY3JvbGxHZXN0dXJl
KGZhbHNlKQorICAgICwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBt
X2lnbm9yZU1vbWVudHVtU2Nyb2xscyhmYWxzZSkKKyAgICAsIG1fbGFzdE1vbWVtdHVtU2Nyb2xs
VGltZXN0YW1wKDApCisgICAgLCBtX3N0YXJ0VGltZSgwKQorICAgICwgbV9zbmFwUnViYmVyQmFu
ZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRp
bWVyRmlyZWQpCisjZW5kaWYKKyAgICAsIG1fZHJhd2luZ0ludG9MYXllcihmYWxzZSkKKyAgICAs
IG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRp
b25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlLmdldCgpXSk7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAg
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRo
aXNdKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdl
dCgpKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyNl
bmRpZgorfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYygpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95
ZWRdOworICAgIFsoaWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxl
Z2F0ZTpuaWxdOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxB
bmltYXRvckRlc3Ryb3llZF07CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUu
Z2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworI2VuZGlmCit9CisKK2Jvb2wgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllcikKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisg
ICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5
OkAiQXBwbGVTY3JvbGxBbmltYXRpb25FbmFibGVkIl0pCisgICAgICAgIHJldHVybiBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGll
cik7CisKKyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKKyAgICAgICAgcmV0
dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVw
LCBtdWx0aXBsaWVyKTsKKworICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVudFBvc1k7CisgICAg
ZmxvYXQgbmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9z
ICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOworICAgIGlmIChjdXJyZW50UG9zID09
IG5ld1BvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNQb2ludCBuZXdQb2ludDsK
KyAgICBpZiAoW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9pc0FuaW1hdGluZ10pIHsK
KyAgICAgICAgTlNQb2ludCB0YXJnZXRPcmlnaW4gPSBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIu
Z2V0KCkgdGFyZ2V0T3JpZ2luXTsKKyAgICAgICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtlUG9pbnQobmV3UG9zLCB0YXJnZXRPcmlnaW4ueSkg
OiBOU01ha2VQb2ludCh0YXJnZXRPcmlnaW4ueCwgbmV3UG9zKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtl
UG9pbnQobmV3UG9zLCBtX2N1cnJlbnRQb3NZKSA6IE5TTWFrZVBvaW50KG1fY3VycmVudFBvc1gs
IG5ld1Bvcyk7CisKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgc2Nyb2xsVG9Q
b2ludDpuZXdQb2ludF07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG9mZnNldCkKK3sKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0
b3BSdW5dOworICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKK30KKworZmxvYXQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3Nh
cnkoZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5j
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQorICAgICAgICByZXR1cm4gcG9zaXRp
b247CisKKyAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9s
bGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlz
aWJsZVdpZHRoKCkpLCAwKTsKK30KKworZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
YWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7
CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZSgpKQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICByZXR1cm4gbWF4PGZsb2F0
PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5o
ZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOworfQorCitG
bG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9u
SWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYg
KCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQor
ICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICBmbG9hdCBuZXdYID0gbWF4PGZsb2F0Piht
aW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCku
d2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgZmxv
YXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKSwgMCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBuZXdZKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQoreworICAgIEZsb2F0UG9pbnQgYWRqdXN0
ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24p
OworIAorICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYmIGFk
anVzdGVkUG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX2N1cnJlbnRQb3NYID0gYWRqdXN0ZWRQb3NpdGlvbi54KCk7CisgICAgbV9jdXJy
ZW50UG9zWSA9IGFkanVzdGVkUG9zaXRpb24ueSgpOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdl
ZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9s
bEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCkKK3sKKyAgICBmbG9hdCBuZXdQb3NYID0gYWRqdXN0U2Ny
b2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWCArIGRlbHRhWCk7CisgICAgCisg
ICAgaWYgKG5ld1Bvc1ggPT0gbV9jdXJyZW50UG9zWCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fY3VycmVudFBvc1ggPSBuZXdQb3NYOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgp
OworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5
RGVsdGFZKGZsb2F0IGRlbHRhWSkKK3sKKyAgICBmbG9hdCBuZXdQb3NZID0gYWRqdXN0U2Nyb2xs
WVBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWSArIGRlbHRhWSk7CisgICAgCisgICAg
aWYgKG5ld1Bvc1kgPT0gbV9jdXJyZW50UG9zWSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fY3VycmVudFBvc1kgPSBuZXdQb3NZOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0aW9uQ2hhbmdl
ZCgpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFT
Y3JvbGxlZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorICAg
IFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Cit7Cisj
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFXaWxsUGFpbnQo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0
Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFbnRlcmVkQ29u
dGVudEFyZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tNb3VzZUV4
aXRlZENvbnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VNb3ZlZEluQ29u
dGVudEFyZWEoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3
a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0
YXJ0TGl2ZVJlc2l6ZSgpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdr
V2lsbFN0YXJ0TGl2ZVJlc2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsK
KyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRzUmVz
aXplZCgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29u
dGVudEFyZWFSZXNpemVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNp
emUoKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dpbGxFbmRMaXZl
UmVzaXplKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkgY29u
c3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURp
ZFNob3cobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25z
dAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhRGlk
SGlkZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNv
bnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrRGlkQmVnaW5TY3Jv
bGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgp
IGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrRGlkRW5kU2Ny
b2xsR2VzdHVyZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRF
UikKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6
bmF0aXZlVGhlbWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Nj
cm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZS5nZXQoKSk7CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFpbnRlciwgZmFsc2UpOworICAgIGlmIChz
Y3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQ
YWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Ny
b2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Ondp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwg
bmlsKTsKKyAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNjcm9sbGJhcik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorewor
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMq
PihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWlu
dGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgd2tTZXRQYWludGVy
Rm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwg
cGFpbnRlciwgdHJ1ZSk7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgp
KQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlciwgMSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAg
IFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHdrU2Nyb2xsYmFy
UGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7CisgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmlsLCB0
cnVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5kaWYKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKK3sKKyAg
ICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKKworI2lmIFVTRShXS19TQ1JP
TExCQVJfUEFJTlRFUikKKyAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisg
ICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworI2VuZGlmCit9CisKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisKK3N0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxWZWxvY2l0eVpl
cm9pbmdUaW1lb3V0ID0gMC4xMGY7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFN0aWZm
bmVzcyA9IDIwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3Ry
ZXRjaFJhdGlvID0gMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVp
cmVkRGVsdGFCZWZvcmVTdHJldGNoID0gMTA7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFu
ZEFtcGxpdHVkZSA9IDAuMzFmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRQZXJpb2Qg
PSAxLjZmOworCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGlu
aXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkK
K3sKKyAgICBmbG9hdCBhbXBsaXR1ZGUgPSBydWJiZXJiYW5kQW1wbGl0dWRlOworICAgIGZsb2F0
IHBlcmlvZCA9IHJ1YmJlcmJhbmRQZXJpb2Q7CisgICAgZmxvYXQgY3JpdGljYWxEYW1wZW5pbmdG
YWN0b3IgPSBleHBmKCgtZWxhcHNlZFRpbWUgKiBydWJiZXJiYW5kU3RpZmZuZXNzKSAvIHBlcmlv
ZCk7CisgICAgICAgICAgICAgCisgICAgcmV0dXJuIChpbml0aWFsUG9zaXRpb24gKyAoLWluaXRp
YWxWZWxvY2l0eSAqIGVsYXBzZWRUaW1lICogYW1wbGl0dWRlKSkgKiBjcml0aWNhbERhbXBlbmlu
Z0ZhY3RvcjsKK30KKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShm
bG9hdCBkZWx0YSkKK3sKKyAgICBmbG9hdCBzdGlmZm5lc3MgPSBzdGQ6Om1heChydWJiZXJiYW5k
U3RpZmZuZXNzLCAxLjBmKTsKKyAgICByZXR1cm4gZGVsdGEgLyBzdGlmZm5lc3M7Cit9CisKK3N0
YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVsdGEpCit7Cisg
ICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsKK30KKworc3RhdGljIGZsb2F0
IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCit7CisgICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIg
PSAtMTsKKyAgICBpZiAobXVsdGlwbGllciA8IDApIHsKKyAgICAgICAgbXVsdGlwbGllciA9IFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3Jv
bGxXaGVlbE11bHRpcGxpZXIiXTsKKyAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKKyAgICAg
ICAgICAgIG11bHRpcGxpZXIgPSAxOworICAgIH0KKyAgICByZXR1cm4gbXVsdGlwbGllcjsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgPSB0cnVlOworCisgICAgaWYgKCF3aGVlbEV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMoKSkgeworICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHNvbWV3aGF0IHJvdW5kYWJvdXQgaGFjayB0byBhbGxvdyBmb3J3YXJkaW5nIHdoZWVsIGV2ZW50
cworICAgIC8vIHVwIHRvIHRoZSBwYXJlbnQgc2Nyb2xsYWJsZSBhcmVhLiBJdCB0YWtlcyBhZHZh
bnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdAorICAgIC8vIHRoZSBiYXNlIGNsYXNzIGltcGxlbWVuYXRh
dGlvbiBvZiBoYW5kbGVXaGVlbEV2ZW50IHdpbGwgbm90IGFjY2VwdCB0aGUKKyAgICAvLyB3aGVl
bCBldmVudCBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHNjcm9sbC4KKyAgICBpZiAoZmFic2Yod2hl
ZWxFdmVudC5kZWx0YVkoKSkgPj0gZmFic2Yod2hlZWxFdmVudC5kZWx0YVgoKSkpIHsKKyAgICAg
ICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAgICAgICAgU2Nyb2xs
QW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWFsbG93c0hvcml6b250
YWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVl
bEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgd2hlZWxFdmVudC5hY2NlcHQoKTsKKworICAgIGJvb2wgaXNNb21ldHVtU2Nyb2xs
RXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZXR1
bVNjcm9sbEV2ZW50IHx8IG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKSkgeworICAg
ICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VFbmRlZCkKKyAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbW9vdGhTY3JvbGxXaXRoRXZlbnQod2hl
ZWxFdmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlR2Vz
dHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCit7Cisg
ICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9s
bEJlZ2luVHlwZSkKKyAgICAgICAgYmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAgZWxzZQorICAg
ICAgICBlbmRTY3JvbGxHZXN0dXJlKCk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCit7Cisg
ICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7CisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2Yo
ZGVsdGFYKSkgeworICAgICAgICBpZiAoZGVsdGFZIDwgMCkgeworICAgICAgICAgICAgLy8gV2Ug
YXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8g
dGhlIHRvcAorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxP
cmlnaW4oKS55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIHRy
eWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
Ym90dG9tCisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVh
LT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKKyAgICAgICAgaWYg
KGRlbHRhWCA8IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxl
ZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKKyAgICAgICAgICAg
IGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0
KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAg
TWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdodAorICAgICAgICAgICAgbGlt
aXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgp
IC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApICYmIChsaW1pdERlbHRhLndp
ZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3Nj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogeworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9
IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xs
YmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAo
IWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKSk7CisgICAgfQorICAgIGNhc2Ug
U2Nyb2xsRWxhc3RpY2l0eU5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNj
cm9sbEVsYXN0aWNpdHlBbGxvd2VkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25z
dAoreworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoKSkgeworICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogeworICAgICAg
ICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICByZXR1cm4gKCgoaFNjcm9sbGVyICYmIGhT
Y3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVk
KCkpKSk7CisgICAgfQorICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Ny
b2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisgICAgZmxvYXQgZGVsdGFYID0gbV9v
dmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxv
d1Njcm9sbERlbHRhLmhlaWdodCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5k
IHB1dCBpdCBpbnRvIG92ZXJmbG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0
U2l6ZSgpOworCisgICAgZmxvYXQgZXZlbnRDb2FsbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQu
ZGVsdGFYKCk7CisgICAgZmxvYXQgZXZlbnRDb2FsbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQu
ZGVsdGFZKCk7CisKKyAgICBkZWx0YVggKz0gZXZlbnRDb2FsbGVzY2VkRGVsdGFYOworICAgIGRl
bHRhWSArPSBldmVudENvYWxsZXNjZWREZWx0YVk7CisKKyAgICAvLyBTbGlnaHRseSBwcmVmZXIg
c2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKKyAg
ICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKQorICAgICAgICBkZWx0YVggPSAw
OworICAgIGVsc2UKKyAgICAgICAgZGVsdGFZID0gMDsKKworICAgIGJvb2wgaXNWZXJ0aWNhbGx5
U3RyZXRjaGVkID0gZmFsc2U7CisgICAgYm9vbCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IGZh
bHNlOworICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOworICAgIAorICAgIEludFNpemUg
c3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisKKyAg
ICBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgoKTsKKyAgICBp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOworCisgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsK
KworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBz
b21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKHBoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gfHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VDaGFuZ2VkKSkKKyAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
PSB0cnVlOworCisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gd2hlZWxFdmVudC50aW1l
c3RhbXAoKSAtIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wOworICAgIGlmIChtX2luU2Ny
b2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICBpZiAo
bV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4gMCAmJiB0aW1lRGVs
dGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7CisgICAgICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsbGVzY2VkRGVsdGFYIC8gKGZsb2F0KXRpbWVE
ZWx0YSk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0SGVpZ2h0KGV2ZW50Q29h
bGxlc2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVsdGEpOworICAgICAgICAgICAgbV9sYXN0TW9t
ZW10dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVl
bEV2ZW50LnRpbWVzdGFtcCgpOworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxv
YXRTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVk
KSB7CisgICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmIHBpbm5lZElu
RGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KKyAgICAgICAgICAgICAgICBpZiAo
ZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0
aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVt
UmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsg
ZGVsdGFYKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdp
ZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkgeworICAgICAg
ICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgorICAgICAgICAgICAg
aWYgKHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRhWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZGVsdGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0
aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVt
UmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkg
KyBkZWx0YVkpOworICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0
SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBh
dCBhbGwgeWV0LgorICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgZGVs
dGFZKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRh
WCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5k
TWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX292
ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkg
KyBkZWx0YVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaG91bGRTdHJl
dGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChk
ZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgeworICAgICAgICBpZiAoIShzaG91bGRTdHJldGNo
IHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsK
KyAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAq
PSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3Jv
bGxCeURlbHRhWShkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRh
WCAhPSAwKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAg
ICAgICAgICAgICAgIGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKChkZWx0YVggIT0gMCkgJiYgIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmICFwaW5u
ZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNj
cm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOworICAgICAgICAg
ICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7CisgICAgICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1
ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIWFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpKSB7Cisg
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBldmVudENvYWxsZXNj
ZWREZWx0YVkgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVsdGFZICE9IDApICYmICFp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgJiYgIXBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRhWSkpIHsK
KyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisKKyAg
ICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZShmYWxzZSk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0
YVkoZGVsdGFZKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKworICAgICAgICAgICAgICAgIGRlbHRh
WSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEludFNpemUg
c3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKChwaW5uZWRJbkRpcmVjdGlvbihldmVudENvYWxsZXNjZWREZWx0YVgs
IGV2ZW50Q29hbGxlc2NlZERlbHRhWSkgfHwgKGZhYnNmKGV2ZW50Q29hbGxlc2NlZERlbHRhWCkg
KyBmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbXR1bVNj
cm9sbFRpbWVzdGFtcCkgeworICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Ny
b2xscyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dy
ZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsK
KyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1w
ZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xs
Rm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJl
dGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IG9yaWdP
cmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24o
KSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7Cisg
ICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0
YTsKKworICAgICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0gbmV3T3JpZ2luKSB7CisgICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3
T3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBwaGFzZSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7CisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFs
c2U7CisgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKKyAgICB9Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3JvbGxHZXN0dXJlKCkK
K3sKKyAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKKworICAgIG1faGF2ZVNjcm9sbGVkU2lu
Y2VQYWdlTG9hZCA9IHRydWU7CisgICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVlOworICAgIG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgbV9pZ25vcmVNb21lbnR1bVNj
cm9sbHMgPSBmYWxzZTsKKyAgICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7Cisg
ICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJl
dGNoQW1vdW50LndpZHRoKCkpKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQo
cmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKKwor
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIAorICAgIGlmICht
X3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zbmFwUnViYmVyQmFu
ZFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjplbmRT
Y3JvbGxHZXN0dXJlKCkKK3sKKyAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7CisKKyAgICBzbmFw
UnViYmVyQmFuZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBS
dWJiZXJCYW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbXR1bVNjcm9sbFRp
bWVzdGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURl
bHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1fbW9tZW50dW1W
ZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9pblNjcm9sbEdlc3R1cmUgPSBmYWxzZTsK
KworICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV07CisgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICBtX29yaWdP
cmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsK
KworICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFydFJlcGVhdGluZygxLjAvNjAuMCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sKKyAg
ICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYp
OworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8o
ZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKKyAgICBp
ZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0gPSByb3VuZGVk
TnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChUaW1lcjxTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjPiopCit7CisgICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgeworICAgICAgICBDRlRpbWVJbnRl
cnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0g
LSBtX3N0YXJ0VGltZTsKKworICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXpl
KCkpIHsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3Zl
cmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNp
emUoKSkgeyAgICAKKyAgICAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgp
OworICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7Cisg
ICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgICAgIG1fc3RhcnRT
dHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxv
YXRQb2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1fb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5s
b2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gbV9zdGFydFN0
cmV0Y2g7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxvY2l0eTsK
KworICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZlciB2ZXJ0
aWNhbCBydWJiZXJiYW5kaW5nCisgICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVsb2NpdHku
aGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQorICAgICAgICAgICAg
ICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2libGUg
dG8gc2Nyb2xsIGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIg
PSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgICAgICBp
ZiAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpCisgICAgICAgICAgICAgICAg
bV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Ny
b2xsIGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Nj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCF2U2Ny
b2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1Zl
bG9jaXR5LnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0UG9pbnQgZGVs
dGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEo
bV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0
aW1lRGVsdGEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxU
b3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQo
KSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOworCisgICAg
ICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewor
ICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsK
KworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChu
ZXdPcmlnaW4pOworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdT
dHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRh
Rm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOworICAgICAgICAgICAgbV9zdHJl
dGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdT
dHJldGNoLmhlaWdodCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbW1lZGlh
dGVTY3JvbGxUb1BvaW50KG1fb3JpZ09yaWdpbik7CisKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRj
aCkpOworCisgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOworICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2gg
PSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsK
KyAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXTsKKyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsK
KyAgICB9Cit9CisjZW5kaWYKKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkKK3sK
KyAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgwLjEpOworfQor
Citib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0Fj
dGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIu
aXNBY3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5z
dG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9s
bGJhclBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCit7
CisgICAgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNjcm9sbGVycyhtX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpKTsKK30KKyNlbmRpZgorCit2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBz
Y3JvbGxlclRodW1iKQoreworICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Ny
b2xsZXJUaHVtYjsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3Jv
bGxlclRodW1iKTsKKworICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwor
ICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UG9pbnQuaAppbmRleCA0NmQ0OWViMzE0NGM2YTU2YTZiZjhmMzk1N2NiM2NmODcy
YWY1MDk1Li5jYjQ2MjBmZWQ1MjhjZTRkYzE5OGViZTgzYTQ4NjI0YWNjNDM2MTljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTM3LDcgKzM3LDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKIAotI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1Mo
REFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBF
UwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKQEAgLTExOSw3ICsxMTks
NyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkg
JiYgT1MoREFSV0lOKSkpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IEludFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8g
ZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBO
U1BvaW50KCkgY29uc3Q7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94485</attachid>
            <date>2011-05-23 14:05:59 -0700</date>
            <delta_ts>2011-05-26 13:57:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59753-20110523140558.patch</filename>
            <type>text/plain</type>
            <size>62820</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYwODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYTExOGI2MDlmMmYxOGI1
ZmViNDI5OGEyZTk0YzhhOTJiOTEwMjFjLi41M2EyNGM0ZmZhOWQ3YzdhODlkMDYwYzBmZDRhNWI0
OGJmZTNjMTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTA1LTEzICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBNYWM6IFVzZSBTY3JvbGxBbmltYXRv
ck1hYy5tbSBmb3Igb3ZlcmxheSBzY3JvbGxiYXIgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NTMKKworICAgICAgICBObyBuZXcgdGVz
dHMuIEp1c3QgZm9ya2luZyBTY3JvbGxBbmltYXRvck1hYyB0byBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNE
cmF3aW5nSW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBBZGRlZC4gRm9y
a2VkIGZyb20gU2Nyb2xsQW5pbWF0b3JNYWMgYW5kIHJlcGxhY2VkIGFsbCBpbnN0YW5jZXMgb2Yg
U2Nyb2xsQW5pbWF0b3JNYWMgd2l0aCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjIGFuZCBTY3Jv
bGxiYXJUaGVtZU1hYyB3aXRoIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuIFJlbW92ZWQgdGhl
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSBhcm91bmQgdGhlIGZpbGUuCisgICAgICAgIChhYnMp
OgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9s
bEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBib3VuZHNdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUgX2ltbWVkaWF0ZVNjcm9sbFRvUG9pbnQ6XSk6CisgICAgICAgICgtW1Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9waXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3Np
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVy
dFNpemVUb0Jhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
IGNvbnZlcnRTaXplRnJvbUJhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlIGNvbnZlcnRTaXplVG9CYWNraW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6ZUZyb21CYWNraW5nOl0pOgorICAgICAgICAo
LVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzdXBlcnZpZXddKToKKyAgICAgICAgKC1b
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgZG9jdW1lbnRWaWV3XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHdpbmRvd10pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHNdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBpbml0V2l0aFNj
cm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZv
clNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVy
SW1wOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNj
cm9sbGVySW1wUGFpcjpzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKToKKyAgICAg
ICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6
dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6
cGFydDpXZWJDb3JlOjpzY3JvbGxBbmltYXRvcjpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJh
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgc2V0VXBBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6V2ViQ29yZTo6
YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAg
ICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVHJhY2tB
bHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
c2Nyb2xsZXJJbXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgt
W1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6On5TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0
U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxU
b1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Omlt
bWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0aW9uQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQ
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVu
dHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjplbGFzdGlj
RGVsdGFGb3JUaW1lRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0
YSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxXaGVlbE11bHRpcGxpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlu
bmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpiZWdp
blNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRv
d2FyZFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVy
byk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKwogMjAxMS0wNS0wOSAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCmluZGV4IDcwYjgwZDFhMWJlMmUyZjk0MmMxMTM5ODM2MjZhZDMwY2Q4NTg5MTYuLmE5MTFk
MTQ1ODM3MDFmMDMwZGIxNGQyNTUwMDE3ODllZWNhMjcxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xMTIyLDYgKzExMjIsMTAgQEAKICAgICAgICAgICAgICAg
J1Njcm9sbGJhclByZWZzT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclByZWZz
T2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9u
T2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlv
bk9ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkZvbnRDYWNoZT1DaHJvbWl1bVdlYkNvcmVP
YmpDV2ViRm9udENhY2hlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScs
CisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9t
aXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAg
ICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhcnRBbmlt
YXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhcnRBbmltYXRpb24nLAogICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICcu
Li8uLi8uLi9XZWJLaXRMaWJyYXJpZXMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZhN2E4ZmI2ZGIw
ZDIyNGYzYWFiOTg5NTA1ZDkzZDUzZjJjNzhhMTUuLmExYjIyNGMxMTdkOGM1NTMxYTdmNWNhM2M0
NjYyNmQxMzAyZDdiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3ODUsNiArMzc4NSw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVy
bGF5VXRpbGl0aWVzTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCA2ZmM3OGU3NDAwZTdkMjk4N2ZlZThmMDE3NWExNDAx
YTVhMjE2Mzk4Li40NWNjZTM5M2U1Y2Q5OGMyOWZkZDc0Yjg0OWMxMTdhNzUxMzIwMTMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC00MSw3ICs0MSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpICYm
ICEoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFi
bGVBcmVhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ5ZjQ2ZDI5MDFl
ZDhhMjI2MmU1OTdiZmViZGFkODdjMGUwMDZmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaApAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGJh
ck92ZXJsYXlVdGlsaXRpZXNNYWMuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworQGNsYXNz
IFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlOworI2Vsc2UKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK2NsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3Mg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJl
YSopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKKworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmKTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwor
I2VuZGlmCisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CisK
KyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9z
aXRpb24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsK
KyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CisKKyAgICB2
b2lkIHNldElzRHJhd2luZ0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0g
YjsgfQorICAgIGJvb2wgaXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
aW5nSW50b0xheWVyOyB9CisKKyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBj
b25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KKworI2lmIFVTRShX
S19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9p
ZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgUmV0
YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7
CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7Cisg
ICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlOworCisgICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1l
ckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+Kik7CisgICAgVGltZXI8U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNl
bmRpZgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZl
UmVzaXplKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250
ZW50QXJlYURpZFNob3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRI
aWRlKCkgY29uc3Q7CisgICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKyAg
ICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKworICAgIGZsb2F0IGFk
anVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBh
ZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CisgICAgRmxvYXRQ
b2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBib29sIGFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZygpIGNvbnN0OworICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcoKSBjb25zdDsKKyAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZKTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CisgICAgdm9pZCBzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAg
ICB2b2lkIHNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2
b2lkIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOwor
CisgICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZTsKKyAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzOworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7CisgICAgCisgICAg
Q0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRT
aXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xs
Rm9yY2U7CisgICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIC8vIFJ1YmJl
ciBiYW5kIHN0YXRlLgorICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1lOworICAgIEZsb2F0
U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBG
bG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYz4gbV9zbmFwUnViYmVyQmFuZFRpbWVyOworI2VuZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJ
bnRvTGF5ZXI7CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50
UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZjMjY4NGIwZjZlNDhhYmYzNmM1MDdlNzZiNzA5
NDBhMGY5ZDVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KQEAgLTAsMCArMSwxMjQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYy5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5j
bHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05f
MTBfNikgfHwgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05f
MTBfNgorQHByb3RvY29sIE5TQW5pbWF0aW9uRGVsZWdhdGUKK0BlbmQKKworQGludGVyZmFjZSBO
U1Byb2Nlc3NJbmZvIChOU09iamVjdCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsK
K0BlbmQKKyNlbmRpZgorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZXRhaWxzKQorLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CistICh2b2lk
KV9zdG9wUnVuOworLSAoQk9PTClfaXNBbmltYXRpbmc7CistIChOU1BvaW50KXRhcmdldE9yaWdp
bjsKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5T
T2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1h
dG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CitAZW5kCisKK3N0YXRpYyBOU1NpemUg
YWJzKE5TU2l6ZSBzaXplKQoreworICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOworICAgIGlm
IChmaW5hbFNpemUud2lkdGggPCAwKQorICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxT
aXplLndpZHRoOworICAgIGlmIChmaW5hbFNpemUuaGVpZ2h0IDwgMCkKKyAgICAgICAgZmluYWxT
aXplLmhlaWdodCA9IC1maW5hbFNpemUuaGVpZ2h0OworICAgIHJldHVybiBmaW5hbFNpemU7ICAg
IAorfQorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKKwor
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hbmltYXRvciA9IHNjcm9s
bEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9y
RGVzdHJveWVkCit7CisgICAgX2FuaW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWJvdW5kcwor
eworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50
UG9zaXRpb24oKTsKKyAgICByZXR1cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBj
dXJyZW50UG9zaXRpb24ueSgpLCAwLCAwKTsKK30KKworLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xs
VG9Qb2ludDooTlNQb2ludCluZXdQb3NpdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAg
ICAgICByZXR1cm47CisgICAgX2FuaW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bv
c2l0aW9uKTsKK30KKworLSAoTlNQb2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRp
b246KE5TUG9pbnQpbmV3T3JpZ2luCit7CisgICAgcmV0dXJuIG5ld09yaWdpbjsKK30KKworLSAo
TlNTaXplKWNvbnZlcnRTaXplVG9CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMo
c2l6ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQor
eworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFj
a2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1Np
emUpY29udmVydFNpemVGcm9tQmFja2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJz
KHNpemUpOworfQorCistIChpZClzdXBlcnZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCist
IChpZClkb2N1bWVudFZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZCl3aW5kb3cK
K3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29s
VGlwcworeworfQorCitAZW5kCisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK0Bp
bnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7
CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQor
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0
b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5p
bWF0b3IgPSAwOworfQorCistIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQ
YWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQ
YWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisK
KyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+Y29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29u
dGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wp
aW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAg
ICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCk7Cit9CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVu
dEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNF
RF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOworfQorCistIChOU1BvaW50KXNjcm9sbGVySW1w
UGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9p
bnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCit7CisgICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAg
IHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gMDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJJbXApKQorICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3It
PnNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlIAorICAg
ICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxi
YXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1l
dGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFz
IGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9y
IGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAg
Ly8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKKyAgICAvLyBpc3N1ZS4KKyAgICBpZiAo
IXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7CisgICAgCisg
ICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJ
bnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDoo
TlNSZWN0KXJlY3QKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBV
TlVTRURfUEFSQU0ocmVjdCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3Jv
bGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmIHBhaW50ZXJDb250cm9sbGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJSZWYpc2Nyb2xsZXJJbXBQYWlyOworICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWMqIG1hY1RoZW1lID0gKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMqKVdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpOworCisgICAgV0tTY3Jv
bGxiYXJQYWludGVyUmVmIG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQ
YWludGVyRm9yQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRp
Y2FsUGFpbnRlcikgeworICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtl
U2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWlu
dGVyKTsKKyAgICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNv
bnRyb2xsZXIsIG5ld1ZlcnRpY2FsUGFpbnRlciwgZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBk
aWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28g
d2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlj
a25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgor
ICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQg
dGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJh
ci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0K
KworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9y
aXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsK
KyAgICBpZiAob2xkSG9yaXpvbnRhbFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xs
YmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdI
b3Jpem9udGFsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRI
b3Jpem9udGFsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6
b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnVlKTsKKyAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIo
aG9yaXpvbnRhbFNjcm9sbGJhciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1Nl
dFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpv
bnRhbFBhaW50ZXIsIHRydWUpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFy
IHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhl
IAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUt
bGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVu
Z3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhl
bWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
KTsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6Oklu
dFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBz
dHlsZXMgYWZmZWN0IGxheW91dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAg
ICBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOwor
fQorCitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0
aW9uCit7CisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFp
bnRlcjsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmltYXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFs
QWxwaGE7CisgICAgQ0dGbG9hdCBfbmV3QWxwaGE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJh
clBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2Vi
Q29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9h
dCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Ny
b2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0
OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihD
R0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlvbjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpO
U0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIF9zY3JvbGxlclBhaW50ZXIgPSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3Bh
cnQgPSBwYXJ0OworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFs
QWxwaGEgPSBfcGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJL
bm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQoKSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFj
a0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpOworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhh
OworICAgIAorICAgIHJldHVybiBzZWxmOyAgICAKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3Vy
cmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDR0Zsb2F0IGN1cnJlbnRBbHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBo
YSA+IF9uZXdBbHBoYSkKKyAgICAgICAgY3VycmVudEFscGhhID0gMSAtIHByb2dyZXNzOworICAg
IGVsc2UKKyAgICAgICAgY3VycmVudEFscGhhID0gcHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9w
YXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVy
S25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxz
ZQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50
ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxi
YXJzIHNvIHRoYXQgdGhleSBwYWludCB0aGUgYW5pbWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlk
YXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LCB2ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xs
YmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFs
aWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lk
dGgoKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKK30KKworLSAodm9pZClzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9h
bmltYXRvciA9IDA7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmltYXRvcjsKKworICAgIFJldGFpblB0cjxTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxLbm9iQW5pbWF0aW9uOworICAgIFJldGFpblB0
cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbEtub2JBbmltYXRpb247CisKKyAg
ICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRp
b247CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJh
Y2tBbmltYXRpb247Cit9CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKKy0gKHZvaWQpY2FuY2Vs
QW5pbWF0aW9uczsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmlt
YXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNh
bmNlbEFuaW1hdGlvbnMKK3sKKyAgICBbX3ZlcnRpY2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9w
QW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxLbm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmlt
YXRpb25dOworICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9u
XTsKKyAgICBbX2hvcml6b250YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsK
K30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAg
ICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihO
U1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXll
cgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmICgh
X2FuaW1hdG9yLT5pc0RyYXdpbmdJbnRvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhdHRlbXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5
ZXIuCisgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiBkdW1teUxheWVyOworfQorCistICh2b2lkKXNldFVwQW5pbWF0aW9u
OihSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRp
b24gc2Nyb2xsZXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVy
IHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9h
dCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJ
ZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVz
dCBiZSBhbmltYXRlZCBoZXJlLiAKKyAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0
dXJucy4KKyAgICBib29sIG11c3RBbmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkKCk7CisKKyAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVySXNB
Y3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkg
JiYgIW11c3RBbmltYXRlKSB7CisgICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQYWlu
dFRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50
LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUgdGlt
ZXIuCisgICAgX2FuaW1hdG9yLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworCisgICAgLy8g
SWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbikgeworICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdG9w
QW5pbWF0aW9uXTsKKyAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9
CisKKyAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFp
bnRlcklzSG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKSB7CisgICAgICAgIGlmIChuZXdBbHBo
YSA9PSAxKSB7CisgICAgICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tTY3Jv
bGxiYXJQYWludGVyS25vYlJlY3Qoc2Nyb2xsZXJQYWludGVyKSk7CisgICAgICAgICAgICBfYW5p
bWF0b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KEludFJlY3QoKSk7CisgICAgfQorCisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdyb3Vw
aW5nXTsKKyAgICBbW05TQW5pbWF0aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVyYXRp
b246ZHVyYXRpb25dOworICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Njcm9s
bGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxl
clBhaW50ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6cGFydAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRv
cjpfYW5pbWF0b3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdl
dCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAg
ICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07CisgICAgW05T
QW5pbWF0aW9uQ29udGV4dCBlbmRHcm91cGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6
KGlkKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEg
ZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBh
aW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Nj
cm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3Nl
bGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRl
cjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86
bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxm
IHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNj
cm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdL
bm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihp
ZClzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEg
ZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBh
aW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Nj
cm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3Nl
bGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50
ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxw
aGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAg
IFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFp
bnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVB
bHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNj
cm9sbGVySW1wOihpZClzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzoo
TlNVSW50ZWdlciluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsK
K30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9
IDA7CisgICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0
cm95ZWRdOworICAgIFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdOworICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxB
bmltYXRvckRlc3Ryb3llZF07CisgICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkg
c2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxT
Y3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKHNjcm9sbGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisjaWYgVVNFKFdLX1ND
Uk9MTEJBUl9QQUlOVEVSKQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlz
LCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJG
aXJlZCkKKyNlbmRpZgorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAsIG1faW5TY3Jv
bGxHZXN0dXJlKGZhbHNlKQorICAgICwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2Up
CisgICAgLCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyhmYWxzZSkKKyAgICAsIG1fbGFzdE1vbWVt
dHVtU2Nyb2xsVGltZXN0YW1wKDApCisgICAgLCBtX3N0YXJ0VGltZSgwKQorICAgICwgbV9zbmFw
UnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQpCisjZW5kaWYKKyAgICAsIG1fZHJhd2luZ0ludG9MYXllcihmYWxz
ZSkKKyAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkKK3sKKyAgICBtX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9z
Y3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3Jv
bGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5U
RVIpCisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOnRoaXNdKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gd2tNYWtl
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlLmdldCgpKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtb
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRo
aXNdKTsKKyNlbmRpZgorfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp+U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYygpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdOworICAgIFsoaWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQo
KSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworI2VuZGlmCit9CisKK2Jv
b2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0
cnVlOworCisgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiQXBwbGVTY3JvbGxBbmltYXRpb25FbmFibGVkIl0pCisgICAgICAgIHJldHVy
biBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7CisKKyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKKyAg
ICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVudFBv
c1k7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOworICAgIGlmIChjdXJy
ZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNQb2ludCBu
ZXdQb2ludDsKKyAgICBpZiAoW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9pc0FuaW1h
dGluZ10pIHsKKyAgICAgICAgTlNQb2ludCB0YXJnZXRPcmlnaW4gPSBbbV9zY3JvbGxBbmltYXRp
b25IZWxwZXIuZ2V0KCkgdGFyZ2V0T3JpZ2luXTsKKyAgICAgICAgbmV3UG9pbnQgPSBvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtlUG9pbnQobmV3UG9zLCB0YXJnZXRP
cmlnaW4ueSkgOiBOU01ha2VQb2ludCh0YXJnZXRPcmlnaW4ueCwgbmV3UG9zKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gTlNNYWtlUG9pbnQobmV3UG9zLCBtX2N1cnJlbnRQb3NZKSA6IE5TTWFrZVBvaW50KG1fY3Vy
cmVudFBvc1gsIG5ld1Bvcyk7CisKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkg
c2Nyb2xsVG9Qb2ludDpuZXdQb2ludF07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIu
Z2V0KCkgX3N0b3BSdW5dOworICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKK30K
KworZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9u
SWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGFi
bGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQorICAgICAgICByZXR1
cm4gcG9zaXRpb247CisKKyAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9u
LCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKK30KKworZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6YWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24p
IGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpKQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICByZXR1cm4g
bWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50
c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDAp
OworfQorCitGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9s
bFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0Cit7
CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZSgpKQorICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICBmbG9hdCBuZXdYID0gbWF4
PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVu
dHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7
CisgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1f
c2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBu
ZXdZKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3Jv
bGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQoreworICAgIEZsb2F0UG9p
bnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3
UG9zaXRpb24pOworIAorICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQ
b3NYICYmIGFkanVzdGVkUG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NYID0gYWRqdXN0ZWRQb3NpdGlvbi54KCk7Cisg
ICAgbV9jdXJyZW50UG9zWSA9IGFkanVzdGVkUG9zaXRpb24ueSgpOworICAgIG5vdGl0eVBvc2l0
aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVk
aWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCkKK3sKKyAgICBmbG9hdCBuZXdQb3NYID0g
YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWCArIGRlbHRhWCk7
CisgICAgCisgICAgaWYgKG5ld1Bvc1ggPT0gbV9jdXJyZW50UG9zWCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG1fY3VycmVudFBvc1ggPSBuZXdQb3NYOworICAgIG5vdGl0eVBvc2l0aW9u
Q2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0
ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSkKK3sKKyAgICBmbG9hdCBuZXdQb3NZID0gYWRq
dXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWSArIGRlbHRhWSk7Cisg
ICAgCisgICAgaWYgKG5ld1Bvc1kgPT0gbV9jdXJyZW50UG9zWSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY3VycmVudFBvc1kgPSBuZXdQb3NZOworICAgIG5vdGl0eVBvc2l0aW9uQ2hh
bmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0
aW9uQ2hhbmdlZCgpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29u
dGVudEFyZWFTY3JvbGxlZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNl
bmRpZgorICAgIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNv
bnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFX
aWxsUGFpbnQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VF
bnRlcmVkQ29udGVudEFyZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cisj
ZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAg
d2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VN
b3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRF
UikKKyAgICB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVS
KQorICAgIHdrV2lsbFN0YXJ0TGl2ZVJlc2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNv
bnRlbnRzUmVzaXplZCgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQor
ICAgIHdrQ29udGVudEFyZWFSZXNpemVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbEVu
ZExpdmVSZXNpemUoKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dp
bGxFbmRMaXZlUmVzaXplKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRT
aG93KCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250
ZW50QXJlYURpZFNob3cobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5k
aWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhp
ZGUoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRl
bnRBcmVhRGlkSGlkZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEJlZ2luU2Nyb2xsR2Vz
dHVyZSgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrRGlk
QmVnaW5TY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xs
R2VzdHVyZSgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdr
RGlkRW5kU2Nyb2xsR2VzdHVyZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsK
KyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
KyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBtX3Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xs
ZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFpbnRlciwgZmFsc2UpOwor
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgd2tTZXRT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVy
UmVmIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjKj4oV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9y
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUo
cGFpbnRlciwgbmlsKTsKKyAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIGZhbHNlKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBh
aW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxl
Z2F0ZShwYWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgd2tT
ZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSwgcGFpbnRlciwgdHJ1ZSk7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2
ZVJlc2l6ZSgpKQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRl
ciwgMSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlO
VEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHdr
U2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7CisgICAgd2tTZXRQYWlu
dGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSwgbmlsLCB0cnVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5k
aWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25z
KCkKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKKworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0
aXZlKCkpCisgICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworI2VuZGlmCit9CisK
KyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisKK3N0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxW
ZWxvY2l0eVplcm9pbmdUaW1lb3V0ID0gMC4xMGY7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVy
YmFuZFN0aWZmbmVzcyA9IDIwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rp
b25Mb2NrU3RyZXRjaFJhdGlvID0gMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWlu
aW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoID0gMTA7CitzdGF0aWMgY29uc3QgZmxvYXQg
cnViYmVyYmFuZEFtcGxpdHVkZSA9IDAuMzFmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJh
bmRQZXJpb2QgPSAxLjZmOworCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRh
KGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBlbGFw
c2VkVGltZSkKK3sKKyAgICBmbG9hdCBhbXBsaXR1ZGUgPSBydWJiZXJiYW5kQW1wbGl0dWRlOwor
ICAgIGZsb2F0IHBlcmlvZCA9IHJ1YmJlcmJhbmRQZXJpb2Q7CisgICAgZmxvYXQgY3JpdGljYWxE
YW1wZW5pbmdGYWN0b3IgPSBleHBmKCgtZWxhcHNlZFRpbWUgKiBydWJiZXJiYW5kU3RpZmZuZXNz
KSAvIHBlcmlvZCk7CisgICAgICAgICAgICAgCisgICAgcmV0dXJuIChpbml0aWFsUG9zaXRpb24g
KyAoLWluaXRpYWxWZWxvY2l0eSAqIGVsYXBzZWRUaW1lICogYW1wbGl0dWRlKSkgKiBjcml0aWNh
bERhbXBlbmluZ0ZhY3RvcjsKK30KKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91
bmREZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICBmbG9hdCBzdGlmZm5lc3MgPSBzdGQ6Om1heChy
dWJiZXJiYW5kU3RpZmZuZXNzLCAxLjBmKTsKKyAgICByZXR1cm4gZGVsdGEgLyBzdGlmZm5lc3M7
Cit9CisKK3N0YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVs
dGEpCit7CisgICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsKK30KKworc3Rh
dGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCit7CisgICAgc3RhdGljIGZsb2F0IG11
bHRpcGxpZXIgPSAtMTsKKyAgICBpZiAobXVsdGlwbGllciA8IDApIHsKKyAgICAgICAgbXVsdGlw
bGllciA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5
OkAiTlNTY3JvbGxXaGVlbE11bHRpcGxpZXIiXTsKKyAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0g
MCkKKyAgICAgICAgICAgIG11bHRpcGxpZXIgPSAxOworICAgIH0KKyAgICByZXR1cm4gbXVsdGlw
bGllcjsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVlbEV2
ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisgICAgaWYgKCF3aGVlbEV2ZW50Lmhhc1ByZWNpc2VT
Y3JvbGxpbmdEZWx0YXMoKSkgeworICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxF
dmVudCh3aGVlbEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHNvbWV3aGF0IHJvdW5kYWJvdXQgaGFjayB0byBhbGxvdyBmb3J3YXJkaW5nIHdo
ZWVsIGV2ZW50cworICAgIC8vIHVwIHRvIHRoZSBwYXJlbnQgc2Nyb2xsYWJsZSBhcmVhLiBJdCB0
YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdAorICAgIC8vIHRoZSBiYXNlIGNsYXNzIGlt
cGxlbWVuYXRhdGlvbiBvZiBoYW5kbGVXaGVlbEV2ZW50IHdpbGwgbm90IGFjY2VwdCB0aGUKKyAg
ICAvLyB3aGVlbCBldmVudCBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHNjcm9sbC4KKyAgICBpZiAo
ZmFic2Yod2hlZWxFdmVudC5kZWx0YVkoKSkgPj0gZmFic2Yod2hlZWxFdmVudC5kZWx0YVgoKSkp
IHsKKyAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAgICAg
ICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWFsbG93
c0hvcml6b250YWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgd2hlZWxFdmVudC5hY2NlcHQoKTsKKworICAgIGJvb2wgaXNNb21l
dHVtU2Nyb2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYg
KGlzTW9tZXR1bVNjcm9sbEV2ZW50IHx8IG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgp
KSkgeworICAgICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZCkKKyAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxz
ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbW9vdGhTY3JvbGxXaXRo
RXZlbnQod2hlZWxFdmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZl
bnQpCit7CisgICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1HZXN0dXJlRXZl
bnQ6OlNjcm9sbEJlZ2luVHlwZSkKKyAgICAgICAgYmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAg
ZWxzZQorICAgICAgICBlbmRTY3JvbGxHZXN0dXJlKCk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0
YVkpCit7CisgICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7CisgICAgaWYgKGZhYnNmKGRlbHRhWSkg
Pj0gZmFic2YoZGVsdGFYKSkgeworICAgICAgICBpZiAoZGVsdGFZIDwgMCkgeworICAgICAgICAg
ICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBw
aW5uZWQgdG8gdGhlIHRvcAorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgKyBtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxPcmlnaW4oKS55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
V2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5l
ZCB0byB0aGUgYm90dG9tCisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9s
bGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmln
aW4oKS55KCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKKyAg
ICAgICAgaWYgKGRlbHRhWCA8IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8g
c2Nyb2xsIGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKKyAg
ICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xs
IHJpZ2h0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdodAorICAgICAg
ICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUo
KS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgo
KSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApICYmIChsaW1p
dERlbHRhLndpZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAg
IGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogeworICAgICAgICBTY3JvbGxiYXIqIGhT
Y3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9s
bGJhcigpOworICAgICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxl
ZCgpKSB8fCAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKSk7CisgICAgfQor
ICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkoKSkgeworICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzog
eworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9s
bGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICByZXR1cm4gKCgoaFNjcm9s
bGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVy
LT5lbmFibGVkKCkpKSk7CisgICAgfQorICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
c21vb3RoU2Nyb2xsV2l0aEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sK
KyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisgICAgZmxvYXQgZGVs
dGFYID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0g
bV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cg
dmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBw
b2ludHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YSA9IEZsb2F0U2l6ZSgpOworCisgICAgZmxvYXQgZXZlbnRDb2FsbGVzY2VkRGVsdGFYID0gLXdo
ZWVsRXZlbnQuZGVsdGFYKCk7CisgICAgZmxvYXQgZXZlbnRDb2FsbGVzY2VkRGVsdGFZID0gLXdo
ZWVsRXZlbnQuZGVsdGFZKCk7CisKKyAgICBkZWx0YVggKz0gZXZlbnRDb2FsbGVzY2VkRGVsdGFY
OworICAgIGRlbHRhWSArPSBldmVudENvYWxsZXNjZWREZWx0YVk7CisKKyAgICAvLyBTbGlnaHRs
eSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0byBk
ZWx0YVkKKyAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKQorICAgICAgICBk
ZWx0YVggPSAwOworICAgIGVsc2UKKyAgICAgICAgZGVsdGFZID0gMDsKKworICAgIGJvb2wgaXNW
ZXJ0aWNhbGx5U3RyZXRjaGVkID0gZmFsc2U7CisgICAgYm9vbCBpc0hvcml6b250YWxseVN0cmV0
Y2hlZCA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOworICAgIAorICAg
IEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50
KCk7CisKKyAgICBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgo
KTsKKyAgICBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwor
CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVt
UGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcg
dGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
JiYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gfHwgcGhhc2UgPT0gUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKKyAgICAgICAgbV9tb21lbnR1bVNjcm9sbElu
UHJvZ3Jlc3MgPSB0cnVlOworCisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gd2hlZWxF
dmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wOworICAgIGlm
IChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAg
ICAgICBpZiAobV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4gMCAm
JiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7CisgICAgICAgICAg
ICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsbGVzY2VkRGVsdGFYIC8gKGZs
b2F0KXRpbWVEZWx0YSk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0SGVpZ2h0
KGV2ZW50Q29hbGxlc2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVsdGEpOworICAgICAgICAgICAg
bV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3Rh
bXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9j
aXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNWZXJ0aWNhbGx5
U3RyZXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYm
IHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KKyAgICAgICAgICAg
ICAgICBpZiAoZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJi
YW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgICAgIGRlbHRh
WCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJh
bmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53
aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkg
eworICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgorICAg
ICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRhWSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZGVsdGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJi
YW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgICAgIGRlbHRh
WSA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJh
bmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEu
aGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xs
RGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3Qgc3Ry
ZXRjaGluZyBhdCBhbGwgeWV0LgorICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKGRl
bHRhWCwgZGVsdGFZKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZh
YnNmKGRlbHRhWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBy
dWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Nj
cm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVs
dGFYID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBz
aG91bGRTdHJldGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChkZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgeworICAgICAgICBpZiAoIShzaG91
bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0cmV0
Y2hlZCkpIHsKKyAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgeworICAgICAgICAgICAgICAg
IGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAgICAgICBpbW1l
ZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRlbHRhWCAhPSAwKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVs
TXVsdGlwbGllcigpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRl
bHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
IWFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVgg
PSAwOworICAgICAgICAgICAgICAgIGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IDA7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKChkZWx0YVggIT0gMCkgJiYgIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVk
ICYmICFwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7CisgICAgICAgICAgICAgICAgZGVs
dGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7CisgICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWFsbG93c1ZlcnRpY2FsU3RyZXRjaGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBldmVu
dENvYWxsZXNjZWREZWx0YVkgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVsdGFZICE9
IDApICYmICFpc1ZlcnRpY2FsbHlTdHJldGNoZWQgJiYgIXBpbm5lZEluRGlyZWN0aW9uKDAsIGRl
bHRhWSkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVy
KCk7CisKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Ny
b2xsQnlEZWx0YVkoZGVsdGFZKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5z
ZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKworICAgICAgICAgICAg
ICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50
KCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNz
KSB7CisgICAgICAgICAgICAgICAgaWYgKChwaW5uZWRJbkRpcmVjdGlvbihldmVudENvYWxsZXNj
ZWREZWx0YVgsIGV2ZW50Q29hbGxlc2NlZERlbHRhWSkgfHwgKGZhYnNmKGV2ZW50Q29hbGxlc2Nl
ZERlbHRhWCkgKyBmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RN
b21lbXR1bVNjcm9sbFRpbWVzdGFtcCkgeworICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3Jv
bGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5k
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsg
ZGVsdGFYKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7CisKKyAgICAgICAgICAgIEZsb2F0
U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJl
dGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVs
dGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7CisgICAgICAgICAgICBGbG9hdFBv
aW50IG9yaWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCku
bG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hB
bW91bnQ7CisgICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBk
YW1wZWREZWx0YTsKKworICAgICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0gbmV3T3JpZ2luKSB7
CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRv
UG9pbnQobmV3T3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBw
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7CisgICAgICAgIG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gMDsK
KyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3JvbGxH
ZXN0dXJlKCkKK3sKKyAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKKworICAgIG1faGF2ZVNj
cm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisgICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVl
OworICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFt
cCA9IDA7CisgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBJbnRT
aXplIHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwor
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0
KCkpKTsKKworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIAor
ICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zbmFw
UnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjplbmRTY3JvbGxHZXN0dXJlKCkKK3sKKyAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7CisK
KyAgICBzbmFwUnViYmVyQmFuZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNuYXBSdWJiZXJCYW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBb
W05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbXR1
bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAg
JiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9pblNjcm9sbEdlc3R1cmUg
PSBmYWxzZTsKKworICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZV07CisgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAg
ICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9h
dFNpemUoKTsKKworICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFydFJlcGVhdGluZygxLjAv
NjAuMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51
bSkKK3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51
bSArIDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRv
d2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVt
KTsKKyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0g
PSByb3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChU
aW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCit7CisgICAgaWYgKCFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgeworICAgICAgICBD
RlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKKworICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0g
RmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9zY3JvbGxhYmxl
QXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9
PSBGbG9hdFNpemUoKSkgeyAgICAKKyAgICAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGlt
ZXIuc3RvcCgpOworICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRT
aXplKCk7CisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgICAg
IG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3Jp
Z2luID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxv
YXRTaXplKCk7CisKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0g
bV9zdGFydFN0cmV0Y2g7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1W
ZWxvY2l0eTsKKworICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHBy
ZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCisgICAgICAgICAgICBpZiAoZmFic2YobV9vcmln
VmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQorICAg
ICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3Qg
cG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
ICAgICAgICBpZiAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpCisgICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2li
bGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQorICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xs
ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICAgICAg
aWYgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAg
IG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0
UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JU
aW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCks
IChmbG9hdCl0aW1lRGVsdGEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2
aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRj
aC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkp
OworCisgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkg
Pj0gMSkgeworICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4g
KyBkZWx0YTsKKworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xs
VG9Qb2ludChuZXdPcmlnaW4pOworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIEZsb2F0
U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOworICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG1fb3JpZ09yaWdpbik7CisKKyAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0
YXJ0U3RyZXRjaCkpOworCisgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgp
OworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgbV9zdGFy
dFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0
UG9pbnQoKTsKKyAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9h
dFNpemUoKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRF
UikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRp
bWVyKCkKK3sKKyAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgw
LjEpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50
VGltZXJJc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXIuaXNBY3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjPiopCit7CisgICAgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNjcm9sbGVycyhtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKK30KKyNlbmRpZgorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJ
bnRSZWN0JiBzY3JvbGxlclRodW1iKQoreworICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gc2Nyb2xsZXJUaHVtYjsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5n
VmlldyhzY3JvbGxlclRodW1iKTsKKworICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0g
bV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRp
bmF0ZXMpOworICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3Jk
aW5hdGVzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCA0NmQ0OWViMzE0NGM2YTU2YTZiZjhmMzk1
N2NiM2NmODcyYWY1MDk1Li5hZTZhMjI0MzQ2Y2JlMjJjZDMzMWM4N2NlNDA4ZGFiZjkyODJlYzIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTM3
LDcgKzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKIAot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBPUyhEQVJXSU4pCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2lu
dDsKICNlbHNlCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHUG9p
bnQoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKKyNpZiBPUyhEQVJXSU4pICYm
ICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKQogICAg
IGV4cGxpY2l0IEludFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBs
aWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95034</attachid>
            <date>2011-05-26 13:57:56 -0700</date>
            <delta_ts>2011-06-07 13:26:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59753-20110526135755.patch</filename>
            <type>text/plain</type>
            <size>65713</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczOTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODQ4YzMzYTFmYTY3MjNhODhjNjBk
OTcxZWRmNmFhNmI2NmM0YmYwLi41OTUzOGUyNzc3YmJkNzEwN2E5MDNkOTdiMjRmYmU5MWNhN2M4
ODdkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUtMjYgIFNhaWxlc2ggQWdyYXdhbCAg
PHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENocm9taXVtIE1hYzogRm9yayBTY3JvbGxBbmltYXRvck1hYyB0byBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjIGZvciBvdmVybGF5IHNjcm9sbGJhciBzdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc1MworCisgICAg
ICAgIFJlbW92ZSBleGNlcHRpb25zIGZvciBNYWMgc2Nyb2xsIHRlc3RzIHRoYXQgYXJlIG5vdyBw
YXNzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0OgorCiAyMDExLTA1LTI2ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuIEFkZGVkIGJhc2VsaW5lcyBhZnRlciByODczODcuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5k
ZXggNmZlZjA0MjQxN2Q1OTQ1ZjcwNDkyOWQ3MzNhM2IxZTZlNThhNWFmOC4uYzVhMGU1NzQ4ZjRh
MTg5NTE2NzNhNDViN2QzMGRhZGJlYWQzNmU4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtNDA5OSwxMyArNDA5OSw2
IEBAIEJVR0NSODM2ODMgOiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlcmVuZGVyLmh0bWwg
PSBURVhUCiBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2RldGFpbHMtcmVwbGFjZS10ZXh0Lmh0bWwg
PSBGQUlMCiBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2RldGFpbHMtcmVwbGFjZS1zdW1tYXJ5LWNo
aWxkLmh0bWwgPSBGQUlMCiAKLS8vIFJlZ3Jlc3Npb24gZnJvbSB3ZWJraXQgcjg3MTE4Ci1CVUdX
SzYxMzQyIE1BQyA6IGZhc3QvcmVwYWludC9maXhlZC1tb3ZlLWFmdGVyLWtleWJvYXJkLXNjcm9s
bC5odG1sID0gSU1BR0UrVEVYVAotQlVHV0s2MTM0MiBNQUMgOiBmYXN0L2RvbS92ZXJ0aWNhbC1z
Y3JvbGxiYXItaW4tcnRsLmh0bWwgPSBURVhUCi1CVUdXSzYxMzQyIE1BQyA6IGZhc3QvZXZlbnRz
L25vZGUtZXZlbnQtYW5jaG9yLWxvY2suaHRtbCA9IFRFWFQKLUJVR1dLNjEzNDIgTUFDIDogZmFz
dC9ldmVudHMvc2Nyb2xsLWFmdGVyLWNsaWNrLW9uLXRhYi1pbmRleC5odG1sID0gVEVYVAotQlVH
V0s2MTM0MiBNQUMgOiBmYXN0L2V2ZW50cy9zY3JvbGxiYXItZG91YmxlLWNsaWNrLmh0bWwgPSBU
RVhUCi0KIC8vIE5ldyB0ZXN0cyBhZGRlZCBpbiByODcxMjEKIEJVR1dLNjExNjkgOiBjc3MzL2lt
YWdlcy9vcHRpbWl6ZS1jb250cmFzdC1jYW52YXMuaHRtbCA9IElNQUdFCiBCVUdXSzYxMTY5IDog
Y3NzMy9pbWFnZXMvb3B0aW1pemUtY29udHJhc3QtaW1hZ2UuaHRtbCA9IElNQUdFCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNzJhMTA5MjFmMGM1MzkzYjQ5YmE4ZTY2Zjk5YWQyMTE3ZWQzMmEwNS4uMWRiZDkyYjkz
YThkYTIyZGE4NmJhMzYyNjIxYmUzYTkxYjgzODQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
NiBAQAorMjAxMS0wNS0yNiAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hyb21pdW0g
TWFjOiBGb3JrIFNjcm9sbEFuaW1hdG9yTWFjIHRvIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMg
Zm9yIG92ZXJsYXkgc2Nyb2xsYmFyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NzUzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBKdXN0
IGZvcmtpbmcgU2Nyb2xsQW5pbWF0b3JNYWMgdG8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGRlZCBJbnRQb2ludE1hYy5t
bS4gVGhpcyBpcyB1c2VkIGJ5IHNvbWUgZnVuY3Rpb25zIGluIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMuIEFsc28gYWRkZWQgZmlsdGVycyBmb3IgY29uZmxpY3RpbmcgY2xhc3MgbmFtZXMgaW4g
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaC9tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHA6IEV4dGVuZGVkIHRoZSAjaWZkZWYgYXJvdW5kIFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoKSBzbyB0aGF0IHRoZSBjaHJvbWl1bSB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0
SXNEcmF3aW5nSW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBBZGRlZC4g
Rm9ya2VkIGZyb20gU2Nyb2xsQW5pbWF0b3JNYWMgYW5kIHJlcGxhY2VkIGFsbCBpbnN0YW5jZXMg
b2YgU2Nyb2xsQW5pbWF0b3JNYWMgd2l0aCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjIGFuZCBT
Y3JvbGxiYXJUaGVtZU1hYyB3aXRoIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuIFJlbW92ZWQg
dGhlIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSBhcm91bmQgdGhlIGZpbGUuIFN0dWJiZWQgb3V0
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbCgpIGlmIHNtb290aCBzY3JvbGxpbmcg
aXMgZGlzYWJsZWQuCisgICAgICAgIChhYnMpOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAg
ICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3ll
ZF0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBib3VuZHNdKToK
KyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgX2ltbWVkaWF0ZVNjcm9s
bFRvUG9pbnQ6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9w
aXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3NpdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVydFNpemVUb0Jhc2U6XSk6CisgICAgICAgICgtW1Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplRnJvbUJhc2U6XSk6CisgICAg
ICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplVG9CYWNraW5n
Ol0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6
ZUZyb21CYWNraW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZSBzdXBlcnZpZXddKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
ZG9jdW1lbnRWaWV3XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
IHdpbmRvd10pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfcmVj
dXJzaXZlUmVjb21wdXRlVG9vbFRpcHNdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAg
ICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9y
RGVzdHJveWVkXSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1w
UGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBt
b3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAg
KC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6Y29u
dmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250ZW50QXJlYU5l
ZWRzRGlzcGxheUluUmVjdDpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6cGFydDpXZWJDb3JlOjpzY3JvbGxBbmltYXRvcjpX
ZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6XSk6CisgICAgICAgICgtW1Njcm9sbGJh
clBhcnRBbmltYXRpb24gc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6
CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6
CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2lu
ZzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0RnJv
bUJhY2tpbmc6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0p
OgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbmltYXRpb246c2Ny
b2xsZXJQYWludGVyOnBhcnQ6V2ViQ29yZTo6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6Cisg
ICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25v
YkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAo
LVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3ZlcmxheVNjcm9sbGVyU3Rh
dGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6On5TY3JvbGxBbmltYXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRq
dXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xs
UG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5
RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5v
dGl0eVBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRB
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJl
YURpZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjplbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEpOgorICAgICAgICAo
V2ViQ29yZTo6ZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxX
aGVlbE11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRvd2FyZFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6
cm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9s
bGJhclBhaW50VGltZXJJc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UG9pbnQuaDogRXhwb3NlZCBOU1BvaW50IGNvbnZlcnNpb24gcm91dGluZXMgdG8gY2hyb21pdW0g
bWFjLgorCiAyMDExLTA1LTI2ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggMDEzZjA0NDQyODU5ZmI5ZTYyMjNlM2M4NzJkM2U5
YTIyNDJkODc0MS4uZWZkNjg0ZTQ0ZjY4YmFlYjgxMTMxNzg5ZDgzYjIwNTIxNTFmMzkxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExNDgsNiArMTE0OCwxMCBA
QAogICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVP
YmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3JlUmVuZGVy
VGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29yZVJlbmRl
clRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9udENhY2hl
PUNocm9taXVtV2ViQ29yZU9iakNXZWJGb250Q2FjaGUnLAorICAgICAgICAgICAgICAnU2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9t
aXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAn
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbicsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsK
ICAgICAgICAgICAgICAgJy4uLy4uLy4uL1dlYktpdExpYnJhcmllcycsCkBAIC0xMzY2LDYgKzEz
NzAsNyBAQAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFNpemVNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hY1xcLm1t
JCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQ
b2ludE1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JbnRSZWN0TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL0Jsb2NrRXhjZXB0aW9uc1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL21hYy9LaWxsUmluZ01hY1xcLm1tJCddLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDU2ZTMyYmJkY2ZkNGUzOGIzMmMxOTI0YWM0MTM3OTYxNDIyMDk1ODQuLmJhNTU2N2RiM2E3ZDZl
ZGRiYTBhYjZjMmQ1MjE1ODUwN2VhZDNlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4MzIsNiAr
MzgzMiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2Jq
ZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNo
cm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxB
bmltYXRvckNocm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggYzQz
NGUwNTBlNTU0OTJlZjNhZjllMTcyZTBiMzRmNzc4OWJhNTAyNy4uYjdiMGE0MWE1NzJhZTk2MTJk
MmIwNzVjOGVlOWY4Mjg3ZmNlMzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmNwcApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYg
IUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhE
QVJXSU4pKQogUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNkMGQ1YTEyYzgzNjVlYWQyMmRiYTY0YmRhNWJiMjVlNjk1YjY0ODAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorI2RlZmluZSBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lm
ZGVmIF9fT0JKQ19fCitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CitAY2xh
c3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworI2Vsc2UK
K2NsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsK
K2NsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgflNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVF
dmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisjZW5kaWYKKworICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNj
cm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CisKKyAgICB2b2lkIHNldElzRHJhd2luZ0ludG9M
YXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAgIGJvb2wgaXNEcmF3
aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9CisKKyAg
ICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikK
KyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQg
c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRU
aW1lcigpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChj
b25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFu
aW1hdGlvbkhlbHBlcjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CisKKyNpZiBVU0UoV0tfU0NST0xM
QkFSX1BBSU5URVIpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwor
CisgICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM+Kik7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNlbmRpZgorICAgIAorICAgIHZpcnR1
YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJl
YSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5k
TGl2ZVJlc2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7CisgICAgdm9p
ZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbEdl
c3R1cmUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKTsKKworICAgIGZsb2F0IGFkanVzdFNjcm9sbFhQb3NpdGlvbklm
TmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBhZGp1c3RTY3JvbGxZUG9zaXRpb25J
Zk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3Np
dGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0
OworICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdDsKKyAgICBib29s
IHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKKyAgICB2b2lk
IHNuYXBSdWJiZXJCYW5kKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICB2b2lkIHNtb290aFNjcm9sbFdp
dGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGJlZ2luU2Nyb2xsR2VzdHVy
ZSgpOworICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgYm9vbCBtX2luU2Nyb2xs
R2VzdHVyZTsKKyAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzOworICAgIGJvb2wg
bV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7CisgICAgCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0
TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7CisgICAgRmxvYXRTaXpl
IG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgorICAgIENG
VGltZUludGVydmFsIG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsK
KyAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2Np
dHk7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFu
ZFRpbWVyOworI2VuZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7CisgICAgYm9vbCBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxl
clRodW1iUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2Q3NDdjNzQ3MGU5ZDlmN2EzNTYxMjY4Y2NjYzNhY2E3YzkxY2MzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMubW0KQEAgLTAsMCArMSwxMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5o
IgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgiCisjaW5jbHVk
ZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKworI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwgTUFDX09TX1hfVkVS
U0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgorQHByb3RvY29sIE5TQW5p
bWF0aW9uRGVsZWdhdGUKK0BlbmQKKworQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChOU09iamVj
dCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNlbmRpZgorCitAaW50
ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQorLSAoaWQpaW5p
dFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CistICh2b2lkKV9zdG9wUnVuOworLSAoQk9PTClf
aXNBbmltYXRpbmc7CistIChOU1BvaW50KXRhcmdldE9yaWdpbjsKK0BlbmQKKworQGludGVyZmFj
ZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdp
dGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Ny
b2xsQW5pbWF0b3I7CitAZW5kCisKK3N0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQorewor
ICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOworICAgIGlmIChmaW5hbFNpemUud2lkdGggPCAw
KQorICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOworICAgIGlmIChm
aW5hbFNpemUuaGVpZ2h0IDwgMCkKKyAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5hbFNp
emUuaGVpZ2h0OworICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAorfQorCitAaW1wbGVtZW50YXRp
b24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0
b3IKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCit7CisgICAgX2Fu
aW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWJvdW5kcworeworICAgIGlmICghX2FuaW1hdG9y
KQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
Y3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICByZXR1
cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgpLCAw
LCAwKTsKK30KKworLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludCluZXdQ
b3NpdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisgICAgX2Fu
aW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bvc2l0aW9uKTsKK30KKworLSAoTlNQ
b2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRpb246KE5TUG9pbnQpbmV3T3JpZ2lu
Cit7CisgICAgcmV0dXJuIG5ld09yaWdpbjsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplVG9C
YXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6
ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6
ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFja2luZzooTlNTaXplKXNpemUKK3sK
KyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVydFNpemVGcm9tQmFj
a2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChpZClz
dXBlcnZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZClkb2N1bWVudFZpZXcKK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistIChpZCl3aW5kb3cKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcworeworfQorCitAZW5kCisK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0
b3I7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2Fu
aW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCistIChO
U1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBh
aXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmlt
YXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y29udGVudHNTaXpl
KCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNv
bnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xs
ZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xs
ZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5POworCisg
ICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCk7Cit9
CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBh
aXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisK
KyAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJyZW50TW91c2VQb3Np
dGlvbigpOworfQorCistIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQ
YWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Ny
b2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1w
UGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsK
KworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAgICBpZiAod2tTY3Jv
bGxiYXJQYWludGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJJ
bXApKQorICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhv
cml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlIAorICAgICAgICBzY3JvbGxiYXIgPSBfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJ
dCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBw
b3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0
d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRo
ZQorICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ug
c2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdv
cmsgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRv
IGF2b2lkIHRoaXMKKyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7CisgICAgCisgICAgcmV0dXJuIHNjcm9sbGJhci0+
Y29udmVydEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJbnRQb2ludChwb2ludEluQ29udGVu
dEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFp
ciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Ny
b2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxl
KW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2FuaW1hdG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50
ZXJDb250cm9sbGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Nyb2xsZXJJ
bXBQYWlyOworICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIG1hY1RoZW1l
ID0gKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFZl
cnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihw
YWludGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRlcikgeworICAgICAg
ICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9sbGJhclBh
aW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQ
YWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJh
cih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAgd2tTZXRQ
YWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIsIG5ld1ZlcnRpY2Fs
UGFpbnRlciwgZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0
eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAor
ICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5
b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3Ro
IGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUt
PnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Cisg
ICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgw
LCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBvbGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50
ZXJGb3JDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAob2xkSG9yaXpvbnRh
bFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHdr
TWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFsUGFpbnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRy
b2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAg
bWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhciwg
bmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29u
dHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOwor
CisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVu
dCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJl
Y3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5z
dXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRh
dGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVz
cyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNz
LCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7
CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91dCwg
c28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5kCisKK0BpbnRlcmZh
Y2UgU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7CisgICAgUmV0YWluUHRy
PFdLU2Nyb2xsYmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAgICBXZWJDb3JlOjpT
Y3JvbGxiYXJQYXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqIF9hbmltYXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7CisgICAgQ0dGbG9hdCBf
bmV3QWxwaGE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFy
UGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClw
YXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilz
Y3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3Jv
bGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhEdXJhdGlvbjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxl
clBhaW50ZXIgPSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0OworICAgIF9hbmlt
YXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJD
b3JlOjpUaHVtYlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFp
bnRlci5nZXQoKSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50
ZXIuZ2V0KCkpOworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAorICAgIHJldHVybiBz
ZWxmOyAgICAKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJv
Z3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNz
XTsKKworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0Zsb2F0
IGN1cnJlbnRBbHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKKyAgICAg
ICAgY3VycmVudEFscGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVu
dEFscGhhID0gcHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1i
UGFydCkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBh
aW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAgICB3a1NldFNjcm9s
bGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBo
YSk7CisKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWlu
dCB0aGUgYW5pbWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkp
CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRS
ZWN0KDAsIDAsIHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCkpKTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6Oklu
dFJlY3QoMCwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAor
eworICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9IDA7Cit9CisKK0Bl
bmQKKworQGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdDxOU0Fu
aW1hdGlvbkRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqIF9hbmltYXRvcjsKKworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBf
dmVydGljYWxLbm9iQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uPiBfaG9yaXpvbnRhbEtub2JBbmltYXRpb247CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247CisgICAgUmV0YWluUHRyPFNj
cm9sbGJhclBhcnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Cit9CistIChp
ZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjKilzY3JvbGxBbmltYXRvcjsKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3Jv
bGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9y
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAg
ICBbX3ZlcnRpY2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hv
cml6b250YWxLbm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgIFtfdmVydGlj
YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxU
cmFja0FuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAoTlNSZWN0KWNvbnZl
cnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisK
Ky0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICBy
ZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICghX2FuaW1h
dG9yKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmICghX2FuaW1hdG9yLT5pc0RyYXdpbmdJ
bnRvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhdHRlbXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCisgICAgc3RhdGljIENBTGF5
ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBkdW1t
eUxheWVyOworfQorCistICh2b2lkKXNldFVwQW5pbWF0aW9uOihSZXRhaW5QdHI8U2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihX
S1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9s
bGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xs
ZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBoZXJlLiAK
KyAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAgICBib29sIG11c3RB
bmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CisKKyAgICBp
ZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1h
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVh
KCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7Cisg
ICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5pdGVseSBn
b2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAgX2FuaW1hdG9yLT5z
dG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBh
bmltYXRpbmcsIHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgeworICAgICAg
ICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAg
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAocGFydCA9PSBX
ZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChzY3Jv
bGxlclBhaW50ZXIpKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAg
ICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tTY3JvbGxiYXJQYWludGVyS25vYlJlY3Qo
c2Nyb2xsZXJQYWludGVyKSk7CisgICAgICAgICAgICBfYW5pbWF0b3ItPnNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIF9h
bmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7CisgICAgfQor
CisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdyb3VwaW5nXTsKKyAgICBbW05TQW5pbWF0
aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIHNj
cm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Njcm9sbGJhclBhcnRBbmltYXRpb24gYWxs
b2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnQ6cGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcjpfYW5pbWF0b3IgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlv
bl0pOworICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlvbkJsb2Nr
aW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbc2Nyb2xsYmFyUGFydEFuaW1h
dGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07CisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBlbmRH
cm91cGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wIGFuaW1h
dGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQ
YWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6
b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hv
cml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFy
dDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9u
OmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0
aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0Oldl
YkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVy
YXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRl
VHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQ
YWludGVyUmVmKXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6
b250YWwoc2Nyb2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hv
cml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBh
cnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1
cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9u
Ol92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIg
cGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEg
ZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxl
ckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNVSW50ZWdlciluZXdPdmVybGF5
U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisgICAgVU5V
U0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClzY3JvbGxB
bmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7CisgICAgW192ZXJ0aWNhbEtu
b2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfaG9yaXpv
bnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtf
dmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Cisg
ICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95
ZWRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xs
QW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKHNjcm9sbGFibGVB
cmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5p
bWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAg
ICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKKyNlbmRpZgorI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKKyAgICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQorICAg
ICwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyhmYWxzZSkKKyAgICAsIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wKDAp
CisgICAgLCBtX3N0YXJ0VGltZSgwKQorICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMs
ICZTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCisj
ZW5kaWYKKyAgICAsIG1fZHJhd2luZ0ludG9MYXllcihmYWxzZSkKKyAgICAsIG1faGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZChmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIu
YWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBh
bGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdl
dCgpXSk7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyAgICBt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsKKyAgICBt
X3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyNlbmRpZgorfQorCitT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpCit7
CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFso
aWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ry
b3llZF07CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xs
QW5pbWF0b3JEZXN0cm95ZWRdOworI2VuZGlmCit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sK
KyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisjaWYgIUVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQorICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVu
dGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYKKworICAgIGlm
ICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFw
cGxlU2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCJdKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
CisgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCisgICAgICAgIHJldHVybiBT
Y3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVs
dGlwbGllcik7CisKKyAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0
IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChz
dGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKKyAgICBpZiAoY3VycmVudFBvcyA9PSBuZXdQ
b3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5TUG9pbnQgbmV3UG9pbnQ7CisgICAg
aWYgKFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7CisgICAg
ICAgIE5TUG9pbnQgdGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgp
IHRhcmdldE9yaWdpbl07CisgICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDogTlNN
YWtlUG9pbnQodGFyZ2V0T3JpZ2luLngsIG5ld1Bvcyk7CisgICAgfSBlbHNlCisgICAgICAgIG5l
d1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50
KG5ld1BvcywgbV9jdXJyZW50UG9zWSkgOiBOU01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQ
b3MpOworCisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRvUG9pbnQ6
bmV3UG9pbnRdOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiBvZmZzZXQpCit7CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9wUnVu
XTsKKyAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Cit9CisKK2Zsb2F0IFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZs
b2F0IHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwor
CisgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxl
QXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVX
aWR0aCgpKSwgMCk7Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVz
dFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAoreworICAg
IGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2Uo
KSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0dXJuIG1heDxmbG9hdD4obWlu
PGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0
KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKK30KKworRmxvYXRQ
b2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVj
ZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9z
Y3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4obWluPGZs
b2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRo
KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworICAgIGZsb2F0IG5l
d1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVh
LT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWln
aHQoKSksIDApOworCisgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25z
dCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9z
aXRpb24gPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsKKyAK
KyAgICBpZiAoYWRqdXN0ZWRQb3NpdGlvbi54KCkgPT0gbV9jdXJyZW50UG9zWCAmJiBhZGp1c3Rl
ZFBvc2l0aW9uLnkoKSA9PSBtX2N1cnJlbnRQb3NZKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9jdXJyZW50UG9zWCA9IGFkanVzdGVkUG9zaXRpb24ueCgpOworICAgIG1fY3VycmVudFBv
c1kgPSBhZGp1c3RlZFBvc2l0aW9uLnkoKTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
K30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURl
bHRhWChmbG9hdCBkZWx0YVgpCit7CisgICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQ
b3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBvc1ggKyBkZWx0YVgpOworICAgIAorICAgIGlm
IChuZXdQb3NYID09IG1fY3VycmVudFBvc1gpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2N1cnJlbnRQb3NYID0gbmV3UG9zWDsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRh
WShmbG9hdCBkZWx0YVkpCit7CisgICAgZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3Np
dGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBvc1kgKyBkZWx0YVkpOworICAgIAorICAgIGlmIChu
ZXdQb3NZID09IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1
cnJlbnRQb3NZID0gbmV3UG9zWTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKQor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhU2Nyb2xs
ZWQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKKyAgICBTY3Jv
bGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhV2lsbFBhaW50KG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAorewor
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNlRW50ZXJlZENvbnRlbnRB
cmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNv
bnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFeGl0ZWRD
b250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRB
cmVhKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tNb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsK
KyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExp
dmVSZXNpemUoKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dpbGxT
dGFydExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5k
aWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6ZWQo
KSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRB
cmVhUmVzaXplZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXplKCkK
K3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tXaWxsRW5kTGl2ZVJlc2l6
ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Cit7
CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFEaWRTaG93
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QKK3sK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURpZEhpZGUo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEJlZ2luU2Nyb2xsR2Vz
dHVyZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25z
dAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEVuZFNjcm9sbEdl
c3R1cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisg
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxi
YXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUu
Z2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKKyAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JBbHBoYShwYWludGVyLCAxKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJh
cik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpOworICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7
CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSwgbmlsLCBmYWxzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwg
bV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZvclBh
aW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBhaW50
ZXIsIHRydWUpOworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAg
ICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50
ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBuaWwpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJD
b250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgdHJ1ZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgbV9o
YXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFS
X1BBSU5URVIpCisgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAg
ICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorCitzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5n
VGltZW91dCA9IDAuMTBmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5lc3Mg
PSAyMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hS
YXRpbyA9IDE7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERl
bHRhQmVmb3JlU3RyZXRjaCA9IDEwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRBbXBs
aXR1ZGUgPSAwLjMxZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kUGVyaW9kID0gMS42
ZjsKKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFs
UG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgZWxhcHNlZFRpbWUpCit7Cisg
ICAgZmxvYXQgYW1wbGl0dWRlID0gcnViYmVyYmFuZEFtcGxpdHVkZTsKKyAgICBmbG9hdCBwZXJp
b2QgPSBydWJiZXJiYW5kUGVyaW9kOworICAgIGZsb2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9y
ID0gZXhwZigoLWVsYXBzZWRUaW1lICogcnViYmVyYmFuZFN0aWZmbmVzcykgLyBwZXJpb2QpOwor
ICAgICAgICAgICAgIAorICAgIHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVs
b2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0
b3I7Cit9CisKK3N0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQg
ZGVsdGEpCit7CisgICAgZmxvYXQgc3RpZmZuZXNzID0gc3RkOjptYXgocnViYmVyYmFuZFN0aWZm
bmVzcywgMS4wZik7CisgICAgcmV0dXJuIGRlbHRhIC8gc3RpZmZuZXNzOworfQorCitzdGF0aWMg
ZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJl
dHVybiBkZWx0YSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3M7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3Jv
bGxXaGVlbE11bHRpcGxpZXIoKQoreworICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7
CisgICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyIl07CisgICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAg
ICBtdWx0aXBsaWVyID0gMTsKKyAgICB9CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2Fk
ID0gdHJ1ZTsKKworICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
KCkpIHsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21l
d2hhdCByb3VuZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKKyAg
ICAvLyB1cCB0byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdl
IG9mIHRoZSBmYWN0IHRoYXQKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24g
b2YgaGFuZGxlV2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCisgICAgLy8gd2hlZWwgZXZl
bnQgaWYgdGhlcmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCisgICAgaWYgKGZhYnNmKHdoZWVsRXZl
bnQuZGVsdGFZKCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7CisgICAgICAgIGlm
ICghYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZygpKSB7CisgICAgICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dCh3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHdoZWVsRXZlbnQuYWNjZXB0KCk7CisKKyAgICBib29sIGlzTW9tZXR1bVNjcm9sbEV2ZW50
ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Tm9uZSk7CisgICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChpc01vbWV0dW1TY3Jv
bGxFdmVudCB8fCBtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkpIHsKKyAgICAgICAg
aWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
RW5kZWQpCisgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZl
bnQpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdlc3R1cmVF
dmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIGlm
IChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxCZWdp
blR5cGUpCisgICAgICAgIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgIGVsc2UKKyAgICAgICAg
ZW5kU2Nyb2xsR2VzdHVyZSgpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQoreworICAgIEZs
b2F0U2l6ZSBsaW1pdERlbHRhOworICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRh
WCkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0
cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0
b3AKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVDb250ZW50UmVjdCgpLnkoKSArICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2lu
KCkueSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcg
dG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRv
bQorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29u
dGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7CisgICAgICAgIGlmIChkZWx0
YVggPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAg
TWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICBsaW1p
dERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngo
KSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ug
c3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVs
dGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtICht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgp
IDwgMSAmJiBsaW1pdERlbHRhLmhlaWdodCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjph
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zY3JvbGxh
YmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Nj
cm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciog
dlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgcmV0dXJuICgoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Ny
b2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9s
bEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Ny
b2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xs
ZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkp
OworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdp
dGhFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Ny
b2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKworICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS53aWR0aCgpOworICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS5oZWlnaHQoKTsKKworICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNl
IHdlIG1heSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQg
aXQgaW50byBvdmVyZmxvdy4KKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUo
KTsKKworICAgIGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRh
WCgpOworICAgIGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRh
WSgpOworCisgICAgZGVsdGFYICs9IGV2ZW50Q29hbGxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkg
Kz0gZXZlbnRDb2FsbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9s
bGluZyB2ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYg
KGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIGlzVmVydGljYWxseVN0cmV0
Y2hlZCA9IGZhbHNlOworICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgPSBmYWxzZTsK
KyAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBmYWxzZTsKKyAgICAKKyAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworCisgICAgaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7CisgICAgaXNWZXJ0
aWNhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKworICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlIHBoYXNlID0gd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCk7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRoZW4gZG8gc29tZSBz
ZXR1cC4KKyAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIChwaGFzZSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlQ2hhbmdlZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1
ZTsKKworICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1w
KCkgLSBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdl
c3R1cmUgfHwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFz
dE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwg
c2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZl
bG9jaXR5LnNldFdpZHRoKGV2ZW50Q29hbGxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEp
OworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxsZXNj
ZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVtdHVt
U2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVu
dC50aW1lc3RhbXAoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgewor
ICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVj
dGlvbihkZWx0YVgsIDApKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0
cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRh
WSAhPSAwICYmIChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxv
Y2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVp
cmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dT
Y3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRh
WCk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aCht
X292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAg
IC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChw
aW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRh
WCAhPSAwICYmIChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxv
Y2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVp
cmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dT
Y3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVs
dGFZKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdo
dChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxs
IHlldC4KKyAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmlt
dW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0
aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVs
dGFYKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFY
ICE9IDAgfHwgZGVsdGFZICE9IDApIHsKKyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAg
ICAgICAgICBpZiAoZGVsdGFZICE9IDApIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Ny
b2xsV2hlZWxNdWx0aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlE
ZWx0YVkoZGVsdGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0g
MCkgeworICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsK
KyAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9u
dGFsU3RyZXRjaGluZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAg
ICAgICAgICBldmVudENvYWxsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlm
ICgoZGVsdGFYICE9IDApICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5E
aXJlY3Rpb24oZGVsdGFYLCAwKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxX
aGVlbE11bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwor
CisgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAg
ICAgICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2FsbGVzY2VkRGVs
dGFZID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0
aWNhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAg
ICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRl
bHRhWSk7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICAg
ICAgICAgIGlmICgocGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsbGVzY2VkRGVsdGFYLCBldmVu
dENvYWxsZXNjZWREZWx0YVkpIHx8IChmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVgpICsgZmFi
c2YoZXZlbnRDb2FsbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW10dW1TY3JvbGxU
aW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9y
Y2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9y
Y2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVs
dGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNl
LndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNj
cm9sbEZvcmNlLmhlaWdodCgpKSkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2lu
ID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBt
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAg
ICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CisK
KyAgICAgICAgICAgIGlmIChvcmlnT3JpZ2luICE9IG5ld09yaWdpbikgeworICAgICAgICAgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdp
bik7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcyA9IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwor
ICAgICAgICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSgpCit7Cisg
ICAgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7CisKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgPSB0cnVlOworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxz
ID0gZmFsc2U7CisgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOworICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoQW1v
dW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICBtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFt
b3VudC53aWR0aCgpKSk7CisgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91
bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7CisKKyAgICBt
X292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICAKKyAgICBpZiAobV9zbmFw
UnViYmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1l
ci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xs
R2VzdHVyZSgpCit7CisgICAgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgc25hcFJ1YmJl
ckJhbmQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVy
QmFuZCgpCit7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdIC0gbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3Rh
bXA7CisgICAgaWYgKG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+
PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQorICAgICAgICBtX21vbWVudHVtVmVsb2Np
dHkgPSBGbG9hdFNpemUoKTsKKworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CisKKyAg
ICBpZiAobV9zbmFwUnViYmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURh
dGVdOworICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgbV9vcmlnT3JpZ2lu
ID0gRmxvYXRQb2ludCgpOworICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAg
ICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYwLjApOworfQorCitz
dGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgcmV0
dXJuIG51bSA+IDAgPyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKK30K
Kworc3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0
IG51bSkKK3sKKyAgICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7CisgICAgaWYgKGZh
YnMobnVtIC0gcm91bmRlZE51bSkgPCAwLjEyNSkKKyAgICAgICAgbnVtID0gcm91bmRlZE51bTsK
KworICAgIHJldHVybiByb3VuZFRvd2FyZFplcm8obnVtKTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jl
c3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwg
dGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9z
dGFydFRpbWU7CisKKyAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7
CisgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5n
QW1vdW50KCk7CisgICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkp
IHsgICAgCisgICAgICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAg
ICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOworICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRj
aCA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9p
bnQoKTsKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX29y
aWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRp
b24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNo
OworICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAg
ICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwg
cnViYmVyYmFuZGluZworICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdo
dCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBt
X29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
RG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNj
cm9sbCBob3Jpem9udGFsbHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9z
Y3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCFo
U2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5LnNldFdpZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEb24n
dCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBo
b3Jpem9udGFsbHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxh
YmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgICAgIGlmICghdlNjcm9sbGVy
IHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eS5zZXRIZWlnaHQoMCk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJv
dW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3Rh
cnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURl
bHRhKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJk
WmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1t
X29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBp
ZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAg
ICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisKKyAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3Jp
Z2luKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxp
bmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRj
aCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVs
YXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRj
aC5oZWlnaHQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludChtX29yaWdPcmlnaW4pOworCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5kaWRDb21wbGV0ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsK
KworICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxv
YXRTaXplKCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAg
ICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV07CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAg
fQorfQorI2VuZGlmCisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAg
bV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3QoMC4xKTsKK30KKworYm9v
bCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0
aXZlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJh
clBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgp
OworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQ
YWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAg
IHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMobV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xs
ZXJUaHVtYikKK3sKKyAgICBJbnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVy
VGh1bWI7CisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0
ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJU
aHVtYik7CisKKyAgICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5z
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBt
X3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFBvaW50LmgKaW5kZXggYzQxMjgyZjA3N2FmZGFjZTkxOWRiNDkxY2MyYTM4YTNjYTU0NjU3
Ni4uZmQwOGY1YzdmN2I3OGEwMGNkZjkwZjAxYjRkMTU5ZmY1ZDFlZDg1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNyw3ICszNyw3IEBAIHR5
cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKLSNpZiBQTEFURk9STShN
QUMpCisjaWYgT1MoREFSV0lOKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQpAQCAt
MTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19T
QU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCisjaWYgT1MoREFSV0lOKSAmJiAhZGVmaW5lZChOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKICAgICBleHBsaWNpdCBJbnRQ
b2ludChjb25zdCBOU1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBp
dCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96292</attachid>
            <date>2011-06-07 13:26:35 -0700</date>
            <delta_ts>2011-06-07 16:57:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59753-20110607132634.patch</filename>
            <type>text/plain</type>
            <size>63926</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyMTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMWU0NTkyOTg2ZDlmZTQy
NzI5ZWVlYTRmZDY2OWMwMWE3ZDRlYTk5Li45OTExZGY0ODE2MTNhODZlMGQyZGFkMTZhZmQyMzM2
YTE1Mjk4MjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTA2LTA3ICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBNYWM6IEZvcmsgU2Nyb2xsQW5pbWF0
b3JNYWMgdG8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyBmb3Igb3ZlcmxheSBzY3JvbGxiYXIg
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTk3NTMKKworICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgZm9ya2luZyBTY3JvbGxBbmltYXRv
ck1hYyB0byBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLgorCisgICAgICAgICogV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXA6IEFkZGVkIEludFBvaW50TWFjLm1tLiBUaGlzIGlzIHVzZWQgYnkgc29t
ZSBmdW5jdGlvbnMgaW4gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy4gQWxzbyBhZGRlZCBmaWx0
ZXJzIGZvciBjb25mbGljdGluZyBjbGFzcyBuYW1lcyBpbiBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oL21tLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDogRXh0ZW5k
ZWQgdGhlICNpZmRlZiBhcm91bmQgU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSgpIHNvIHRoYXQgdGhl
IGNocm9taXVtIHZlcnNpb24gd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRJc0RyYXdpbmdJbnRvTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aXNEcmF3aW5nSW50
b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Omhh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW06IEFkZGVkLiBGb3JrZWQgZnJvbSBTY3JvbGxBbmlt
YXRvck1hYyBhbmQgcmVwbGFjZWQgYWxsIGluc3RhbmNlcyBvZiBTY3JvbGxBbmltYXRvck1hYyB3
aXRoIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgYW5kIFNjcm9sbGJhclRoZW1lTWFjIHdpdGgg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy4gUmVtb3ZlZCB0aGUgRU5BQkxFKFNNT09USF9TQ1JP
TExJTkcpIGFyb3VuZCB0aGUgZmlsZS4gU3R1YmJlZCBvdXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c2Nyb2xsKCkgaWYgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KKyAgICAgICAg
KGFicyk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGluaXRXaXRo
U2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgtW1Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGJvdW5kc10pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDpdKToKKyAgICAgICAg
KC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgX3BpeGVsQWxpZ25Qcm9wb3NlZFNjcm9s
bFBvc2l0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBj
b252ZXJ0U2l6ZVRvQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVs
ZWdhdGUgY29udmVydFNpemVGcm9tQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUgY29udmVydFNpemVUb0JhY2tpbmc6XSk6CisgICAgICAgICgtW1Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplRnJvbUJhY2tpbmc6XSk6CisgICAg
ICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHN1cGVydmlld10pOgorICAgICAg
ICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBkb2N1bWVudFZpZXddKToKKyAgICAg
ICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgd2luZG93XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlw
c10pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdKToKKyAgICAgICAg
KC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JT
Y3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRB
cmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Ny
b2xsZXJJbXA6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0Ol0pOgor
ICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOl0p
OgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGluaXRXaXRoU2Nyb2xsYmFyUGFp
bnRlcjpwYXJ0OldlYkNvcmU6OnNjcm9sbEFuaW1hdG9yOldlYkNvcmU6OmFuaW1hdGVBbHBoYVRv
OmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJl
bnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxB
bmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
aW5pdFdpdGhTY3JvbGxBbmltYXRvcjpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKToKKyAgICAgICAg
KC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxheWVyXSk6CisgICAgICAgICgtW1Njcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZSBzZXRVcEFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDpXZWJD
b3JlOjphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVU
cmFja0FscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZSBzY3JvbGxlckltcDpvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKToKKyAgICAg
ICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5l
Y2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjph
ZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVh
V2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0YXJ0TGl2
ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpj
b250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Ny
b2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxs
UmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmVs
YXN0aWNEZWx0YUZvclRpbWVEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjplbGFzdGljRGVsdGFG
b3JSZWJvdW5kRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFdoZWVsTXVsdGlwbGllcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVlbEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdl
c3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpwaW5uZWRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Nyb2xs
V2l0aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmJlZ2luU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjplbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dW5kVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRvRGV2aWNlUGl4ZWxUb3dh
cmRaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNu
YXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0b3BTY3Jv
bGxiYXJQYWludFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOiBFeHBvc2VkIE5TUG9p
bnQgY29udmVyc2lvbiByb3V0aW5lcyB0byBjaHJvbWl1bSBtYWMuCisKIDIwMTEtMDYtMDYgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI4ODIwMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKaW5kZXggMWVhMjMzNGM3ZWQ2M2Q3ZjNhOTZmOGQ4N2I5NDVhODQxYmU1YmRlNS4uNTRl
NWFhN2Q4MjkzZTkzZWRkODgyNWI0ZTRlZTI1NzUxMmRkNGM2NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExNTAsNiArMTE1MCwxMCBAQAogICAgICAgICAgICAg
ICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRp
b25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0
aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9udENhY2hlPUNocm9taXVtV2ViQ29y
ZU9iakNXZWJGb250Q2FjaGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
JywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU9Q2hy
b21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUnLAorICAg
ICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFydEFuaW1hdGlvbicsCiAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAgICAgICAg
Jy4uLy4uLy4uL1dlYktpdExpYnJhcmllcycsCkBAIC0xMzY4LDYgKzEzNzIsNyBAQAogICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWNcXC5t
bSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5
cGhQYWdlVHJlZU5vZGVNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hY1xcLm1tJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hY1xcLm1tJCdd
LAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0
TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0Jsb2Nr
RXhjZXB0aW9uc1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21h
Yy9LaWxsUmluZ01hY1xcLm1tJCddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGEwNmUwZDExMTZlMmY1
MDk0NTE5ZmM0M2Y3NjY4MzkxMTNmN2NhNjAuLmYyZDliM2JlNzg2ZWI2ZTczYjk4NzllYzM4Yjli
NWZiNGQyMDUzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4MzIsNiArMzgzMiw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5t
bScsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxp
dGllc0Nocm9taXVtTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IGM0MzRlMDUwZTU1NDkyZWYzYWY5ZTE3
MmUwYjM0Zjc3ODliYTUwMjcuLmI3YjBhNDFhNTcyYWU5NjEyZDJiMDc1YzhlZTlmODI4N2ZjZTMw
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTQx
LDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2lmICFFTkFCTEUoU01PT1RIX1NDUk9M
TElORykgJiYgIShQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKIFBhc3NPd25QdHI8
U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3Io
c2Nyb2xsYWJsZUFyZWEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDBk
NWExMmM4MzY1ZWFkMjJkYmE2NGJkYTViYjI1ZTY5NWI2NDgwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yy5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19o
CisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZTsKK0BjbGFzcyBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlOworQGNs
YXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNlbHNlCitjbGFzcyBTY3JvbGxBbmltYXRp
b25IZWxwZXJEZWxlZ2F0ZTsKK2NsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKK2NsYXNz
IFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CitjbGFzcyBTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGU7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxiYXI7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgOiBwdWJsaWMgU2Nyb2xs
QW5pbWF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMoU2Nyb2xsYWJsZUFyZWEqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNocm9taXVt
TWFjKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAgdmly
dHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50
Jik7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
QW5pbWF0aW9ucygpOworCisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFY
KGZsb2F0IGRlbHRhWCk7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBk
ZWx0YVkpOworCisgICAgdm9pZCBzZXRJc0RyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJh
d2luZ0ludG9MYXllciA9IGI7IH0KKyAgICBib29sIGlzRHJhd2luZ0ludG9MYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhd2luZ0ludG9MYXllcjsgfQorCisgICAgYm9vbCBoYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2Fk
OyB9CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgYm9vbCBzY3JvbGxiYXJQ
YWludFRpbWVySXNBY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xsYmFyUGFpbnRU
aW1lcigpOworICAgIHZvaWQgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyNlbmRpZgorCisg
ICAgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOworCitw
cml2YXRlOgorICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7CisgICAg
UmV0YWluUHRyPFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlOworCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFJl
dGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmPiBtX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CisgICAgUmV0YWlu
UHRyPGlkPiBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKworICAgIHZvaWQgaW5pdGlhbFNj
cm9sbGJhclBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiop
OworICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+IG1faW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXI7CisjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aXR5UG9zaXRp
b25DaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6
ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0OworICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0
dXJlKCkgY29uc3Q7CisgICAgdm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisgICAg
dmlydHVhbCB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7
CisKKyAgICBmbG9hdCBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29u
c3Q7CisgICAgZmxvYXQgYWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNv
bnN0OworICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
Ym9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIGFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKCkgY29uc3Q7CisgICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihm
bG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZCgpOwor
ICAgIHZvaWQgc25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM+Kik7CisgICAgdm9pZCBzbW9vdGhTY3JvbGxXaXRoRXZlbnQoUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CisgICAgdm9pZCBiZWdpblNjcm9sbEdlc3R1cmUoKTsKKyAgICB2b2lkIGVuZFNj
cm9sbEdlc3R1cmUoKTsKKworICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmU7CisgICAgYm9vbCBt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzczsKKyAgICBib29sIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzOworICAgIAorICAgIENGVGltZUludGVydmFsIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0
YW1wOworICAgIEZsb2F0U2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXpl
IG1fc3RyZXRjaFNjcm9sbEZvcmNlOworICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7
CisKKyAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KKyAgICBDRlRpbWVJbnRlcnZhbCBtX3N0YXJ0
VGltZTsKKyAgICBGbG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7CisgICAgRmxvYXRQb2ludCBtX29y
aWdPcmlnaW47CisgICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OworICAgIFRpbWVyPFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM+IG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKKyNlbmRpZgorICAg
IGJvb2wgbV9kcmF3aW5nSW50b0xheWVyOworICAgIGJvb2wgbV9oYXZlU2Nyb2xsZWRTaW5jZVBh
Z2VMb2FkOworICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkNzQ3Yzc0NzBlOWQ5
ZjdhMzU2MTI2OGNjY2MzYWNhN2M5MWNjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCkBAIC0w
LDAgKzEsMTI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCIKKworI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyNpZiAhZGVmaW5lZChN
QUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCBN
QUNfT1NfWF9WRVJTSU9OXzEwXzYKK0Bwcm90b2NvbCBOU0FuaW1hdGlvbkRlbGVnYXRlCitAZW5k
CisKK0BpbnRlcmZhY2UgTlNQcm9jZXNzSW5mbyAoTlNPYmplY3QpCistIChOU1RpbWVJbnRlcnZh
bClzeXN0ZW1VcHRpbWU7CitAZW5kCisjZW5kaWYKKworQGludGVyZmFjZSBOU09iamVjdCAoU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKKy0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRl
bGVnYXRlOworLSAodm9pZClfc3RvcFJ1bjsKKy0gKEJPT0wpX2lzQW5pbWF0aW5nOworLSAoTlNQ
b2ludCl0YXJnZXRPcmlnaW47CitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUgOiBOU09iamVjdAoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqIF9hbmltYXRvcjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOworQGVuZAor
CitzdGF0aWMgTlNTaXplIGFicyhOU1NpemUgc2l6ZSkKK3sKKyAgICBOU1NpemUgZmluYWxTaXpl
ID0gc2l6ZTsKKyAgICBpZiAoZmluYWxTaXplLndpZHRoIDwgMCkKKyAgICAgICAgZmluYWxTaXpl
LndpZHRoID0gLWZpbmFsU2l6ZS53aWR0aDsKKyAgICBpZiAoZmluYWxTaXplLmhlaWdodCA8IDAp
CisgICAgICAgIGZpbmFsU2l6ZS5oZWlnaHQgPSAtZmluYWxTaXplLmhlaWdodDsKKyAgICByZXR1
cm4gZmluYWxTaXplOyAgICAKK30KKworQGltcGxlbWVudGF0aW9uIFNjcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
YW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7Cit9CisKKy0g
KE5TUmVjdClib3VuZHMKK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5T
WmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9h
bmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVu
dFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7Cit9CisKKy0gKHZvaWQp
X2ltbWVkaWF0ZVNjcm9sbFRvUG9pbnQ6KE5TUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBpZiAo
IV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIF9hbmltYXRvci0+aW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludChuZXdQb3NpdGlvbik7Cit9CisKKy0gKE5TUG9pbnQpX3BpeGVsQWxpZ25Qcm9w
b3NlZFNjcm9sbFBvc2l0aW9uOihOU1BvaW50KW5ld09yaWdpbgoreworICAgIHJldHVybiBuZXdP
cmlnaW47Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFzZTooTlNTaXplKXNpemUKK3sK
KyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVydFNpemVGcm9tQmFz
ZTooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUp
Y29udmVydFNpemVUb0JhY2tpbmc6KE5TU2l6ZSlzaXplCit7CisgICAgcmV0dXJuIGFicyhzaXpl
KTsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhY2tpbmc6KE5TU2l6ZSlzaXplCit7
CisgICAgcmV0dXJuIGFicyhzaXplKTsKK30KKworLSAoaWQpc3VwZXJ2aWV3Cit7CisgICAgcmV0
dXJuIG5pbDsKK30KKworLSAoaWQpZG9jdW1lbnRWaWV3Cit7CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoaWQpd2luZG93Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcmVjdXJz
aXZlUmVjb21wdXRlVG9vbFRpcHMKK3sKK30KKworQGVuZAorCisjaWYgVVNFKFdLX1NDUk9MTEJB
Ul9QQUlOVEVSKQorCitAaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUgOiBOU09iamVjdAoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMq
IF9hbmltYXRvcjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZQorCistIChpZClpbml0
V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilz
Y3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1h
dG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkCit7CisgICAgX2FuaW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWNvbnRlbnRBcmVhUmVj
dEZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCit7CisgICAgVU5VU0VEX1BB
UkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVy
biBOU1plcm9SZWN0OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUgPSBfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmNvbnRlbnRzU2l6ZSgpOworICAgIHJldHVybiBOU01h
a2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkp
OworfQorCistIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xs
ZXJJbXBQYWlyCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYg
KCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBfYW5pbWF0b3It
PnNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpOworfQorCistIChOU1BvaW50KW1vdXNl
TG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBh
aXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmlt
YXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgcmV0dXJuIF9hbmltYXRv
ci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKK30KKworLSAoTlNQ
b2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBv
aW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClzY3JvbGxl
ckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX2Fu
aW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBXZWJDb3JlOjpTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9IDA7CisgICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpv
bnRhbCgoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wKSkKKyAgICAgICAgc2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgZWxzZSAKKyAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgdG8gaGF2
ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9yIHRoaXMgZGVs
ZWdhdGUKKyAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1vbWVudCB3aGVu
IGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKKyAgICAvLyBtb21lbnQgd2hl
biBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9iYWJseSBkZS1j
b3VwbGUgc29tZQorICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCisgICAgLy8g
aXNzdWUuCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRQ
b2ludCgpOworICAgIAorICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7Cit9CisKKy0gKHZv
aWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVk
c0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVy
SW1wUGFpcik7CisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOworfQorCistICh2b2lkKXNjcm9sbGVy
SW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9s
bGVyU3R5bGUKK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBwYWludGVyQ29udHJvbGxlciA9IChXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKXNjcm9sbGVySW1wUGFpcjsKKyAgICBXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiBtYWNUaGVtZSA9IChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjKilXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KTsKKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRWZXJ0aWNhbFBhaW50ZXIgPSB3a1Zl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIpOwor
ICAgIGlmIChvbGRWZXJ0aWNhbFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFy
KiB2ZXJ0aWNhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+dmVydGlj
YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG5ld1ZlcnRpY2Fs
UGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRWZXJ0aWNhbFBh
aW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAg
ICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIodmVydGljYWxTY3JvbGxiYXIs
IG5ld1ZlcnRpY2FsUGFpbnRlcik7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250
cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKKwor
ICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQg
dGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKKyAgICAgICAgLy8gZnJhbWVSZWN0
IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3Vy
ZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRl
ZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3Mo
dmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlj
a25lc3MpKTsKKyAgICB9CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkSG9yaXpvbnRh
bFBhaW50ZXIgPSB3a0hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihwYWlu
dGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZEhvcml6b250YWxQYWludGVyKSB7CisgICAgICAg
IFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Ny
b2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9sbGJh
clBhaW50ZXJSZWYgbmV3SG9yaXpvbnRhbFBhaW50ZXIgPSB3a01ha2VTY3JvbGxiYXJSZXBsYWNl
bWVudFBhaW50ZXIob2xkSG9yaXpvbnRhbFBhaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWlu
dGVyRm9yU2Nyb2xsYmFyKGhvcml6b250YWxTY3JvbGxiYXIsIG5ld0hvcml6b250YWxQYWludGVy
KTsKKyAgICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRy
b2xsZXIsIG5ld0hvcml6b250YWxQYWludGVyLCB0cnVlKTsKKworICAgICAgICAvLyBUaGUgZGlm
ZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdl
IG11c3QgcmUtc2V0IHRoZSAKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tu
ZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAg
ICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRo
aWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJh
ci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1l
UmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAg
fQorCisgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKHBhaW50ZXJDb250
cm9sbGVyLCBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOworCisgICAgLy8gVGhlIGRpZmZl
cmVudCBzY3JvbGxiYXIgc3R5bGVzIGFmZmVjdCBsYXlvdXQsIHNvIHdlIG11c3QgcmUtbGF5b3V0
IGV2ZXJ5dGhpbmcuCisgICAgX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJT
dHlsZUNoYW5nZWQoKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFNjcm9sbGJhclBhcnRBbmlt
YXRpb24gOiBOU0FuaW1hdGlvbgoreworICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJS
ZWY+IF9zY3JvbGxlclBhaW50ZXI7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBfcGFydDsK
KyAgICBXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7CisgICAg
Q0dGbG9hdCBfaW5pdGlhbEFscGhhOworICAgIENHRmxvYXQgX25ld0FscGhhOworfQorLSAoaWQp
aW5pdFdpdGhTY3JvbGxiYXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQ
YWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjoo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0
ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgorCist
IChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3Jv
bGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1h
dG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBh
bmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwp
ZHVyYXRpb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRHVyYXRpb246ZHVyYXRpb24g
YW5pbWF0aW9uQ3VydmU6TlNBbmltYXRpb25FYXNlSW5PdXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfc2Nyb2xsZXJQYWludGVyID0gc2Nyb2xsZXJQ
YWludGVyOworICAgIF9wYXJ0ID0gcGFydDsKKyAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRv
cjsKKyAgICBfaW5pdGlhbEFscGhhID0gX3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gd2tT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpIDogd2tTY3Jv
bGxiYXJQYWludGVyVHJhY2tBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpKTsKKyAgICBfbmV3
QWxwaGEgPSBuZXdBbHBoYTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsgICAgCit9CisKKy0gKHZv
aWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCit7Cisg
ICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107CisKKyAgICBpZiAoIV9hbmlt
YXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dGbG9hdCBjdXJyZW50QWxwaGE7CisgICAg
aWYgKF9pbml0aWFsQWxwaGEgPiBfbmV3QWxwaGEpCisgICAgICAgIGN1cnJlbnRBbHBoYSA9IDEg
LSBwcm9ncmVzczsKKyAgICBlbHNlCisgICAgICAgIGN1cnJlbnRBbHBoYSA9IHByb2dyZXNzOwor
ICAgIAorICAgIGlmIChfcGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQpCisgICAgICAgIHdrU2V0
U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50
QWxwaGEpOworICAgIGVsc2UKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBo
YShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50QWxwaGEpOworCisgICAgLy8gSW52YWxp
ZGF0ZSB0aGUgc2Nyb2xsYmFycyBzbyB0aGF0IHRoZXkgcGFpbnQgdGhlIGFuaW1hdGlvbgorICAg
IGlmIChXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5z
Y3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICB2ZXJ0aWNhbFNj
cm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB2ZXJ0aWNhbFNj
cm9sbGJhci0+d2lkdGgoKSwgdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKSk7CisgICAgaWYg
KFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Ny
b2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBob3Jpem9udGFs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIGhvcml6b250
YWxTY3JvbGxiYXItPndpZHRoKCksIGhvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBbc2VsZiBzdG9wQW5p
bWF0aW9uXTsKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZT4KK3sK
KyAgICBXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7CisKKyAg
ICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsS25vYkFuaW1hdGlv
bjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxLbm9i
QW5pbWF0aW9uOworCisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0
aWNhbFRyYWNrQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
PiBfaG9yaXpvbnRhbFRyYWNrQW5pbWF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmlt
YXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7
CistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZCljYW5jZWxBbmltYXRpb25zCit7CisgICAgW192ZXJ0aWNhbEtub2JBbmlt
YXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07CisgICAgW19ob3Jpem9udGFsS25vYkFuaW1hdGlv
bi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRpb24uZ2V0
KCkgc3RvcEFuaW1hdGlvbl07CisgICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkg
c3RvcEFuaW1hdGlvbl07Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNS
ZWN0KWFSZWN0Cit7CisgICAgcmV0dXJuIGFSZWN0OworfQorCistIChOU1JlY3QpY29udmVydFJl
Y3RGcm9tQmFja2luZzooTlNSZWN0KWFSZWN0Cit7CisgICAgcmV0dXJuIGFSZWN0OworfQorCist
IChDQUxheWVyICopbGF5ZXIKK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBpZiAoIV9hbmltYXRvci0+aXNEcmF3aW5nSW50b0xheWVyKCkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYXR0ZW1wdCB0byByZXR1
cm4gYW4gYWN0dWFsIGxheWVyLgorICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0gW1tD
QUxheWVyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gZHVtbXlMYXllcjsKK30KKworLSAodm9p
ZClzZXRVcEFuaW1hdGlvbjooUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+JilzY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWludGVyUmVm
KXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQgYW5pbWF0
ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uCit7CisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBwYWdlLCB0aGVuIHRo
ZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCisgICAgLy8gVGhpcyBvdmVycmlk
ZXMgdGhlIGVhcmx5IHJldHVybnMuCisgICAgYm9vbCBtdXN0QW5pbWF0ZSA9IF9hbmltYXRvci0+
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOworCisgICAgaWYgKF9hbmltYXRvci0+c2Nyb2xs
YmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5zaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgeworICAgICAgICBfYW5pbWF0b3ItPnN0
YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5pbWF0ZSBub3cs
IHNvIHN0b3AgdGhlIHRpbWVyLgorICAgIF9hbmltYXRvci0+c3RvcFNjcm9sbGJhclBhaW50VGlt
ZXIoKTsKKworICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBzdG9wCisgICAg
aWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKKyAgICAgICAgW3Njcm9sbGJhclBhcnRBbmlt
YXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07CisgICAgICAgIHNjcm9sbGJhclBhcnRBbmltYXRp
b24gPSBuaWw7CisgICAgfQorCisgICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ICYm
ICF3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkgeworICAg
ICAgICBpZiAobmV3QWxwaGEgPT0gMSkgeworICAgICAgICAgICAgSW50UmVjdCB0aHVtYlJlY3Qg
PSBJbnRSZWN0KHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KHNjcm9sbGVyUGFpbnRlcikpOwor
ICAgICAgICAgICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QodGh1bWJS
ZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBfYW5pbWF0b3ItPnNldFZpc2libGVT
Y3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOworICAgIH0KKworICAgIFtOU0FuaW1hdGlvbkNv
bnRleHQgYmVnaW5Hcm91cGluZ107CisgICAgW1tOU0FuaW1hdGlvbkNvbnRleHQgY3VycmVudENv
bnRleHRdIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
LmFkb3B0TlMoW1tTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJh
clBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OnBhcnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsQW5pbWF0b3I6X2FuaW1hdG9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlQWxwaGFUbzpu
ZXdBbHBoYSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKKyAgICBbc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25O
b25ibG9ja2luZ107CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkgc3RhcnRBbmlt
YXRpb25dOworICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgZW5kR3JvdXBpbmddOworfQorCistICh2
b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhhVG86KENHRmxv
YXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50
ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlcklt
cDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9sbGVyUGFpbnRl
cikpCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsS25vYkFuaW1hdGlv
biBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6VGh1bWJQYXJ0
IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07CisgICAgZWxz
ZQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxLbm9iQW5pbWF0aW9uIHNj
cm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5p
bWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9p
ZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNrQWxwaGFUbzooQ0dGbG9h
dCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50
ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlcklt
cDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9sbGVyUGFpbnRl
cikpCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsVHJhY2tBbmltYXRp
b24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OkJhY2tUcmFj
a1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Cisg
ICAgZWxzZQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxUcmFja0FuaW1h
dGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1Ry
YWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsK
K30KKworLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgb3ZlcmxheVNjcm9sbGVy
U3RhdGVDaGFuZ2VkVG86KE5TVUludGVnZXIpbmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOworICAgIFVOVVNFRF9QQVJBTShuZXdPdmVybGF5
U2Nyb2xsZXJTdGF0ZSk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sK
KyAgICBfYW5pbWF0b3IgPSAwOworICAgIFtfdmVydGljYWxLbm9iQW5pbWF0aW9uLmdldCgpIHNj
cm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICBbX2hvcml6b250YWxLbm9iQW5pbWF0aW9uLmdl
dCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRp
b24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfaG9yaXpvbnRhbFRyYWNr
QW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKK30KKworQGVuZAorCisj
ZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkpOworfQorCitTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KQorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICAsIG1faW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyRmlyZWQpCisjZW5kaWYKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CisgICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkKKyAgICAsIG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzKGZhbHNlKQorICAgICwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMoZmFsc2UpCisg
ICAgLCBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCgwKQorICAgICwgbV9zdGFydFRpbWUo
MCkKKyAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQorI2VuZGlmCisgICAgLCBtX2RyYXdp
bmdJbnRvTGF5ZXIoZmFsc2UpCisgICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFs
c2UpCit7CisgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6
dGhpc10pOworICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmFkb3B0TlMoW1tOU0NsYXNzRnJv
bVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdh
dGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOworCisjaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUuYWRvcHROUyhbW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhT
Y3JvbGxBbmltYXRvcjp0aGlzXSk7CisjZW5kaWYKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKQoreworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdl
dCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICBbKGlkKW1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsK
KyNlbmRpZgorfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKworI2lmICFFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHks
IHN0ZXAsIG11bHRpcGxpZXIpOworI2VuZGlmCisKKyAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJBcHBsZVNjcm9sbEFuaW1hdGlvbkVu
YWJsZWQiXSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRp
b24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAgIGlmIChncmFudWxhcml0
eSA9PSBTY3JvbGxCeVBpeGVsKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9s
bChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgZmxv
YXQgY3VycmVudFBvcyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1
cnJlbnRQb3NYIDogbV9jdXJyZW50UG9zWTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxm
bG9hdD4oc3RkOjptaW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBz
dGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMCk7CisgICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBOU1BvaW50IG5ld1BvaW50OworICAgIGlmIChbbV9zY3JvbGxBbmltYXRp
b25IZWxwZXIuZ2V0KCkgX2lzQW5pbWF0aW5nXSkgeworICAgICAgICBOU1BvaW50IHRhcmdldE9y
aWdpbiA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSB0YXJnZXRPcmlnaW5dOworICAg
ICAgICBuZXdQb2ludCA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01h
a2VQb2ludChuZXdQb3MsIHRhcmdldE9yaWdpbi55KSA6IE5TTWFrZVBvaW50KHRhcmdldE9yaWdp
bi54LCBuZXdQb3MpOworICAgIH0gZWxzZQorICAgICAgICBuZXdQb2ludCA9IG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2ludChuZXdQb3MsIG1fY3VycmVudFBv
c1kpIDogTlNNYWtlUG9pbnQobV9jdXJyZW50UG9zWCwgbmV3UG9zKTsKKworICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlci5nZXQoKSBzY3JvbGxUb1BvaW50Om5ld1BvaW50XTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIFtt
X3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07CisgICAgaW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludChvZmZzZXQpOworfQorCitmbG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjphZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgIHJldHVybiBtYXg8Zmxv
YXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
LndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworfQorCitm
bG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5l
Y2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFy
ZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgICAgIHJldHVybiBw
b3NpdGlvbjsKKworICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1f
c2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
KworICAgIGZsb2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBt
X3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48
ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVp
Z2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKworICAgIHJl
dHVybiBGbG9hdFBvaW50KG5ld1gsIG5ld1kpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9z
aXRpb24pCit7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xs
UG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CisgCisgICAgaWYgKGFkanVzdGVkUG9z
aXRpb24ueCgpID09IG1fY3VycmVudFBvc1ggJiYgYWRqdXN0ZWRQb3NpdGlvbi55KCkgPT0gbV9j
dXJyZW50UG9zWSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY3VycmVudFBvc1ggPSBh
ZGp1c3RlZFBvc2l0aW9uLngoKTsKKyAgICBtX2N1cnJlbnRQb3NZID0gYWRqdXN0ZWRQb3NpdGlv
bi55KCk7CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKQor
eworICAgIGZsb2F0IG5ld1Bvc1ggPSBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeSht
X2N1cnJlbnRQb3NYICsgZGVsdGFYKTsKKyAgICAKKyAgICBpZiAobmV3UG9zWCA9PSBtX2N1cnJl
bnRQb3NYKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50UG9zWCA9IG5ld1Bv
c1g7CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVsdGFZKQorewor
ICAgIGZsb2F0IG5ld1Bvc1kgPSBhZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShtX2N1
cnJlbnRQb3NZICsgZGVsdGFZKTsKKyAgICAKKyAgICBpZiAobmV3UG9zWSA9PSBtX2N1cnJlbnRQ
b3NZKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50UG9zWSA9IG5ld1Bvc1k7
CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCkKK3sKKyNpZiBVU0UoV0tfU0NST0xM
QkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYVNjcm9sbGVkKG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCisgICAgU2Nyb2xsQW5pbWF0b3I6Om5vdGl0eVBv
c2l0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNv
bnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5U
RVIpCisgICAgd2tDb250ZW50QXJlYVdpbGxQYWludChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFS
X1BBSU5URVIpCisgICAgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAoreworI2lmIFVTRShXS19T
Q1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNlRXhpdGVkQ29udGVudEFyZWEobV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0Cit7CisjaWYg
VVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkKK3sKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tXaWxsU3RhcnRMaXZlUmVzaXplKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKK3sKKyNpZiBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYVJlc2l6ZWQobV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisjaWYgVVNFKFdLX1NDUk9M
TEJBUl9QQUlOVEVSKQorICAgIHdrV2lsbEVuZExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpjb250ZW50QXJlYURpZFNob3coKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhRGlkU2hvdyhtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJB
Ul9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFEaWRIaWRlKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xM
QkFSX1BBSU5URVIpCisgICAgd2tEaWRCZWdpblNjcm9sbEdlc3R1cmUobV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NS
T0xMQkFSX1BBSU5URVIpCisgICAgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRl
clJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZv
clNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRl
KHBhaW50ZXIsIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpKTsKKyAgICB3a1NldFBh
aW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpLCBwYWludGVyLCBmYWxzZSk7CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJl
c2l6ZSgpKQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlciwg
MSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikK
KyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0
aXZlVGhlbWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9s
bGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBuaWwpOworICAgIHdrU2V0UGFpbnRlckZv
clBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5p
bCwgZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZEhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlO
VEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHdr
U2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG1fc2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlLmdldCgpKTsKKyAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCB0cnVlKTsKKyAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGJhcik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNp
ZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4o
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xs
YmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRl
ciwgbmlsKTsKKyAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIHRydWUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQoreworICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCA9IGZhbHNlOworCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIGlmIChz
Y3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSkKKyAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50
VGltZXIoKTsKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5p
bWF0aW9uc107CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKworc3Rh
dGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQgPSAwLjEwZjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kU3RpZmZuZXNzID0gMjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8gPSAxOworc3RhdGljIGNv
bnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2ggPSAx
MDsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kQW1wbGl0dWRlID0gMC4zMWY7CitzdGF0
aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFBlcmlvZCA9IDEuNmY7CisKK3N0YXRpYyBmbG9hdCBl
bGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9uLCBmbG9hdCBpbml0
aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQoreworICAgIGZsb2F0IGFtcGxpdHVkZSA9
IHJ1YmJlcmJhbmRBbXBsaXR1ZGU7CisgICAgZmxvYXQgcGVyaW9kID0gcnViYmVyYmFuZFBlcmlv
ZDsKKyAgICBmbG9hdCBjcml0aWNhbERhbXBlbmluZ0ZhY3RvciA9IGV4cGYoKC1lbGFwc2VkVGlt
ZSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3MpIC8gcGVyaW9kKTsKKyAgICAgICAgICAgICAKKyAgICBy
ZXR1cm4gKGluaXRpYWxQb3NpdGlvbiArICgtaW5pdGlhbFZlbG9jaXR5ICogZWxhcHNlZFRpbWUg
KiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yOworfQorCitzdGF0aWMgZmxv
YXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIGZsb2F0
IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEuMGYpOworICAgIHJl
dHVybiBkZWx0YSAvIHN0aWZmbmVzczsKK30KKworc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZv
ckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gZGVsdGEgKiBydWJiZXJi
YW5kU3RpZmZuZXNzOworfQorCitzdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkK
K3sKKyAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOworICAgIGlmIChtdWx0aXBsaWVy
IDwgMCkgeworICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlwbGllciJdOworICAg
ICAgICBpZiAobXVsdGlwbGllciA8PSAwKQorICAgICAgICAgICAgbXVsdGlwbGllciA9IDE7Cisg
ICAgfQorICAgIHJldHVybiBtdWx0aXBsaWVyOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQoreworICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisKKyAgICBpZiAo
IXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpKSB7CisgICAgICAgIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgcm91bmRhYm91dCBoYWNr
IHRvIGFsbG93IGZvcndhcmRpbmcgd2hlZWwgZXZlbnRzCisgICAgLy8gdXAgdG8gdGhlIHBhcmVu
dCBzY3JvbGxhYmxlIGFyZWEuIEl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0Cisg
ICAgLy8gdGhlIGJhc2UgY2xhc3MgaW1wbGVtZW5hdGF0aW9uIG9mIGhhbmRsZVdoZWVsRXZlbnQg
d2lsbCBub3QgYWNjZXB0IHRoZQorICAgIC8vIHdoZWVsIGV2ZW50IGlmIHRoZXJlIGlzIG5vd2hl
cmUgdG8gc2Nyb2xsLgorICAgIGlmIChmYWJzZih3aGVlbEV2ZW50LmRlbHRhWSgpKSA+PSBmYWJz
Zih3aGVlbEV2ZW50LmRlbHRhWCgpKSkgeworICAgICAgICBpZiAoIWFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZygpKSB7CisgICAgICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dCh3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSkgeworICAgICAg
ICAgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGVlbEV2ZW50LmFjY2Vw
dCgpOworCisgICAgYm9vbCBpc01vbWV0dW1TY3JvbGxFdmVudCA9ICh3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOworICAgIGlmIChtX2ln
bm9yZU1vbWVudHVtU2Nyb2xscyAmJiAoaXNNb21ldHVtU2Nyb2xsRXZlbnQgfHwgbV9zbmFwUnVi
YmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkpKSB7CisgICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKQorICAgICAgICAgICAg
bV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHNtb290aFNjcm9sbFdpdGhFdmVudCh3aGVlbEV2ZW50KTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlKQorICAgICAgICBiZWdp
blNjcm9sbEdlc3R1cmUoKTsKKyAgICBlbHNlCisgICAgICAgIGVuZFNjcm9sbEdlc3R1cmUoKTsK
K30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihm
bG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKK3sKKyAgICBGbG9hdFNpemUgbGltaXREZWx0YTsK
KyAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAgIGlmIChk
ZWx0YVkgPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCB1cC4g
IE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgdG9wCisgICAgICAgICAgICBsaW1p
dERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS55
KCkgKyArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnkoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBkb3duLiAgTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBib3R0b20KKyAgICAgICAgICAgIGxpbWl0
RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgp
IC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnkoKSkpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChkZWx0YVggIT0gMCkgeworICAgICAgICBpZiAoZGVsdGFYIDwgMCkgeworICAgICAgICAg
ICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgbGVmdC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90
IHBpbm5lZCB0byB0aGUgbGVmdAorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Nj
cm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS54KCkgKyBtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxPcmlnaW4oKS54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
V2UgYXJlIHRyeWluZyB0byBzY3JvbGwgcmlnaHQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5u
ZWQgdG8gdGhlIHJpZ2h0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xs
YWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2lu
KCkueCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKChkZWx0YVggIT0gMCB8
fCBkZWx0YVkgIT0gMCkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYgbGltaXREZWx0YS5o
ZWlnaHQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNo
aW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSgpKSB7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7
CisgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIHJldHVybiAoKCh2U2Nyb2xs
ZXIgJiYgdlNjcm9sbGVyLT5lbmFibGVkKCkpIHx8ICghaFNjcm9sbGVyIHx8ICFoU2Nyb2xsZXIt
PmVuYWJsZWQoKSkpKTsKKyAgICB9CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5Tm9uZToKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUFsbG93ZWQ6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjph
bGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3Njcm9s
bGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CisgICAgY2FzZSBTY3Jv
bGxFbGFzdGljaXR5QXV0b21hdGljOiB7CisgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxi
YXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7Cisg
ICAgICAgIHJldHVybiAoKChoU2Nyb2xsZXIgJiYgaFNjcm9sbGVyLT5lbmFibGVkKCkpIHx8ICgh
dlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkpKTsKKyAgICB9CisgICAgY2FzZSBT
Y3JvbGxFbGFzdGljaXR5Tm9uZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eUFsbG93ZWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpzbW9vdGhTY3JvbGxXaXRoRXZlbnQoUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9
IHRydWU7CisKKyAgICBmbG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgo
KTsKKyAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisK
KyAgICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJl
bW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCisg
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisKKyAgICBmbG9hdCBldmVu
dENvYWxsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC5kZWx0YVgoKTsKKyAgICBmbG9hdCBldmVu
dENvYWxsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKKworICAgIGRlbHRhWCAr
PSBldmVudENvYWxsZXNjZWREZWx0YVg7CisgICAgZGVsdGFZICs9IGV2ZW50Q29hbGxlc2NlZERl
bHRhWTsKKworICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBh
cHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQorICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZh
YnNmKGRlbHRhWCkpCisgICAgICAgIGRlbHRhWCA9IDA7CisgICAgZWxzZQorICAgICAgICBkZWx0
YVkgPSAwOworCisgICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBmYWxzZTsKKyAgICBi
b29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gZmFsc2U7CisgICAgYm9vbCBzaG91bGRTdHJl
dGNoID0gZmFsc2U7CisgICAgCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxh
YmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKworICAgIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVk
ID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOworICAgIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0
cmV0Y2hBbW91bnQuaGVpZ2h0KCk7CisKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFz
ZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOworCisgICAgLy8gSWYgd2UgYXJlIHN0YXJ0
aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNvbWUgc2V0dXAuCisgICAgaWYgKCFtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VCZWdhbiB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQpKQorICAg
ICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7CisKKyAgICBDRlRpbWVJbnRl
cnZhbCB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpIC0gbV9sYXN0TW9tZW10dW1T
Y3JvbGxUaW1lc3RhbXA7CisgICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzKSB7CisgICAgICAgIGlmIChtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVz
dGFtcCAmJiB0aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2lu
Z1RpbWVvdXQpIHsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVu
dENvYWxsZXNjZWREZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsbGVzY2VkRGVsdGFZIC8gKGZsb2F0KXRp
bWVEZWx0YSk7CisgICAgICAgICAgICBtX2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IHdo
ZWVsRXZlbnQudGltZXN0YW1wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xh
c3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7CisgICAg
ICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIGlmICghaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQgJiYgcGlubmVkSW5EaXJlY3Rpb24oZGVsdGFYLCAwKSkgeyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhl
IHZlcnRpY2FsLgorICAgICAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCAmJiAoZmFic2YoZGVs
dGFYIC8gZGVsdGFZKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChm
YWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRj
aCkgeworICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgo
bV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgICAg
ICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlz
SG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkg
aW4gdGhlIGhvcml6b250YWwuCisgICAgICAgICAgICBpZiAocGlubmVkSW5EaXJlY3Rpb24oMCwg
ZGVsdGFZKSkgeworICAgICAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCAmJiAoZmFic2YoZGVs
dGFZIC8gZGVsdGFYKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChm
YWJzZihkZWx0YVkpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRj
aCkgeworICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0
KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7CisgICAgICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERl
bHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE5vdCBzdHJldGNoaW5nIGF0IGFsbCB5ZXQuCisgICAgICAgICAgICBp
ZiAocGlubmVkSW5EaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9y
ZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0
aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHNob3VsZFN0cmV0Y2ggPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAw
KSB7CisgICAgICAgIGlmICghKHNob3VsZFN0cmV0Y2ggfHwgaXNWZXJ0aWNhbGx5U3RyZXRjaGVk
IHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSkgeworICAgICAgICAgICAgaWYgKGRlbHRhWSAh
PSAwKSB7CisgICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigp
OworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVsdGFYICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgaW1t
ZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZGVsdGFYKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSkgewor
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2FsbGVz
Y2VkRGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAh
aXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIXBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkp
IHsKKyAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisK
KyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlE
ZWx0YVgoZGVsdGFYKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25z
dHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKworICAgICAgICAgICAgICAgIGRl
bHRhWCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSAw
OworICAgICAgICAgICAgICAgIGV2ZW50Q29hbGxlc2NlZERlbHRhWSA9IDA7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKChkZWx0YVkgIT0gMCkgJiYgIWlzVmVydGljYWxseVN0cmV0Y2hlZCAmJiAh
cGlubmVkSW5EaXJlY3Rpb24oMCwgZGVsdGFZKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAq
PSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOworICAgICAgICAgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KHRydWUpOworCisgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxh
YmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBpbm5lZElu
RGlyZWN0aW9uKGV2ZW50Q29hbGxlc2NlZERlbHRhWCwgZXZlbnRDb2FsbGVzY2VkRGVsdGFZKSB8
fCAoZmFic2YoZXZlbnRDb2FsbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGxlc2NlZERl
bHRhWSkgPD0gMCkpICYmIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgc25hcFJ1YmJlckJhbmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKG1fc3RyZXRj
aFNjcm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgbV9zdHJldGNoU2Ny
b2xsRm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpICsgZGVsdGFZ
KTsKKworICAgICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0
YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVs
YXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkp
KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVh
LT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3
T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOworCisgICAgICAgICAgICBpZiAob3Jp
Z09yaWdpbiAhPSBuZXdPcmlnaW4pIHsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgICAgICAg
ICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdPcmlnaW4pOworICAgICAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzICYmIHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQpIHsKKyAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAg
ICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXN0TW9tZW10
dW1TY3JvbGxUaW1lc3RhbXAgPSAwOworICAgIH0KK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUoKQoreworICAgIGRpZEJlZ2luU2Nyb2xsR2Vz
dHVyZSgpOworCisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBt
X2luU2Nyb2xsR2VzdHVyZSA9IHRydWU7CisgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
PSBmYWxzZTsKKyAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgIG1fbGFz
dE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKKyAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBG
bG9hdFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgo
cmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOworICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVs
dGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOworCisgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRh
ID0gRmxvYXRTaXplKCk7CisgICAgCisgICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOworfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQoreworICAgIGRp
ZEVuZFNjcm9sbEdlc3R1cmUoKTsKKworICAgIHNuYXBSdWJiZXJCYW5kKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmQoKQoreworICAgIENGVGlt
ZUludGVydmFsIHRpbWVEZWx0YSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVt
VXB0aW1lXSAtIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wOworICAgIGlmIChtX2xhc3RN
b21lbXR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJv
aW5nVGltZW91dCkKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisK
KyAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZhbHNlOworCisgICAgaWYgKG1fc25hcFJ1YmJlckJh
bmRUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0VGltZSA9
IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICBtX3N0YXJ0U3Ry
ZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAg
ICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9zbmFwUnViYmVyQmFuZFRp
bWVyLnN0YXJ0UmVwZWF0aW5nKDEuMC82MC4wKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBy
b3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIHJldHVybiBudW0gPiAwID8gY2VpbGYo
bnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgZmxvYXQg
cm91bmRlZE51bSA9IHJvdW5kZihudW0pOworICAgIGlmIChmYWJzKG51bSAtIHJvdW5kZWROdW0p
IDwgMC4xMjUpCisgICAgICAgIG51bSA9IHJvdW5kZWROdW07CisKKyAgICByZXR1cm4gcm91bmRU
b3dhcmRaZXJvKG51bSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25h
cFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+KikK
K3sKKyAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50
dW1TY3JvbGxzKSB7CisgICAgICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtOU0RhdGUg
dGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOworCisgICAgICAg
IGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUoKSkgeworICAgICAgICAgICAgbV9zdGFy
dFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAg
ICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAorICAgICAgICAgICAg
ICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAgICAgbV9zdHJl
dGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7CisgICAgICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAg
ICAgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICAg
ICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gKG1fc2Nyb2xs
YWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBtX3N0YXJ0U3RyZXRjaDsKKyAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0gbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgICAgICAgICAvLyBKdXN0IGxp
a2Ugbm9ybWFsIHNjcm9sbGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJhbmRpbmcKKyAgICAg
ICAgICAgIGlmIChmYWJzZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFic2YobV9vcmln
VmVsb2NpdHkud2lkdGgoKSkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lk
dGgoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhv
cml6b250YWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5Cisg
ICAgICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgICAgIGlmICghaFNjcm9sbGVyIHx8ICFoU2Nyb2xs
ZXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgw
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgdmVydGlj
YWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5CisgICAgICAg
ICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7CisgICAgICAgICAgICBpZiAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVyLT5lbmFi
bGVkKCkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0SGVpZ2h0KDApOworICAg
ICAgICB9CisKKyAgICAgICAgRmxvYXRQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dh
cmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAt
bV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRpbWVEZWx0YSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9y
VGltZURlbHRhKG1fc3RhcnRTdHJldGNoLmhlaWdodCgpLCAtbV9vcmlnVmVsb2NpdHkuaGVpZ2h0
KCksIChmbG9hdCl0aW1lRGVsdGEpKSk7CisKKyAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+
PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IG5l
d09yaWdpbiA9IG1fb3JpZ09yaWdpbiArIGRlbHRhOworCisgICAgICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAg
ICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7CisgICAgICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVl
KTsKKworICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVh
LT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRj
aC53aWR0aCgpKSk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQo
cmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobV9vcmlnT3Jp
Z2luKTsKKworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+ZGlkQ29tcGxldGVSdWJiZXJC
YW5kKHJvdW5kZWRJbnRTaXplKG1fc3RhcnRTdHJldGNoKSk7CisKKyAgICAgICAgICAgIG1fc25h
cFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N0YXJ0VGltZSA9
IDA7CisgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgICAgICAg
ICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgbV9vcmlnVmVsb2Np
dHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fc3Rh
cnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOworICAgICAg
ICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYg
VVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXIuc3RhcnRPbmVTaG90KDAuMSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5pc0FjdGl2ZSgpOworfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCkKK3sKKyAg
ICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVy
PFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+KikKK3sKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJG
b3JjZUZsYXNoU2Nyb2xsZXJzKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwor
fQorI2VuZGlmCisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCit7CisgICAgSW50
UmVjdCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzY3JvbGxlclRodW1iOworICAgIGlmIChTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxiYXIoKSkKKyAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxi
YXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOworCisgICAgaWYgKHJl
Y3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3QgPSByZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCmluZGV4IDBh
YWY0NDFmNzg5NjAzMDM3NWI0N2Y2Y2M0MDdkMWVhZGU4YmU2YmEuLjVjMDYxOGY5MGQ1NTE3NmEw
YmY0MGZlZTJiNWUwYjJlNjU0MGQwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UG9pbnQuaApAQCAtMzgsNyArMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR1BvaW50
IENHUG9pbnQ7CiAjZW5kaWYKIAogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIE9TKERBUldJTikK
ICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTKQorI2lmIE9TKERBUldJTikgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMpCiAgICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgTlNQb2ludCYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJh
dG9yIE5TUG9pbnQoKSBjb25zdDsKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>