<?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>18375</bug_id>
          
          <creation_ts>2008-04-08 21:52:41 -0700</creation_ts>
          <short_desc>Make SVG animation work</short_desc>
          <delta_ts>2008-04-25 12:40:42 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/Graphics/SVG/Test/20061213/htmlEmbedHarness/full-animate-elem-02-t.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>ml</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit</cc>
    
    <cc>webmaster</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>76676</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-08 21:52:41 -0700</bug_when>
    <thetext>...where &quot;work&quot; is defined as passing reasonable amount of SVG animation test suite so that remaining issues can be tracked as individual bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76679</commentid>
    <comment_count>1</comment_count>
      <attachid>20419</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-08 22:06:58 -0700</bug_when>
    <thetext>Created attachment 20419
Implement (most of) it

        It does
        - Full SMIL interval timing model including syncbase and event base timing (the hard part).
        - CSS and XML attribute animation.
        - Linear, discrete and spline calcModes.
        - Values animation with keyTimes and keySplines.
        - Link activated animations.
        - Pretty good support for &lt;animate&gt; and &lt;set&gt; animations
        - Basic support for &lt;animateColor&gt;, &lt;animateMotion&gt; and &lt;animateTransform&gt;.
        
        This passes some 35 of the 56 tests in W3C SVG animation test suite, a bunch more
        with some subtest failures.
        
        What is still missing
        - Additive animation with multiple animations operating on the same property. This is a
          major architectural feature in animation code. It shouldn&apos;t be too hard to add.
        - Only &lt;animate&gt; implements accumulate.
        - &lt;animateMotion&gt; does not do paths, keypoints, rotate.
        - &lt;animateTransform&gt; does not work with text, some transforms are broken.
        - calcMode paced is missing.
        - repeat, beginEvent, endEvent are missing.
        - accesskey() is missing.
        - JS does not see correct values for baseVal/animVal, changing values that are being
          animted for a script produces wrong results. Not maintaining separate presentation 
          values for XML attributes is an architectural problem in our SVG code.
        - Some other stuff I forgot or do not know about.

There are three new classes:

- SMILTime which implements time math including special &quot;indefinite&quot; and &quot;unresolved&quot; values.
- SMILTimeContainer which runs the clock and manages animations (&quot;time container&quot; is a SMIL term)
- SMILTimingElement, an abstract class which inherits SVGElement and is inherited by SVGAnimationElement. It implements SMIL timing model semantics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76680</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-08 22:09:37 -0700</bug_when>
    <thetext>Same text, hopefully more readable:

It does
- Full SMIL interval timing model including syncbase and event base timing (the hard part).
- CSS and XML attribute animation.
- Linear, discrete and spline calcModes.
- Values animation with keyTimes and keySplines.
- Link activated animations.
- Pretty good support for &lt;animate&gt; and &lt;set&gt; animations
- Basic support for &lt;animateColor&gt;, &lt;animateMotion&gt; and &lt;animateTransform&gt;.

This passes some 35 of the 56 tests in W3C SVG animation test suite, a bunch more
with some subtest failures.

What is still missing:
- Additive animation with multiple animations operating on the same property. This is a major architectural feature in animation code. It shouldn&apos;t be too hard to add.
- Only &lt;animate&gt; implements accumulate.
- &lt;animateMotion&gt; does not do paths, keypoints, rotate.
- &lt;animateTransform&gt; does not work with text, some transforms are broken.
- calcMode paced is missing.
- repeat, beginEvent, endEvent are missing.
- accesskey() is missing.
- JS does not see correct values for baseVal/animVal, changing values that are being animted for a script produces wrong results. Not maintaining separate presentation values for XML attributes is an architectural problem in our SVG code.
- Some other stuff I forgot or do not know about.

- SMILTime which implements time math including special &quot;indefinite&quot; and &quot;unresolved&quot; values.
- SMILTimeContainer which runs the clock and manages animations (&quot;time container&quot; is a SMIL term)
- SMILTimingElement, an abstract class which inherits SVGElement and is inherited by SVGAnimationElement. It implements SMIL timing model semantics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76685</commentid>
    <comment_count>3</comment_count>
      <attachid>20419</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-08 22:56:43 -0700</bug_when>
    <thetext>Comment on attachment 20419
Implement (most of) it

First run through it (feel to tired for a full review atm :( ), it looks mostly fine, a few comments though:

In +void SVGAnimateElement::applyAnimatedValueToElement(unsigned repeat)

&quot;valueToApple&quot; seems like it may be a tyop :D

I suspect parseNumberValueAndUnit will parse &quot;100 px/%&quot; etc which seems bogus

Adding commented out code in SVGAnimateMotionElement::parseMappedAttributes seems like an accident, and isn&apos;t commented itself so i have no idea why :(

Tyop in m_baseIndexInTranformList -- missing &apos;s&apos;

Are you sure about the comment in SVGElement::updateStyleAttributeIfNeeded? i&apos;ve seen plenty of examples of people using &quot;style&quot; attributes in svg, it seems odd for it to not be accessible form the dom...

I&apos;m not happy with doubleSort/sortTimeList.  doubleSort makes an assumption that each m_beginTime will always be the first member of SMILTime which seems really icky...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76702</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-04-09 03:48:39 -0700</bug_when>
    <thetext>Hey Antti,

had a quick look, unfortunately not much time atm, but I&apos;m impressed! Excellent work!

I just want to comment on one issue, as it&apos;s related to the previous SVG AnimProperty Liveness work:

&gt; - JS does not see correct values for baseVal/animVal, changing values that are
&gt; being animted for a script produces wrong results. Not maintaining separate
&gt; presentation values for XML attributes is an architectural problem in our SVG
&gt; code.

The architecture for handling these updates is basically existant. That&apos;s part of the animated_property_* mystery (start/stop##Property functions). The idea is that &lt;animate&gt; has to mark a certain property (if it animates an XML prop) as start()ed. The underlying value is cached in a HashMap in the SVGDocumentExtensions, and all calls to &apos;set##Property&apos; only influence the value residing in the HashMap, but not the actual property itself. This assures that you can still call &apos;setAttribute(...)&apos; from JS, while an animation is running. You may want to have a look at the concept. It&apos;s old and Eric &amp; me came up with this more than a year ago, while planning the future animation framework.

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76743</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-09 10:46:59 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; The architecture for handling these updates is basically existant. That&apos;s part
&gt; of the animated_property_* mystery (start/stop##Property functions). The idea
&gt; is that &lt;animate&gt; has to mark a certain property (if it animates an XML prop)
&gt; as start()ed. The underlying value is cached in a HashMap in the
&gt; SVGDocumentExtensions, and all calls to &apos;set##Property&apos; only influence the
&gt; value residing in the HashMap, but not the actual property itself. This assures
&gt; that you can still call &apos;setAttribute(...)&apos; from JS, while an animation is
&gt; running. You may want to have a look at the concept. It&apos;s old and Eric &amp; me
&gt; came up with this more than a year ago, while planning the future animation
&gt; framework.

Yeah, I know there is code there but I can&apos;t figure out if it does the right thing and indeed how it is supposed to be used. I think someone with better understanding of that code will have to wire it together.

Note that there are two separate problems here with different solution. One for animated CSS properties and another for XML attributes. 

For CSS properties the solution is simple and the spec tells exactly what to do. You write your animated values to the override stylesheet and the base value is what you get with getComputedStyle() (without override style sheet). Since WebCore does not support override stylesheets, for now the values are written to inline stylesheet instead. Since many SVG attributes are mapped to CSS this applies to them as well. Pure XML attributes are the problematic ones.

&gt; 
&gt; Greetings,
&gt; Niko
&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77090</commentid>
    <comment_count>6</comment_count>
      <attachid>20438</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-09 12:00:22 -0700</bug_when>
    <thetext>Created attachment 20438
Updated patch

Olliej&apos;s comments and some other tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77096</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-09 13:41:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; In +void SVGAnimateElement::applyAnimatedValueToElement(unsigned repeat)
&gt; 
&gt; &quot;valueToApple&quot; seems like it may be a tyop :D

Lol, fixed.

&gt; I suspect parseNumberValueAndUnit will parse &quot;100 px/%&quot; etc which seems bogus

Added check for that.

&gt; Adding commented out code in SVGAnimateMotionElement::parseMappedAttributes
&gt; seems like an accident, and isn&apos;t commented itself so i have no idea why :(

Replaced with comment.

&gt; Tyop in m_baseIndexInTranformList -- missing &apos;s&apos;

Fixed.

&gt; Are you sure about the comment in SVGElement::updateStyleAttributeIfNeeded?
&gt; i&apos;ve seen plenty of examples of people using &quot;style&quot; attributes in svg, it
&gt; seems odd for it to not be accessible form the dom...

Yeah, that was a bad idea Reverted that part.

&gt; I&apos;m not happy with doubleSort/sortTimeList.  doubleSort makes an assumption
&gt; that each m_beginTime will always be the first member of SMILTime which seems
&gt; really icky...

Yeah, that was cheesy. A leftover from before I switched to SMILTime, now fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77176</commentid>
    <comment_count>8</comment_count>
      <attachid>20459</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-10 11:39:40 -0700</bug_when>
    <thetext>Created attachment 20459
another updated patch

Code cleanups and some more comments. One bug fix (base value string is compared to null instead of empty in SVGAnimationElement::unapplyAnimation() so that empty base value can still be restored) to make test 40 pass completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77225</commentid>
    <comment_count>9</comment_count>
      <attachid>20459</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-04-10 18:29:47 -0700</bug_when>
    <thetext>Comment on attachment 20459
another updated patch

So I&apos;m not sure it even makes sense to do any kind of real hard review of this patch.  Obviously this work is incomplete.

I did a cursory review anyway:


parseNumberValueAndUnit
the .endsWith stuff is about as inefficient as possible. :)  Normally we use hash tables when you have more than 3-4 values.  In this case, we&apos;re re-walking the string each time. :)

  if (isAdditive()) {
 97             valueToApply = ColorDistance::addColorsAndClamp(base, m_animatedColor).name();
 98         } else

no { } needed.

I&apos;m in general not a big fan of shadowing:
AnimationMode animationMode = this-&gt;animationMode();


m_cachedMax = -1.;

-1 should have some name here.  The comparisons with 0 should also use a variable of this same name.  

if (m_cachedMax.isValid())
    return m_cachedMax;


You might want to add
using SVGNames; at the top of SMILTimingElement.cpp


I don&apos;t like your use of copying parsers.  We&apos;ve spent a lot of time in the last 3 years removing copying parsers and replacing them with scaning parsers.  I agree with you that the rest of this work is much more important than that small issue however.


All in all, I&apos;m very very very very glad to see this patch land.  I really hope that you plan to push this through to completion.  This is the 3rd animation system we&apos;ve seen, and they&apos;ve all been partial. :)  Hopefully this is the last one we&apos;ll see.

We talked a lot over IRC.  You said you&apos;d land the UnitBezier stuff separately.  I don&apos;t need to see the updated patch.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77258</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-11 00:12:01 -0700</bug_when>
    <thetext>Thanks for the review!

Sending        WebCore/ChangeLog
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/dom/Document.cpp
Sending        WebCore/history/CachedPage.cpp
Sending        WebCore/svg/SVGAElement.cpp
Sending        WebCore/svg/SVGAnimateColorElement.cpp
Sending        WebCore/svg/SVGAnimateColorElement.h
Sending        WebCore/svg/SVGAnimateElement.cpp
Sending        WebCore/svg/SVGAnimateElement.h
Sending        WebCore/svg/SVGAnimateMotionElement.cpp
Sending        WebCore/svg/SVGAnimateMotionElement.h
Sending        WebCore/svg/SVGAnimateTransformElement.cpp
Sending        WebCore/svg/SVGAnimateTransformElement.h
Sending        WebCore/svg/SVGAnimationElement.cpp
Sending        WebCore/svg/SVGAnimationElement.h
Sending        WebCore/svg/SVGDocumentExtensions.cpp
Sending        WebCore/svg/SVGElement.cpp
Sending        WebCore/svg/SVGSVGElement.cpp
Sending        WebCore/svg/SVGSVGElement.h
Sending        WebCore/svg/SVGSetElement.cpp
Sending        WebCore/svg/SVGSetElement.h
Deleting       WebCore/svg/SVGTimer.cpp
Deleting       WebCore/svg/SVGTimer.h
Sending        WebCore/svg/SVGUseElement.cpp
Deleting       WebCore/svg/TimeScheduler.cpp
Deleting       WebCore/svg/TimeScheduler.h
Adding         WebCore/svg/animation
Adding         WebCore/svg/animation/SMILTime.cpp
Adding         WebCore/svg/animation/SMILTime.h
Adding         WebCore/svg/animation/SMILTimeContainer.cpp
Adding         WebCore/svg/animation/SMILTimeContainer.h
Adding         WebCore/svg/animation/SVGSMILElement.cpp
Adding         WebCore/svg/animation/SVGSMILElement.h
Transmitting file data ...............................
Committed revision 31801.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78932</commentid>
    <comment_count>11</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2008-04-25 12:40:12 -0700</bug_when>
    <thetext>*** Bug 18187 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78934</commentid>
    <comment_count>12</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2008-04-25 12:40:42 -0700</bug_when>
    <thetext>*** Bug 18188 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20419</attachid>
            <date>2008-04-08 22:06:58 -0700</date>
            <delta_ts>2008-04-09 12:00:22 -0700</delta_ts>
            <desc>Implement (most of) it</desc>
            <filename>svg-animation-4.patch</filename>
            <type>text/plain</type>
            <size>192405</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTc0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjgyIEBACisyMDA4LTA0LTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWRvIFNWRyBhbmltYXRpb24gc3VwcG9ydC4KKyAgICAgICAgCisgICAgICAgIEl0IGRvZXMKKyAg
ICAgICAgLSBGdWxsIFNNSUwgaW50ZXJ2YWwgdGltaW5nIG1vZGVsIGluY2x1ZGluZyBzeW5jYmFz
ZSBhbmQgZXZlbnQgYmFzZSB0aW1pbmcgKHRoZSBoYXJkIHBhcnQpLgorICAgICAgICAtIENTUyBh
bmQgWE1MIGF0dHJpYnV0ZSBhbmltYXRpb24uCisgICAgICAgIC0gTGluZWFyLCBkaXNjcmV0ZSBh
bmQgc3BsaW5lIGNhbGNNb2Rlcy4KKyAgICAgICAgLSBWYWx1ZXMgYW5pbWF0aW9uIHdpdGgga2V5
VGltZXMgYW5kIGtleVNwbGluZXMuCisgICAgICAgIC0gTGluayBhY3RpdmF0ZWQgYW5pbWF0aW9u
cy4KKyAgICAgICAgLSBQcmV0dHkgZ29vZCBzdXBwb3J0IGZvciA8YW5pbWF0ZT4gYW5kIDxzZXQ+
IGFuaW1hdGlvbnMKKyAgICAgICAgLSBCYXNpYyBzdXBwb3J0IGZvciA8YW5pbWF0ZUNvbG9yPiwg
PGFuaW1hdGVNb3Rpb24+IGFuZCA8YW5pbWF0ZVRyYW5zZm9ybT4uCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhc3NlcyBzb21lIDM1IG9mIHRoZSA1NiB0ZXN0cyBpbiBXM0MgU1ZHIGFuaW1hdGlv
biB0ZXN0IHN1aXRlLCBhIGJ1bmNoIG1vcmUKKyAgICAgICAgd2l0aCBzb21lIHN1YnRlc3QgZmFp
bHVyZXMuCisgICAgICAgIAorICAgICAgICBXaGF0IGlzIHN0aWxsIG1pc3NpbmcKKyAgICAgICAg
LSBBZGRpdGl2ZSBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBhbmltYXRpb25zIG9wZXJhdGluZyBv
biB0aGUgc2FtZSBwcm9wZXJ0eS4gVGhpcyBpcyBhCisgICAgICAgICAgbWFqb3IgYXJjaGl0ZWN0
dXJhbCBmZWF0dXJlIGluIGFuaW1hdGlvbiBjb2RlLiBJdCBzaG91bGRuJ3QgYmUgdG9vIGhhcmQg
dG8gYWRkLgorICAgICAgICAtIE9ubHkgPGFuaW1hdGU+IGltcGxlbWVudHMgYWNjdW11bGF0ZS4K
KyAgICAgICAgLSA8YW5pbWF0ZU1vdGlvbj4gZG9lcyBub3QgZG8gcGF0aHMsIGtleXBvaW50cywg
cm90YXRlLgorICAgICAgICAtIDxhbmltYXRlVHJhbnNmb3JtPiBkb2VzIG5vdCB3b3JrIHdpdGgg
dGV4dCwgc29tZSB0cmFuc2Zvcm1zIGFyZSBicm9rZW4uCisgICAgICAgIC0gY2FsY01vZGUgcGFj
ZWQgaXMgbWlzc2luZy4KKyAgICAgICAgLSByZXBlYXQsIGJlZ2luRXZlbnQsIGVuZEV2ZW50IGFy
ZSBtaXNzaW5nLgorICAgICAgICAtIGFjY2Vzc2tleSgpIGlzIG1pc3NpbmcuCisgICAgICAgIC0g
SlMgZG9lcyBub3Qgc2VlIGNvcnJlY3QgdmFsdWVzIGZvciBiYXNlVmFsL2FuaW1WYWwsIGNoYW5n
aW5nIHZhbHVlcyB0aGF0IGFyZSBiZWluZworICAgICAgICAgIGFuaW10ZWQgZm9yIGEgc2NyaXB0
IHByb2R1Y2VzIHdyb25nIHJlc3VsdHMuIE5vdCBtYWludGFpbmluZyBzZXBhcmF0ZSBwcmVzZW50
YXRpb24gCisgICAgICAgICAgdmFsdWVzIGZvciBYTUwgYXR0cmlidXRlcyBpcyBhbiBhcmNoaXRl
Y3R1cmFsIHByb2JsZW0gaW4gb3VyIFNWRyBjb2RlLgorICAgICAgICAtIFNvbWUgb3RoZXIgc3R1
ZmYgSSBmb3Jnb3Qgb3IgZG8gbm90IGtub3cgYWJvdXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UGFnZTo6Q2FjaGVkUGFnZSk6CisgICAgICAgIAorICAgICAgICBVc2UgY2FjaGUgbm90aWZpY2F0
aW9uIG1lY2hhbmlzbSB0byBzdGFydC9zdG9wIGFuaW1hdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAqIHBhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgICogc3ZnL0N1cnZlRGF0
YS5oOiBBZGRlZC4KKyAgICAgICAgKEN1cnZlRGF0YTo6Q3VydmVEYXRhKToKKyAgICAgICAgKEN1
cnZlRGF0YTo6c2FtcGxlQ3VydmVYKToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVZ
KToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVEZXJpdmF0aXZlWCk6CisgICAgICAg
IChDdXJ2ZURhdGE6OnNvbHZlQ3VydmVYKToKKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RydWN0
IHdhcyBpbiBwYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwLCBtb3ZlZCB0byBhIGhlYWRlciBz
byBpdAorICAgICAgICBjYW4gYmUgdXNlZCBmcm9tIFNWRyBhbmltYXRpb24gY29kZSB0b28uCisg
ICAgCisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgCisgICAgICAgIFN0YXJ0
IHRhcmdldCBhbmltYXRpb24gb24gbGluayBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlQ29sb3JFbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc0NvbG9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
RWxlbWVudDo6KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9u
RWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxj
dWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9y
bVZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjpTVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlS2V5VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxp
bmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0
U3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEN1
cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFNp
bXBsZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJl
Z2luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpiZWdp
bkVsZW1lbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1l
bnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25N
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGNNb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpieVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWRkaXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVJc0NTUyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUJhc2VW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzb2x2ZUVwc2lsb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50
ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dW5hcHBseUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRlZEFj
dGl2ZUludGVydmFsKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6KToKKyAgICAgICAgCisgICAgICAg
IFRoaXMgaXMgcHJldHR5IG11Y2ggYSBjb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBTVkdBbmltYXRp
b25FbGVtZW50LiBUaW1pbmcgcmVsYXRlZCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdhcyByZWZh
Y3RvcmVkIHRvIFNNSUxUaW1pbmdFbGVtZW50IGNsYXNzIHRoYXQgdGhpcyBjbGFzcyBub3cgaW5o
ZXJpdHMuCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFuaW1hdGlv
bnMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIAorICAgICAgICBXZSBuZWVkIHRv
IHJlYWNoIHRoZSA8c3ZnPiBlbGVtZW50IGZyb20gPHVzZT4gdG9vLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQpOgor
ICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpwYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6dW5wYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU1ZHRWxlbWVudDo6YW5pbWF0aW9uc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTVkdFbGVtZW50OjpnZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdF
bGVtZW50Ojp3aWxsU2F2ZVRvQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6d2lsbFJlc3RvcmVGcm9tQ2FjaGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp0aW1lQ29udGFpbmVyKToKKyAgICAg
ICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVt
ZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NldEVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTZXRFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHU2V0RWxlbWVudC5oOgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHVGltZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN2Zy9TVkdUaW1lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2
Zy9UaW1lU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvVGltZVNjaGVkdWxl
ci5oOiBSZW1vdmVkLgorICAgICAgICAKKyAgICAgICAgUmVwbGFjZWQgdGhlc2Ugd2l0aCBTTUlM
VGltZUNvbnRhaW5lciBjbGFzcy4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCk6CisgICAgICAgIAorICAgICAgICBCdWcgZml4IHRvIHByZXZlbnQgY3Jhc2hlcyBpbiBh
bmltYXRpb25zIHRlc3RzIHVzaW5nIDx1c2U+LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9uOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcispOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3ItKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjpT
TUlMVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dW5yZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjp2YWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aXNGaW5pdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWU6OmlzSW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6
aXNVbnJlc29sdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj4pOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPj0p
OgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjptYXgp
OgorICAgICAgICAoV2ViQ29yZTo6bWluKToKKyAgICAgICAgCisgICAgICAgIEEgZmxvYXRpbmcg
cG9pbnQgbnVtYmVyIHdpdGggc3BlY2lhbCB2YWx1ZXMgImluZGVmaW5pdGUiIGFuZCAidW5yZXNv
bHZlZCIuCisgICAgICAgIAorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpTTUlM
VGltZUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2No
ZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNNSUxUaW1lQ29udGFpbmVyOjppc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltZUNvbnRhaW5lcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWlu
ZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpyZXN1bWUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAq
IHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaDogQWRkZWQuCisgICAgICAgIAorICAg
ICAgICBNYW5hZ2VzIHRoZSBjbG9jayBhbmQga2VlcHMgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBhbmlt
YXRpb25zLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1pbmdFbGVt
ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVy
OjpDb25kaXRpb25FdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmRpdGlvbkV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdF
bGVtZW50OjpDb25kaXRpb246OkNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
aW5nRWxlbWVudDo6U01JTFRpbWluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWluZ0VsZW1lbnQ6On5TTUlMVGltaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltaW5nRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWluZ0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VPZmZzZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VDbG9ja1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRvdWJsZVNvcnQpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFRpbWVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUNvbmRpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6aXNUaW1pbmdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUJlZ2luT3JFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc2NoZWR1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnRhcmdldEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmVsYXBzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWluZ0VsZW1lbnQ6OmZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6
OnhsaW5rSHJlZik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6ZHVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXBlYXREdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlcGVhdENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjptYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltaW5nRWxlbWVudDo6bWluVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWlu
Z0VsZW1lbnQ6OnNpbXBsZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdF
bGVtZW50OjphZGRCZWdpblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1l
bnQ6OmFkZEVuZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZp
bmRJbnN0YW5jZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJl
cGVhdGluZ0R1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50Ojpy
ZXNvbHZlQWN0aXZlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50Ojpy
ZXNvbHZlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJl
c29sdmVGaXJzdEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50
OjpyZXNvbHZlTmV4dEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVt
ZW50OjpuZXh0UHJvZ3Jlc3NUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVt
ZW50OjpiZWdpbkxpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVt
ZW50OjplbmRMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVu
dDo6Y2hlY2tSZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50Ojpj
YWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNN
SUxUaW1pbmdFbGVtZW50OjpjYWxjdWxhdGVOZXh0UHJvZ3Jlc3NUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpkZXRlcm1pbmVBY3RpdmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWluZ0VsZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlVGltZXNG
cm9tU3luY2Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmFkZFRp
bWVEZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlbW92
ZVRpbWVEZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6Omhh
bmRsZUNvbmRpdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50
OjpiZWdpbkJ5TGlua0FjdGl2YXRpb24pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRp
bWluZ0VsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVu
dDo6dGltZUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6Q29uZGl0aW9uOjopOgorICAgICAgICAK
KyAgICAgICAgVGhpcyBhYnN0cmFjdCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBTTUlMIHRpbWluZyBt
b2RlbC4gQXMgYW4gb3V0cHV0IGl0IHByb2R1Y2VzIGNhbGxzCisgICAgICAgIHRvIHRoZXNlIHZp
cnR1YWwgZnVuY3Rpb25zOgorICAgICAgICAKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFy
dGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlB
bmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KSA9IDA7CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgdW5hcHBseUFuaW1hdGlvbigpID0gMDsKKyAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBlbmRlZEFjdGl2ZUludGVydmFsKCkgPSAwOworCiAyMDA4LTA0LTA4ICBDaHJpc3Rp
YW4gUGVyc2NoICA8Y2hwZUBnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxwIFRv
a2VyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTMxNTYsMTAgKzMxNTYsNiBAQAogCQlCMjhDNkEyODBEMDBD
NDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyog
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFB
NCAvKiBTVkdJbWFnZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjhDNkEyMDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIu
Y3BwICovOyB9OwogCQlCMjhDNkEyQTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTIx
MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5oICovOyB9OwotCQlCMjhDNkEyQjBE
MDBDNDQ4MDAzMzRBQTQgLyogU1ZHVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZBMjIwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVy
LmNwcCAqLzsgfTsKLQkJQjI4QzZBMkMwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkEyMzBEMDBD
NDQ4MDAzMzRBQTQgLyogU1ZHVGltZXIuaCAqLzsgfTsKLQkJQjI4QzZBMkQwRDAwQzQ0ODAwMzM0
QUE0IC8qIFRpbWVTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI4QzZBMjQwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIu
Y3BwICovOyB9OwotCQlCMjhDNkEyRTBEMDBDNDQ4MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZBMjUw
RDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIuaCAqLzsgfTsKIAkJQjI5N0JDNzAwQjND
MTRDRjAwNDVBNTkwIC8qIEpTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI5N0JDNkYwQjNDMTRDRjAwNDVBNTkw
IC8qIEpTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwICovOyB9OwogCQlCMkEwMTVBODBBRjZDRDUz
MDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGlj
c0NvbnRleHQuY3BwICovOyB9OwogCQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4OTYsNiArMzg5Miwx
MyBAQAogCQlFNDQ2MTQzQzBDRDY4OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIw
Q0JGQjZFMDAwQUYyRUNFIC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0
NTEwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBS
ZW5kZXJWaWRlby5jcHAgKi87IH07CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5k
ZXJWaWRlby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0NkU5
NzhEMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZFOTc4NzBEQUFENjUzMDA3MUU4OTQgLyogU01J
TFRpbWUuY3BwICovOyB9OworCQlFNDZFOTc4RTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5Nzg4
MERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZS5oICovOyB9OworCQlFNDZFOTc4RjBEQUFENjUz
MDA3MUU4OTQgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2RTk3ODkwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxU
aW1lQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJRTQ2RTk3OTAwREFBRDY1MzAwNzFFODk0IC8qIFNN
SUxUaW1lQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDZFOTc4QTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWVDb250YWluZXIuaCAq
LzsgfTsKKwkJRTQ2RTk3OTEwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5NzhC
MERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltaW5nRWxlbWVudC5jcHAgKi87IH07CisJCUU0NkU5
NzkyMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2RTk3OEMwREFBRDY1MzAwNzFFODk0
IC8qIFNNSUxUaW1pbmdFbGVtZW50LmggKi87IH07CisJCUU0NkU5RUIyMERBQzdDNjAwMDcxRTg5
NCAvKiBDdXJ2ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NkU5RUIxMERBQzdDNjAwMDcxRTg5NCAvKiBDdXJ2ZURhdGEuaCAqLzsgfTsKIAkJ
RTQ5NjI2QzIwRDgwRDk0ODAwRTM0MDVDIC8qIFByZWxvYWRTY2FubmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUwMEQ3NTQyRjAwMEY5
Njg2OSAvKiBQcmVsb2FkU2Nhbm5lci5jcHAgKi87IH07CiAJCUU0OTYyNkMzMEQ4MEQ5NDkwMEUz
NDA1QyAvKiBQcmVsb2FkU2Nhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRENEFCRTEwRDc1NDJGMTAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVy
LmggKi87IH07CiAJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBD
Rjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovOyB9OwpAQCAtODE1MCw2ICs4MTUz
LDEzIEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5n
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUaW1lUmFuZ2Vz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFE
QTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTk3ODcwREFB
RDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNNSUxUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2
RTk3ODgwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNNSUxUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
NkU5Nzg5MERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTTUlMVGltZUNvbnRhaW5lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NkU5NzhBMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlM
VGltZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTTUlMVGlt
ZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDZFOTc4QjBEQUFE
NjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU01JTFRpbWluZ0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNDZFOTc4QzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU01JTFRpbWluZ0VsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTlFQjEwREFDN0M2MDAwNzFFODk0
IC8qIEN1cnZlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXJ2ZURh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMDEwQ0JGOEVBQTAwQUYy
RUNFIC8qIFByb2dyZXNzRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QjQxRTAyMENCRjhFQUEwMEFGMkVDRSAvKiBQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRCNDFFMDMwQ0JGOEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFByb2dyZXNzRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTEwNTMsOSArMTEwNjMsMTEgQEAKIAkJQjIyMjc3Q0EwRDAwQkYxRTAw
NzFCNzgyIC8qIHN2ZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJRTQ2RTk3ODYwREFBRDYxQjAwNzFFODk0IC8qIGFuaW1hdGlvbiAqLywKIAkJCQlCMjU1
OTg4NjBEMDBEOEI4MDBCQjgyNUMgLyogZ3JhcGhpY3MgKi8sCiAJCQkJQjIyMjc3Q0IwRDAwQkYx
RjAwNzFCNzgyIC8qIENvbG9yRGlzdGFuY2UuY3BwICovLAogCQkJCUIyMjI3N0NDMEQwMEJGMUYw
MDcxQjc4MiAvKiBDb2xvckRpc3RhbmNlLmggKi8sCisJCQkJRTQ2RTlFQjEwREFDN0M2MDAwNzFF
ODk0IC8qIEN1cnZlRGF0YS5oICovLAogCQkJCUU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBF
bGVtZW50VGltZUNvbnRyb2wuaCAqLywKIAkJCQlFNDE1RjEwQzBEOUEwNTg3MDAzM0NFOTcgLyog
RWxlbWVudFRpbWVDb250cm9sLmlkbCAqLywKIAkJCQlCMjIyNzdDRDBEMDBCRjFGMDA3MUI3ODIg
LyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi8sCkBAIC0xMjMwOSw2ICsxMjMyMSwxOSBAQAogCQkJ
dGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQlFNDZFOTc4NjBEQUFENjFC
MDA3MUU4OTQgLyogYW5pbWF0aW9uICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQlFNDZFOTc4NzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuY3BwICov
LAorCQkJCUU0NkU5Nzg4MERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZS5oICovLAorCQkJCUU0
NkU5Nzg5MERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8sCisJCQkJ
RTQ2RTk3OEEwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmggKi8sCisJCQkJ
RTQ2RTk3OEIwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNwcCAqLywKKwkJ
CQlFNDZFOTc4QzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuaCAqLywKKwkJ
CSk7CisJCQlwYXRoID0gYW5pbWF0aW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJRUQ1MDFEQzkwQjI0OUYzOTAwQUUxOEQ5IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNDQ3NSw3ICsxNDUwMCw2IEBACiAJCQkJQjIy
MjdBQ0IwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0FDRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBhdGhFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0FEMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI4QzZBMkMwRDAwQzQ0ODAwMzM0
QUE0IC8qIFNWR1RpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FENDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHVGl0bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FENzBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0FERDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTQ1NDgsNyArMTQ1NzIsNiBAQAogCQkJCUIyQzNEQTRCMEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MURGNkQ3RTBCOTJBMTZEMDBD
MkRDODUgLyogVGhyZWFkQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0IwMENENjMz
MTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjhDNkEyRTBE
MDBDNDQ4MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMw
NUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NG
QkFFODBCNTE1MkVEMDAwMUYxRDcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTRGRTczNzBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAg
LTE0NzUyLDYgKzE0Nzc1LDkgQEAKIAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQxNUYxODQwRDlBMUE4MzAwMzNDRTk3IC8q
IEVsZW1lbnRUaW1lQ29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRkJGMkIwRDlBRjA0
NzAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ2RTk3
OEUwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZF
OTc5MDBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCUU0NkU5NzkyMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltaW5nRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzdBQ0NFNDIwREEyOTgwRjAwODlFNjAyIC8qIEZvbnRSZW5kZXJp
bmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcgLyog
U3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0
MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ3NTksNiArMTQ3ODUs
NyBAQAogCQkJCTUxRTBCQjM4MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzUzQzVGNTBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMjcyRDg0MERBOTgwMDkwMDg0NEUyRiAvKiBPcmlnaW5TdG9yYWdl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZFOUVCMjBEQUM3QzYwMDA3MUU4OTQgLyogQ3VydmVE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2MTU4LDcgKzE2MTg1LDYgQEAKIAkJCQlCMjIyN0FD
QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjdBQ0QwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyN0FEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjhDNkEyQjBEMDBDNDQ4MDAz
MzRBQTQgLyogU1ZHVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDMwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1RpdGxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0FENjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3QURDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTE2MjI4LDcgKzE2MjU0LDYgQEAKIAkJCQlCMkMzREE0QTBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURGNkQ4
MDBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLywKIAkJCQlF
NDQ2MTNBRjBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCMjhDNkEyRDBEMDBDNDQ4MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODU0RkU3MzYwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZlcnNhbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczODBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtl
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NDEzLDYgKzE2NDM4LDkgQEAKIAkJCQlCQ0UxQzQx
QzBEOTgyOTgxMDAzQjAyRjIgLyogTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNF
MUM0M0IwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNFMUM0NDAwRDk4MzBGNDAwM0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTQ2RTk3OEQwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUU0NkU5NzhGMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNv
bnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDZFOTc5MTBEQUFENjUzMDA3MUU4OTQg
LyogU01JTFRpbWluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5QzcwREEw
NTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYw
REEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUw
QkFCQzBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5
bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAzMTc0
MCkKKysrIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDExICsxMDcsNiBAQCBDYWNoZWRQYWdlOjpDYWNoZWRQYWdlKFBhZ2UqIHBhZ2UpCiAgICAg
fQogCiAgICAgbV9kb2N1bWVudC0+c2V0SW5QYWdlQ2FjaGUodHJ1ZSk7Ci0KLSNpZiBFTkFCTEUo
U1ZHKQotICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkK
LSAgICAgICAgbV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5wYXVzZUFuaW1hdGlv
bnMoKTsKLSNlbmRpZgogfQogCiBDYWNoZWRQYWdlOjp+Q2FjaGVkUGFnZSgpCkluZGV4OiBXZWJD
b3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUv
cGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDdXJ2ZURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBA
IC00Miw5MSArNDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3Vi
bGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIAotc3RydWN0IEN1cnZlRGF0YSB7Ci0g
ICAgQ3VydmVEYXRhKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBw
MnkpCi0gICAgewotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2ll
bnRzLCBpbXBsaWNpdCBmaXJzdCBhbmQgbGFzdCBjb250cm9sIHBvaW50cyBhcmUgKDAsMCkgYW5k
ICgxLDEpLgotICAgICAgICBjeCA9IDMuMCAqIHAxeDsKLSAgICAgICAgYnggPSAzLjAgKiAocDJ4
IC0gcDF4KSAtIGN4OwotICAgICAgICBheCA9IDEuMCAtIGN4IC1ieDsKLSAgICAgICAgIAotICAg
ICAgICBjeSA9IDMuMCAqIHAxeTsKLSAgICAgICAgYnkgPSAzLjAgKiAocDJ5IC0gcDF5KSAtIGN5
OwotICAgICAgICBheSA9IDEuMCAtIGN5IC0gYnk7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBz
YW1wbGVDdXJ2ZVgoZG91YmxlIHQpCi0gICAgewotICAgICAgICAvLyBgYXggdF4zICsgYnggdF4y
ICsgY3ggdCcgZXhwYW5kZWQgdXNpbmcgSG9ybmVyJ3MgcnVsZS4KLSAgICAgICAgcmV0dXJuICgo
YXggKiB0ICsgYngpICogdCArIGN4KSAqIHQ7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBzYW1w
bGVDdXJ2ZVkoZG91YmxlIHQpCi0gICAgewotICAgICAgICByZXR1cm4gKChheSAqIHQgKyBieSkg
KiB0ICsgY3kpICogdDsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHNhbXBsZUN1cnZlRGVyaXZh
dGl2ZVgoZG91YmxlIHQpCi0gICAgewotICAgICAgICByZXR1cm4gKDMuMCAqIGF4ICogdCArIDIu
MCAqIGJ4KSAqIHQgKyBjeDsKLSAgICB9Ci0gICAgCi0gICAgLy8gR2l2ZW4gYW4geCB2YWx1ZSwg
ZmluZCBhIHBhcmFtZXRyaWMgdmFsdWUgaXQgY2FtZSBmcm9tLgotICAgIGRvdWJsZSBzb2x2ZUN1
cnZlWChkb3VibGUgeCwgZG91YmxlIGVwc2lsb24pCi0gICAgewotICAgICAgICBkb3VibGUgdDA7
Ci0gICAgICAgIGRvdWJsZSB0MTsKLSAgICAgICAgZG91YmxlIHQyOwotICAgICAgICBkb3VibGUg
eDI7Ci0gICAgICAgIGRvdWJsZSBkMjsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgLy8gRmly
c3QgdHJ5IGEgZmV3IGl0ZXJhdGlvbnMgb2YgTmV3dG9uJ3MgbWV0aG9kIC0tIG5vcm1hbGx5IHZl
cnkgZmFzdC4KLSAgICAgICAgZm9yICh0MiA9IHgsIGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAg
ICAgICAgICB4MiA9IHNhbXBsZUN1cnZlWCh0MikgLSB4OwotICAgICAgICAgICAgaWYgKGZhYnMg
KHgyKSA8IGVwc2lsb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHQyOwotICAgICAgICAgICAg
ZDIgPSBzYW1wbGVDdXJ2ZURlcml2YXRpdmVYKHQyKTsKLSAgICAgICAgICAgIGlmIChmYWJzKGQy
KSA8IDFlLTYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0MiA9IHQyIC0g
eDIgLyBkMjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgYmlzZWN0
aW9uIG1ldGhvZCBmb3IgcmVsaWFiaWxpdHkuCi0gICAgICAgIHQwID0gMC4wOwotICAgICAgICB0
MSA9IDEuMDsKLSAgICAgICAgdDIgPSB4OwotCi0gICAgICAgIGlmICh0MiA8IHQwKQotICAgICAg
ICAgICAgcmV0dXJuIHQwOwotICAgICAgICBpZiAodDIgPiB0MSkKLSAgICAgICAgICAgIHJldHVy
biB0MTsKLQotICAgICAgICB3aGlsZSAodDAgPCB0MSkgewotICAgICAgICAgICAgeDIgPSBzYW1w
bGVDdXJ2ZVgodDIpOwotICAgICAgICAgICAgaWYgKGZhYnMoeDIgLSB4KSA8IGVwc2lsb24pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHQyOwotICAgICAgICAgICAgaWYgKHggPiB4MikKLSAgICAg
ICAgICAgICAgICB0MCA9IHQyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHQx
ID0gdDI7Ci0gICAgICAgICAgICB0MiA9ICh0MSAtIHQwKSAqIC41ICsgdDA7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBGYWlsdXJlLgotICAgICAgICByZXR1cm4gdDI7Ci0gICAgfQotICAgIAot
cHJpdmF0ZToKLSAgICBkb3VibGUgYXg7Ci0gICAgZG91YmxlIGJ4OwotICAgIGRvdWJsZSBjeDsK
LSAgICAKLSAgICBkb3VibGUgYXk7Ci0gICAgZG91YmxlIGJ5OwotICAgIGRvdWJsZSBjeTsKLX07
Ci0KIC8vIFRoZSBlcHNpbG9uIHZhbHVlIHdlIHBhc3MgdG8gc29sdmVDdXJ2ZVggZ2l2ZW4gdGhh
dCB0aGUgYW5pbWF0aW9uIGlzIGdvaW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBs
b25nZXIgdGhlCiAvLyBhbmltYXRpb24sIHRoZSBtb3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRo
ZSB0aW1pbmcgZnVuY3Rpb24gcmVzdWx0IHRvIGF2b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgog
c3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1
cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQpJbmRleDogV2ViQ29yZS9zdmcvQ3VydmVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvQ3VydmVEYXRhLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3N2Zy9DdXJ2ZURhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyAjaWZuZGVm
IEN1cnZlRGF0YV9oCisgI2RlZmluZSBDdXJ2ZURhdGFfaAorCitzdHJ1Y3QgQ3VydmVEYXRhIHsK
KyAgICBDdXJ2ZURhdGEoZG91YmxlIHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91Ymxl
IHAyeSkKKyAgICB7CisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgcG9seW5vbWlhbCBjb2VmZmlj
aWVudHMsIGltcGxpY2l0IGZpcnN0IGFuZCBsYXN0IGNvbnRyb2wgcG9pbnRzIGFyZSAoMCwwKSBh
bmQgKDEsMSkuCisgICAgICAgIGN4ID0gMy4wICogcDF4OworICAgICAgICBieCA9IDMuMCAqIChw
MnggLSBwMXgpIC0gY3g7CisgICAgICAgIGF4ID0gMS4wIC0gY3ggLWJ4OworICAgICAgICAgCisg
ICAgICAgIGN5ID0gMy4wICogcDF5OworICAgICAgICBieSA9IDMuMCAqIChwMnkgLSBwMXkpIC0g
Y3k7CisgICAgICAgIGF5ID0gMS4wIC0gY3kgLSBieTsKKyAgICB9CisgICAgCisgICAgZG91Ymxl
IHNhbXBsZUN1cnZlWChkb3VibGUgdCkKKyAgICB7CisgICAgICAgIC8vIGBheCB0XjMgKyBieCB0
XjIgKyBjeCB0JyBleHBhbmRlZCB1c2luZyBIb3JuZXIncyBydWxlLgorICAgICAgICByZXR1cm4g
KChheCAqIHQgKyBieCkgKiB0ICsgY3gpICogdDsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHNh
bXBsZUN1cnZlWShkb3VibGUgdCkKKyAgICB7CisgICAgICAgIHJldHVybiAoKGF5ICogdCArIGJ5
KSAqIHQgKyBjeSkgKiB0OworICAgIH0KKyAgICAKKyAgICBkb3VibGUgc2FtcGxlQ3VydmVEZXJp
dmF0aXZlWChkb3VibGUgdCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMy4wICogYXggKiB0ICsg
Mi4wICogYngpICogdCArIGN4OworICAgIH0KKyAgICAKKyAgICAvLyBHaXZlbiBhbiB4IHZhbHVl
LCBmaW5kIGEgcGFyYW1ldHJpYyB2YWx1ZSBpdCBjYW1lIGZyb20uCisgICAgZG91YmxlIHNvbHZl
Q3VydmVYKGRvdWJsZSB4LCBkb3VibGUgZXBzaWxvbikKKyAgICB7CisgICAgICAgIGRvdWJsZSB0
MDsKKyAgICAgICAgZG91YmxlIHQxOworICAgICAgICBkb3VibGUgdDI7CisgICAgICAgIGRvdWJs
ZSB4MjsKKyAgICAgICAgZG91YmxlIGQyOworICAgICAgICBpbnQgaTsKKworICAgICAgICAvLyBG
aXJzdCB0cnkgYSBmZXcgaXRlcmF0aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkg
dmVyeSBmYXN0LgorICAgICAgICBmb3IgKHQyID0geCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAg
ICAgICAgICAgIHgyID0gc2FtcGxlQ3VydmVYKHQyKSAtIHg7CisgICAgICAgICAgICBpZiAoZmFi
cyAoeDIpIDwgZXBzaWxvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gdDI7CisgICAgICAgICAg
ICBkMiA9IHNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgodDIpOworICAgICAgICAgICAgaWYgKGZhYnMo
ZDIpIDwgMWUtNikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHQyID0gdDIg
LSB4MiAvIGQyOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNl
Y3Rpb24gbWV0aG9kIGZvciByZWxpYWJpbGl0eS4KKyAgICAgICAgdDAgPSAwLjA7CisgICAgICAg
IHQxID0gMS4wOworICAgICAgICB0MiA9IHg7CisKKyAgICAgICAgaWYgKHQyIDwgdDApCisgICAg
ICAgICAgICByZXR1cm4gdDA7CisgICAgICAgIGlmICh0MiA+IHQxKQorICAgICAgICAgICAgcmV0
dXJuIHQxOworCisgICAgICAgIHdoaWxlICh0MCA8IHQxKSB7CisgICAgICAgICAgICB4MiA9IHNh
bXBsZUN1cnZlWCh0Mik7CisgICAgICAgICAgICBpZiAoZmFicyh4MiAtIHgpIDwgZXBzaWxvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdDI7CisgICAgICAgICAgICBpZiAoeCA+IHgyKQorICAg
ICAgICAgICAgICAgIHQwID0gdDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dDEgPSB0MjsKKyAgICAgICAgICAgIHQyID0gKHQxIC0gdDApICogLjUgKyB0MDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZhaWx1cmUuCisgICAgICAgIHJldHVybiB0MjsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIGRvdWJsZSBheDsKKyAgICBkb3VibGUgYng7CisgICAgZG91YmxlIGN4
OworICAgIAorICAgIGRvdWJsZSBheTsKKyAgICBkb3VibGUgYnk7CisgICAgZG91YmxlIGN5Owor
fTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJTTUlMVGltaW5nRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiWExpbmtOYW1lcy5oIgogCkBAIC0xMzgsMTAgKzEzOSwyMSBAQCB2b2lkIFNWR0FFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2CiAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5pc0VtcHR5
KCkpIC8vIGlmIHRhcmdldCBpcyBlbXB0eSwgZGVmYXVsdCB0byAiX3NlbGYiIG9yIHVzZSB4bGlu
azp0YXJnZXQgaWYgc2V0CiAgICAgICAgICAgICB0YXJnZXQgPSAoZ2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OnNob3dBdHRyKSA9PSAibmV3IikgPyAiX2JsYW5rIiA6ICJfc2VsZiI7CiAKLSAgICAg
ICAgU3RyaW5nIHVybCA9IHBhcnNlVVJMKGhyZWYoKSk7Ci0gICAgICAgIGlmICghZXZ0LT5kZWZh
dWx0UHJldmVudGVkKCkpCisgICAgICAgIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZVVSTChocmVmKCkpOworICAgICAgICAgICAg
aWYgKHVybC5zdGFydHNXaXRoKCIjIikpIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodXJsLnN1YnN0cmluZygxKSk7
CisgICAgICAgICAgICAgICAgaWYgKFNNSUxUaW1pbmdFbGVtZW50Ojppc1RpbWluZ0VsZW1lbnQo
dGFyZ2V0RWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU01JTFRpbWluZ0VsZW1lbnQq
IHRpbWVkID0gc3RhdGljX2Nhc3Q8U01JTFRpbWluZ0VsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgdGltZWQtPmJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOworICAg
ICAgICAgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAg
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAg
ICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSwgdGFyZ2V0LCBldnQsIGZhbHNlLCB0cnVlKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisr
KyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJT
VkdTVkdFbGVtZW50LmgiCkBAIC0zNCw2ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorLy8gRklYTUU6IFRoaXMgY2xhc3Mg
bmVlZHMgdG8gZGllLiBTVkdBbmltYXRlRWxlbWVudCAod2hpY2ggaGFzIHN1cGVyc2V0IG9mIHRo
ZSBmdW5jdGlvbmFsaXR5KSBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGluc3RlYWQuCiAKIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQo
dGFnTmFtZSwgZG9jKQpAQCAtNDQsNTcgKzQ1LDMzIEBAIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6
On5TVkdBbmltYXRlQ29sb3IKIHsKIH0KIAotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1
cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpCit2b2lkIFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpCiB7
Ci0gICAgbV9iYXNlQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpKTsKLSAgICBtX2Zyb21Db2xvciA9IENvbG9yKCk7
Ci0gICAgbV90b0NvbG9yID0gQ29sb3IoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNB
ZGRpdGl2ZSgpKSB7CisgICAgICAgIENvbG9yIGJhc2VDb2xvciA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyhtX3NhdmVkQmFzZVZhbHVlKTsKKyAgICAgICAgc2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRWYWx1ZShDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNl
Q29sb3IsIG1fYW5pbWF0ZWRDb2xvcikubmFtZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0
VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKIH0K
IAotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1l
bnQoKQorYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKGZs
b2F0IHBlcmNlbnRhZ2UpCiB7Ci0gICAgaWYgKGlzQWRkaXRpdmUoKSkKLSAgICAgICAgc2V0VGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFt
cChtX2Jhc2VDb2xvciwgbV9hbmltYXRlZENvbG9yKS5uYW1lKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgp
KTsKKyAgICBDb2xvciBvbGRDb2xvciA9IG1fYW5pbWF0ZWRDb2xvcjsKKyAgICBtX2FuaW1hdGVk
Q29sb3IgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3Rh
bmNlKHBlcmNlbnRhZ2UpLmFkZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgcmV0
dXJuIG1fYW5pbWF0ZWRDb2xvciAhPSBvbGRDb2xvcjsKK30KKyAgICAKK2Jvb2wgU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJv
bVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKK3sKKyAgICBtX2Zyb21Db2xvciA9IFNW
R0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29s
b3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOworICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRh
Z2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQorYm9vbCBTVkdB
bmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5n
JiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQogewotICAgIGlmIChhbmltYXRp
b25Nb2RlID09IFRPX0FOSU1BVElPTikKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEg
c3BlY2lhbCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSAr
IGJhc2UKLSAgICAgICAgbV9hbmltYXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZShtX2Jhc2VDb2xv
ciwgbV90b0NvbG9yKS5zY2FsZWREaXN0YW5jZSh0aW1lUGVyY2VudGFnZSkuYWRkVG9Db2xvckFu
ZENsYW1wKG1fYmFzZUNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9
IENvbG9yRGlzdGFuY2UobV9mcm9tQ29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UocGVy
Y2VudGFnZVBhc3QpLmFkZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7Ci0gICAgcmV0dXJu
IChtX2FuaW1hdGVkQ29sb3IgIT0gbV9iYXNlQ29sb3IpOwotfQotCi1ib29sIFNWR0FuaW1hdGVD
b2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSBhbmlt
YXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KQotewotICAgIHN3aXRjaCAoYW5pbWF0aW9u
TW9kZSkgewotICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9y
ID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIC8v
IGZhbGwgdGhyb3VnaAotICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBtX3RvQ29sb3Ig
PSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV90byk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZH
Q29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xv
ciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2J5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCWV9BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xvciA9
IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNvbG9yLCBTVkdDb2xvcjo6
Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFZBTFVFU19BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9y
RnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsKLSAgICAgICAgbV90b0Nv
bG9yID0gKCh2YWx1ZUluZGV4ICsgMSkgPCBtX3ZhbHVlcy5zaXplKCkpID8gU1ZHQ29sb3I6OmNv
bG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21D
b2xvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOT19BTklNQVRJT046Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKKyAgICBtX2Zyb21Db2xvciA9IFNWR0Nv
bG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29sb3Ig
PSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6
OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGJ5U3RyaW5nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQw
KQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywyMCArMzcsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCgpOwotICAgICAg
ICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVt
ZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQo
KTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0
aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3Qp
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRp
b25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5
QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50KTsKKyAgICAgICAgdmlydHVh
bCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcs
IGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRl
RnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBi
eVN0cmluZyk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKICAg
ICAgICAgQ29sb3IgbV9hbmltYXRlZENvbG9yOwotCiAgICAgICAgIENvbG9yIG1fdG9Db2xvcjsK
ICAgICAgICAgQ29sb3IgbV9mcm9tQ29sb3I7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNSAr
MjUsMjEgQEAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNs
dWRlICJTVkdBbmltYXRlRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgor
I2luY2x1ZGUgIkNvbG9yRGlzdGFuY2UuaCIKKyNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
IAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBbmlt
YXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9j
KQotICAgICwgbV9jdXJyZW50SXRlbSgtMSkKKyAgICAsIG1fcHJvcGVydHlUeXBlKFN0cmluZ1By
b3BlcnR5KQorICAgICwgbV9mcm9tTnVtYmVyKDApCisgICAgLCBtX3RvTnVtYmVyKDApCisgICAg
LCBtX2FuaW1hdGVkTnVtYmVyKG51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiB7
CiB9CiAKQEAgLTQwLDYgKzQ3LDEyNiBAQCBTVkdBbmltYXRlRWxlbWVudDo6flNWR0FuaW1hdGVF
bGVtZW50KCkKIHsKIH0KIAorc3RhdGljIGJvb2wgcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoY29u
c3QgU3RyaW5nJiBpbiwgZG91YmxlJiB2YWx1ZSwgU3RyaW5nJiB1bml0KQoreworICAgIHVuc2ln
bmVkIHVuaXRMZW5ndGggPSAwOworICAgIFN0cmluZyBwYXJzZSA9IGluLnN0cmlwV2hpdGVTcGFj
ZSgpOworICAgIGlmIChwYXJzZS5lbmRzV2l0aCgiJSIpKQorICAgICAgICB1bml0TGVuZ3RoID0g
MTsKKyAgICBlbHNlIGlmIChwYXJzZS5lbmRzV2l0aCgicHgiKSB8fCBwYXJzZS5lbmRzV2l0aCgi
cHQiKSB8fCBwYXJzZS5lbmRzV2l0aCgiZW0iKSkKKyAgICAgICAgdW5pdExlbmd0aCA9IDI7Cisg
ICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoImRlZyIpIHx8IHBhcnNlLmVuZHNXaXRoKCJyYWQi
KSkKKyAgICAgICAgdW5pdExlbmd0aCA9IDM7CisgICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgo
ImdyYWQiKSkKKyAgICAgICAgdW5pdExlbmd0aCA9IDQ7CisgICAgU3RyaW5nIG5ld1VuaXQgPSBw
YXJzZS5yaWdodCh1bml0TGVuZ3RoKTsKKyAgICBpZiAoIXVuaXQuaXNFbXB0eSgpICYmIG5ld1Vu
aXQgIT0gdW5pdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuaXQgPSBuZXdVbml0Owor
ICAgIGJvb2wgb2s7CisgICAgdmFsdWUgPSBwYXJzZS5sZWZ0KHBhcnNlLmxlbmd0aCgpIC0gdW5p
dExlbmd0aCkudG9Eb3VibGUoJm9rKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK3ZvaWQgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgZW50aXJlbHkgd3Jvbmcgd2F5IHRvIGRvIGFkZGl0
aXZlLiBJdCB3b24ndCB3b3JrIHdpdGgKKyAgICAvLyBtdWx0aXBsZSBhbmltYXRpb25zIG9uIHRo
ZSBzYW1lIGVsZW1lbnQuCisgICAgLy8gV2UgbmVlZCB0byBhZGQgdG9nZXRoZXIgYWxsIGFuaW1h
dGlvbiBjb250cmlidXRpb25zIHBlciBwcm9wZXJ0eSBhbmQKKyAgICAvLyB0aGVuIGFwcGx5IGlu
IG9uZSBnby4KKyAgICBTdHJpbmcgdmFsdWVUb0FwcGxlOworICAgIGlmIChtX3Byb3BlcnR5VHlw
ZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgICAgICBkb3VibGUgbnVtYmVyID0gbV9hbmltYXRl
ZE51bWJlcjsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qgd29yayBmb3IgdmFsdWVz
IGFuaW1hdGlvbi4KKyAgICAgICAgaWYgKGlzQWNjdW11bGF0ZWQoKSAmJiByZXBlYXQpCisgICAg
ICAgICAgICBudW1iZXIgKz0gbV90b051bWJlciAqIHJlcGVhdDsKKyAgICAgICAgaWYgKGlzQWRk
aXRpdmUoKSkgeworICAgICAgICAgICAgZG91YmxlIGJhc2U7CisgICAgICAgICAgICBpZiAoIXBh
cnNlTnVtYmVyVmFsdWVBbmRVbml0KG1fc2F2ZWRCYXNlVmFsdWUsIGJhc2UsIG1fbnVtYmVyVW5p
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbnVtYmVyICs9IGJhc2U7
CisgICAgICAgIH0KKyAgICAgICAgdmFsdWVUb0FwcGxlID0gU3RyaW5nOjpudW1iZXIobnVtYmVy
KSArIG1fbnVtYmVyVW5pdDsKKyAgICB9IGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9y
UHJvcGVydHkpIHsKKyAgICAgICAgQ29sb3IgYmFzZSA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhtX3NhdmVkQmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKGlzQWRkaXRpdmUoKSkg
eworICAgICAgICAgICAgdmFsdWVUb0FwcGxlID0gQ29sb3JEaXN0YW5jZTo6YWRkQ29sb3JzQW5k
Q2xhbXAoYmFzZSwgbV9hbmltYXRlZENvbG9yKS5uYW1lKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgdmFsdWVUb0FwcGxlID0gbV9hbmltYXRlZENvbG9yLm5hbWUoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgdmFsdWVUb0FwcGxlID0gbV9hbmltYXRlZFN0cmluZzsKKyAgICBzZXRUYXJn
ZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKHZhbHVlVG9BcHBsZSk7Cit9CisKK2Jvb2wgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKK3sKKyAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICAgICAgZG91Ymxl
IG9sZFZhbHVlID0gbV9hbmltYXRlZE51bWJlcjsKKyAgICAgICAgbV9hbmltYXRlZE51bWJlciA9
IChtX3RvTnVtYmVyIC0gbV9mcm9tTnVtYmVyKSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21OdW1iZXI7
CisgICAgICAgIHJldHVybiBvbGRWYWx1ZSA9PSBtX2FuaW1hdGVkTnVtYmVyOworICAgIH0gCisg
ICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9yUHJvcGVydHkpIHsKKyAgICAgICAgbV9hbmlt
YXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZShtX2Zyb21Db2xvciwgbV90b0NvbG9yKS5zY2FsZWRE
aXN0YW5jZShwZXJjZW50YWdlKS5hZGRUb0NvbG9yQW5kQ2xhbXAobV9mcm9tQ29sb3IpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQW5pbWF0aW9uTW9kZSBhbmltYXRp
b25Nb2RlID0gdGhpcy0+YW5pbWF0aW9uTW9kZSgpOworICAgIEFTU0VSVChhbmltYXRpb25Nb2Rl
ID09IEZyb21Ub0FuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IGFu
aW1hdGlvbk1vZGUgPT0gVmFsdWVzQW5pbWF0aW9uKTsKKyAgICBTdHJpbmcgb2xkVmFsdWUgPSBt
X2FuaW1hdGVkU3RyaW5nOworICAgIGlmICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRp
b24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24g
fHwgcGVyY2VudGFnZSA9PSAxLjBmKQorICAgICAgICBtX2FuaW1hdGVkU3RyaW5nID0gbV90b1N0
cmluZzsKKyAgICBlbHNlCisgICAgICAgIG1fYW5pbWF0ZWRTdHJpbmcgPSBtX2Zyb21TdHJpbmc7
CisgICAgcmV0dXJuIG9sZFZhbHVlID09IG1fYW5pbWF0ZWRTdHJpbmc7Cit9CisgCitzdGF0aWMg
Ym9vbCBpc0NvbG9yQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlKQoreworICAgIHJl
dHVybiBhdHRyaWJ1dGUgPT0gImNvbG9yIiB8fCBhdHRyaWJ1dGUgPT0gImZpbGwiIHx8IGF0dHJp
YnV0ZSA9PSAic3Ryb2tlIjsKK30KKworYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRl
RnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0
b1N0cmluZykKK3sKKyAgICAvLyBGSVhNRTogTmVlZHMgbW9yZSBzb2xpZCB3YXkgZGV0ZXJtaW5l
IHRhcmdldCBhdHRyaWJ1dGUgdHlwZS4KKyAgICBtX3Byb3BlcnR5VHlwZSA9IGlzQ29sb3JBdHRy
aWJ1dGUoYXR0cmlidXRlTmFtZSgpKSA/IENvbG9yUHJvcGVydHkgOiBOdW1iZXJQcm9wZXJ0eTsK
KyAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgICAgICBtX2Zy
b21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsK
KyAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRv
U3RyaW5nKTsKKyAgICAgICAgaWYgKG1fZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiBtX3RvQ29sb3Iu
aXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9udW1iZXJVbml0ID0gU3RyaW5nKCk7CisgICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVl
QW5kVW5pdChmcm9tU3RyaW5nLCBtX2Zyb21OdW1iZXIsIG1fbnVtYmVyVW5pdCkpIHsKKyAgICAg
ICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVlQW5kVW5pdCh0b1N0cmluZywgbV90b051bWJlciwg
bV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBtX2Zyb21TdHJpbmcgPSBmcm9tU3RyaW5nOworICAgIG1fdG9TdHJpbmcgPSB0
b1N0cmluZzsKKyAgICBtX3Byb3BlcnR5VHlwZSA9IFN0cmluZ1Byb3BlcnR5OworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlW
YWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQor
eworICAgIG1fcHJvcGVydHlUeXBlID0gaXNDb2xvckF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKCkp
ID8gQ29sb3JQcm9wZXJ0eSA6IE51bWJlclByb3BlcnR5OworICAgIGlmIChtX3Byb3BlcnR5VHlw
ZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAgICAgIG1fZnJvbUNvbG9yID0gZnJvbVN0cmluZy5p
c0VtcHR5KCkgPyBDb2xvcigpIDogU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGZy
b21TdHJpbmcpOworICAgICAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNB
bmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGJ5
U3RyaW5nKSk7CisgICAgICAgIGlmICghbV9mcm9tQ29sb3IuaXNWYWxpZCgpIHx8ICFtX3RvQ29s
b3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmluZygpOworICAgICAgICBtX2Zyb21OdW1iZXIgPSAw
OworICAgICAgICBpZiAoIWZyb21TdHJpbmcuaXNFbXB0eSgpICYmICFwYXJzZU51bWJlclZhbHVl
QW5kVW5pdChmcm9tU3RyaW5nLCBtX2Zyb21OdW1iZXIsIG1fbnVtYmVyVW5pdCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQo
YnlTdHJpbmcsIG1fdG9OdW1iZXIsIG1fbnVtYmVyVW5pdCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG1fdG9OdW1iZXIgKz0gbV9mcm9tTnVtYmVyOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdBbmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMzcsMTMgKzM4LDI1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAg
ICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0
aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0
IHBlcmNlbnRhZ2VQYXN0KSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUlu
ZGV4KSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJv
bUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0
cmluZyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29u
c3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVw
ZWF0KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotCi0gICAg
ICAgIFN0cmluZyBtX3NhdmVkVG87CisgICAgICAgIGVudW0gUHJvcGVydHlUeXBlIHsgTnVtYmVy
UHJvcGVydHksIENvbG9yUHJvcGVydHksIFN0cmluZ1Byb3BlcnR5IH07CisgICAgICAgIFByb3Bl
cnR5VHlwZSBtX3Byb3BlcnR5VHlwZTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBtX2Zyb21O
dW1iZXI7CisgICAgICAgIGRvdWJsZSBtX3RvTnVtYmVyOworICAgICAgICBkb3VibGUgbV9hbmlt
YXRlZE51bWJlcjsKKyAgICAgICAgU3RyaW5nIG1fbnVtYmVyVW5pdDsKKyAgICAgICAgQ29sb3Ig
bV9mcm9tQ29sb3I7CisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9h
bmltYXRlZENvbG9yOworICAgICAgICBTdHJpbmcgbV9mcm9tU3RyaW5nOworICAgICAgICBTdHJp
bmcgbV90b1N0cmluZzsKKyAgICAgICAgU3RyaW5nIG1fYW5pbWF0ZWRTdHJpbmc7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpTVkdBbmlt
YXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2Jh
c2VJbmRleEluVHJhbmZvcm1MaXN0KDApCiAgICAgLCBtX3JvdGF0ZU1vZGUoQW5nbGVNb2RlKQog
ICAgICwgbV9hbmdsZSgwKQogewotICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9QQUNFRDsKIH0K
IAogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRlTW90aW9uRWxlbWVudCgpCkBA
IC04Nyw3ICs4Nyw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGUK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQ
b2ludHNBdHRyKSB7CiAgICAgICAgIG1fa2V5UG9pbnRzLmNsZWFyKCk7Ci0gICAgICAgIHBhcnNl
S2V5TnVtYmVycyhtX2tleVBvaW50cywgYXR0ci0+dmFsdWUoKSk7CisvLyAgICAgICAgcGFyc2VL
ZXlQb2ludHMobV9rZXlQb2ludHMsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpkQXR0cikgewogICAgICAgICBtX3BhdGggPSBQYXRoKCk7
CiAgICAgICAgIHBhdGhGcm9tU1ZHRGF0YShtX3BhdGgsIGF0dHItPnZhbHVlKCkpOwpAQCAtMTEx
LDE4ICsxMTEsMTMgQEAgUGF0aCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YW5pbWF0aW9uUAog
ICAgIHJldHVybiBQYXRoKCk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGlt
ZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQor
Ym9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBw
ZXJjZW50YWdlKQogewotICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRPX0FOSU1BVElPTikgewot
ICAgICAgICAvLyB0by1hbmltYXRpb25zIGhhdmUgYSBzcGVjaWFsIGVxdWF0aW9uOiB2YWx1ZSA9
ICh0byAtIGJhc2UpICogKHRpbWUvZHVyYXRpb24pICsgYmFzZQotICAgICAgICBtX2FuaW1hdGVk
VHJhbnNsYXRpb24uc2V0V2lkdGgoKG1fdG9Qb2ludC54KCkgLSBtX2Jhc2VQb2ludC54KCkpICog
dGltZVBlcmNlbnRhZ2UgKyBtX2Jhc2VQb2ludC54KCkpOwotICAgICAgICBtX2FuaW1hdGVkVHJh
bnNsYXRpb24uc2V0SGVpZ2h0KChtX3RvUG9pbnQueSgpIC0gbV9iYXNlUG9pbnQueSgpKSAqIHRp
bWVQZXJjZW50YWdlICsgbV9iYXNlUG9pbnQueSgpKTsKLSAgICAgICAgbV9hbmltYXRlZEFuZ2xl
ID0gMC4wZjsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0
V2lkdGgobV9wb2ludERpZmYud2lkdGgoKSAqIHBlcmNlbnRhZ2VQYXN0ICsgbV9mcm9tUG9pbnQu
eCgpKTsKLSAgICAgICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodChtX3BvaW50RGlm
Zi5oZWlnaHQoKSAqIHBlcmNlbnRhZ2VQYXN0ICsgbV9mcm9tUG9pbnQueSgpKTsKLSAgICAgICAg
bV9hbmltYXRlZEFuZ2xlID0gbV9hbmdsZURpZmYgKiBwZXJjZW50YWdlUGFzdCArIG1fZnJvbUFu
Z2xlOwotICAgIH0KKyAgICBGbG9hdFNpemUgZGlmZiA9IG1fdG9Qb2ludCAtIG1fZnJvbVBvaW50
OworICAgIG1fYW5pbWF0ZWRUcmFuc2xhdGlvbi5zZXRXaWR0aChkaWZmLndpZHRoKCkgKiBwZXJj
ZW50YWdlICsgbV9mcm9tUG9pbnQueCgpKTsKKyAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0
SGVpZ2h0KGRpZmYuaGVpZ2h0KCkgKiBwZXJjZW50YWdlICsgbV9mcm9tUG9pbnQueSgpKTsKKyAg
ICAvLyBGSVhNRTogQW5pbWF0ZSBhbmdsZXMKKyAgICBtX2FuaW1hdGVkQW5nbGUgPSAwOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xNTAsNTUgKzE0NSwyMyBAQCBzdGF0aWMgYm9vbCBwYXJz
ZVBvaW50KGNvbnN0IFN0cmluZyYgcywgCiAgICAgcmV0dXJuICFza2lwT3B0aW9uYWxTcGFjZXMo
Y3VyLCBlbmQpOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVG
cm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFs
dWVJbmRleCkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRU
b1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcp
CiB7Ci0gICAgbV9mcm9tQW5nbGUgPSAwLjBmOwotICAgIG1fdG9BbmdsZSA9IDAuMGY7Ci0gICAg
c3dpdGNoIChhbmltYXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKLSAg
ICAgICAgcGFyc2VQb2ludChtX2Zyb20sIG1fZnJvbVBvaW50KTsKLSAgICAgICAgLy8gZmFsbCB0
aHJvdWdoCi0gICAgY2FzZSBUT19BTklNQVRJT046Ci0gICAgICAgIHBhcnNlUG9pbnQobV90bywg
bV90b1BvaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGUk9NX0JZX0FOSU1BVElPTjoK
LSAgICAgICAgcGFyc2VQb2ludChtX2Zyb20sIG1fZnJvbVBvaW50KTsKLSAgICAgICAgcGFyc2VQ
b2ludChtX3RvLCBtX3RvUG9pbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJZX0FOSU1B
VElPTjoKLSAgICB7Ci0gICAgICAgIHBhcnNlUG9pbnQobV9mcm9tLCBtX2Zyb21Qb2ludCk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgYnlQb2ludDsKLSAgICAgICAgcGFyc2VQb2ludChtX2J5LCBieVBv
aW50KTsKLSAgICAgICAgbV90b1BvaW50ID0gRmxvYXRQb2ludChtX2Zyb21Qb2ludC54KCkgKyBi
eVBvaW50LngoKSwgbV9mcm9tUG9pbnQueSgpICsgYnlQb2ludC55KCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgotICAgICAgICBwYXJzZVBvaW50
KG1fdmFsdWVzW3ZhbHVlSW5kZXhdLCBtX2Zyb21Qb2ludCk7Ci0gICAgICAgIGlmICgodmFsdWVJ
bmRleCArIDEpIDwgbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcGFyc2VQb2ludChtX3Zh
bHVlc1t2YWx1ZUluZGV4ICsgMV0sIG1fdG9Qb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fdG9Qb2ludCA9IG1fZnJvbVBvaW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5P
X0FOSU1BVElPTjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAot
ICAgIG1fcG9pbnREaWZmID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7Ci0gICAgbV9hbmdsZURp
ZmYgPSAwLjBmOwotICAgIHJldHVybiAobV9wb2ludERpZmYud2lkdGgoKSAhPSAwIHx8IG1fcG9p
bnREaWZmLmhlaWdodCgpICE9IDApOworICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywgbV9mcm9t
UG9pbnQpOworICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAgcmV0dXJu
IHRydWU7CiB9Ci0KLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlv
bkJhc2VWYWx1ZUZyb21FbGVtZW50KCkKLXsKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNT
dHlsZWRUcmFuc2Zvcm1hYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBt
X2Jhc2VQb2ludCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
dGFyZ2V0RWxlbWVudCgpKS0+Z2V0QkJveCgpLmxvY2F0aW9uKCk7Citib29sIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9t
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQoreworICAgIHBhcnNlUG9pbnQoZnJvbVN0
cmluZywgbV9mcm9tUG9pbnQpOworICAgIEZsb2F0UG9pbnQgYnlQb2ludDsKKyAgICBwYXJzZVBv
aW50KGJ5U3RyaW5nLCBieVBvaW50KTsKKyAgICBtX3RvUG9pbnQgPSBGbG9hdFBvaW50KG1fZnJv
bVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55KCkgKyBieVBvaW50LnkoKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFw
cGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpCit2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KQogewogICAgIGlm
ICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjA4LDE5ICsxNzEsMzQgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
YXBwbHlBbmltYQogICAgIGlmICghdHJhbnNmb3JtTGlzdCkKICAgICAgICAgcmV0dXJuOwogICAg
IAorICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlwbGUgYWRkaXRpdmUgYW5pbWF0aW9ucy4KICAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGlmICghaXNBZGRpdGl2ZSgpKQorICAgIGlmIChpc0Fk
ZGl0aXZlKCkpIHsKKyAgICAgICAgd2hpbGUgKHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMo
KSA+IG1fYmFzZUluZGV4SW5UcmFuZm9ybUxpc3QpCisgICAgICAgICAgICB0cmFuc2Zvcm1MaXN0
LT5yZW1vdmVJdGVtKHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKSAtIDEsIGVjKTsKKyAg
ICB9IGVsc2UKICAgICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwotICAgIAorCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0ucm90YXRlKG1fYW5pbWF0
ZWRBbmdsZSk7CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX2FuaW1hdGVkVHJhbnNsYXRpb24u
d2lkdGgoKSwgbV9hbmltYXRlZFRyYW5zbGF0aW9uLmhlaWdodCgpKTsKICAgICBpZiAoIXRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpIHsKICAgICAgICAgdHJhbnNmb3JtTGlzdC0+YXBwZW5kSXRlbShT
VkdUcmFuc2Zvcm0odHJhbnNmb3JtKSwgZWMpOwogICAgICAgICB0cmFuc2Zvcm1hYmxlRWxlbWVu
dC0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybUxpc3QuZ2V0KCkpOwotICAgICAgICBpZiAodHJhbnNm
b3JtYWJsZUVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICB0cmFuc2Zvcm1hYmxlRWxl
bWVudC0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3VsZCBiZSBwYXJ0
IG9mIHNldFRyYW5zZm9ybQogICAgIH0KKyAgICBpZiAodHJhbnNmb3JtYWJsZUVsZW1lbnQtPnJl
bmRlcmVyKCkpCisgICAgICAgIHRyYW5zZm9ybWFibGVFbGVtZW50LT5yZW5kZXJlcigpLT5zZXRO
ZWVkc0xheW91dCh0cnVlKTsgLy8gc2hvdWxkIGJlIHBhcnQgb2Ygc2V0VHJhbnNmb3JtCit9CisK
K3ZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpCit7
CisgICAgLy8gRklYTUU6IE1ha2UgbXVsdGlwbGUgYWRkaXRpdmUgYW5pbWF0aW9ucyB3b3JrLgor
ICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOworICAgIGlm
ICghbV9hbmltYXRpb25WYWxpZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm1hYmxlRWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKKyAgICBt
X2Jhc2VJbmRleEluVHJhbmZvcm1MaXN0ID0gdHJhbnNmb3JtYWJsZUVsZW1lbnQtPnRyYW5zZm9y
bSgpLT5udW1iZXJPZkl0ZW1zKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdl
dCgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlv
bkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1h
dGVkVmFsdWVUb0VsZW1lbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRW
YWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpOwogICAgICAgICAKICAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgICAgICAg
ICAgICAgIApAQCAtNDYsMTEgKzQ1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKLSAgICAgICAgdmly
dHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVl
KGZsb2F0IHBlcmNlbnQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRv
VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICAgICAgCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgRmxvYXRQb2ludCBtX2Jhc2VQb2ludDsKICAgICAgICAgRmxvYXRT
aXplIG1fYW5pbWF0ZWRUcmFuc2xhdGlvbjsKICAgICAgICAgZmxvYXQgbV9hbmltYXRlZEFuZ2xl
OwogICAgICAgICAKQEAgLTYwLDkgKzYxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKICAgICAgICAgZmxvYXQgbV90b0FuZ2xlOwogICAgICAg
ICAKLSAgICAgICAgRmxvYXRTaXplIG1fcG9pbnREaWZmOwotICAgICAgICBmbG9hdCBtX2FuZ2xl
RGlmZjsKLSAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1fYmFzZUluZGV4SW5UcmFuZm9ybUxp
c3Q7CisgICAgICAgICAgICAgICAgCiAgICAgICAgIFBhdGggbV9wYXRoOwogICAgICAgICBWZWN0
b3I8ZmxvYXQ+IG1fa2V5UG9pbnRzOwogICAgICAgICBlbnVtIFJvdGF0ZU1vZGUgewpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMzE3
NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCiAKICNpbmNsdWRlIDxt
YXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQ1LDYgKzQ0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fdHlw
ZShTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKKyAgICAsIG1fYmFzZUluZGV4
SW5UcmFuZm9ybUxpc3QoMCkKIHsKIH0KIApAQCAtNTQsNyArNTQsNyBAQCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6flNWR0FuaW1hdGVUCiAKIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFNWR0FuaW1hdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKTsKIH0K
IAogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQpAQCAtNzQsOTQgKzc0LDY3IEBAIHZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlTWEKICAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9k
ZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNl
bnRhZ2VQYXN0KQorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0
ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKQogewotICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRP
X0FOSU1BVElPTikKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVh
dGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UKLSAgICAg
ICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fYmFzZVRyYW5z
Zm9ybSwgbV90b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2UpLmFkZFRv
U1ZHVHJhbnNmb3JtKG1fYmFzZVRyYW5zZm9ybSk7Ci0gICAgZWxzZQotICAgICAgICBtX2FuaW1h
dGVkVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV9mcm9tVHJhbnNmb3JtLCBtX3Rv
VHJhbnNmb3JtKS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdlUGFzdCkuYWRkVG9TVkdUcmFuc2Zv
cm0obV9mcm9tVHJhbnNmb3JtKTsKLSAgICByZXR1cm4gKG1fYW5pbWF0ZWRUcmFuc2Zvcm0gIT0g
bV9iYXNlVHJhbnNmb3JtKTsKLX0KLQotYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQotewotICAgIG1fYmFzZVRyYW5z
Zm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotICAgIG1fdG9UcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0o
KTsKLSAgICBtX2Zyb21UcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICBtX2FuaW1hdGVk
VHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgaWYgKCF0YXJnZXRFbGVtZW50
KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKLSAg
ICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJh
bnNmb3JtKCk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1MaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgbV9iYXNlVHJhbnNmb3JtID0gdHJhbnNmb3JtTGlzdC0+Y29uY2F0ZW5hdGVG
b3JUeXBlKG1fdHlwZSk7Ci0gICAgCi0gICAgLy8gSWYgYSBiYXNlIHZhbHVlIGlzIGVtcHR5LCBp
dHMgdHlwZSBzaG91bGQgbWF0Y2ggbV90eXBlIGluc3RlYWQgb2YgYmVpbmcgdW5rbm93bi4KLSAg
ICAvLyBJdCdzIG5vdCBjZXJ0YWluIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgcGFydCBvZiBTVkdU
cmFuc2Zvcm1MaXN0IG9yIG5vdCAtLSBjeWluZwotICAgIGlmIChtX2Jhc2VUcmFuc2Zvcm0udHlw
ZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQotICAgICAgICBtX2Jh
c2VUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0obV90eXBlKTsKLSAgICAgICAgCisgICAgbV9hbmlt
YXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fZnJvbVRyYW5zZm9ybSwgbV90
b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZSkuYWRkVG9TVkdUcmFuc2Zvcm0o
bV9mcm9tVHJhbnNmb3JtKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3ZvaWQgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNp
Z25lZCByZXBlYXQpCiB7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNm
b3JtYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKLSAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlz
dD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtKCk7CisgICAgQVNTRVJUKHRh
cmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpOworICAgCisgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybWFibGVFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOworICAg
IFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtYWJsZUVs
ZW1lbnQtPnRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNmb3JtTGlzdCkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCisgICAgLy8gRklYTUU6IEhhbmRsZSBtdWx0aXBsZSBhZGRpdGl2ZSB0cmFu
Zm9ybXMuCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIWlzQWRkaXRpdmUoKSkKKyAg
ICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAgIHdoaWxlICh0cmFuc2Zvcm1MaXN0LT5udW1i
ZXJPZkl0ZW1zKCkgPiBtX2Jhc2VJbmRleEluVHJhbmZvcm1MaXN0KQorICAgICAgICAgICAgdHJh
bnNmb3JtTGlzdC0+cmVtb3ZlSXRlbSh0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCkgLSAx
LCBlYyk7CisgICAgfSBlbHNlCiAgICAgICAgIHRyYW5zZm9ybUxpc3QtPmNsZWFyKGVjKTsKLSAg
ICAKICAgICB0cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKG1fYW5pbWF0ZWRUcmFuc2Zvcm0sIGVj
KTsKLSAgICB0cmFuc2Zvcm0tPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm1MaXN0LmdldCgpKTsKLSAg
ICBpZiAodHJhbnNmb3JtLT5yZW5kZXJlcigpKQotICAgICAgICB0cmFuc2Zvcm0tPnJlbmRlcmVy
KCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBzaG91bGQgcmVhbGx5IGJlIGluIHNldFRyYW5z
Zm9ybQotfQotCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJ
bmRleCkKLXsKLSAgICBzd2l0Y2ggKGFuaW1hdGlvbk1vZGUpIHsKLSAgICBjYXNlIEZST01fVE9f
QU5JTUFUSU9OOgotICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVl
KG1fZnJvbSk7Ci0gICAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAgIGNhc2UgVE9fQU5JTUFUSU9O
OgotICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3RvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGUk9NX0JZX0FOSU1BVElPTjoKLSAgICAgICAgbV9mcm9t
VHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOwotICAgICAgICBtX3RvVHJh
bnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBCWV9BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNm
b3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAgbV90b1RyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURp
c3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKG1fZnJvbVRyYW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1W
YWx1ZShtX2J5KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVkFMVUVTX0FOSU1BVElPTjoK
LSAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3ZhbHVlc1t2
YWx1ZUluZGV4XSk7Ci0gICAgICAgIG1fdG9UcmFuc2Zvcm0gPSAoKHZhbHVlSW5kZXggKyAxKSA8
IG1fdmFsdWVzLnNpemUoKSkgPyBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5k
ZXggKyAxXSkgOiBtX2Zyb21UcmFuc2Zvcm07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTk9f
QU5JTUFUSU9OOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CiAgICAgCisg
ICAgaWYgKHRyYW5zZm9ybWFibGVFbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICB0cmFuc2Zv
cm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3Vs
ZCByZWFsbHkgYmUgaW4gc2V0VHJhbnNmb3JtCit9CisgICAgCitib29sIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9t
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQoreworICAgIG1fZnJvbVRyYW5zZm9ybSA9
IHBhcnNlVHJhbnNmb3JtVmFsdWUoZnJvbVN0cmluZyk7CisgICAgbV90b1RyYW5zZm9ybSA9IHBh
cnNlVHJhbnNmb3JtVmFsdWUodG9TdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29u
c3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQoreworCisgICAg
bV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShmcm9tU3RyaW5nKTsKKyAgICBt
X3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMobV9m
cm9tVHJhbnNmb3JtLCBwYXJzZVRyYW5zZm9ybVZhbHVlKGJ5U3RyaW5nKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CisgICAgCit2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpzdGFydGVk
QWN0aXZlSW50ZXJ2YWwoKQoreworICAgIC8vIEZJWE1FOiBNYWtlIG11bHRpcGxlIGFkZGl0aXZl
IGFuaW1hdGlvbnMgd29yay4KKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZl
SW50ZXJ2YWwoKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9uVmFsaWQpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtYWJsZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdl
dEVsZW1lbnQoKSk7CisgICAgbV9iYXNlSW5kZXhJblRyYW5mb3JtTGlzdCA9IHRyYW5zZm9ybWFi
bGVFbGVtZW50LT50cmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpOworfQogCiBTVkdUcmFuc2Zv
cm0gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJhbnNmb3JtVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKICAgICBTVkdUcmFuc2Zvcm0gcmVzdWx0OwotICAgIGNv
bnN0IFVDaGFyKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7Ci0gICAgU1ZHVHJhbnNmb3JtYWJs
ZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3R5cGUsIHB0ciwgcHRyICsgdmFsdWUubGVuZ3RoKCks
IHJlc3VsdCk7IC8vIGlnbm9yaW5nIHJldHVybiB2YWx1ZQorICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHByZXR0eSBkdW1iIGJ1dCBwYXJzZVRyYW5zZm9ybVZhbHVlKCkgd2FudHMgdGhvc2UgcGFyZW50
aGVzaXMuCisgICAgU3RyaW5nIHBhcnNlU3RyaW5nKCIoIiArIHZhbHVlICsgIikiKTsKKyAgICBj
b25zdCBVQ2hhciogcHRyID0gcGFyc2VTdHJpbmcuY2hhcmFjdGVycygpOworICAgIFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUobV90eXBlLCBwdHIsIHB0ciArIHBhcnNlU3Ry
aW5nLmxlbmd0aCgpLCByZXN1bHQpOyAvLyBpZ25vcmluZyByZXR1cm4gdmFsdWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYgKzQxLDMwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VW
YWx1ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFs
dWVUb0VsZW1lbnQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVl
VG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1
ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0
ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCk7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnQpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmlu
ZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBz
dGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICAgICAgCiAKICAgICBwcml2YXRlOgogICAgICAg
ICBTVkdUcmFuc2Zvcm0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsK
ICAgICAgICAgdm9pZCBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgZG91YmxlJiBhbmdsZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CiAg
ICAgICAgIAogICAgICAgICBTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9iYXNlSW5kZXhJblRyYW5mb3JtTGlzdDsKIAog
ICAgICAgICBTVkdUcmFuc2Zvcm0gbV90b1RyYW5zZm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3Jt
IG1fZnJvbVRyYW5zZm9ybTsKIAotICAgICAgICBTVkdUcmFuc2Zvcm0gbV9iYXNlVHJhbnNmb3Jt
OwogICAgICAgICBTVkdUcmFuc2Zvcm0gbV9hbmltYXRlZFRyYW5zZm9ybTsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2
ICsyLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogCkBAIC0yNSw3NzggKzI2LDQxMSBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRl
ICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPG1hdGgu
aD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotdXNp
bmcgbmFtZXNwYWNlIFNWR05hbWVzOwotCiBTVkdBbmltYXRpb25FbGVtZW50OjpTVkdBbmltYXRp
b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0g
ICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6IFNNSUxUaW1pbmdFbGVtZW50KHRh
Z05hbWUsIGRvYykKICAgICAsIFNWR1Rlc3RzKCkKICAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKQotICAgICwgbV90YXJnZXRFbGVtZW50KDApCi0gICAgLCBtX2Nvbm5lY3RlZFRv
VGltZXIoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRUaW1lKDAuMCkKLSAgICAsIG1fc2ltcGxlRHVy
YXRpb24oMC4wKQotICAgICwgbV9maWxsKEZJTExfUkVNT1ZFKQotICAgICwgbV9yZXN0YXJ0KFJF
U1RBUlRfQUxXQVlTKQotICAgICwgbV9jYWxjTW9kZShDQUxDTU9ERV9MSU5FQVIpCi0gICAgLCBt
X2FkZGl0aXZlKEFERElUSVZFX1JFUExBQ0UpCi0gICAgLCBtX2FjY3VtdWxhdGUoQUNDVU1VTEFU
RV9OT05FKQotICAgICwgbV9hdHRyaWJ1dGVUeXBlKEFUVFJJQlVURVRZUEVfQVVUTykKLSAgICAs
IG1fbWF4KDAuMCkKLSAgICAsIG1fbWluKDAuMCkKLSAgICAsIG1fZW5kKDAuMCkKLSAgICAsIG1f
YmVnaW4oMC4wKQotICAgICwgbV9yZXBldGl0aW9ucygwKQotICAgICwgbV9yZXBlYXRDb3VudCgw
KQotICAgICwgbV9hbmltYXRpb25CZWdpbihEQkxfTUFYKQotICAgICwgbV9hbmltYXRpb25FbmQo
REJMX01BWCkKKyAgICAsIG1fYW5pbWF0aW9uVmFsaWQoZmFsc2UpCiB7Ci0KIH0KIAogU1ZHQW5p
bWF0aW9uRWxlbWVudDo6flNWR0FuaW1hdGlvbkVsZW1lbnQoKQogewogfQotCi1ib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdGFy
Z2V0RWxlbWVudCgpOwotfQotCi1TVkdFbGVtZW50KiBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudCkgewotICAgICAg
ICBOb2RlICp0YXJnZXQgPSAwOwotICAgICAgICBpZiAoIW1faHJlZi5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIHRhcmdldCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFNWR1VSSVJlZmVy
ZW5jZTo6Z2V0VGFyZ2V0KG1faHJlZikpOwotICAgICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGUo
KSkgewotICAgICAgICAgICAgLy8gVE9ETyA6IGRvIHdlIHJlYWxseSBuZWVkIHRvIHNraXAgbm9u
IGVsZW1lbnQgbm9kZXM/IENhbiB0aGF0IGhhcHBlbiBhdCBhbGw/Ci0gICAgICAgICAgICB0YXJn
ZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICB3aGlsZSAodGFyZ2V0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhcmdldC0+bm9kZVR5cGUoKSAhPSBFTEVNRU5UX05PREUpCi0gICAgICAg
ICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzU1ZHRWxlbWVudCgpKQotICAg
ICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdl
dCk7Ci0gICAgfQotIAotICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQ7Ci19Ci0KLWZsb2F0IFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmdldEVuZFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KG1fZW5kKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Z2V0U3RhcnRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChtX2JlZ2luKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0Q3VycmVu
dFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fY3Vy
cmVudFRpbWUpOwotfQotCi1mbG9hdCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRTaW1wbGVEdXJh
dGlvbihFeGNlcHRpb25Db2RlJikgY29uc3QKLXsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChtX3NpbXBsZUR1cmF0aW9uKTsKLX0KLQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZUtleU51bWJlcnMoVmVjdG9yPGZsb2F0PiYga2V5TnVtYmVycywgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBmbG9hdCBudW1iZXIgPSAwLjBmOwogICAgIAotICAgIGNvbnN0IFVD
aGFyKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0
ciArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7Ci0g
ICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5k
LCBudW1iZXIsIGZhbHNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAga2V5TnVtYmVy
cy5hcHBlbmQobnVtYmVyKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3Bh
Y2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICc7JykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgcHRyKys7Ci0gICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoVmVjdG9yPFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OktleVNwbGluZT4mIGtleVNwbGluZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMg
dm9pZCBwYXJzZUtleVRpbWVzKGNvbnN0IFN0cmluZyYgcGFyc2UsIFZlY3RvcjxmbG9hdD4mIHJl
c3VsdCkKIHsKLSAgICBmbG9hdCBudW1iZXIgPSAwLjBmOwotICAgIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OktleVNwbGluZSBrZXlTcGxpbmU7Ci0gICAgCi0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHZh
bHVlLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKLSAgICB3aGlsZSAocHRy
IDwgZW5kKSB7Ci0gICAgICAgIGlmICghKHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIGZh
bHNlKSAmJiBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAga2V5U3BsaW5lLmNvbnRyb2wxLnNldFgobnVtYmVyKTsKLSAgICAgICAgaWYg
KCEocGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgZmFsc2UpICYmIHNraXBPcHRpb25hbFNw
YWNlcyhwdHIsIGVuZCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBrZXlTcGxpbmUu
Y29udHJvbDEuc2V0WShudW1iZXIpOwotICAgICAgICBpZiAoIShwYXJzZU51bWJlcihwdHIsIGVu
ZCwgbnVtYmVyLCBmYWxzZSkgJiYgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGtleVNwbGluZS5jb250cm9sMi5zZXRYKG51bWJlcik7
Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgZmFsc2UpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBrZXlTcGxpbmUuY29udHJvbDIuc2V0WShudW1iZXIp
OwotICAgICAgICBrZXlTcGxpbmVzLmFwcGVuZChrZXlTcGxpbmUpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpIHx8ICpwdHIgIT0gJzsnKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBwdHIrKzsKLSAgICAgICAgc2tpcE9wdGlvbmFsU3Bh
Y2VzKHB0ciwgZW5kKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFy
c2VCZWdpbk9yRW5kVmFsdWUoZG91YmxlJiBudW1iZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgLy8gVE9ETzogRG9uJ3QgdXNlIFNWR1N0cmluZ0xpc3QgZm9yIHBhcnNpbmcuCi0gICAg
QXRvbWljU3RyaW5nIGR1bW15OwotICAgIFJlZlB0cjxTVkdTdHJpbmdMaXN0PiB2YWx1ZUxpc3Qg
PSBTVkdTdHJpbmdMaXN0OjpjcmVhdGUoUXVhbGlmaWVkTmFtZShkdW1teSwgZHVtbXksIGR1bW15
KSk7Ci0gICAgdmFsdWVMaXN0LT5wYXJzZSh2YWx1ZSwgJzsnKTsKLSAgICAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZhbHVlTGlz
dC0+bnVtYmVyT2ZJdGVtcygpOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGN1cnJlbnQgPSB2YWx1
ZUxpc3QtPmdldEl0ZW0oaSwgZWMpOwotICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJlbnQuc3Rh
cnRzV2l0aCgiYWNjZXNzS2V5IikpIHsKLSAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGtleURvd25F
dmVudExpc3RlbmVyIGZvciB0aGUgY2hhcmFjdGVyCi0gICAgICAgICAgICBTdHJpbmcgY2hhcmFj
dGVyID0gY3VycmVudC5zdWJzdHJpbmcoY3VycmVudC5sZW5ndGgoKSAtIDIsIDEpOwotICAgICAg
ICAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCEgU3VwcG9zZWQgdG8gcmVnaXN0ZXIgYWNj
ZXNzS2V5IGNoYXJhY3RlcgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuc3RhcnRzV2l0aCgi
d2FsbGNsb2NrIikpIHsKLSAgICAgICAgICAgIGludCBmaXJzdEJyYWNlID0gY3VycmVudC5maW5k
KCcoJyk7Ci0gICAgICAgICAgICBpbnQgc2Vjb25kQnJhY2UgPSBjdXJyZW50LmZpbmQoJyknKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHdhbGxjbG9ja1ZhbHVlID0gY3VycmVu
dC5zdWJzdHJpbmcoZmlyc3RCcmFjZSArIDEsIHNlY29uZEJyYWNlIC0gZmlyc3RCcmFjZSAtIDIp
OwotICAgICAgICAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCEgU3VwcG9zZWQgdG8gdXNl
IHdhbGxDbG9jayB2YWx1ZQotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuY29udGFpbnMoJy4n
KSkgewotICAgICAgICAgICAgaW50IGRvdFBvc2l0aW9uID0gY3VycmVudC5maW5kKCcuJyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBlbGVtZW50ID0gY3VycmVudC5zdWJzdHJp
bmcoMCwgZG90UG9zaXRpb24pOwotICAgICAgICAgICAgU3RyaW5nIGNsb2NrVmFsdWU7Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudC5jb250YWlucygiYmVnaW4iKSkKLSAgICAgICAgICAgICAgICBj
bG9ja1ZhbHVlID0gY3VycmVudC5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyA2KTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGN1cnJlbnQuY29udGFpbnMoImVuZCIpKQotICAgICAgICAgICAgICAgIGNs
b2NrVmFsdWUgPSBjdXJyZW50LnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDQpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoY3VycmVudC5jb250YWlucygicmVwZWF0IikpCi0gICAgICAgICAgICAgICAg
Y2xvY2tWYWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgNyk7Ci0gICAgICAg
ICAgICBlbHNlIHsgLy8gRE9NMiBFdmVudCBSZWZlcmVuY2UKLSAgICAgICAgICAgICAgICBpbnQg
cGx1c01pbnVzUG9zaXRpb24gPSAtMTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudC5jb250YWlucygnKycpKQotICAgICAgICAgICAgICAgICAgICBwbHVzTWlu
dXNQb3NpdGlvbiA9IGN1cnJlbnQuZmluZCgnKycpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGN1cnJlbnQuY29udGFpbnMoJy0nKSkKLSAgICAgICAgICAgICAgICAgICAgcGx1c01pbnVzUG9z
aXRpb24gPSBjdXJyZW50LmZpbmQoJy0nKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgZXZlbnQgPSBjdXJyZW50LnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDEsIHBs
dXNNaW51c1Bvc2l0aW9uIC0gZG90UG9zaXRpb24gLSAxKTsKLSAgICAgICAgICAgICAgICBjbG9j
a1ZhbHVlID0gY3VycmVudC5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyBldmVudC5sZW5ndGgoKSAr
IDEpOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3NlZCB0byB1c2UgRE9NIEV2ZW50
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBudW1iZXIgPSBw
YXJzZUNsb2NrVmFsdWUoY3VycmVudCk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5kZWZpbml0ZShu
dW1iZXIpKQotICAgICAgICAgICAgICAgIG51bWJlciAqPSAxMDAwLjA7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogc3VwcG9zZWQgdG8gc2V0IGJlZ2luL2VuZCB0aW1lCisgICAgcmVzdWx0LmNsZWFy
KCk7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyc2VMaXN0OworICAgIHBhcnNlLnNwbGl0KCc7Jywg
cGFyc2VMaXN0KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGFyc2VMaXN0LnNpemUo
KTsgKytuKSB7CisgICAgICAgIFN0cmluZyB0aW1lU3RyaW5nID0gcGFyc2VMaXN0W25dOworICAg
ICAgICBib29sIG9rOworICAgICAgICBmbG9hdCB0aW1lID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRp
bWVTdHJpbmcudG9Eb3VibGUoJm9rKSk7CisgICAgICAgIGlmICghb2sgfHwgdGltZSA8IDAuMCB8
fCB0aW1lID4gMS4wKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBpZiAoIW4pIHsK
KyAgICAgICAgICAgIGlmICh0aW1lICE9IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOwor
ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgPD0gcmVzdWx0Lmxhc3QoKSkKKyAgICAgICAgICAgIGdv
dG8gZmFpbDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh0aW1lKTsKKyAgICB9CisgICAgcmV0dXJu
OworZmFpbDoKKyAgICByZXN1bHQuY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VLZXlT
cGxpbmVzKGNvbnN0IFN0cmluZyYgcGFyc2UsIFZlY3RvcjxDdXJ2ZURhdGE+JiByZXN1bHQpCit7
CisgICAgcmVzdWx0LmNsZWFyKCk7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyc2VMaXN0OworICAg
IHBhcnNlLnNwbGl0KCc7JywgcGFyc2VMaXN0KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgcGFyc2VMaXN0LnNpemUoKTsgKytuKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhcnNl
U3BsaW5lOworICAgICAgICBwYXJzZUxpc3Rbbl0uc3BsaXQoJywnLCBwYXJzZVNwbGluZSk7Cisg
ICAgICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIHNlcGF0b3IgaXMgYSBzcGFjZSwgYWxsIHRlc3Rz
IHVzZSBjb21tYXMuIFdlaXJkLgorICAgICAgICBpZiAocGFyc2VMaXN0LnNpemUoKSA9PSAxKSAK
KyAgICAgICAgICAgIHBhcnNlTGlzdFtuXS5zcGxpdCgnICcsIHBhcnNlU3BsaW5lKTsKKyAgICAg
ICAgaWYgKHBhcnNlU3BsaW5lLnNpemUoKSAhPSA0KQorICAgICAgICAgICAgZ290byBmYWlsOwor
ICAgICAgICBkb3VibGUgY3VydmVWYWx1ZXNbNF07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBwYXJzZU51bWJlciA9IHBhcnNl
U3BsaW5lW2ldOyAKKyAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICBjdXJ2ZVZhbHVl
c1tpXSA9IHBhcnNlTnVtYmVyLnRvRG91YmxlKCZvayk7CisgICAgICAgICAgICBpZiAoIW9rIHx8
IGN1cnZlVmFsdWVzW2ldIDwgMC4wIHx8IGN1cnZlVmFsdWVzW2ldID4gMS4wKQorICAgICAgICAg
ICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoQ3VydmVEYXRhKGN1cnZlVmFsdWVzWzBdLCBjdXJ2ZVZhbHVlc1sxXSwgY3VydmVWYWx1
ZXNbMl0sIGN1cnZlVmFsdWVzWzNdKSk7CisgICAgfQorICAgIHJldHVybjsKK2ZhaWw6CisgICAg
cmVzdWx0LmNsZWFyKCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1l
KCkubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0cikpCi0gICAgICAgIG1faHJlZiA9IGF0dHIt
PnZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphdHRyaWJ1
dGVOYW1lQXR0cikKLSAgICAgICAgbV9hdHRyaWJ1dGVOYW1lID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF0dHJpYnV0ZVR5cGVBdHRyKSB7
Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJDU1MiKQotICAgICAgICAgICAgbV9hdHRy
aWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9DU1M7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZh
bHVlKCkgPT0gIlhNTCIpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVU
WVBFX1hNTDsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYXV0byIpCi0gICAg
ICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0FVVE87Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJlZ2luQXR0cikKLSAgICAgICAgcGFyc2VC
ZWdpbk9yRW5kVmFsdWUobV9iZWdpbiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjplbmRBdHRyKQotICAgICAgICBwYXJzZUJlZ2luT3JFbmRW
YWx1ZShtX2VuZCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpkdXJBdHRyKSB7Ci0gICAgICAgIG1fc2ltcGxlRHVyYXRpb24gPSBwYXJzZUNs
b2NrVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGlmICghaXNJbmRlZmluaXRlKG1fc2lt
cGxlRHVyYXRpb24pKQotICAgICAgICAgICAgbV9zaW1wbGVEdXJhdGlvbiAqPSAxMDAwLjA7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1pbkF0dHIpIHsKLSAgICAg
ICAgbV9taW4gPSBwYXJzZUNsb2NrVmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGlmICgh
aXNJbmRlZmluaXRlKG1fbWluKSkKLSAgICAgICAgICAgIG1fbWluICo9IDEwMDAuMDsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWF4QXR0cikgewotICAgICAgICBt
X21heCA9IHBhcnNlQ2xvY2tWYWx1ZShhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCFpc0lu
ZGVmaW5pdGUobV9tYXgpKQotICAgICAgICAgICAgbV9tYXggKj0gMTAwMC4wOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXN0YXJ0QXR0cikgewotICAgICAgICBp
ZiAoYXR0ci0+dmFsdWUoKSA9PSAid2hlbk5vdEFjdGl2ZSIpCi0gICAgICAgICAgICBtX3Jlc3Rh
cnQgPSBSRVNUQVJUX1dIRU5OT1RBQ1RJVkU7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVl
KCkgPT0gIm5ldmVyIikKLSAgICAgICAgICAgIG1fcmVzdGFydCA9IFJFU1RBUlRfTkVWRVI7Ci0g
ICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gImFsd2F5cyIpCi0gICAgICAgICAgICBt
X3Jlc3RhcnQgPSBSRVNUQVJUX0FMV0FZUzsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cmVwZWF0Q291bnRBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgp
ID09ICJpbmRlZmluaXRlIikKLSAgICAgICAgICAgIG1fcmVwZWF0Q291bnQgPSBEQkxfTUFYOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlcGVhdENvdW50ID0gYXR0ci0+dmFsdWUoKS50
b0RvdWJsZSgpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXBl
YXREdXJBdHRyKQotICAgICAgICBtX3JlcGVhdER1ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWxsQXR0cikgewotICAgICAgICBpZiAo
YXR0ci0+dmFsdWUoKSA9PSAiZnJlZXplIikKLSAgICAgICAgICAgIG1fZmlsbCA9IEZJTExfRlJF
RVpFOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJyZW1vdmUiKQotICAgICAg
ICAgICAgbV9maWxsID0gRklMTF9SRU1PVkU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmNhbGNNb2RlQXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9
PSAiZGlzY3JldGUiKQotICAgICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX0RJU0NSRVRF
OwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJsaW5lYXIiKQotICAgICAgICAg
ICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX0xJTkVBUjsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAic3BsaW5lIikKLSAgICAgICAgICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9T
UExJTkU7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInBhY2VkIikKLSAgICAg
ICAgICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9QQUNFRDsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewotICAgICAgICBtX3ZhbHVlcy5jbGVh
cigpOwotICAgICAgICBtX3ZhbHVlcyA9IHBhcnNlRGVsaW1pdGVkU3RyaW5nKGF0dHItPnZhbHVl
KCksICc7Jyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmtleVRp
bWVzQXR0cikgewotICAgICAgICBtX2tleVRpbWVzLmNsZWFyKCk7Ci0gICAgICAgIHBhcnNlS2V5
TnVtYmVycyhtX2tleVRpbWVzLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5U3BsaW5lc0F0dHIpIHsKLSAgICAgICAgbV9rZXlTcGxp
bmVzLmNsZWFyKCk7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyhtX2tleVNwbGluZXMsIGF0dHIt
PnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmcm9t
QXR0cikKLSAgICAgICAgbV9mcm9tID0gYXR0ci0+dmFsdWUoKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRvQXR0cikKLSAgICAgICAgbV90byA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpieUF0dHIpCi0gICAg
ICAgIG1fYnkgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6YWRkaXRpdmVBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJz
dW0iKQotICAgICAgICAgICAgbV9hZGRpdGl2ZSA9IEFERElUSVZFX1NVTTsKLSAgICAgICAgZWxz
ZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAicmVwbGFjZSIpCi0gICAgICAgICAgICBtX2FkZGl0aXZl
ID0gQURESVRJVkVfUkVQTEFDRTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6YWNjdW11bGF0ZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInN1
bSIpCi0gICAgICAgICAgICBtX2FjY3VtdWxhdGUgPSBBQ0NVTVVMQVRFX1NVTTsKLSAgICAgICAg
ZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAibm9uZSIpCi0gICAgICAgICAgICBtX2FjY3VtdWxh
dGUgPSBBQ0NVTVVMQVRFX05PTkU7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQorICAgICAgICBhdHRyLT52YWx1ZSgpLnN0cmluZygp
LnNwbGl0KCc7JywgbV92YWx1ZXMpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6a2V5VGltZXNBdHRyKQorICAgICAgICBwYXJzZUtleVRpbWVzKGF0dHItPnZhbHVlKCks
IG1fa2V5VGltZXMpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5
U3BsaW5lc0F0dHIpCisgICAgICAgIHBhcnNlS2V5U3BsaW5lcyhhdHRyLT52YWx1ZSgpLCBtX2tl
eVNwbGluZXMpOworICAgIGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgICAgICBTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiAgICAgfQogfQogCi1kb3VibGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VDbG9j
a1ZhbHVlKGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0
cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKLSAg
ICBTdHJpbmcgcGFyc2UgPSBkYXRhLnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgaWYgKHBhcnNl
ID09ICJpbmRlZmluaXRlIikKLSAgICAgICAgcmV0dXJuIERCTF9NQVg7Ci0KLSAgICBkb3VibGUg
cmVzdWx0OwotCi0gICAgaW50IGRvdWJsZVBvaW50T25lID0gcGFyc2UuZmluZCgnOicpOwotICAg
IGludCBkb3VibGVQb2ludFR3byA9IHBhcnNlLmZpbmQoJzonLCBkb3VibGVQb2ludE9uZSArIDEp
OwotCi0gICAgaWYgKGRvdWJsZVBvaW50T25lICE9IC0xICYmIGRvdWJsZVBvaW50VHdvICE9IC0x
KSB7IC8vIFNwZWM6ICJGdWxsIGNsb2NrIHZhbHVlcyIKLSAgICAgICAgdW5zaWduZWQgaG91cnMg
PSBwYXJzZS5zdWJzdHJpbmcoMCwgMikudG9VSW50U3RyaWN0KCk7Ci0gICAgICAgIHVuc2lnbmVk
IG1pbnV0ZXMgPSBwYXJzZS5zdWJzdHJpbmcoMywgMikudG9VSW50U3RyaWN0KCk7Ci0gICAgICAg
IHVuc2lnbmVkIHNlY29uZHMgPSBwYXJzZS5zdWJzdHJpbmcoNiwgMikudG9VSW50U3RyaWN0KCk7
Ci0gICAgICAgIHVuc2lnbmVkIG1pbGxpc2Vjb25kcyA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0g
KDM2MDAgKiBob3VycykgKyAoNjAgKiBtaW51dGVzKSArIHNlY29uZHM7Ci0KLSAgICAgICAgaWYg
KHBhcnNlLmZpbmQoJy4nKSAhPSAtMSkgewotICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSBwYXJz
ZS5zdWJzdHJpbmcoOSwgMik7Ci0gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0ZW1wLnRvVUlu
dFN0cmljdCgpOwotICAgICAgICAgICAgcmVzdWx0ICs9IChtaWxsaXNlY29uZHMgKiAoMSAvIHBv
dygxMC4wLCBpbnQodGVtcC5sZW5ndGgoKSkpKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGRvdWJsZVBvaW50T25lICE9IC0xICYmIGRvdWJsZVBvaW50VHdvID09IC0xKSB7IC8vIFNwZWM6
ICJQYXJ0aWFsIGNsb2NrIHZhbHVlcyIKLSAgICAgICAgdW5zaWduZWQgbWludXRlcyA9IHBhcnNl
LnN1YnN0cmluZygwLCAyKS50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25k
cyA9IHBhcnNlLnN1YnN0cmluZygzLCAyKS50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgdW5zaWdu
ZWQgbWlsbGlzZWNvbmRzID0gMDsKLQotICAgICAgICByZXN1bHQgPSAoNjAgKiBtaW51dGVzKSAr
IHNlY29uZHM7Ci0KLSAgICAgICAgaWYgKHBhcnNlLmZpbmQoJy4nKSAhPSAtMSkgewotICAgICAg
ICAgICAgU3RyaW5nIHRlbXAgPSBwYXJzZS5zdWJzdHJpbmcoNiwgMik7Ci0gICAgICAgICAgICBt
aWxsaXNlY29uZHMgPSB0ZW1wLnRvVUludFN0cmljdCgpOwotICAgICAgICAgICAgcmVzdWx0ICs9
IChtaWxsaXNlY29uZHMgKiAoMSAvIHBvdygxMC4wLCBpbnQodGVtcC5sZW5ndGgoKSkpKSk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgeyAvLyBTcGVjOiAiVGltZWNvdW50IHZhbHVlcyIKLSAgICAg
ICAgaW50IGRvdFBvc2l0aW9uID0gcGFyc2UuZmluZCgnLicpOwotCi0gICAgICAgIGlmIChwYXJz
ZS5lbmRzV2l0aCgiaCIpKSB7Ci0gICAgICAgICAgICBpZiAoZG90UG9zaXRpb24gPT0gLTEpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIHBhcnNlLmxlbmd0aCgp
IC0gMSkudG9VSW50U3RyaWN0KCkgKiAzNjAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIGRvdFBvc2l0aW9uKS50b1VJbnRT
dHJpY3QoKSAqIDM2MDA7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSBwYXJzZS5zdWJz
dHJpbmcoZG90UG9zaXRpb24gKyAxLCBwYXJzZS5sZW5ndGgoKSAtIGRvdFBvc2l0aW9uIC0gMik7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICgzNjAwLjAgKiB0ZW1wLnRvVUludFN0cmljdCgp
KSAqICgxIC8gcG93KDEwLjAsIGludCh0ZW1wLmxlbmd0aCgpKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJtaW4iKSkgewotICAgICAgICAgICAg
aWYgKGRvdFBvc2l0aW9uID09IC0xKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlLnN1
YnN0cmluZygwLCBwYXJzZS5sZW5ndGgoKSAtIDMpLnRvVUludFN0cmljdCgpICogNjA7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5zdWJzdHJpbmco
MCwgZG90UG9zaXRpb24pLnRvVUludFN0cmljdCgpICogNjA7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIHRlbXAgPSBwYXJzZS5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyAxLCBwYXJzZS5sZW5ndGgo
KSAtIGRvdFBvc2l0aW9uIC0gNCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICg2MC4wICog
dGVtcC50b1VJbnRTdHJpY3QoKSkgKiAoMSAvIHBvdygxMC4wLCBpbnQodGVtcC5sZW5ndGgoKSkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChwYXJzZS5lbmRzV2l0aCgibXMi
KSkgewotICAgICAgICAgICAgaWYgKGRvdFBvc2l0aW9uID09IC0xKQotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHBhcnNlLnN1YnN0cmluZygwLCBwYXJzZS5sZW5ndGgoKSAtIDIpLnRvVUludFN0
cmljdCgpIC8gMTAwMC4wOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIGRvdFBvc2l0aW9uKS50b1VJbnRTdHJpY3QoKSAvIDEw
MDAuMDsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNlLnN1YnN0cmluZyhkb3RQ
b3NpdGlvbiArIDEsIHBhcnNlLmxlbmd0aCgpIC0gZG90UG9zaXRpb24gLSAzKTsKLSAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gKHRlbXAudG9VSW50U3RyaWN0KCkgLyAxMDAwLjApICogKDEgLyBw
b3coMTAuMCwgaW50KHRlbXAubGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoInMiKSkgewotICAgICAgICAgICAgaWYgKGRvdFBvc2l0
aW9uID09IC0xKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlLnN1YnN0cmluZygwLCBw
YXJzZS5sZW5ndGgoKSAtIDEpLnRvVUludFN0cmljdCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIGRvdFBvc2l0aW9uKS50
b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNlLnN1YnN0
cmluZyhkb3RQb3NpdGlvbiArIDEsIHBhcnNlLmxlbmd0aCgpIC0gZG90UG9zaXRpb24gLSAyKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGVtcC50b1VJbnRTdHJpY3QoKSAqICgxIC8gcG93
KDEwLjAsIGludCh0ZW1wLmxlbmd0aCgpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlLnRvRG91YmxlKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAvLyBBc3N1bXB0aW9ucyBtYXkgbm90IGhvbGQgYWZ0ZXIgYXR0
cmlidXRlIGNoYW5nZS4KKyAgICBtX2FuaW1hdGlvblZhbGlkID0gZmFsc2U7CisgICAgU01JTFRp
bWluZ0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CiB9CiAK
LXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAg
ICBpZiAob3duZXJTVkdFbGVtZW50KCkpCi0gICAgICAgIG93bmVyU1ZHRWxlbWVudCgpLT50aW1l
U2NoZWR1bGVyKCktPmFkZFRpbWVyKHRoaXMsIGxyb3VuZChnZXRTdGFydFRpbWUoKSkpOwotICAg
IFNWR0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotfQotCi1TdHJpbmcgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpIGNvbnN0CitmbG9h
dCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRTdGFydFRpbWUoKSBjb25zdAogewotICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBpcyBub3QgZW50aXJlbHkgY29ycmVjdAotICAgIC8vIEl0IGRvZXMg
bm90IHByb3Blcmx5IGdyYWIgdGhlIHRydWUgImFuaW1WYWwiIGluc3RlYWQgZ3JhYnMgdGhlIGJh
c2VWYWwgKG9yIHNvbWV0aGluZyB2ZXJ5IGNsb3NlKQotCi0gICAgaWYgKCF0YXJnZXRFbGVtZW50
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICBTVkdFbGVtZW50KiB0YXJn
ZXQgPSB0YXJnZXRFbGVtZW50KCk7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gMDsK
LSAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNTdHlsZWQoKSkKLSAgICAgICAgc3R5bGVkID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldCk7Ci0gICAgCi0gICAgU3RyaW5n
IHJldDsKLQotICAgIEVBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUgPSBzdGF0aWNfY2FzdDxF
QXR0cmlidXRlVHlwZT4obV9hdHRyaWJ1dGVUeXBlKTsKLSAgICBpZiAoYXR0cmlidXRlVHlwZSA9
PSBBVFRSSUJVVEVUWVBFX0FVVE8pIHsKLSAgICAgICAgYXR0cmlidXRlVHlwZSA9IEFUVFJJQlVU
RVRZUEVfWE1MOwotCi0gICAgICAgIC8vIFNwZWM6IFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQg
bWF0Y2ggdGhlIGF0dHJpYnV0ZU5hbWUgdG8gYW4gYXR0cmlidXRlCi0gICAgICAgIC8vIGZvciB0
aGUgdGFyZ2V0IGVsZW1lbnQuIFRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGZpcnN0IHNlYXJjaCB0
aHJvdWdoIHRoZQotICAgICAgICAvLyBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIGZvciBhIG1hdGNo
aW5nIHByb3BlcnR5IG5hbWUsIGFuZCBpZiBub25lIGlzIGZvdW5kLAotICAgICAgICAvLyBzZWFy
Y2ggdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQuCi0gICAgICAgIGlm
IChzdHlsZWQgJiYgc3R5bGVkLT5zdHlsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGVkLT5z
dHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fYXR0cmlidXRlTmFtZSkpCi0gICAgICAgICAg
ICAgICAgYXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfQ1NTOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGlmIChhdHRyaWJ1dGVUeXBlID09IEFUVFJJQlVURVRZUEVfQ1NTKSB7Ci0g
ICAgICAgIGlmIChzdHlsZWQgJiYgc3R5bGVkLT5zdHlsZSgpKQotICAgICAgICAgICAgcmV0ID0g
c3R5bGVkLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKG1fYXR0cmlidXRlTmFtZSk7Ci0gICAg
fQotCi0gICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT0gQVRUUklCVVRFVFlQRV9YTUwgfHwgcmV0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0ID0gdGFyZ2V0RWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUobV9h
dHRyaWJ1dGVOYW1lKTsKLQotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoaW50ZXJ2YWxCZWdpbigpLnZhbHVlKCkpOwogfQogCi12b2lkIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK2Zsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEN1cnJlbnRUaW1lKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QK
LSAgICAvLyBJdCBkb2VzIG5vdCBwcm9wZXJseSBzZXQgdGhlICJhbmltVmFsIiwgcmF0aGVyIGl0
IHNldHMgdGhlICJiYXNlVmFsIgotICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0
dHJpYnV0ZSh0YXJnZXRFbGVtZW50KCksIG1fYXR0cmlidXRlTmFtZSwgdmFsdWUsIHN0YXRpY19j
YXN0PEVBdHRyaWJ1dGVUeXBlPihtX2F0dHJpYnV0ZVR5cGUpKTsKKyAgICByZXR1cm4gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChlbGFwc2VkKCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlKFNWR0VsZW1lbnQqIHRhcmdldCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFQXR0cmlidXRlVHlwZSB0eXBlKQor
ZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0U2ltcGxlRHVyYXRpb24oRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0CiB7Ci0gICAgaWYgKCF0YXJnZXQgfHwgbmFtZS5pc051bGwoKSB8fCB2YWx1ZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHNpbXBsZUR1cmF0aW9uKCkudmFsdWUoKSk7Cit9ICAgIAogICAgIAotICAgIFNWR1N0eWxl
ZEVsZW1lbnQqIHN0eWxlZCA9ICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1N0eWxlZCgpKSA/IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpIDogMDsKLQotICAgIEVBdHRyaWJ1dGVU
eXBlIGF0dHJpYnV0ZVR5cGUgPSB0eXBlOwotICAgIGlmICh0eXBlID09IEFUVFJJQlVURVRZUEVf
QVVUTykgewotICAgICAgICAvLyBTcGVjOiBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNo
IHRoZSBhdHRyaWJ1dGVOYW1lIHRvIGFuIGF0dHJpYnV0ZQotICAgICAgICAvLyBmb3IgdGhlIHRh
cmdldCBlbGVtZW50LiBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBmaXJzdCBzZWFyY2ggdGhyb3Vn
aCB0aGUKLSAgICAgICAgLy8gbGlzdCBvZiBDU1MgcHJvcGVydGllcyBmb3IgYSBtYXRjaGluZyBw
cm9wZXJ0eSBuYW1lLCBhbmQgaWYgbm9uZSBpcyBmb3VuZCwKLSAgICAgICAgLy8gc2VhcmNoIHRo
ZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50LgotICAgICAgICBpZiAoc3R5
bGVkICYmIHN0eWxlZC0+c3R5bGUoKSAmJiBzdHlsZWQtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NT
VmFsdWUobmFtZSkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9D
U1M7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVU
WVBFX1hNTDsKLSAgICB9Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKGF0dHJp
YnV0ZVR5cGUgPT0gQVRUUklCVVRFVFlQRV9DU1MgJiYgc3R5bGVkICYmIHN0eWxlZC0+c3R5bGUo
KSkKLSAgICAgICAgc3R5bGVkLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgIiIs
IGVjKTsKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGVUeXBlID09IEFUVFJJQlVURVRZUEVfWE1MKQot
ICAgICAgICB0YXJnZXQtPnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZWMpOwotfQotCi1TdHJp
bmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlTmFtZSgpIGNvbnN0Citib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxlbWVudChFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOworICAgIHJldHVybiBiZWdpbkVsZW1lbnRBdCgwLCBlYyk7
CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y29ubmVjdGVkVG9UaW1lcigpIGNvbnN0
Citib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxlbWVudEF0KGZsb2F0IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmV0dXJuIG1fY29ubmVjdGVkVG9UaW1lcjsKKyAg
ICBhZGRCZWdpblRpbWUoZWxhcHNlZCgpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0Zyb3plbigpIGNvbnN0Citib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmV0
dXJuIChtX2ZpbGwgPT0gRklMTF9GUkVFWkUpOworICAgIHJldHVybiBlbmRFbGVtZW50QXQoMCwg
ZWMpOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWRkaXRpdmUoKSBjb25zdAor
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4gKG1fYWRkaXRpdmUgPT0gQURESVRJVkVfU1VN
KSB8fCAoZGV0ZWN0QW5pbWF0aW9uTW9kZSgpID09IEJZX0FOSU1BVElPTik7CisgICAgaWYgKG9m
ZnNldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhZGRFbmRUaW1lKGVs
YXBzZWQoKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCgpIGNvbnN0CisgICAgCitTVkdBbmltYXRpb25FbGVt
ZW50OjpBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFuaW1hdGlvbk1vZGUoKSBj
b25zdAogewotICAgIHJldHVybiAobV9hY2N1bXVsYXRlID09IEFDQ1VNVUxBVEVfU1VNKSAmJiAo
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpICE9IFRPX0FOSU1BVElPTik7Ci19CisgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMS9SRUMtc21pbC1hbmltYXRpb24tMjAwMTA5MDQvI0FuaW1GdW5j
VmFsdWVzCisgICAgCisgICAgLy8gPHNldD4gaXMgYWx3YXlzIGEgdG8tYW5pbWF0aW9uCisgICAg
aWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpCisgICAgICAgIHJldHVybiBUb0FuaW1h
dGlvbjsKIAotRUFuaW1hdGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZWN0QW5pbWF0
aW9uTW9kZSgpIGNvbnN0Ci17CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVz
QXR0cikpCi0gICAgICAgIHJldHVybiBWQUxVRVNfQU5JTUFUSU9OOwotICAgIGVsc2UgaWYgKCgh
bV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8ICghbV90by5pc0VtcHR5KCkp
KSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHko
KSkgLy8gZnJvbS10byBhbmltYXRpb24KLSAgICAgICAgICAgIHJldHVybiBGUk9NX1RPX0FOSU1B
VElPTjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFRPX0FOSU1BVElPTjsKLSAg
ICB9IGVsc2UgaWYgKChtX2Zyb20uaXNFbXB0eSgpICYmIG1fdG8uaXNFbXB0eSgpICYmICFtX2J5
LmlzRW1wdHkoKSkgfHwKLSAgICAgICAgICAgICghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV9ieS5p
c0VtcHR5KCkpKSB7IC8vIGJ5L2Zyb20tYnkgYW5pbWF0aW9uCi0gICAgICAgIGlmICghbV9mcm9t
LmlzRW1wdHkoKSkgLy8gZnJvbS1ieSBhbmltYXRpb24KLSAgICAgICAgICAgIHJldHVybiBGUk9N
X0JZX0FOSU1BVElPTjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIEJZX0FOSU1B
VElPTjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fQU5JTUFUSU9OOworICAgICAgICByZXR1cm4g
VmFsdWVzQW5pbWF0aW9uOworICAgIGlmICghdG9WYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IFRvQW5pbWF0aW9uIDogRnJvbVRvQW5pbWF0
aW9uOworICAgIGlmICghYnlWYWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZyb21W
YWx1ZSgpLmlzRW1wdHkoKSA/IEJ5QW5pbWF0aW9uIDogRnJvbUJ5QW5pbWF0aW9uOworICAgIHJl
dHVybiBOb0FuaW1hdGlvbjsKK30KKworU1ZHQW5pbWF0aW9uRWxlbWVudDo6Q2FsY01vZGUgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FsY01vZGUoKSBjb25zdAoreyAgICAKKyAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nIGRpc2NyZXRlKCJkaXNjcmV0ZSIpOworICAgIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcgbGluZWFyKCJsaW5lYXIiKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nIHBhY2VkKCJwYWNlZCIpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgc3BsaW5l
KCJzcGxpbmUiKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRl
KFNWR05hbWVzOjpjYWxjTW9kZUF0dHIpOworICAgIGlmICh2YWx1ZSA9PSBkaXNjcmV0ZSkKKyAg
ICAgICAgcmV0dXJuIENhbGNNb2RlRGlzY3JldGU7CisgICAgaWYgKHZhbHVlID09IGxpbmVhcikK
KyAgICAgICAgcmV0dXJuIENhbGNNb2RlTGluZWFyOworICAgIGlmICh2YWx1ZSA9PSBwYWNlZCkK
KyAgICAgICAgcmV0dXJuIENhbGNNb2RlUGFjZWQ7CisgICAgaWYgKHZhbHVlID09IHNwbGluZSkK
KyAgICAgICAgcmV0dXJuIENhbGNNb2RlU3BsaW5lOworICAgIHJldHVybiBoYXNUYWdOYW1lKFNW
R05hbWVzOjphbmltYXRlTW90aW9uVGFnKSA/IENhbGNNb2RlUGFjZWQgOiBDYWxjTW9kZUxpbmVh
cjsKK30KKworU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXR0cmlidXRlVHlwZSBTVkdBbmltYXRpb25F
bGVtZW50OjphdHRyaWJ1dGVUeXBlKCkgY29uc3QKK3sgICAgCisgICAgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyBjc3MoIkNTUyIpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgeG1s
KCJYTUwiKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjphdHRyaWJ1dGVUeXBlQXR0cik7CisgICAgaWYgKHZhbHVlID09IGNzcykKKyAgICAg
ICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGVDU1M7CisgICAgaWYgKHZhbHVlID09IHhtbCkKKyAgICAg
ICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGVYTUw7CisgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGVBdXRv
OworfQorCitTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0Cit7ICAg
IAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRvQXR0cik7Cit9CisKK1N0cmlu
ZyBTVkdBbmltYXRpb25FbGVtZW50OjpieVZhbHVlKCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YnlBdHRyKTsKK30KKworU3RyaW5nIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmZyb21WYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmZyb21BdHRyKTsKIH0KLQotZG91YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnJlcGVhdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcGV0aXRpb25zOworICAgIAor
U3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZU5hbWUoKSBjb25zdAoreyAgICAK
KyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikuc3Ry
aW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
aXNJbmRlZmluaXRlKGRvdWJsZSB2YWx1ZSkKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNB
ZGRpdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICh2YWx1ZSA9PSBEQkxfTUFYKTsKKyAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIHN1bSgic3VtIik7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YWRkaXRpdmVBdHRyKTsKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gc3VtIHx8IGFuaW1hdGlvbk1vZGUoKSA9PSBCeUFuaW1hdGlvbjsKIH0K
IAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpjb25uZWN0VGltZXIoKQorYm9vbCBTVkdBbmlt
YXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVkKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1fY29u
bmVjdGVkVG9UaW1lcik7Ci0gICAgb3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+
Y29ubmVjdEludGVydmFsVGltZXIodGhpcyk7Ci0gICAgbV9jb25uZWN0ZWRUb1RpbWVyID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIHN1bSgic3VtIik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YWNjdW11bGF0ZUF0
dHIpOworICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gJiYgYW5pbWF0aW9uTW9kZSgpICE9IFRvQW5p
bWF0aW9uOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRpc2Nvbm5lY3RUaW1lcigp
Citib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobV9jb25uZWN0ZWRUb1RpbWVyKTsKLSAgICBvd25lclNWR0VsZW1lbnQoKS0+dGlt
ZVNjaGVkdWxlcigpLT5kaXNjb25uZWN0SW50ZXJ2YWxUaW1lcih0aGlzKTsKLSAgICBtX2Nvbm5l
Y3RlZFRvVGltZXIgPSBmYWxzZTsKKyAgICByZXR1cm4gdGFyZ2V0RWxlbWVudCgpOwogfQotCi1z
dGF0aWMgZG91YmxlIGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGRvdWJsZSBlbGFwc2VkU2Vjb25k
cywgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSByZXBl
dGl0aW9ucykKLXsKLSAgICBkb3VibGUgcGVyY2VudGFnZSA9IDAuMDsKLSAgICBkb3VibGUgdXNl
RWxhcHNlZCA9IGVsYXBzZWRTZWNvbmRzIC0gKGR1cmF0aW9uICogcmVwZXRpdGlvbnMpOwotICAg
IAotICAgIGlmIChkdXJhdGlvbiA+IDAuMCAmJiBlbmQgPT0gMC4wKQotICAgICAgICBwZXJjZW50
YWdlID0gMS4wIC0gKCgoc3RhcnQgKyBkdXJhdGlvbikgLSB1c2VFbGFwc2VkKSAvIGR1cmF0aW9u
KTsKLSAgICBlbHNlIGlmIChkdXJhdGlvbiA+IDAuMCAmJiBlbmQgIT0gMC4wKSB7Ci0gICAgICAg
IGlmIChkdXJhdGlvbiA+IGVuZCkKLSAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChz
dGFydCArIGVuZCkgLSB1c2VFbGFwc2VkKSAvIGVuZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGR1cmF0aW9uKSAtIHVzZUVsYXBzZWQp
IC8gZHVyYXRpb24pOwotICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gMC4wICYmIGVuZCAhPSAw
LjApCi0gICAgICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGVuZCkgLSB1c2VFbGFw
c2VkKSAvIGVuZCk7CiAgICAgCi0gICAgcmV0dXJuIHBlcmNlbnRhZ2U7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNwbGluZXMoY29uc3QgVmVjdG9y
PFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNwbGluZT4mIGtleVNwbGluZXMsIHVuc2lnbmVkIHZh
bHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKLXsKLSAgICBpZiAocGVyY2VudGFnZVBh
c3QgPT0gMC4wZikgLy8gdmFsdWVzIGF0IGtleSB0aW1lcyBuZWVkIG5vIHNwbGluZSBhZGp1c3Rt
ZW50Ci0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBTVkdBbmltYXRpb25FbGVtZW50OjpLZXlT
cGxpbmUmIGtleVNwbGluZSA9IGtleVNwbGluZXNbdmFsdWVJbmRleF07Ci0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoKSk7Ci0gICAgcGF0aC5hZGRCZXppZXJDdXJ2
ZVRvKGtleVNwbGluZS5jb250cm9sMSwga2V5U3BsaW5lLmNvbnRyb2wyLCBGbG9hdFBvaW50KDEu
MGYsIDEuMGYpKTsKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byB1c2UgYSB5LWF0LXggZnVu
Y3Rpb24gb24gcGF0aCwgdG8gY29tcHV0ZSB0aGUgeSB2YWx1ZSB0aGVuIG11bHRpcGx5IHBlcmNl
bnRhZ2VQYXN0IGJ5IHRoYXQgdmFsdWUKLX0KLQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp2
YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5jZVBlcmNl
bnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCitib29s
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUlzQ1NTKCkgY29uc3QKIHsKLSAg
ICAvLyBVbnNwZWNpZmllZDogYW5pbWF0aW9uIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBzdXBwb3J0
IENBTENNT0RFX1BBQ0VELCB3ZSBqdXN0IGFsd2F5cyBzaG93IHRoZSBmaXJzdCB2YWx1ZQotICAg
IHZhbHVlSW5kZXggPSAwOwotICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICBBdHRyaWJ1dGVU
eXBlIHR5cGUgPSBhdHRyaWJ1dGVUeXBlKCk7CisgICAgaWYgKHR5cGUgPT0gQXR0cmlidXRlVHlw
ZUNTUykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUgPT0gQXR0cmlidXRlVHlw
ZVhNTCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2
ZSBhIG1hcCBvZiBhbGwgU1ZHIHByb3BlcnRpZXMgYW5kIHRoZWlyIGF0dHJpYnV0ZSB0eXBlcyBz
byB3ZQorICAgIC8vIGNvdWxkIHZhbGlkYXRlIGFuaW1hdGlvbnMgYmV0dGVyLiBUaGUgc3BlYyBp
cyB2ZXJ5IHZhZ3VhIGFib3V0IHRoaXMuCisgICAgdW5zaWduZWQgaWQgPSBjc3NQcm9wZXJ0eUlE
KGF0dHJpYnV0ZU5hbWUoKSk7CisgICAgLy8gU1ZHIHJhbmdlCisgICAgaWYgKGlkID49IENTU1By
b3BlcnR5Q2xpcFBhdGggJiYgaWQgPD0gQ1NTUHJvcGVydHlXcml0aW5nTW9kZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgLy8gUmVndWxhciBDU1MgcHJvcGVydGllcyBhbHNvIGluIFNWRwor
ICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yIHx8IGlkID09IENTU1Byb3BlcnR5RGlz
cGxheSB8fCBpZCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkKKyAgICAgICAgfHwgKGlkID49IENTU1By
b3BlcnR5Rm9udCAmJiBpZCA8PSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpIAorICAgICAgICB8fCBp
ZCA9PSBDU1NQcm9wZXJ0eU92ZXJmbG93IHx8IGlkID09IENTU1Byb3BlcnR5VmlzaWJpbGl0eTsK
IH0KIAotZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG90YWxEaXN0YW5jZSgp
Cit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBTVkdFbGVtZW50
KiB0YXJnZXQgPSB0YXJnZXRFbGVtZW50KCk7CisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0
aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgaWYgKCF0YXJnZXQgfHwgYXR0cmlidXRlTmFtZS5p
c0VtcHR5KCkgfHwgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRp
b25Db2RlIGVjOworICAgIGlmICh0YXJnZXRBdHRyaWJ1dGVJc0NTUygpKSB7CisgICAgICAgIHRh
cmdldC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7
CisgICAgfSBlbHNlCisgICAgICAgIHRhcmdldC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUs
IHZhbHVlLCBlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWN1bGF0ZVZhbHVlSW5kZXhG
b3JLZXlUaW1lcyhmbG9hdCB0aW1lUGVyY2VudGFnZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2V5
VGltZXMsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgbGFzdEtleVRpbWUsIGZsb2F0JiBu
ZXh0S2V5VGltZSkKK1N0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVC
YXNlVmFsdWUoKSBjb25zdAogewotICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnRNaW51c09uZSA9
IGtleVRpbWVzLnNpemUoKSAtIDE7Ci0gICAgdmFsdWVJbmRleCA9IDA7Ci0gICAgQVNTRVJUKHRp
bWVQZXJjZW50YWdlID49IGtleVRpbWVzLmZpcnN0KCkpOwotICAgIHdoaWxlICgodmFsdWVJbmRl
eCA8IGtleVRpbWVzQ291bnRNaW51c09uZSkgJiYgKHRpbWVQZXJjZW50YWdlID49IGtleVRpbWVz
W3ZhbHVlSW5kZXggKyAxXSkpCi0gICAgICAgIHZhbHVlSW5kZXgrKzsKKyAgICBTdHJpbmcgYXR0
cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1l
bnQoKSB8fCBhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIAotICAgIGxhc3RLZXlUaW1lID0ga2V5VGltZXNbdmFsdWVJbmRleF07Ci0gICAgaWYg
KHZhbHVlSW5kZXggPCBrZXlUaW1lc0NvdW50TWludXNPbmUpCi0gICAgICAgIG5leHRLZXlUaW1l
ID0ga2V5VGltZXNbdmFsdWVJbmRleCArIDFdOwotICAgIGVsc2UKLSAgICAgICAgbmV4dEtleVRp
bWUgPSBsYXN0S2V5VGltZTsKLX0KLQotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1ZhbGlk
QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0g
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOwotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSB8fCAoYW5p
bWF0aW9uTW9kZSA9PSBOT19BTklNQVRJT04pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGFuaW1hdGlvbk1vZGUgPT0gVkFMVUVTX0FOSU1BVElPTikgewotICAgICAgICBpZiAoIW1f
dmFsdWVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1f
a2V5VGltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoKG1fdmFsdWVzLnNpemUoKSAhPSBt
X2tleVRpbWVzLnNpemUoKSkgfHwgKG1fa2V5VGltZXMuZmlyc3QoKSAhPSAwKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoKChtX2NhbGNNb2RlID09IENB
TENNT0RFX1NQTElORSkgfHwgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfTElORUFSKSkgJiYgKG1f
a2V5VGltZXMubGFzdCgpICE9IDEpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGZsb2F0IGxhc3RLZXlUaW1lID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgeCA9IDA7IHggPCBtX2tleVRpbWVzLnNpemUoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fa2V5VGltZXNbeF0gPCBsYXN0S2V5VGltZSB8fCBtX2tleVRpbWVzW3hdID4gMSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2tleVNwbGluZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoKG1f
dmFsdWVzLnNpemUoKSAtIDEpICE9IG1fa2V5U3BsaW5lcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IG1f
a2V5VGltZXMuc2l6ZSgpOyB4KyspCi0gICAgICAgICAgICAgICAgaWYgKG1fa2V5VGltZXNbeF0g
PCAwIHx8IG1fa2V5VGltZXNbeF0gPiAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KGZsb2F0
IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQ
YXN0KQotewotICAgIEFTU0VSVCh0aW1lUGVyY2VudGFnZSA8PSAxLjBmKTsKLSAgICBBU1NFUlQo
aXNWYWxpZEFuaW1hdGlvbigpKTsKLSAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0g
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOworICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVs
ZW1lbnQoKTsKKyAgICBTdHJpbmcgcmVzdWx0OwogICAgIAotICAgIC8vIHRvLWFuaW1hdGlvbnMg
aGF2ZSB0aGVpciBvd24gc3BlY2lhbCBoYW5kbGluZwotICAgIGlmIChhbmltYXRpb25Nb2RlID09
IFRPX0FOSU1BVElPTikKLSAgICAgICAgcmV0dXJuOworICAgIGlmICh0YXJnZXRBdHRyaWJ1dGVJ
c0NTUygpKSB7CisgICAgICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0
eWxlKHRhcmdldCk7CisgICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs
dWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJl
c3VsdCA9IHRhcmdldEVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogICAg
IAotICAgIC8vIHBhY2VkIGlzIHNwZWNpYWwsIGNhY3VsYXRlcyB2YWx1ZXMgYmFzZWQgb24gZGlz
dGFuY2UgaW5zdGVhZCBvZiB0aW1lCi0gICAgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfUEFD
RUQpIHsKLSAgICAgICAgZmxvYXQgdG90YWxEaXN0YW5jZSA9IGNhbGN1bGF0ZVRvdGFsRGlzdGFu
Y2UoKTsKLSAgICAgICAgZmxvYXQgZGlzdGFuY2VQZXJjZW50YWdlID0gdG90YWxEaXN0YW5jZSAq
IHRpbWVQZXJjZW50YWdlOwotICAgICAgICB2YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JE
aXN0YW5jZShkaXN0YW5jZVBlcmNlbnRhZ2UsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQogICAgIAotICAg
IC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY3VycmVudCBpbmRleCBpcyBiYXNlZCBvbiBvbiB0aW1l
Ci0gICAgLy8gYWxsIGZ1cnRoZXIgY2FsY3VsYXRpb25zIGFyZSBiYXNlZCBvbiB0aW1lIHBlcmNl
bnRhZ2VzLCB0byBhbGxvdyB1bmlmeWluZyBrZXlUaW1lcyBoYW5kbGluZyAmIG5vcm1hbCBhbmlt
YXRpb24KLSAgICBmbG9hdCBsYXN0S2V5VGltZVBlcmNlbnRhZ2UgPSAwOwotICAgIGZsb2F0IG5l
eHRLZXlUaW1lUGVyY2VudGFnZSA9IDA7Ci0gICAgaWYgKG1fa2V5VGltZXMuc2l6ZSgpICYmICht
X2tleVRpbWVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkpKQotICAgICAgICBjYWN1bGF0ZVZh
bHVlSW5kZXhGb3JLZXlUaW1lcyh0aW1lUGVyY2VudGFnZSwgbV9rZXlUaW1lcywgdmFsdWVJbmRl
eCwgbGFzdEtleVRpbWVQZXJjZW50YWdlLCBuZXh0S2V5VGltZVBlcmNlbnRhZ2UpOwotICAgIGVs
c2UgewotICAgICAgICB1bnNpZ25lZCBsYXN0UG9zc2libGVJbmRleCA9IChtX3ZhbHVlcy5zaXpl
KCkgPyBtX3ZhbHVlcy5zaXplKCkgLSAxOiAxKTsKLSAgICAgICAgdW5zaWduZWQgZmxvb3JlZFZh
bHVlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGltZVBlcmNlbnRhZ2UgKiBsYXN0UG9z
c2libGVJbmRleCk7Ci0gICAgICAgIHZhbHVlSW5kZXggPSBmbG9vcmVkVmFsdWVJbmRleDsKLSAg
ICAgICAgbGFzdEtleVRpbWVQZXJjZW50YWdlID0gZmxvb3JlZFZhbHVlSW5kZXggLyAoZmxvYXQp
bGFzdFBvc3NpYmxlSW5kZXg7Ci0gICAgICAgIG5leHRLZXlUaW1lUGVyY2VudGFnZSA9IChmbG9v
cmVkVmFsdWVJbmRleCArIDEpIC8gKGZsb2F0KWxhc3RQb3NzaWJsZUluZGV4OwotICAgIH0KK3N0
YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pIHsgcmV0dXJu
IDEuIC8gKDIwMC4gKiBkdXJhdGlvbik7IH0KICAgICAKLSAgICAvLyBObyBmdXJ0aGVyIGNhY3Vs
YXRpb24gaXMgbmVlZGVkIGlmIHdlJ3JlIGV4YWN0bHkgb24gYW4gaW5kZXguCi0gICAgaWYgKHRp
bWVQZXJjZW50YWdlID09IGxhc3RLZXlUaW1lUGVyY2VudGFnZSB8fCBsYXN0S2V5VGltZVBlcmNl
bnRhZ2UgPT0gbmV4dEtleVRpbWVQZXJjZW50YWdlKSB7Ci0gICAgICAgIHBlcmNlbnRhZ2VQYXN0
ID0gMC4wZjsKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0ZvclZhbHVl
c0FuaW1hdGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5n
JiBmcm9tLCBTdHJpbmcmIHRvKQoreworICAgIEFTU0VSVChtX2FuaW1hdGlvblZhbGlkKTsKKyAg
ICB1bnNpZ25lZCBrZXlUaW1lc0NvdW50ID0gbV9rZXlUaW1lcy5zaXplKCk7CisgICAgdW5zaWdu
ZWQgdmFsdWVzQ291bnQgPSBtX3ZhbHVlcy5zaXplKCk7CisgICAgQVNTRVJUKHZhbHVlc0NvdW50
ID4gMSk7CisgICAgQVNTRVJUKCFrZXlUaW1lc0NvdW50IHx8IHZhbHVlc0NvdW50ID09IGtleVRp
bWVzQ291bnQpOworICAgIEFTU0VSVCgha2V5VGltZXNDb3VudCB8fCAoa2V5VGltZXNDb3VudCA+
IDEgJiYgbV9rZXlUaW1lc1swXSA9PSAwKSk7CisgICAgdW5zaWduZWQgaW5kZXg7CisgICAgZm9y
IChpbmRleCA9IDE7IGluZGV4IDwga2V5VGltZXNDb3VudDsgKytpbmRleCkgeworICAgICAgICBp
ZiAobV9rZXlUaW1lc1tpbmRleF0gPj0gcGVyY2VudCkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAtLWluZGV4OworICAgIAorICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlRGlz
Y3JldGUpIHsKKyAgICAgICAgaWYgKCFrZXlUaW1lc0NvdW50KSAKKyAgICAgICAgICAgIGluZGV4
ID0gcGVyY2VudCA9PSAxLjBmID8gdmFsdWVzQ291bnQgLSAxIDogc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHBlcmNlbnQgKiB2YWx1ZXNDb3VudCk7CisgICAgICAgIGZyb20gPSBtX3ZhbHVlc1tpbmRl
eF07CisgICAgICAgIHRvID0gbV92YWx1ZXNbaW5kZXhdOworICAgICAgICBlZmZlY3RpdmVQZXJj
ZW50ID0gMC4wZjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICAvLyBvdGhlcndp
c2Ugd2UgZGVjaWRlIHdoYXQgcGVyY2VudCBhZnRlciB0aGF0IGluZGV4Ci0gICAgaWYgKChtX2Nh
bGNNb2RlID09IENBTENNT0RFX1NQTElORSkgJiYgKG1fa2V5U3BsaW5lcy5zaXplKCkgPT0gKG1f
dmFsdWVzLnNpemUoKSAtIDEpKSkKLSAgICAgICAgYWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlT
cGxpbmVzKG1fa2V5U3BsaW5lcywgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOwotICAgIGVs
c2UgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfRElTQ1JFVEUpCi0gICAgICAgIHBlcmNlbnRh
Z2VQYXN0ID0gMC4wZjsKLSAgICBlbHNlIHsgLy8gZGVmYXVsdCAoYW5kIGZhbGxiYWNrKSBtb2Rl
OiBsaW5lYXIKLSAgICAgICAgZmxvYXQga2V5VGltZVNwYW4gPSBuZXh0S2V5VGltZVBlcmNlbnRh
Z2UgLSBsYXN0S2V5VGltZVBlcmNlbnRhZ2U7Ci0gICAgICAgIGZsb2F0IHRpbWVTaW5jZUxhc3RL
ZXlUaW1lID0gdGltZVBlcmNlbnRhZ2UgLSBsYXN0S2V5VGltZVBlcmNlbnRhZ2U7Ci0gICAgICAg
IHBlcmNlbnRhZ2VQYXN0ID0gKHRpbWVTaW5jZUxhc3RLZXlUaW1lIC8ga2V5VGltZVNwYW4pOwor
ICAgIGZsb2F0IGZyb21QZXJjZW50OworICAgIGZsb2F0IHRvUGVyY2VudDsKKyAgICBpZiAoa2V5
VGltZXNDb3VudCkgeworICAgICAgICBmcm9tUGVyY2VudCA9IG1fa2V5VGltZXNbaW5kZXhdOwor
ICAgICAgICB0b1BlcmNlbnQgPSBtX2tleVRpbWVzW2luZGV4ICsgMV07CisgICAgfSBlbHNlIHsg
ICAgICAgIAorICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwZXJjZW50ICog
KHZhbHVlc0NvdW50IC0gMSkpOworICAgICAgICBmcm9tUGVyY2VudCA9ICBzdGF0aWNfY2FzdDxm
bG9hdD4oaW5kZXgpIC8gKHZhbHVlc0NvdW50IC0gMSk7CisgICAgICAgIHRvUGVyY2VudCA9ICBz
dGF0aWNfY2FzdDxmbG9hdD4oaW5kZXggKyAxKSAvICh2YWx1ZXNDb3VudCAtIDEpOworICAgIH0K
KyAgICAKKyAgICBpZiAoaW5kZXggPT0gdmFsdWVzQ291bnQgLSAxKQorICAgICAgICAtLWluZGV4
OworICAgIGZyb20gPSBtX3ZhbHVlc1tpbmRleF07CisgICAgdG8gPSBtX3ZhbHVlc1tpbmRleCAr
IDFdOworICAgIEFTU0VSVCh0b1BlcmNlbnQgPiBmcm9tUGVyY2VudCk7CisgICAgZWZmZWN0aXZl
UGVyY2VudCA9IHBlcmNlbnQgPT0gMS4wZiA/IDEuMGYgOiAocGVyY2VudCAtIGZyb21QZXJjZW50
KSAvICh0b1BlcmNlbnQgLSBmcm9tUGVyY2VudCk7CisgICAgCisgICAgaWYgKGNhbGNNb2RlKCkg
PT0gQ2FsY01vZGVTcGxpbmUpIHsKKyAgICAgICAgQVNTRVJUKG1fa2V5U3BsaW5lcy5zaXplKCkg
PT0gbV92YWx1ZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIEN1cnZlRGF0YSBiZXppZXIgPSBtX2tl
eVNwbGluZXNbaW5kZXhdOworICAgICAgICBTTUlMVGltZSBkdXJhdGlvbiA9IHNpbXBsZUR1cmF0
aW9uKCk7CisgICAgICAgIGlmICghZHVyYXRpb24uaXNGaW5pdGUoKSkKKyAgICAgICAgICAgIGR1
cmF0aW9uID0gMTAuMDsKKyAgICAgICAgZG91YmxlIHQgPSBiZXppZXIuc29sdmVDdXJ2ZVgoZWZm
ZWN0aXZlUGVyY2VudCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uLnZhbHVlKCkpKTsKKyAgICAgICAg
dCA9IGJlemllci5zYW1wbGVDdXJ2ZVkodCk7CisgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHQpOwogICAgIH0KIH0KLQotYm9vbCBTVkdBbmltYXRpb25F
bGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpCi17Ci0gICAgbV9i
YXNlVmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9F
bGVtZW50KCkKKyAgICAKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUlu
dGVydmFsKCkKIHsKLSAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0
ZWRWYWx1ZSk7Ci19CisgICAgbV9hbmltYXRpb25WYWxpZCA9IGZhbHNlOwogCi12b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIGVsYXBzZWRTZWNvbmRzLCBk
b3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgdGltZVBlcmNlbnRhZ2UgPSBtaW4odGltZVBl
cmNlbnRhZ2UsIDEuMCk7Ci0gICAgaWYgKCFjb25uZWN0ZWRUb1RpbWVyKCkpIHsKLSAgICAgICAg
Y29ubmVjdFRpbWVyKCk7CisgICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBhY2N1bXVsYXRlPSJzdW0iIHdpbGwgbm90
IHdvcmsgdy9vIGNvZGUgc2ltaWxhciB0byB0aGlzOgotLy8gICAgaWYgKGlzQWNjdW11bGF0ZWQo
KSAmJiByZXBlYXRpb25zKCkgIT0gMC4wKQotLy8gICAgICAgIGFjY3VtdWxhdGVGb3JSZXBldGl0
aW9ucyhtX3JlcGV0aXRpb25zKTsKLSAgICAKLSAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25N
b2RlID0gZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOwotICAgIAotICAgIHVuc2lnbmVkIHZhbHVlSW5k
ZXggPSAwOwotICAgIGZsb2F0IHBlcmNlbnRhZ2VQYXN0ID0gMDsKLSAgICBjYWxjdWxhdGVWYWx1
ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QobmFycm93UHJlY2lzaW9uVG9GbG9hdCh0aW1lUGVyY2Vu
dGFnZSksIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKLSAgICAgICAgCi0gICAgY2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzKGFuaW1hdGlvbk1vZGUsIHZhbHVlSW5kZXgpOwotICAgIAotICAg
IHVwZGF0ZUFuaW1hdGVkVmFsdWUoYW5pbWF0aW9uTW9kZSwgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCh0aW1lUGVyY2VudGFnZSksIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKLSAgICAKLSAg
ICBpZiAodGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7Ci0gICAgICAgIGlmICgobV9yZXBlYXRDb3Vu
dCA+IDAgJiYgbV9yZXBldGl0aW9ucyA8IG1fcmVwZWF0Q291bnQgLSAxKSB8fCBpc0luZGVmaW5p
dGUobV9yZXBlYXRDb3VudCkpIHsKLSAgICAgICAgICAgIG1fcmVwZXRpdGlvbnMrKzsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaXNjb25uZWN0VGlt
ZXIoKTsKLSAgICB9Ci19CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0
ZWRWYWx1ZUZvckVsYXBzZWRTZWNvbmRzKGRvdWJsZSBlbGFwc2VkU2Vjb25kcykKLXsKLSAgICAv
LyBGSVhNRTogZmlsbD0iZnJlZXplIiB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgc2F2aW5nIG9mZiB0
aGUgbV9zdG9wcGVkVGltZSBpbiBhIHN0b3AoKSBtZXRob2QgYW5kIGhhdmluZyBjb2RlIHNpbWls
YXIgdG8gdGhpczoKLS8vICAgIGlmIChpc1N0b3BwZWQoKSkgewotLy8gICAgICAgIGlmIChtX2Zp
bGwgPT0gRklMTF9GUkVFWkUpCi0vLyAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gbV9zdG9w
cGVkVGltZTsKLS8vICAgICAgICBlbHNlCi0vLyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLS8v
ICAgIH0KLSAgICAKLSAgICAvLyBWYWxpZGF0ZSBhbmltYXRpb24gdGltaW5nIHNldHRpbmdzOgot
ICAgIC8vICMxIChkdXJhdGlvbiA+IDApIC0+IGZpbmUKLSAgICAvLyAjMiAoZHVyYXRpb24gPD0g
MC4wICYmIGVuZCA+IDApIC0+IGZpbmUKLSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgaW5kZWZp
bml0ZSBkdXJhdGlvbiBmb3IgdGhlIDxzZXQ+IGVsZW1lbnQsIG5vdCBzdXJlIGlmIGl0IHNob3Vs
ZCBiZSBhbGxvd2VkIGZvciBvdGhlcnMgdG9vLiAKLSAgICAvLyBGSVhNRTogVmFsdWUgd29uJ3Qg
bmF0dXJhbGx5IGFuaW1hdGUgaW4gdGhpcyBjYXNlIHNvIGtlZXBpbmcgdGhlIHRpbWVyIHJlcGVh
dGluZyBpcyBzb3J0IG9mIHBvaW50bGVzcy4KLSAgICBpZiAoKG1fc2ltcGxlRHVyYXRpb24gPD0g
MC4wICYmIG1fZW5kIDw9IDAuMCkgfHwgKGlzSW5kZWZpbml0ZShtX3NpbXBsZUR1cmF0aW9uKSAm
JiBtX2VuZCA8PSAwLjAgJiYgIWhhc1RhZ05hbWUoc2V0VGFnKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gSWdub3JlIGR1cj0iMCIgb3IgZHVyPSItbmVnIgotICAgIAotICAgIGlmIChpc0lu
ZGVmaW5pdGUobV9hbmltYXRpb25CZWdpbikpCi0gICAgICAgIG1fYW5pbWF0aW9uQmVnaW4gPSBt
X2JlZ2luOwotICAgIAotICAgIGRvdWJsZSBwZXJjZW50YWdlID0gY2FsY3VsYXRlVGltZVBlcmNl
bnRhZ2UoZWxhcHNlZFNlY29uZHMsIG1fYW5pbWF0aW9uQmVnaW4sIG1fZW5kLCBtX3NpbXBsZUR1
cmF0aW9uLCBtX3JlcGV0aXRpb25zKTsKLSAgICAKLSAgICBpZiAocGVyY2VudGFnZSA8PSAxLjAg
fHwgY29ubmVjdGVkVG9UaW1lcigpKQotICAgICAgICBoYW5kbGVUaW1lckV2ZW50KGVsYXBzZWRT
ZWNvbmRzLCBwZXJjZW50YWdlKTsKLSAgICAKLSAgICBpZiAoZWxhcHNlZFNlY29uZHMgPiBtX2Fu
aW1hdGlvbkVuZCkgewotICAgICAgICBpZiAoY29ubmVjdGVkVG9UaW1lcigpKQotICAgICAgICAg
ICAgZGlzY29ubmVjdFRpbWVyKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9uRW5kID0gREJMX01BWDsK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUg
YW5pbWF0aW9ucyBvbiB0aGUgc2FtZSB0YXJnZXQgb3IgaWYgCisgICAgLy8gdGhlIHRpbWluZyBh
dHRpYnV0ZXMgY2hhbmdlIGR1cmluZyBhbmltYXRpb24gZHVlIHRvIERPTSBtYW5pcHVsYXRpb24u
CisgICAgbV9zYXZlZEJhc2VWYWx1ZSA9IHRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpOworCisg
ICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gdGhpcy0+YW5pbWF0aW9uTW9kZSgpOwor
ICAgIGlmIChhbmltYXRpb25Nb2RlID09IE5vQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uKQorICAgICAgICBtX2FuaW1h
dGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGZyb21WYWx1ZSgpLCB0b1ZhbHVl
KCkpOworICAgIGVsc2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCisgICAgICAg
IG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMobV9zYXZlZEJhc2VW
YWx1ZSwgdG9WYWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEZyb21CeUFu
aW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRCeVZh
bHVlcyhmcm9tVmFsdWUoKSwgYnlWYWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhbmltYXRpb25Nb2Rl
ID09IEJ5QW5pbWF0aW9uKQorICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJv
bUFuZEJ5VmFsdWVzKFN0cmluZygpLCBieVZhbHVlKCkpOworICAgIGVsc2UgaWYgKGFuaW1hdGlv
bk1vZGUgPT0gVmFsdWVzQW5pbWF0aW9uKSB7CisgICAgICAgIENhbGNNb2RlIGNhbGNNb2RlID0g
dGhpcy0+Y2FsY01vZGUoKTsKKyAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IG1fdmFsdWVzLnNp
emUoKSA+IDEKKyAgICAgICAgICAgICYmIChjYWxjTW9kZSA9PSBDYWxjTW9kZVBhY2VkIHx8ICFo
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtleVRpbWVzQXR0cikgfHwgKG1fdmFsdWVzLnNpemUoKSA9
PSBtX2tleVRpbWVzLnNpemUoKSkpCisgICAgICAgICAgICAmJiAoY2FsY01vZGUgPT0gQ2FsY01v
ZGVEaXNjcmV0ZSB8fCAhbV9rZXlUaW1lcy5zaXplKCkgfHwgbV9rZXlUaW1lcy5sYXN0KCkgPT0g
MS4wKQorICAgICAgICAgICAgJiYgKGNhbGNNb2RlICE9IENhbGNNb2RlU3BsaW5lIHx8IChtX2tl
eVNwbGluZXMuc2l6ZSgpICYmIG1fa2V5U3BsaW5lcy5zaXplKCkgPT0gbV92YWx1ZXMuc2l6ZSgp
IC0gMSkpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsgLy8gdmFsdWUgd2FzIHVwZGF0
ZWQsIG5lZWQgdG8gYXBwbHkKIH0KICAgICAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YmVn
aW5FbGVtZW50KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyBiZSBzeW5jaHJvbm91cz8KLSAgICByZXR1cm4gYmVnaW5FbGVtZW50QXQoMCwgZWMpOwotfQor
dm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjphcHBseUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1
bnNpZ25lZCByZXBlYXQpCit7ICAgIAorICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQorICAgICAg
ICByZXR1cm47CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YmVnaW5FbGVtZW50QXQoZmxv
YXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogSGFuZGxlIG5l
Z2F0aXZlIG9mZnNldHMgY29ycmVjdGx5LgotICAgIC8vIEluIGdlbmVyYWwgd2UgbmVlZCB0byBt
YWtlIFNNSUwgY29uY2VwdHMgbGlrZSAiYWN0aXZlIGR1cmF0aW9uIiBleHBsaWNpdCBpbiB0aGUg
Y29kZSAKLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAKLSAg
ICBpZiAoY29ubmVjdGVkVG9UaW1lcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX2FuaW1hdGlvblZhbGlkKQorICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9hbmltYXRp
b25CZWdpbiA9IG9mZnNldDsKLSAgICBpZiAob3duZXJTVkdFbGVtZW50KCkpIHsKLSAgICAgICAg
b3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+YWRkVGltZXIodGhpcywgb2Zmc2V0
KTsKLSAgICAgICAgb3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+c3RhcnRBbmlt
YXRpb25zKCk7Ci0gICAgICAgIGNvbm5lY3RUaW1lcigpOworICAgIGlmIChhbmltYXRpb25Nb2Rl
KCkgPT0gVmFsdWVzQW5pbWF0aW9uKSB7CisgICAgICAgIFN0cmluZyBmcm9tOworICAgICAgICBT
dHJpbmcgdG87CisgICAgICAgIGZsb2F0IGVmZmVjdGl2ZVBlcmNlbnQ7CisgICAgICAgIGN1cnJl
bnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24ocGVyY2VudCwgZWZmZWN0aXZlUGVyY2VudCwgZnJv
bSwgdG8pOworICAgICAgICBpZiAoZnJvbSAhPSBtX2xhc3RWYWx1ZXNBbmltYXRpb25Gcm9tIHx8
IHRvICE9IG1fbGFzdFZhbHVlc0FuaW1hdGlvblRvICkgeworICAgICAgICAgICAgbV9hbmltYXRp
b25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhmcm9tLCB0byk7CisgICAgICAgICAg
ICBpZiAoIW1fYW5pbWF0aW9uVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgbV9sYXN0VmFsdWVzQW5pbWF0aW9uRnJvbSA9IGZyb207CisgICAgICAgIH0KKyAgICAg
ICAgdXBkYXRlQW5pbWF0ZWRWYWx1ZShlZmZlY3RpdmVQZXJjZW50KTsKICAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1cGRhdGVBbmltYXRlZFZhbHVlKHBlcmNlbnQp
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudChy
ZXBlYXQpOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnQoRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVuYXBwbHlBbmltYXRpb24o
KQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBzeW5jaHJvbm91cz8KLSAgICByZXR1
cm4gZW5kRWxlbWVudEF0KDAsIGVjKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVj
dCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYW5pbWF0aW9ucyBvbiB0aGUgc2FtZSB0YXJnZXQgb3Ig
aWYgCisgICAgLy8gdGhlIHRpbWluZyBhdHRpYnV0ZXMgY2hhbmdlIGR1cmluZyBhbmltYXRpb24g
ZHVlIHRvIERPTSBtYW5pcHVsYXRpb24uCisgICAgaWYgKG1fc2F2ZWRCYXNlVmFsdWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1
ZShtX3NhdmVkQmFzZVZhbHVlKTsKKyAgICBtX3NhdmVkQmFzZVZhbHVlID0gU3RyaW5nKCk7CiB9
CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZGVkQWN0aXZl
SW50ZXJ2YWwoKQogewotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFjb25uZWN0ZWRUb1RpbWVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX2FuaW1hdGlvbkVuZCA9IG93bmVyU1ZHRWxlbWVudCgpLT50aW1lU2NoZWR1bGVyKCktPmVs
YXBzZWQoKSArIG9mZnNldDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3NhdmVkQmFzZVZhbHVl
ID0gU3RyaW5nKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJl
dmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI1LDU4ICsyNiwyMCBAQAogI2RlZmluZSBTVkdB
bmltYXRpb25FbGVtZW50X2gKICNpZiBFTkFCTEUoU1ZHKQogCisjaW5jbHVkZSAiQ3VydmVEYXRh
LmgiCiAjaW5jbHVkZSAiRWxlbWVudFRpbWVDb250cm9sLmgiCisjaW5jbHVkZSAiU01JTFRpbWUu
aCIKKyNpbmNsdWRlICJTTUlMVGltaW5nRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiU1ZHVGVzdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENv
bmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgVGltZUNvbnRhaW5lcjsKIAotICAgIGVu
dW0gRUZpbGxNb2RlIHsKLSAgICAgICAgRklMTF9SRU1PVkUgPSAwLAotICAgICAgICBGSUxMX0ZS
RUVaRQotICAgIH07Ci0KLSAgICBlbnVtIEVBZGRpdGl2ZU1vZGUgewotICAgICAgICBBRERJVElW
RV9SRVBMQUNFID0gMCwKLSAgICAgICAgQURESVRJVkVfU1VNCi0gICAgfTsKLQotICAgIGVudW0g
RUFjY3VtdWxhdGVNb2RlIHsKLSAgICAgICAgQUNDVU1VTEFURV9OT05FID0gMCwKLSAgICAgICAg
QUNDVU1VTEFURV9TVU0KLSAgICB9OwotCi0gICAgZW51bSBFQ2FsY01vZGUgewotICAgICAgICBD
QUxDTU9ERV9ESVNDUkVURSA9IDAsCi0gICAgICAgIENBTENNT0RFX0xJTkVBUiwKLSAgICAgICAg
Q0FMQ01PREVfUEFDRUQsCi0gICAgICAgIENBTENNT0RFX1NQTElORQotICAgIH07Ci0KLSAgICBl
bnVtIEVSZXN0YXJ0IHsKLSAgICAgICAgUkVTVEFSVF9BTFdBWVMgPSAwLAotICAgICAgICBSRVNU
QVJUX1dIRU5OT1RBQ1RJVkUsCi0gICAgICAgIFJFU1RBUlRfTkVWRVIKLSAgICB9OwotCi0gICAg
ZW51bSBFQXR0cmlidXRlVHlwZSB7Ci0gICAgICAgIEFUVFJJQlVURVRZUEVfQ1NTID0gMCwKLSAg
ICAgICAgQVRUUklCVVRFVFlQRV9YTUwsCi0gICAgICAgIEFUVFJJQlVURVRZUEVfQVVUTwotICAg
IH07Ci0KLSAgICAvLyBpbnRlcm5hbAotICAgIGVudW0gRUFuaW1hdGlvbk1vZGUgewotICAgICAg
ICBOT19BTklNQVRJT04gPSAwLAotICAgICAgICBUT19BTklNQVRJT04sCi0gICAgICAgIEJZX0FO
SU1BVElPTiwKLSAgICAgICAgVkFMVUVTX0FOSU1BVElPTiwKLSAgICAgICAgRlJPTV9UT19BTklN
QVRJT04sCi0gICAgICAgIEZST01fQllfQU5JTUFUSU9OCi0gICAgfTsKLQotICAgIGNsYXNzIFNW
R0FuaW1hdGlvbkVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCwKKyAgICBjbGFzcyBTVkdBbmlt
YXRpb25FbGVtZW50IDogcHVibGljIFNNSUxUaW1pbmdFbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRWxlbWVudFRpbWVDb250cm9sCkBAIC04NCwx
MjMgKzQ3LDczIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNW
R0FuaW1hdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAg
ICAgIHZpcnR1YWwgflNWR0FuaW1hdGlvbkVsZW1lbnQoKTsKLQotICAgICAgICAvLyAnU1ZHQW5p
bWF0aW9uRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdl
dCgpIGNvbnN0OwotICAgICAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdDsKICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CiAKLSAgICAgICAgZmxvYXQgZ2V0
RW5kVGltZSgpIGNvbnN0OworICAgICAgICAvLyBTVkdBbmltYXRpb25FbGVtZW50CiAgICAgICAg
IGZsb2F0IGdldFN0YXJ0VGltZSgpIGNvbnN0OwogICAgICAgICBmbG9hdCBnZXRDdXJyZW50VGlt
ZSgpIGNvbnN0OwogICAgICAgICBmbG9hdCBnZXRTaW1wbGVEdXJhdGlvbihFeGNlcHRpb25Db2Rl
JikgY29uc3Q7Ci0gICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0aW9u
QmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVl
Rm9yRWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBzZWRTZWNvbmRzKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwotCi0gICAgICAgIFN0cmluZyBh
dHRyaWJ1dGVOYW1lKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBjb25uZWN0ZWRUb1RpbWVyKCkg
Y29uc3Q7Ci0KLSAgICAgICAgYm9vbCBpc0Zyb3plbigpIGNvbnN0OwotICAgICAgICBib29sIGlz
QWRkaXRpdmUoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0FjY3VtdWxhdGVkKCkgY29uc3Q7Ci0K
LSAgICAgICAgZG91YmxlIHJlcGVhdGlvbnMoKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wg
aXNJbmRlZmluaXRlKGRvdWJsZSB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBFbGVtZW50
VGltZUNvbnRyb2wKICAgICAgICAgdmlydHVhbCBib29sIGJlZ2luRWxlbWVudChFeGNlcHRpb25D
b2RlJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBiZWdpbkVsZW1lbnRBdChmbG9hdCBvZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdmlydHVhbCBib29sIGVuZEVsZW1lbnQoRXhjZXB0
aW9uQ29kZSYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICAKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAg
bXV0YWJsZSBTVkdFbGVtZW50KiBtX3RhcmdldEVsZW1lbnQ7Citwcm90ZWN0ZWQ6CiAgICAgICAg
IAotICAgICAgICBFQW5pbWF0aW9uTW9kZSBkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3Q7Cisg
ICAgICAgIGVudW0gQ2FsY01vZGUgeyBDYWxjTW9kZURpc2NyZXRlLCBDYWxjTW9kZUxpbmVhciwg
Q2FsY01vZGVQYWNlZCwgQ2FsY01vZGVTcGxpbmUgfTsKKyAgICAgICAgQ2FsY01vZGUgY2FsY01v
ZGUoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1Zh
bHVlKGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1
dGUoU1ZHRWxlbWVudCogdGFyZ2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIEVBdHRyaWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9BVVRPKTsKKyAgICAgICAgZW51
bSBBdHRyaWJ1dGVUeXBlIHsgQXR0cmlidXRlVHlwZUNTUywgQXR0cmlidXRlVHlwZVhNTCwgQXR0
cmlidXRlVHlwZUF1dG8gfTsKKyAgICAgICAgQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBlKCkg
Y29uc3Q7CiAgICAgICAgIAotICAgICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFs
dWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIFN0cmluZyB0b1ZhbHVlKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyBieVZhbHVlKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBmcm9tVmFsdWUoKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAgICAgICAgCi0g
ICAgICAgIHZvaWQgY29ubmVjdFRpbWVyKCk7Ci0gICAgICAgIHZvaWQgZGlzY29ubmVjdFRpbWVy
KCk7CisgICAgICAgIGVudW0gQW5pbWF0aW9uTW9kZSB7IE5vQW5pbWF0aW9uLCBUb0FuaW1hdGlv
biwgQnlBbmltYXRpb24sIFZhbHVlc0FuaW1hdGlvbiwgRnJvbVRvQW5pbWF0aW9uLCBGcm9tQnlB
bmltYXRpb24gfTsKKyAgICAgICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlKCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVUb3RhbERpc3RhbmNlKCk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShm
bG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVy
Y2VudGFnZVBhc3QpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBjYWxjdWxhdGVWYWx1ZUluZGV4
QW5kUGVyY2VudGFnZVBhc3QoZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUlu
ZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRUYXJnZXQoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHZvaWQgaGFuZGxlVGltZXJFdmVu
dChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CisgICAgICAg
IFN0cmluZyB0YXJnZXRBdHRyaWJ1dGVCYXNlVmFsdWUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBz
ZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAgICBi
b29sIHRhcmdldEF0dHJpYnV0ZUlzQ1NTKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBl
cmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpID0gMDsKKyAgICAgICAgYm9vbCBpc0FkZGl0aXZl
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNBY2N1bXVsYXRlZCgpIGNvbnN0OworICAgIAorICAg
ICAgICAvLyBmcm9tIFNNSUxUaW1pbmdFbGVtZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFy
dGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0aW9u
KGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1
bmFwcGx5QW5pbWF0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFjdGl2ZUludGVy
dmFsKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZUtleU51bWJlcnMoVmVj
dG9yPGZsb2F0PiYga2V5TnVtYmVycywgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHBhcnNlQmVnaW5PckVuZFZhbHVlKGRvdWJsZSYgbnVtYmVyLCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9GT1JXQVJEX0RFQ0xBUkFU
SU9OUyhTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBib29sLCBFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKQotCi0gICAgICAgIGJvb2wgbV9j
b25uZWN0ZWRUb1RpbWVyIDogMTsKK3ByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxj
dWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRvU3RyaW5nKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5k
QnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5n
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBl
cmNlbnRhZ2UpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRv
RWxlbWVudCh1bnNpZ25lZCByZXBlYXQpID0gMDsKICAgICAgICAgCi0gICAgICAgIGRvdWJsZSBt
X2N1cnJlbnRUaW1lOwotICAgICAgICBkb3VibGUgbV9zaW1wbGVEdXJhdGlvbjsKLQotICAgICAg
ICAvLyBTaGFyZWQgYW5pbWF0aW9uIHByb3BlcnRpZXMKLSAgICAgICAgdW5zaWduZWQgbV9maWxs
IDogMTsgLy8gRUZpbGxNb2RlIG1fZmlsbAotICAgICAgICB1bnNpZ25lZCBtX3Jlc3RhcnQgOiAy
OyAvLyBFUmVzdGFydAotICAgICAgICB1bnNpZ25lZCBtX2NhbGNNb2RlIDogMjsgLy8gRUNhbGNN
b2RlCi0gICAgICAgIHVuc2lnbmVkIG1fYWRkaXRpdmUgOiAxOyAvLyBFQWRkaXRpdmVNb2RlCi0g
ICAgICAgIHVuc2lnbmVkIG1fYWNjdW11bGF0ZSA6IDE7IC8vIEVBY2N1bXVsYXRlTW9kZQotICAg
ICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZVR5cGUgOiAyOyAvLyBFQXR0cmlidXRlVHlwZQotICAg
ICAgICAKLSAgICAgICAgU3RyaW5nIG1fdG87Ci0gICAgICAgIFN0cmluZyBtX2J5OwotICAgICAg
ICBTdHJpbmcgbV9mcm9tOwotICAgICAgICBTdHJpbmcgbV9ocmVmOwotICAgICAgICBTdHJpbmcg
bV9yZXBlYXREdXI7Ci0gICAgICAgIFN0cmluZyBtX2F0dHJpYnV0ZU5hbWU7Ci0gICAgICAgIAot
ICAgICAgICBTdHJpbmcgbV9iYXNlVmFsdWU7Ci0gICAgICAgIFN0cmluZyBtX2FuaW1hdGVkVmFs
dWU7Ci0KLSAgICAgICAgZG91YmxlIG1fbWF4OwotICAgICAgICBkb3VibGUgbV9taW47Ci0gICAg
ICAgIGRvdWJsZSBtX2VuZDsKLSAgICAgICAgZG91YmxlIG1fYmVnaW47Ci0KLSAgICAgICAgZG91
YmxlIG1fcmVwZXRpdGlvbnM7Ci0gICAgICAgIGRvdWJsZSBtX3JlcGVhdENvdW50OworICAgICAg
ICB2b2lkIGN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgZmxv
YXQmIGVmZmVjdGl2ZVBlcmNlbnQsIFN0cmluZyYgZnJvbSwgU3RyaW5nJiB0byk7CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgICAgIFN0cmluZyBtX3NhdmVkQmFzZVZhbHVlOworICAgICAgICBib29s
IG1fYW5pbWF0aW9uVmFsaWQ7CiAKICAgICAgICAgVmVjdG9yPFN0cmluZz4gbV92YWx1ZXM7CiAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gbV9rZXlUaW1lczsKLSAgICAgICAgCi0gICAgICAgIHN0cnVj
dCBLZXlTcGxpbmUgewotICAgICAgICAgICAgRmxvYXRQb2ludCBjb250cm9sMTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgY29udHJvbDI7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBk
b3VibGUgbV9hbmltYXRpb25CZWdpbjsKLSAgICAgICAgZG91YmxlIG1fYW5pbWF0aW9uRW5kOwot
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPEtleVNwbGluZT4gbV9rZXlTcGxpbmVzOworICAgICAg
ICBWZWN0b3I8Q3VydmVEYXRhPiBtX2tleVNwbGluZXM7CisgICAgICAgIFN0cmluZyBtX2xhc3RW
YWx1ZXNBbmltYXRpb25Gcm9tOworICAgICAgICBTdHJpbmcgbV9sYXN0VmFsdWVzQW5pbWF0aW9u
VG87CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKICNlbmRpZiAvLyBTVkdBbmltYXRpb25FbGVtZW50X2gKLQotLy8gdmltOnRzPTQ6bm9l
dApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAzMTc0
MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVGltZVNjaGVk
dWxlci5oIgorI2luY2x1ZGUgIlNNSUxUaW1lQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiWE1MVG9r
ZW5pemVyLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnN0YXJ0QW5pbWF0aQogI2lmIEVOQUJMRShTVkdfQU5J
TUFUSU9OKSAgICAKICAgICBIYXNoU2V0PFNWR1NWR0VsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0g
bV90aW1lQ29udGFpbmVycy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHU1ZHRWxlbWVudCo+
OjppdGVyYXRvciBpdHIgPSBtX3RpbWVDb250YWluZXJzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7ICsr
aXRyKQotICAgICAgICAoKml0ciktPnRpbWVTY2hlZHVsZXIoKS0+c3RhcnRBbmltYXRpb25zKCk7
CisgICAgICAgICgqaXRyKS0+dGltZUNvbnRhaW5lcigpLT5iZWdpbigpOwogI2VuZGlmCiB9CiAg
ICAgCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTIgKzg3LDEyIEBAIHZvaWQgU1ZH
RWxlbWVudDo6c2V0WG1sYmFzZShjb25zdCBTdHJpbmcKIAogU1ZHU1ZHRWxlbWVudCogU1ZHRWxl
bWVudDo6b3duZXJTVkdFbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlKiBuID0gcGFyZW50Tm9k
ZSgpOworICAgIE5vZGUqIG4gPSBpc1NoYWRvd05vZGUoKSA/IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVu
dCo+KHRoaXMpLT5zaGFkb3dQYXJlbnROb2RlKCkgOiBwYXJlbnROb2RlKCk7CiAgICAgd2hpbGUg
KG4pIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCiAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG4pOwogCi0gICAgICAg
IG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgIG4gPSBuLT5pc1NoYWRvd05vZGUoKSA/IG4t
PnNoYWRvd1BhcmVudE5vZGUoKSA6IG4tPnBhcmVudE5vZGUoKTsKICAgICB9CiAKICAgICByZXR1
cm4gMDsKQEAgLTI1NCw2ICsyNTQsMTIgQEAgdm9pZCBTVkdFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYgogICAgIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ci0+bmFtZSgpKTsKIH0KIAor
dm9pZCBTVkdFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKCkgY29uc3QgCit7
IAorICAgIC8vIFRoZXJlIGlzIG5vdCBzdHlsZSBhdHRyaWJ1dGUgaW4gU1ZHIHRvIHVwZGF0ZSwg
dGhpcyBzYXZlcyBzb21lIHdvcmsgZHVyaW5nIGFuaW1hdGlvbnMuCisgICAgbV9pc1N0eWxlQXR0
cmlidXRlVmFsaWQgPSB0cnVlOyAKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmli
dXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKSBjb25zdDsKIAogICAgICAg
ICB2b2lkIHNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKGJvb2wgc2VuZFBhcmVudExvYWRFdmVu
dHMgPSBmYWxzZSk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBACiAjaW5jbHVkZSAiU1ZHVmlld1NwZWMuaCIKICNpbmNsdWRlICJTVkdab29tRXZl
bnQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVGltZVNj
aGVkdWxlci5oIgorI2luY2x1ZGUgIlNNSUxUaW1lQ29udGFpbmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjgsMjAgKzY4LDE5IEBAIFNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1l
bnQoY29uc3QgUXVhbGkKICAgICAsIG1fd2lkdGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoKQogICAg
ICwgbV9oZWlnaHQodGhpcywgTGVuZ3RoTW9kZUhlaWdodCkKICAgICAsIG1fdXNlQ3VycmVudFZp
ZXcoZmFsc2UpCi0gICAgLCBtX3RpbWVTY2hlZHVsZXIobmV3IFRpbWVTY2hlZHVsZXIoZG9jKSkK
KyAgICAsIG1fdGltZUNvbnRhaW5lcihuZXcgU01JTFRpbWVDb250YWluZXIpCiAgICAgLCBtX3Zp
ZXdTcGVjKDApCiAgICAgLCBtX2NvbnRhaW5lclNpemUoMzAwLCAxNTApCiAgICAgLCBtX2hhc1Nl
dENvbnRhaW5lclNpemUoZmFsc2UpCiB7CiAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgIjEwMCUiKSk7CiAgICAgc2V0SGVpZ2h0QmFzZVZhbHVl
KFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0LCAiMTAwJSIpKTsKKyAgICBkb2MtPnJl
Z2lzdGVyRm9yQ2FjaGVDYWxsYmFja3ModGhpcyk7CiB9CiAKIFNWR1NWR0VsZW1lbnQ6On5TVkdT
VkdFbGVtZW50KCkKIHsKLSAgICBkZWxldGUgbV90aW1lU2NoZWR1bGVyOwotICAgIG1fdGltZVNj
aGVkdWxlciA9IDA7Ci0KKyAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yQ2FjaGVDYWxsYmFj
a3ModGhpcyk7CiAgICAgLy8gVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKSBpcyBub3QgY2FsbGVkLgogICAgIC8vIHNlZSBDb250YWluZXJOb2RlOjpyZW1vdmVBbGxD
aGlsZHJlbiwgY2FsbGVkIGJ5IGl0J3MgZGVzdHJ1Y3Rvci4KICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CkBAIC00NTQsMjQg
KzQ1MywyNCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoCiAKIHZv
aWQgU1ZHU1ZHRWxlbWVudDo6cGF1c2VBbmltYXRpb25zKCkKIHsKLSAgICBpZiAoIW1fdGltZVNj
aGVkdWxlci0+YW5pbWF0aW9uc1BhdXNlZCgpKQotICAgICAgICBtX3RpbWVTY2hlZHVsZXItPnRv
Z2dsZUFuaW1hdGlvbnMoKTsKKyAgICBpZiAoIW1fdGltZUNvbnRhaW5lci0+aXNQYXVzZWQoKSkK
KyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5wYXVzZSgpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1l
bnQ6OnVucGF1c2VBbmltYXRpb25zKCkKIHsKLSAgICBpZiAobV90aW1lU2NoZWR1bGVyLT5hbmlt
YXRpb25zUGF1c2VkKCkpCi0gICAgICAgIG1fdGltZVNjaGVkdWxlci0+dG9nZ2xlQW5pbWF0aW9u
cygpOworICAgIGlmIChtX3RpbWVDb250YWluZXItPmlzUGF1c2VkKCkpCisgICAgICAgIG1fdGlt
ZUNvbnRhaW5lci0+cmVzdW1lKCk7CiB9CiAKIGJvb2wgU1ZHU1ZHRWxlbWVudDo6YW5pbWF0aW9u
c1BhdXNlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGltZVNjaGVkdWxlci0+YW5pbWF0aW9u
c1BhdXNlZCgpOworICAgIHJldHVybiBtX3RpbWVDb250YWluZXItPmlzUGF1c2VkKCk7CiB9CiAK
IGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmdldEN1cnJlbnRUaW1lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3RpbWVTY2hlZHVsZXItPmVsYXBzZWQoKSk7Cisg
ICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90aW1lQ29udGFpbmVyLT5lbGFwc2Vk
KCkudmFsdWUoKSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxv
YXQgLyogc2Vjb25kcyAqLykKQEAgLTUzMCw2ICs1MjksMTYgQEAgdm9pZCBTVkdTVkdFbGVtZW50
Ojppbmhlcml0Vmlld0F0dHJpYnV0ZQogICAgICAgICBjdXJyZW50VmlldygpLT5zZXRab29tQW5k
UGFuKHZpZXdFbGVtZW50LT56b29tQW5kUGFuKCkpOwogICAgIHJlbmRlcmVyKCktPnNldE5lZWRz
TGF5b3V0KHRydWUpOwogfQorICAgIAordm9pZCBTVkdTVkdFbGVtZW50Ojp3aWxsU2F2ZVRvQ2Fj
aGUoKQoreworICAgIHBhdXNlQW5pbWF0aW9ucygpOworfQorCit2b2lkIFNWR1NWR0VsZW1lbnQ6
OndpbGxSZXN0b3JlRnJvbUNhY2hlKCkKK3sKKyAgICB1bnBhdXNlQW5pbWF0aW9ucygpOworfQog
CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHVHJhbnNmb3JtOwogICAgIGNsYXNzIFNWR1ZpZXdT
cGVjOwogICAgIGNsYXNzIFNWR1ZpZXdFbGVtZW50OwotICAgIGNsYXNzIFRpbWVTY2hlZHVsZXI7
CisgICAgY2xhc3MgU01JTFRpbWVDb250YWluZXI7CiAgICAgY2xhc3MgU1ZHU1ZHRWxlbWVudCA6
IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdMYW5nU3BhY2UsCkBAIC04Nyw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IEZsb2F0UG9pbnQgY3VycmVudFRyYW5zbGF0ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEN1
cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOwogICAgICAgICAKLSAgICAgICAgVGlt
ZVNjaGVkdWxlciogdGltZVNjaGVkdWxlcigpIHsgcmV0dXJuIG1fdGltZVNjaGVkdWxlcjsgfQor
ICAgICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBwYXVzZUFu
aW1hdGlvbnMoKTsKICAgICAgICAgdm9pZCB1bnBhdXNlQW5pbWF0aW9ucygpOwpAQCAtMTU1LDkg
KzE1NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoLCBTVkdMZW5ndGgsIFksIHkpCiAg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdTVkdFbGVtZW50LCBTVkdM
ZW5ndGgsIFNWR0xlbmd0aCwgV2lkdGgsIHdpZHRoKQogICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoLCBTVkdMZW5ndGgsIEhlaWdo
dCwgaGVpZ2h0KQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTYXZlVG9DYWNo
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlc3RvcmVGcm9tQ2FjaGUoKTsKIAogICAg
ICAgICBib29sIG1fdXNlQ3VycmVudFZpZXc7Ci0gICAgICAgIFRpbWVTY2hlZHVsZXIqIG1fdGlt
ZVNjaGVkdWxlcjsKKyAgICAgICAgUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVDb250
YWluZXI7CiAgICAgICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGlvbjsKICAgICAgICAgbXV0YWJs
ZSBPd25QdHI8U1ZHVmlld1NwZWM+IG1fdmlld1NwZWM7CiAgICAgICAgIEludFNpemUgbV9jb250
YWluZXJTaXplOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysg
V2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsy
MywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAi
U1ZHU2V0RWxlbWVudC5oIgotI2luY2x1ZGUgIlRpbWVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorLy8gRklYTUU6
IFRoaXMgY2xhc3MgbmVlZHMgdG8gZGllLiBTVkdBbmltYXRlRWxlbWVudCBzaG91bGQgYmUgaW5z
dGFudGlhdGVkIGluc3RlYWQuCiAKIFNWR1NldEVsZW1lbnQ6OlNWR1NldEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKICAgICA6IFNWR0FuaW1hdGlv
bkVsZW1lbnQodGFnTmFtZSwgZG9jKQpAQCAtMzksMTMgKzQwLDIzIEBAIFNWR1NldEVsZW1lbnQ6
On5TVkdTZXRFbGVtZW50KCkKIHsKIH0KIAotYm9vbCBTVkdTZXRFbGVtZW50Ojp1cGRhdGVBbmlt
YXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQg
dmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpCit2b2lkIFNWR1NldEVsZW1lbnQ6OmFw
cGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpCiB7Ci0gICAgbV9hbmlt
YXRlZFZhbHVlID0gbV90bzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBzZXRUYXJnZXRBdHRyaWJ1
dGVBbmltYXRlZFZhbHVlKHRvVmFsdWUoKSk7Cit9CisgICAgCitib29sIFNWR1NldEVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRv
U3RyaW5nKSAKK3sgCisgICAgbV9hbmltYXRlZFZhbHVlID0gdG9TdHJpbmc7CisgICAgcmV0dXJu
IHRydWU7IAorfQorCitib29sIFNWR1NldEVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpIAoreyAK
KyAgICByZXR1cm4gZmFsc2U7IAogfQogCi1ib29sIFNWR1NldEVsZW1lbnQ6OmNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkKK2Jvb2wg
U1ZHU2V0RWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKQogewog
ICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuaAkocmV2aXNpb24gMzE3NDAp
CisrKyBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEx
ICszNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVl
KEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRl
RnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcm
IGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiBieVN0cmluZyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmlt
YXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCk7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBTdHJpbmcgbV9zYXZlZFRvOworICAgICAgICBTdHJpbmcgbV9hbmltYXRlZFZhbHVlOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Rp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUaW1lci5jcHAJKHJldmlzaW9u
IDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE3MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1RpbWVy
LmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgIlNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHVGltZXI6OlNWR1RpbWVyKFRpbWVTY2hlZHVsZXIqIHNj
aGVkdWxlciwgZG91YmxlIGludGVydmFsLCBib29sIHNpbmdsZVNob3QpCi0gICAgOiBUaW1lcjxU
aW1lU2NoZWR1bGVyPihzY2hlZHVsZXIsICZUaW1lU2NoZWR1bGVyOjp0aW1lckZpcmVkKQotICAg
ICwgbV9zY2hlZHVsZXIoc2NoZWR1bGVyKQotICAgICwgbV9pbnRlcnZhbChpbnRlcnZhbCkKLSAg
ICAsIG1fc2luZ2xlU2hvdChzaW5nbGVTaG90KQotewotfQotCi12b2lkIFNWR1RpbWVyOjpzdGFy
dCgpCi17Ci0gICAgaWYgKG1fc2luZ2xlU2hvdCkKLSAgICAgICAgc3RhcnRPbmVTaG90KG1faW50
ZXJ2YWwpOwotICAgIGVsc2UKLSAgICAgICAgc3RhcnRSZXBlYXRpbmcobV9pbnRlcnZhbCk7Ci19
Ci0KLVNWR1RpbWVyOjpUYXJnZXRBbmltYXRpb25NYXAgU1ZHVGltZXI6OmFuaW1hdGlvbnNCeUVs
ZW1lbnQoZG91YmxlIGVsYXBzZWRTZWNvbmRzKQotewotICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBh
bGwgYW5pbWF0aW9ucyB3aGljaCBhcHBseSB0byBlYWNoIGVsZW1lbnQKLSAgICAvLyBGSVhNRTog
VGhpcyBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYnkgYW5pbWF0aW9uIHByaW9yaXR5Ci0gICAgVGFy
Z2V0QW5pbWF0aW9uTWFwIHRhcmdldE1hcDsKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdOb3RpZnlTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fbm90aWZ5U2V0LmVuZCgpOwotICAgIGZvciAoU1ZHTm90aWZ5U2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbm90aWZ5U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTVkdBbmltYXRpb25FbGVtZW50KiBhbmltYXRpb24gPSAqaXQ7Ci0gICAgICAgIAotICAg
ICAgICAvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaXNhYmxlZCBlbGVtZW50IHdpdGggZmls
bD0iZnJlZXplIiwKLSAgICAgICAgLy8gd2UgaGF2ZSB0byB0YWtlIGl0IGludG8gYWNjb3VudCBm
b3IgZnVydGhlciBjYWxjdWxhdGlvbnMuCi0gICAgICAgIGlmICghbV9lbmFibGVkTm90aWZ5U2V0
LmNvbnRhaW5zKGFuaW1hdGlvbikpIHsKLSAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5pc0Zy
b3plbigpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGVsYXBz
ZWRTZWNvbmRzIDw9IChhbmltYXRpb24tPmdldFN0YXJ0VGltZSgpICsgYW5pbWF0aW9uLT5nZXRT
aW1wbGVEdXJhdGlvbihlYykpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXQgPSBjb25zdF9jYXN0PFNWR0Vs
ZW1lbnQqPihhbmltYXRpb24tPnRhcmdldEVsZW1lbnQoKSk7Ci0gICAgICAgIFRhcmdldEFuaW1h
dGlvbk1hcDo6aXRlcmF0b3IgaSA9IHRhcmdldE1hcC5maW5kKHRhcmdldCk7Ci0gICAgICAgIGlm
IChpICE9IHRhcmdldE1hcC5lbmQoKSkKLSAgICAgICAgICAgIGktPnNlY29uZC5hcHBlbmQoYW5p
bWF0aW9uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBWZWN0b3I8U1ZHQW5pbWF0aW9u
RWxlbWVudCo+IGxpc3Q7Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZChhbmltYXRpb24pOwotICAg
ICAgICAgICAgdGFyZ2V0TWFwLnNldCh0YXJnZXQsIGxpc3QpOwotICAgICAgICB9Ci0gICAgfQot
I2VuZGlmCi0gICAgcmV0dXJuIHRhcmdldE1hcDsKLX0KLQotLy8gRklYTUU6IFRoaXMgZnVudGlv
biB3aWxsIGV2ZW50dWFsbHkgYmVjb21lIHBhcnQgb2YgdGhlIEFuaW1hdGlvbkNvbXBvc2l0b3IK
LXZvaWQgU1ZHVGltZXI6OmFwcGx5QW5pbWF0aW9ucyhkb3VibGUgZWxhcHNlZFNlY29uZHMsIGNv
bnN0IFNWR1RpbWVyOjpUYXJnZXRBbmltYXRpb25NYXAmIHRhcmdldE1hcCkKLXsgICAgCi0jaWYg
RU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVy
YXRvciB0YXJnZXRJdGVyYXRvciA9IHRhcmdldE1hcC5iZWdpbigpOwotICAgIFRhcmdldEFuaW1h
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgdGVuZCA9IHRhcmdldE1hcC5lbmQoKTsKLSAgICBmb3Ig
KDsgdGFyZ2V0SXRlcmF0b3IgIT0gdGVuZDsgKyt0YXJnZXRJdGVyYXRvcikgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBzdGlsbCBub3QgMTAwJSBjb3JyZWN0LiAgQ29ycmVjdCB3b3VsZCBi
ZToKLSAgICAgICAgLy8gMS4gV2FsayBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgcHJpb3JpdHkgbGlz
dCB1bnRpbCBhIHJlcGxhY2UgKCFpc0FkZGl0aXZlKCkpIGlzIGZvdW5kCi0gICAgICAgIC8vIC0t
IFRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhcmVmdWwgY29uc2lk
ZXJhdGlvbiBmb3IgZGVwZW5kZW50IHZhbHVlcyAoc3VjaCBhcyBjeCBhbmQgZnggaW4gU1ZHUmFk
aWFsR3JhZGllbnQpCi0gICAgICAgIC8vIDIuIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSAob3IgbGFz
dCByZXBsYWNlKSBhcyB0aGUgbmV3IGFuaW1WYWwKLSAgICAgICAgLy8gMy4gQ2FsbCBlYWNoIGVu
YWJsZWQgYW5pbWF0aW9uIGluIHR1cm4sIHRvIGhhdmUgaXQgYXBwbHkgaXRzIGNoYW5nZXMKLSAg
ICAgICAgLy8gNC4gQWZ0ZXIgYnVpbGRpbmcgYSBuZXcgYW5pbVZhbCwgc2V0IGl0IG9uIHRoZSBl
bGVtZW50LgotICAgICAgICAKLSAgICAgICAgLy8gQ3VycmVubHkgd2UgdXNlIHRoZSBhY3R1YWwg
YW5pbVZhbCBvbiB0aGUgZWxlbWVudCBhcyAidGVtcG9yYXJ5IHN0b3JhZ2UiCi0gICAgICAgIC8v
IGFuZCBhYnN0cmFjdCB0aGUgZ2V0dGluZy9zZXR0aW5nIG9mIHRoZSBhdHRyaWJ1dGVzIGludG8g
dGhlIFNWR0FuaW1hdGUqIGNsYXNzZXMKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gdGFyZ2V0SXRlcmF0b3ItPnNlY29uZC5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50
KiBhbmltYXRpb24gPSB0YXJnZXRJdGVyYXRvci0+c2Vjb25kW2ldOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGlv
bi0+dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVw
ZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhlbGFwc2VkU2Vjb25kcykpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFuaW1hdGlv
bi0+YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gTWFrZSBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIG1hcCB0byBhdm9pZCBtdWx0
aXBsZSBzZXRDaGFuZ2VkIGNhbGxzIG9uIHRoZSBzYW1lIGVsZW1lbnQuCi0gICAgZm9yICh0YXJn
ZXRJdGVyYXRvciA9IHRhcmdldE1hcC5iZWdpbigpOyB0YXJnZXRJdGVyYXRvciAhPSB0ZW5kOyAr
K3RhcmdldEl0ZXJhdG9yKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIGtleSA9IHRhcmdldEl0ZXJh
dG9yLT5maXJzdDsKLSAgICAgICAgaWYgKGtleSAmJiBrZXktPmlzU3R5bGVkKCkpCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oa2V5KS0+c2V0Q2hhbmdlZCgpOwot
ICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFNWR1RpbWVyOjpub3RpZnlBbGwoKQotewotI2lmIEVO
QUJMRShTVkdfQU5JTUFUSU9OKQotICAgIGlmIChtX2VuYWJsZWROb3RpZnlTZXQuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXJzdCBidWlsZCBhIGxpc3Qgb2YgYW5pbWF0
aW9uIGVsZW1lbnRzIHBlciB0YXJnZXQgZWxlbWVudAotICAgIGRvdWJsZSBlbGFwc2VkU2Vjb25k
cyA9IG1fc2NoZWR1bGVyLT5lbGFwc2VkKCkgKiAxMDAwLjA7IC8vIFRha2UgdGltZSBub3cuCi0g
ICAgVGFyZ2V0QW5pbWF0aW9uTWFwIHRhcmdldE1hcCA9IGFuaW1hdGlvbnNCeUVsZW1lbnQoZWxh
cHNlZFNlY29uZHMpOwotICAgIAotICAgIC8vIFRoZW4gY29tcG9zaXRlIHRob3NlIGFuaW1hdGlv
bnMgZG93biB0byBmaW5hbCB2YWx1ZXMgYW5kIGFwcGx5Ci0gICAgYXBwbHlBbmltYXRpb25zKGVs
YXBzZWRTZWNvbmRzLCB0YXJnZXRNYXApOwotI2VuZGlmCi19Ci0KLXZvaWQgU1ZHVGltZXI6OmFk
ZE5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50KiBlbGVtZW50LCBib29sIGVuYWJsZWQpCi17Ci0j
aWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgbV9ub3RpZnlTZXQuYWRkKGVsZW1lbnQpOwot
ICAgIGlmIChlbmFibGVkKQotICAgICAgICBtX2VuYWJsZWROb3RpZnlTZXQuYWRkKGVsZW1lbnQp
OwotICAgIGVsc2UKLSAgICAgICAgbV9lbmFibGVkTm90aWZ5U2V0LnJlbW92ZShlbGVtZW50KTsK
LSNlbmRpZgotfQotCi12b2lkIFNWR1RpbWVyOjpyZW1vdmVOb3RpZnkoU1ZHQW5pbWF0aW9uRWxl
bWVudCAqZWxlbWVudCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAgICAvLyBGSVhN
RTogV2h5IGRvIHdlIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IGZvcmV2ZXIgKG1hcmtl
ZCBkaXNhYmxlZCk/Ci0gICAgLy8gVGhhdCBjYW4ndCBiZSByaWdodCEKLQotICAgIG1fZW5hYmxl
ZE5vdGlmeVNldC5yZW1vdmUoZWxlbWVudCk7Ci0gICAgaWYgKG1fZW5hYmxlZE5vdGlmeVNldC5p
c0VtcHR5KCkpCi0gICAgICAgIHN0b3AoKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZQot
Ci0vLyB2aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1RpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGltZXIuaAkocmV2
aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCi0jaW5j
bHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1ZHRWxlbWVudDsKLWNs
YXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7Ci0KLXR5cGVkZWYgSGFzaFNldDxTVkdBbmltYXRpb25F
bGVtZW50Kj4gU1ZHTm90aWZ5U2V0OwotCi1jbGFzcyBTVkdUaW1lciA6IHByaXZhdGUgVGltZXI8
VGltZVNjaGVkdWxlcj4KLXsKLXB1YmxpYzoKLSAgICBTVkdUaW1lcihUaW1lU2NoZWR1bGVyKiwg
ZG91YmxlIGludGVydmFsLCBib29sIHNpbmdsZVNob3QpOwotCi0gICAgdm9pZCBzdGFydCgpOwot
ICAgIHVzaW5nIFRpbWVyPFRpbWVTY2hlZHVsZXI+OjpzdG9wOwotICAgIHVzaW5nIFRpbWVyPFRp
bWVTY2hlZHVsZXI+Ojppc0FjdGl2ZTsKLQotICAgIHZvaWQgbm90aWZ5QWxsKCk7Ci0gICAgdm9p
ZCBhZGROb3RpZnkoU1ZHQW5pbWF0aW9uRWxlbWVudCosIGJvb2wgZW5hYmxlZCA9IGZhbHNlKTsK
LSAgICB2b2lkIHJlbW92ZU5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50Kik7Ci0KLSAgICBzdGF0
aWMgU1ZHVGltZXIqIGRvd25jYXN0KFRpbWVyPFRpbWVTY2hlZHVsZXI+KiB0KSB7IHJldHVybiBz
dGF0aWNfY2FzdDxTVkdUaW1lcio+KHQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFNWR0VsZW1lbnQqLCBWZWN0b3I8U1ZHQW5pbWF0aW9uRWxlbWVudCo+ID4gVGFyZ2V0QW5p
bWF0aW9uTWFwOwotICAgIFRhcmdldEFuaW1hdGlvbk1hcCBhbmltYXRpb25zQnlFbGVtZW50KGRv
dWJsZSBlbGFwc2VkVGltZSk7Ci0gICAgdm9pZCBhcHBseUFuaW1hdGlvbnMoZG91YmxlIGVsYXBz
ZWRTZWNvbmRzLCBjb25zdCBTVkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFwJiB0YXJnZXRNYXAp
OwotCi0gICAgVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXI7Ci0gICAgZG91YmxlIG1faW50ZXJ2
YWw7Ci0gICAgYm9vbCBtX3NpbmdsZVNob3Q7Ci0KLSAgICBTVkdOb3RpZnlTZXQgbV9ub3RpZnlT
ZXQ7Ci0gICAgU1ZHTm90aWZ5U2V0IG1fZW5hYmxlZE5vdGlmeVNldDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDEwICsxMTksOSBAQCB2b2lkIFNW
R1VzZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50CiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwotCiAgICAgbV90YXJnZXRFbGVtZW50SW5zdGFuY2UgPSAwOwogICAgIG1fc2hhZG93
VHJlZVJvb3RFbGVtZW50ID0gMDsKKyAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50
KCk7CiB9CiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKSW5kZXg6IFdlYkNvcmUvc3ZnL1RpbWVTY2hlZHVsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1RpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lv
biAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1RpbWVTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE1MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IlRpbWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiU3lz
dGVtVGltZS5oIgotI2luY2x1ZGUgIlNWR1RpbWVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY29uc3QgZG91YmxlIHN0YXRpY1RpbWVySW50ZXJ2YWwgPSAwLjA1MDsgLy8gNTAgbXMKLQot
VGltZVNjaGVkdWxlcjo6VGltZVNjaGVkdWxlcihEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBt
X2NyZWF0aW9uVGltZShjdXJyZW50VGltZSgpKQotICAgICwgbV9zYXZlZFRpbWUoMCkKLSAgICAs
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi17Ci0gICAgLy8gRG9uJ3Qgc3RhcnQgdGhpcyB0aW1lciB5
ZXQuCi0gICAgbV9pbnRlcnZhbFRpbWVyID0gbmV3IFNWR1RpbWVyKHRoaXMsIHN0YXRpY1RpbWVy
SW50ZXJ2YWwsIGZhbHNlKTsKLX0KLQotVGltZVNjaGVkdWxlcjo6flRpbWVTY2hlZHVsZXIoKQot
ewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3RpbWVyU2V0KTsKLSAgICBkZWxldGUgbV9pbnRlcnZh
bFRpbWVyOwotfQotCi12b2lkIFRpbWVTY2hlZHVsZXI6OmFkZFRpbWVyKFNWR0FuaW1hdGlvbkVs
ZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIG1zKQotewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9O
KQotICAgIFNWR1RpbWVyKiBzdmdUaW1lciA9IG5ldyBTVkdUaW1lcih0aGlzLCBtcyAqIDAuMDAx
LCB0cnVlKTsKLSAgICBzdmdUaW1lci0+YWRkTm90aWZ5KGVsZW1lbnQsIHRydWUpOwotICAgIG1f
dGltZXJTZXQuYWRkKHN2Z1RpbWVyKTsKLSAgICBtX2ludGVydmFsVGltZXItPmFkZE5vdGlmeShl
bGVtZW50LCBmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUaW1lU2NoZWR1bGVyOjpjb25uZWN0
SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50KiBlbGVtZW50KQotewotI2lmIEVOQUJM
RShTVkdfQU5JTUFUSU9OKQotICAgIG1faW50ZXJ2YWxUaW1lci0+YWRkTm90aWZ5KGVsZW1lbnQs
IHRydWUpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGltZVNjaGVkdWxlcjo6ZGlzY29ubmVjdEludGVy
dmFsVGltZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCogZWxlbWVudCkKLXsKLSNpZiBFTkFCTEUoU1ZH
X0FOSU1BVElPTikKLSAgICBtX2ludGVydmFsVGltZXItPnJlbW92ZU5vdGlmeShlbGVtZW50KTsK
LSNlbmRpZgotfQotCi12b2lkIFRpbWVTY2hlZHVsZXI6OnN0YXJ0QW5pbWF0aW9ucygpCi17Ci0j
aWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgbV9jcmVhdGlvblRpbWUgPSBjdXJyZW50VGlt
ZSgpOwotCi0gICAgU1ZHVGltZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fdGltZXJTZXQuZW5kKCk7
Ci0gICAgZm9yIChTVkdUaW1lclNldDo6aXRlcmF0b3IgaXQgPSBtX3RpbWVyU2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdUaW1lciogc3ZnVGltZXIgPSAqaXQ7Ci0g
ICAgICAgIGlmIChzdmdUaW1lciAmJiAhc3ZnVGltZXItPmlzQWN0aXZlKCkpCi0gICAgICAgICAg
ICBzdmdUaW1lci0+c3RhcnQoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBUaW1lU2NoZWR1
bGVyOjp0b2dnbGVBbmltYXRpb25zKCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAg
ICBpZiAobV9pbnRlcnZhbFRpbWVyLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIG1faW50ZXJ2YWxU
aW1lci0+c3RvcCgpOwotICAgICAgICBtX3NhdmVkVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc2F2ZWRUaW1lICE9IDApIHsKLSAgICAgICAgICAgIG1f
Y3JlYXRpb25UaW1lICs9IGN1cnJlbnRUaW1lKCkgLSBtX3NhdmVkVGltZTsKLSAgICAgICAgICAg
IG1fc2F2ZWRUaW1lID0gMDsKLSAgICAgICAgfQotICAgICAgICBtX2ludGVydmFsVGltZXItPnN0
YXJ0KCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLWJvb2wgVGltZVNjaGVkdWxlcjo6YW5pbWF0aW9u
c1BhdXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2ludGVydmFsVGltZXItPmlzQWN0aXZl
KCk7Ci19Ci0KLXZvaWQgVGltZVNjaGVkdWxlcjo6dGltZXJGaXJlZChUaW1lcjxUaW1lU2NoZWR1
bGVyPiogYmFzZVRpbWVyKQotewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAgIC8vIEdl
dCB0aGUgcG9pbnRlciBub3csIGJlY2F1c2Ugbm90aWZ5QWxsIGNvdWxkIG1ha2UgdGhlIGRvY3Vt
ZW50LAotICAgIC8vIGluY2x1ZGluZyB0aGlzIFRpbWVTY2hlZHVsZXIsIGdvIGF3YXkuCi0gICAg
UmVmUHRyPERvY3VtZW50PiBkb2MgPSBtX2RvY3VtZW50OwotCi0gICAgU1ZHVGltZXIqIHRpbWVy
ID0gU1ZHVGltZXI6OmRvd25jYXN0KGJhc2VUaW1lcik7Ci0KLSAgICB0aW1lci0+bm90aWZ5QWxs
KCk7Ci0KLSAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IHNhZmUgdG8gbG9vayBhdCBtX2ludGVy
dmFsVGltZXIgbm93PwotICAgIC8vIElzbid0IGl0IHBvc3NpYmxlIHRoZSBUaW1lU2NoZWR1bGVy
IHdhcyBkZWxldGVkIGFscmVhZHk/Ci0gICAgLy8gSWYgc28sIHRpbWVyLCBtX3RpbWVyU2V0LCBh
bmQgbV9pbnRlcnZhbFRpbWVyIGhhdmUgYWxsCi0gICAgLy8gYmVlbiBkZWxldGVkLiBNYXkgbmVl
ZCB0byByZWZlcmVuY2UgY291bnQgdGhlIFRpbWVTY2hlZHVsZXIKLSAgICAvLyB0byB3b3JrIGFy
b3VuZCB0aGlzLCBhbmQgcmVmL2RlcmVmIGl0IGluIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKHRp
bWVyICE9IG1faW50ZXJ2YWxUaW1lcikgewotICAgICAgICBBU1NFUlQoIXRpbWVyLT5pc0FjdGl2
ZSgpKTsKLSAgICAgICAgQVNTRVJUKG1fdGltZXJTZXQuY29udGFpbnModGltZXIpKTsKLSAgICAg
ICAgbV90aW1lclNldC5yZW1vdmUodGltZXIpOwotICAgICAgICBkZWxldGUgdGltZXI7Ci0KLSAg
ICAgICAgLy8gVGhlIHNpbmdsZVNob3QgdGltZXJzIG9mIGllLiA8YW5pbWF0ZT4gd2l0aCBiZWdp
bj0iM3MiIGFyZSBub3RpZmllZAotICAgICAgICAvLyBieSB0aGUgcHJldmlvdXMgY2FsbCwgYW5k
IG5vdyBhbGwgY29ubmVjdGlvbnMgdG8gdGhlIGludGVydmFsIHRpbWVyCi0gICAgICAgIC8vIGFy
ZSBjcmVhdGVkIGFuZCBub3cgd2UganVzdCBuZWVkIHRvIGZpcmUgdGhhdCB0aW1lciAoTmlrbykK
LSAgICAgICAgaWYgKCFtX2ludGVydmFsVGltZXItPmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBt
X2ludGVydmFsVGltZXItPnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIGFueSAnZGly
dHknIHNoYXBlcy4KLSAgICBkb2MtPnVwZGF0ZVJlbmRlcmluZygpOwotI2VuZGlmCi19Ci0KLWRv
dWJsZSBUaW1lU2NoZWR1bGVyOjplbGFwc2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVu
dFRpbWUoKSAtIG1fY3JlYXRpb25UaW1lOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi0vLyB2aW06
dHM9NDpub2V0Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1RpbWVT
Y2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9UaW1lU2NoZWR1bGVyLmgJKHJl
dmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvVGltZVNjaGVkdWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotKi8KLQotI2lmbmRlZiBUaW1lU2NoZWR1bGVyX2gKLSNkZWZpbmUgVGltZVNjaGVkdWxl
cl9oCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBTVkdBbmltYXRp
b25FbGVtZW50OwotICAgIGNsYXNzIFNWR1RpbWVyOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFRpbWVyOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFNWR1RpbWVyKj4gU1ZHVGlt
ZXJTZXQ7Ci0KLSAgICBjbGFzcyBUaW1lU2NoZWR1bGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFRpbWVTY2hlZHVsZXIoRG9jdW1lbnQqKTsKLSAgICAgICAgflRpbWVTY2hlZHVsZXIoKTsKLQot
ICAgICAgICAvLyBBZGRzIHNpbmdsZVNob3QgVGltZXJzCi0gICAgICAgIHZvaWQgYWRkVGltZXIo
U1ZHQW5pbWF0aW9uRWxlbWVudCosIHVuc2lnbmVkIGludCBtcyk7Ci0KLSAgICAgICAgLy8gKERp
cy0pQ29ubmVjdHMgdG8gaW50ZXJ2YWwgdGltZXIgd2l0aCAnc3RhdGljVGltZXJJbnRlcnZhbCcK
LSAgICAgICAgdm9pZCBjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50Kik7
Ci0gICAgICAgIHZvaWQgZGlzY29ubmVjdEludGVydmFsVGltZXIoU1ZHQW5pbWF0aW9uRWxlbWVu
dCopOwotCi0gICAgICAgIHZvaWQgc3RhcnRBbmltYXRpb25zKCk7Ci0gICAgICAgIHZvaWQgdG9n
Z2xlQW5pbWF0aW9ucygpOwotICAgICAgICBib29sIGFuaW1hdGlvbnNQYXVzZWQoKSBjb25zdDsK
LQotICAgICAgICAvLyB0aW1lIGVsYXBzZWQgaW4gc2Vjb25kcyBhZnRlciBjcmVhdGlvbiBvZiB0
aGlzIG9iamVjdAotICAgICAgICBkb3VibGUgZWxhcHNlZCgpIGNvbnN0OwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNWR1RpbWVyOwotICAgICAgICB2b2lkIHRpbWVyRmly
ZWQoVGltZXI8VGltZVNjaGVkdWxlcj4qKTsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZG91
YmxlIG1fY3JlYXRpb25UaW1lOwotICAgICAgICBkb3VibGUgbV9zYXZlZFRpbWU7Ci0gICAgICAg
IAotICAgICAgICBTVkdUaW1lclNldCBtX3RpbWVyU2V0OwotICAgICAgICAKLSAgICAgICAgU1ZH
VGltZXIqIG1faW50ZXJ2YWxUaW1lcjsKLSAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0g
ICAgfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTTUlMVGltZS5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY29uc3QgZG91YmxlIFNNSUxUaW1lOjp1
bnJlc29sdmVkVmFsdWUgPSBEQkxfTUFYOworLy8gSnVzdCBhIGJpZyB2YWx1ZSBzbWFsbGVyIHRo
YW4gREJMX01BWC4gT3VyIHRpbWVzIGFyZSByZWxhdGl2ZSB0byAwLCB3ZSBkb24ndCByZWFsbHkg
bmVlZCB0aGUgZnVsbCByYW5nZS4KK2NvbnN0IGRvdWJsZSBTTUlMVGltZTo6aW5kZWZpbml0ZVZh
bHVlID0gRkxUX01BWDsgICAgCisKK1NNSUxUaW1lIFdlYkNvcmU6Om9wZXJhdG9yKyhjb25zdCBT
TUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgICAgIAorICAgIGlmIChhLmlzVW5yZXNv
bHZlZCgpIHx8IGIuaXNVbnJlc29sdmVkKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5y
ZXNvbHZlZCgpOworICAgIGlmIChhLmlzSW5kZWZpbml0ZSgpIHx8IGIuaXNJbmRlZmluaXRlKCkp
CisgICAgICAgIHJldHVybiBTTUlMVGltZTo6aW5kZWZpbml0ZSgpOworICAgIHJldHVybiBhLnZh
bHVlKCkgKyBiLnZhbHVlKCk7Cit9CisKK1NNSUxUaW1lIFdlYkNvcmU6Om9wZXJhdG9yLShjb25z
dCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgICAgIAorICAgIGlmIChhLmlzVW5y
ZXNvbHZlZCgpIHx8IGIuaXNVbnJlc29sdmVkKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6
dW5yZXNvbHZlZCgpOworICAgIGlmIChhLmlzSW5kZWZpbml0ZSgpIHx8IGIuaXNJbmRlZmluaXRl
KCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6aW5kZWZpbml0ZSgpOworICAgIHJldHVybiBh
LnZhbHVlKCkgLSBiLnZhbHVlKCk7Cit9CisKK1NNSUxUaW1lIFdlYkNvcmU6Om9wZXJhdG9yKihj
b25zdCBTTUlMVGltZSYgYSwgIGNvbnN0IFNNSUxUaW1lJiBiKSB7ICAgICAKKyAgICBpZiAoYS5p
c1VucmVzb2x2ZWQoKSB8fCBiLmlzVW5yZXNvbHZlZCgpKQorICAgICAgICByZXR1cm4gU01JTFRp
bWU6OnVucmVzb2x2ZWQoKTsKKyAgICBpZiAoYS52YWx1ZSgpID09IDAgfHwgYi52YWx1ZSgpID09
IDApCisgICAgICAgIHJldHVybiBTTUlMVGltZSgwKTsKKyAgICBpZiAoYS5pc0luZGVmaW5pdGUo
KSB8fCBiLmlzSW5kZWZpbml0ZSgpKQorICAgICAgICByZXR1cm4gU01JTFRpbWU6OmluZGVmaW5p
dGUoKTsKKyAgICByZXR1cm4gYS52YWx1ZSgpICogYi52YWx1ZSgpOworfQorI2VuZGlmCisKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTTUlMVGlt
ZV9oCisjZGVmaW5lIFNNSUxUaW1lX2gKKworI2lmIEVOQUJMRShTVkcpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFNNSUxUaW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNN
SUxUaW1lKCkgOiBtX3RpbWUoMCkgeyB9CisgICAgICAgIFNNSUxUaW1lKGRvdWJsZSB0aW1lKSA6
IG1fdGltZSh0aW1lKSB7IH0KKyAgICAgICAgU01JTFRpbWUoY29uc3QgU01JTFRpbWUmIG8pIDog
bV90aW1lKG8ubV90aW1lKSB7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBTTUlMVGltZSB1
bnJlc29sdmVkKCkgeyByZXR1cm4gdW5yZXNvbHZlZFZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBT
TUlMVGltZSBpbmRlZmluaXRlKCkgeyByZXR1cm4gaW5kZWZpbml0ZVZhbHVlOyB9CisgICAgICAg
IAorICAgICAgICBTTUlMVGltZSYgb3BlcmF0b3I9KGNvbnN0IFNNSUxUaW1lJiBvKSB7IG1fdGlt
ZSA9IG8ubV90aW1lOyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgZG91YmxlIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV90aW1lOyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzRmluaXRlKCkg
Y29uc3QgeyByZXR1cm4gbV90aW1lIDwgaW5kZWZpbml0ZVZhbHVlOyB9CisgICAgICAgIGJvb2wg
aXNJbmRlZmluaXRlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IGluZGVmaW5pdGVWYWx1ZTsg
fQorICAgICAgICBib29sIGlzVW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZSA9PSB1
bnJlc29sdmVkVmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSB1bnJlc29sdmVkVmFsdWU7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgaW5kZWZpbml0ZVZhbHVlOworCisgICAgICAgIGRvdWJsZSBtX3RpbWU7CisgICAgfTsKKwor
ICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxU
aW1lJiBiKSB7IHJldHVybiBhLmlzRmluaXRlKCkgJiYgYS52YWx1ZSgpID09IGIudmFsdWUoKTsg
fQorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNN
SUxUaW1lJiBiKSB7IHJldHVybiAhb3BlcmF0b3I9PShhLCBiKTsgfQorICAgIGlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IGEudmFsdWUoKSA+IGIudmFsdWUoKTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIu
dmFsdWUoKTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgU01JTFRpbWUmIGEs
IGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPiBiLnZhbHVlKCkgfHwgb3Bl
cmF0b3I9PShhLCBiKTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgU01JTFRp
bWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkgPCBiLnZhbHVlKCkg
fHwgb3BlcmF0b3I9PShhLCBiKTsgfQorCisgICAgaW5saW5lIFNNSUxUaW1lIG1heChjb25zdCBT
TUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIHN0ZDo6bWF4KGEudmFsdWUo
KSwgYi52YWx1ZSgpKTsgfQorICAgIGlubGluZSBTTUlMVGltZSBtaW4oY29uc3QgU01JTFRpbWUm
IGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBzdGQ6Om1pbihhLnZhbHVlKCksIGIudmFs
dWUoKSk7IH0KKyAgICBTTUlMVGltZSBvcGVyYXRvcisoY29uc3QgU01JTFRpbWUmLCBjb25zdCBT
TUlMVGltZSYpOworICAgIFNNSUxUaW1lIG9wZXJhdG9yLShjb25zdCBTTUlMVGltZSYsIGNvbnN0
IFNNSUxUaW1lJik7CisgICAgLy8gU28gbXVsdGlwbHlpbmcgdGltZXMgZG9lcyBub3QgbWFrZSB0
b28gbXVjaCBzZW5zZSBidXQgU01JTCBkZWZpbmVzIGl0IGZvciBkdXJhdGlvbiAqIHJlcGVhdENv
dW50CisgICAgU01JTFRpbWUgb3BlcmF0b3IqKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRp
bWUmKTsKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTTUlMVGltZUNvbnRhaW5lci5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTTUlMVGltaW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25GcmFtZURlbGF5ID0gMC4wMjU7
CisKK1NNSUxUaW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcigpIAorICAgIDogbV9iZWdp
blRpbWUoMCkKKyAgICAsIG1fcGF1c2VUaW1lKDApCisgICAgLCBtX2FjY3VtdWxhdGVkUGF1c2VU
aW1lKDApCisgICAgLCBtX3RpbWVyKHRoaXMsICZTTUlMVGltZUNvbnRhaW5lcjo6dGltZXJGaXJl
ZCkKK3sKK30KKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c2NoZWR1bGUoU01JTFRpbWluZ0Vs
ZW1lbnQqIGFuaW1hdGlvbikKK3sKKyAgICBBU1NFUlQoYW5pbWF0aW9uLT50aW1lQ29udGFpbmVy
KCkgPT0gdGhpcyk7CisgICAgU01JTFRpbWUgbmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0
UHJvZ3Jlc3NUaW1lKCk7CisgICAgaWYgKCFuZXh0RmlyZVRpbWUuaXNGaW5pdGUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5hZGQoYW5pbWF0aW9uKTsKKyAg
ICBzdGFydFRpbWVyKDApOworfQorICAgIAordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hl
ZHVsZShTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9uKQoreworICAgIEFTU0VSVChhbmltYXRp
b24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAgICBtX3NjaGVkdWxlZEFuaW1hdGlvbnMu
cmVtb3ZlKGFuaW1hdGlvbik7Cit9CisKK1NNSUxUaW1lIFNNSUxUaW1lQ29udGFpbmVyOjplbGFw
c2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYmVnaW5UaW1lKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gY3VycmVudFRpbWUoKSAtIG1fYmVnaW5UaW1lIC0gbV9hY2N1bXVsYXRlZFBh
dXNlVGltZTsKK30KKyAgICAKK2Jvb2wgU01JTFRpbWVDb250YWluZXI6OmlzQWN0aXZlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9iZWdpblRpbWUgJiYgIWlzUGF1c2VkKCk7Cit9CisgICAgCiti
b29sIFNNSUxUaW1lQ29udGFpbmVyOjppc1BhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGF1c2VUaW1lOworfQorCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpiZWdpbigpCit7CisgICAg
QVNTRVJUKCFtX2JlZ2luVGltZSk7CisgICAgbV9iZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOwor
ICAgIHVwZGF0ZUFuaW1hdGlvbnMoMCk7Cit9CisKK3ZvaWQgU01JTFRpbWVDb250YWluZXI6OnBh
dXNlKCkKK3sKKyAgICBpZiAoIW1fYmVnaW5UaW1lKQorICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKCFpc1BhdXNlZCgpKTsKKyAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAg
bV90aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU01JTFRpbWVDb250YWluZXI6OnJlc3VtZSgpCit7
CisgICAgaWYgKCFtX2JlZ2luVGltZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpc1Bh
dXNlZCgpKTsKKyAgICBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lICs9IGN1cnJlbnRUaW1lKCkgLSBt
X3BhdXNlVGltZTsKKyAgICBtX3BhdXNlVGltZSA9IDA7CisgICAgc3RhcnRUaW1lcigwKTsKK30K
Kwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcihTTUlMVGltZSBmaXJlVGltZSwg
U01JTFRpbWUgbWluaW11bURlbGF5KQoreworICAgIGlmICghbV9iZWdpblRpbWUgfHwgaXNQYXVz
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghZmlyZVRpbWUuaXNGaW5pdGUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNNSUxUaW1lIGRlbGF5ID0gbWF4KGZpcmVU
aW1lIC0gZWxhcHNlZCgpLCBtaW5pbXVtRGVsYXkpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KGRlbGF5LnZhbHVlKCkpOworfQorICAgIAordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dGltZXJG
aXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKQoreworICAgIEFTU0VSVChtX2JlZ2luVGlt
ZSk7CisgICAgQVNTRVJUKCFtX3BhdXNlVGltZSk7CisgICAgU01JTFRpbWUgZWxhcHNlZCA9IHRo
aXMtPmVsYXBzZWQoKTsKKyAgICB1cGRhdGVBbmltYXRpb25zKGVsYXBzZWQpOworfQorICAgIAor
dm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2Vk
KQoreworICAgIC8vIEZJWE1FOiBTb3J0IGJ5IHByaW9yaXR5IChiZWdpbiB0aW1lIG9yZGVyLCBk
b2N1bWVudCBvcmRlcikgZm9yIGVhY2ggdGFyZ2V0IGVsZW1lbnQuCisgICAgLy8gSGlnaGVzdCBw
cmlvcml0eSByZXBsYWNlIGFuaW1hdGlvbiBvdmVycmlkZXMgdGhlIGxvd2VyIHByaW9yaXR5IG9u
ZXMuCisKKyAgICBTTUlMVGltZSBlYXJsaWVyc0ZpcmVUaW1lID0gU01JTFRpbWU6OnVucmVzb2x2
ZWQoKTsKKyAgICAKKyAgICBWZWN0b3I8U01JTFRpbWluZ0VsZW1lbnQqPiB0b0FuaW1hdGU7Cisg
ICAgY29weVRvVmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0aW9ucywgdG9BbmltYXRlKTsKKyAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9BbmltYXRlLnNpemUoKTsgKytuKSB7CisgICAgICAg
IC8vIEEgc2NoZWR1bGVkIGFuaW1hdGlvbiBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUg
bGlzdCBieSBwcmV2aW91cyBhbmltYXRpb24uCisgICAgICAgIGlmICghbV9zY2hlZHVsZWRBbmlt
YXRpb25zLmNvbnRhaW5zKHRvQW5pbWF0ZVtuXSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIFJlZlB0cjxTTUlMVGltaW5nRWxlbWVudD4gYW5pbWF0aW9uID0gdG9B
bmltYXRlW25dOworICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50aW1lQ29udGFpbmVyKCkgPT0g
dGhpcyk7CisKKyAgICAgICAgaWYgKGVsYXBzZWQgPj0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NU
aW1lKCkpCisgICAgICAgICAgICBhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQpOworCisgICAg
ICAgIC8vIFBlcmhhcHMgaXQgZGVjaWRlZCBub3QgdG8gYW5pbWF0ZSBhbnltb3JlLgorICAgICAg
ICBpZiAoIW1fc2NoZWR1bGVkQW5pbWF0aW9ucy5jb250YWlucyhhbmltYXRpb24uZ2V0KCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgCisgICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGlt
ZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOworICAgICAgICBpZiAobmV4dEZpcmVU
aW1lLmlzRmluaXRlKCkpCisgICAgICAgICAgICBlYXJsaWVyc0ZpcmVUaW1lID0gbWluKG5leHRG
aXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
c2NoZWR1bGVkQW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uLmdldCgpKTsKKyAgICB9CisgICAg
CisgICAgc3RhcnRUaW1lcihlYXJsaWVyc0ZpcmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsK
KyAgICAKKyAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7Cit9CisKKwor
fQpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNNSUxUaW1lQ29udGFpbmVyX0gKKyNkZWZpbmUgU01J
TFRpbWVDb250YWluZXJfSAorCisjaW5jbHVkZSAiU01JTFRpbWUuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworI2lmIEVOQUJMRShTVkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBj
bGFzcyBTTUlMVGltaW5nRWxlbWVudDsKKworICAgIGNsYXNzIFNNSUxUaW1lQ29udGFpbmVyIDog
cHVibGljIFJlZkNvdW50ZWQ8U01JTFRpbWVDb250YWluZXI+ICB7CisgICAgcHVibGljOgorICAg
ICAgICAKKyAgICAgICAgU01JTFRpbWVDb250YWluZXIoKTsKKyAgICAKKyAgICAgICAgdm9pZCBz
Y2hlZHVsZShTTUlMVGltaW5nRWxlbWVudCopOworICAgICAgICB2b2lkIHVuc2NoZWR1bGUoU01J
TFRpbWluZ0VsZW1lbnQqKTsKKyAgICAgICAgCisgICAgICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBj
b25zdDsKKworICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNQ
YXVzZWQoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAgICAg
dm9pZCBwYXVzZSgpOworICAgICAgICB2b2lkIHJlc3VtZSgpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiopOworICAgICAg
ICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxh
eSA9IDApOworICAgICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCk7
CisgICAgICAgIAorICAgICAgICBkb3VibGUgbV9iZWdpblRpbWU7CisgICAgICAgIGRvdWJsZSBt
X3BhdXNlVGltZTsKKyAgICAgICAgZG91YmxlIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7CisgICAg
ICAgIAorICAgICAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1lcjsKKworICAgICAg
ICB0eXBlZGVmIEhhc2hTZXQ8U01JTFRpbWluZ0VsZW1lbnQqPiBUaW1pbmdFbGVtZW50U2V0Owor
ICAgICAgICBUaW1pbmdFbGVtZW50U2V0IG1fc2NoZWR1bGVkQW5pbWF0aW9uczsKKyAgICB9Owor
fQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1p
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NN
SUxUaW1pbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4ODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU01JTFRpbWluZ0VsZW1lbnQuaCIKKwor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIlNNSUxUaW1lQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiWExpbmtO
YW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitjbGFzcyBDb25kaXRpb25FdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewor
cHVibGljOgorICAgIENvbmRpdGlvbkV2ZW50TGlzdGVuZXIoU01JTFRpbWluZ0VsZW1lbnQqIGFu
aW1hdGlvbiwgU01JTFRpbWluZ0VsZW1lbnQ6OkNvbmRpdGlvbiogY29uZGl0aW9uKSAKKyAgICAg
ICAgOiBtX2FuaW1hdGlvbihhbmltYXRpb24pCisgICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0
aW9uKSB7fQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wg
aXNXaW5kb3dFdmVudCkgeworICAgICAgICBtX2FuaW1hdGlvbi0+aGFuZGxlQ29uZGl0aW9uRXZl
bnQoZXZlbnQsIG1fY29uZGl0aW9uKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNNSUxUaW1pbmdF
bGVtZW50KiBtX2FuaW1hdGlvbjsKKyAgICBTTUlMVGltaW5nRWxlbWVudDo6Q29uZGl0aW9uKiBt
X2NvbmRpdGlvbjsKK307CisgICAgCitTTUlMVGltaW5nRWxlbWVudDo6Q29uZGl0aW9uOjpDb25k
aXRpb24oVHlwZSB0eXBlLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIFN0cmluZyBiYXNlSUQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgU01JTFRpbWUgb2Zmc2V0LCBpbnQgcmVwZWF0cykKKyAgICA6IG1f
dHlwZSh0eXBlKQorICAgICwgbV9iZWdpbk9yRW5kKGJlZ2luT3JFbmQpCisgICAgLCBtX2Jhc2VJ
RChiYXNlSUQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAsIG1fcmVwZWF0cyhyZXBlYXRzKSAKK3sKK30KKyAgICAKK1NNSUxUaW1pbmdFbGVtZW50OjpT
TUlMVGltaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQorICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2NvbmRpdGlvbnND
b25uZWN0ZWQoZmFsc2UpCisgICAgLCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9ucyhmYWxzZSkKKyAg
ICAsIG1faW50ZXJ2YWxCZWdpbihTTUlMVGltZTo6dW5yZXNvbHZlZCgpKQorICAgICwgbV9pbnRl
cnZhbEVuZChTTUlMVGltZTo6dW5yZXNvbHZlZCgpKQorICAgICwgbV9pc1dhaXRpbmdGb3JGaXJz
dEludGVydmFsKHRydWUpCisgICAgLCBtX2FjdGl2ZVN0YXRlKEluYWN0aXZlKQorICAgICwgbV9u
ZXh0UHJvZ3Jlc3NUaW1lKDApCisgICAgLCBtX2NhY2hlZER1cigtMS4pCisgICAgLCBtX2NhY2hl
ZFJlcGVhdER1cigtMS4pCisgICAgLCBtX2NhY2hlZFJlcGVhdENvdW50KC0xLikKKyAgICAsIG1f
Y2FjaGVkTWluKC0xLikKKyAgICAsIG1fY2FjaGVkTWF4KC0xLikKK3sKK30KKworU01JTFRpbWlu
Z0VsZW1lbnQ6On5TTUlMVGltaW5nRWxlbWVudCgpCit7CisgICAgZGlzY29ubmVjdENvbmRpdGlv
bnMoKTsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAgICAgICBtX3RpbWVDb250YWluZXIt
PnVuc2NoZWR1bGUodGhpcyk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCit7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKKyAgICBTVkdTVkdFbGVtZW50KiBvd25lciA9IG93bmVyU1ZHRWxlbWVudCgpOworICAg
IGlmICghb3duZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RpbWVDb250YWluZXIgPSBvd25l
ci0+dGltZUNvbnRhaW5lcigpOworICAgIEFTU0VSVChtX3RpbWVDb250YWluZXIpOworICAgIHJl
c2NoZWR1bGUoKTsKK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpCit7CisgICAgaWYgKG1fdGltZUNvbnRhaW5lcikgeworICAgICAgICBtX3RpbWVDb250
YWluZXItPnVuc2NoZWR1bGUodGhpcyk7CisgICAgICAgIG1fdGltZUNvbnRhaW5lciA9IDA7Cisg
ICAgfQorICAgIC8vIENhbGxpbmcgZGlzY29ubmVjdENvbmRpdGlvbnMoKSBtYXkga2lsbCB1cyBp
ZiB0aGVyZSBhcmUgc3luY2Jhc2UgY29uZGl0aW9ucy4KKyAgICAvLyBPSywgYnV0IHdlIGRvbid0
IHdhbnQgdG8gZGllIGluc2lkZSB0aGUgY2FsbC4KKyAgICBSZWZQdHI8U01JTFRpbWluZ0VsZW1l
bnQ+IGtlZXBBbGl2ZSh0aGlzKTsKKyAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOworICAgIG1f
dGFyZ2V0RWxlbWVudCA9IDA7CisgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
OworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCkKK3sKKyAgICBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICBpZiAo
IWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6YmVnaW5BdHRyKSkKKyAgICAgICAgbV9iZWdpblRpbWVz
LmFwcGVuZCgwKTsKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsKSB7CisgICAg
ICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7CisgICAgICAgIHJlc2NoZWR1bGUoKTsKKyAgICB9
Cit9CisKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZU9mZnNldFZhbHVlKGNvbnN0
IFN0cmluZyYgZGF0YSkKK3sKKyAgICBib29sIG9rOworICAgIGRvdWJsZSByZXN1bHQgPSAwOwor
ICAgIFN0cmluZyBwYXJzZSA9IGRhdGEuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgaWYgKHBhcnNl
LmVuZHNXaXRoKCJoIikpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlLmxlZnQocGFyc2UubGVuZ3Ro
KCkgLSAxKS50b0RvdWJsZSgmb2spICogNjAgKiA2MDsKKyAgICBlbHNlIGlmIChwYXJzZS5lbmRz
V2l0aCgibWluIikpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlLmxlZnQocGFyc2UubGVuZ3RoKCkg
LSAzKS50b0RvdWJsZSgmb2spICogNjA7CisgICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoIm1z
IikpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlLmxlZnQocGFyc2UubGVuZ3RoKCkgLSAyKS50b0Rv
dWJsZSgmb2spIC8gMTAwMDsKKyAgICBlbHNlIGlmIChwYXJzZS5lbmRzV2l0aCgicyIpKQorICAg
ICAgICByZXN1bHQgPSBwYXJzZS5sZWZ0KHBhcnNlLmxlbmd0aCgpIC0gMSkudG9Eb3VibGUoJm9r
KTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IHBhcnNlLnRvRG91YmxlKCZvayk7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKyAgICAKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUNs
b2NrVmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGlmIChkYXRhLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICAKKyAgICBTdHJpbmcg
cGFyc2UgPSBkYXRhLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyBpbmRlZmluaXRlVmFsdWUoImluZGVmaW5pdGUiKTsKKyAgICBpZiAocGFyc2UgPT0g
aW5kZWZpbml0ZVZhbHVlKQorICAgICAgICByZXR1cm4gU01JTFRpbWU6OmluZGVmaW5pdGUoKTsK
KworICAgIGRvdWJsZSByZXN1bHQgPSAwOworICAgIGJvb2wgb2s7CisgICAgaW50IGRvdWJsZVBv
aW50T25lID0gcGFyc2UuZmluZCgnOicpOworICAgIGludCBkb3VibGVQb2ludFR3byA9IHBhcnNl
LmZpbmQoJzonLCBkb3VibGVQb2ludE9uZSArIDEpOworICAgIGlmIChkb3VibGVQb2ludE9uZSA9
PSAyICYmIGRvdWJsZVBvaW50VHdvID09IDUgJiYgcGFyc2UubGVuZ3RoKCkgPj0gOCkgeyAKKyAg
ICAgICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZygwLCAyKS50b1VJbnRTdHJpY3QoJm9rKSAq
IDYwICogNjA7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gU01JTFRpbWU6
OnVucmVzb2x2ZWQoKTsKKyAgICAgICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZygzLCAyKS50
b1VJbnRTdHJpY3QoJm9rKSAqIDYwOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0
dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgICAgIHJlc3VsdCArPSBwYXJzZS5zdWJz
dHJpbmcoNikudG9Eb3VibGUoJm9rKTsKKyAgICB9IGVsc2UgaWYgKGRvdWJsZVBvaW50T25lID09
IDIgJiYgZG91YmxlUG9pbnRUd28gPT0gLTEgJiYgcGFyc2UubGVuZ3RoKCkgPj0gNSkgeyAKKyAg
ICAgICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZygwLCAyKS50b1VJbnRTdHJpY3QoJm9rKSAq
IDYwOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJl
c29sdmVkKCk7CisgICAgICAgIHJlc3VsdCArPSBwYXJzZS5zdWJzdHJpbmcoMykudG9Eb3VibGUo
Jm9rKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIHBhcnNlT2Zmc2V0VmFsdWUocGFyc2Up
OworCisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRpYyBpbnQgZG91YmxlU29ydChjb25z
dCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KCpzdGF0aWNfY2FzdDxjb25zdCBkb3VibGUqPihhKSAtICpzdGF0aWNfY2FzdDxjb25zdCBkb3Vi
bGUqPihiKSk7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzb3J0VGltZUxpc3QoVmVjdG9yPFNNSUxU
aW1lPiYgdGltZUxpc3QpCit7CisgICAgbWVyZ2Vzb3J0KHRpbWVMaXN0LmRhdGEoKSwgdGltZUxp
c3Quc2l6ZSgpLCBzaXplb2YoU01JTFRpbWUpLCBkb3VibGVTb3J0KTsKK30KKyAgICAKK2Jvb2wg
U01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUsIEJl
Z2luT3JFbmQgYmVnaW5PckVuZCkKK3sKKyAgICBTdHJpbmcgcGFyc2VTdHJpbmcgPSB2YWx1ZS5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAKKyAgICBkb3VibGUgc2lnbiA9IDEuOworICAgIGJvb2wg
b2s7CisgICAgaW50IHBvcyA9IHBhcnNlU3RyaW5nLmZpbmQoJysnKTsKKyAgICBpZiAocG9zID09
IC0xKSB7CisgICAgICAgIHBvcyA9IHBhcnNlU3RyaW5nLmZpbmQoJy0nKTsKKyAgICAgICAgaWYg
KHBvcyAhPSAtMSkKKyAgICAgICAgICAgIHNpZ24gPSAtMS47CisgICAgfQorICAgIFN0cmluZyBj
b25kaXRpb25TdHJpbmc7CisgICAgU01JTFRpbWUgb2Zmc2V0ID0gMDsKKyAgICBpZiAocG9zID09
IC0xKQorICAgICAgICBjb25kaXRpb25TdHJpbmcgPSBwYXJzZVN0cmluZzsKKyAgICBlbHNlIHsK
KyAgICAgICAgY29uZGl0aW9uU3RyaW5nID0gcGFyc2VTdHJpbmcubGVmdChwb3MpLnN0cmlwV2hp
dGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgb2Zmc2V0U3RyaW5nID0gcGFyc2VTdHJpbmcuc3Vi
c3RyaW5nKHBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBvZmZzZXQgPSBwYXJz
ZU9mZnNldFZhbHVlKG9mZnNldFN0cmluZyk7CisgICAgICAgIGlmIChvZmZzZXQuaXNVbnJlc29s
dmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9mZnNldCA9IG9mZnNl
dCAqIHNpZ247CisgICAgfQorICAgIGlmIChjb25kaXRpb25TdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zID0gY29uZGl0aW9uU3RyaW5nLmZpbmQoJy4nKTsK
KyAgICAKKyAgICBTdHJpbmcgYmFzZUlEOworICAgIFN0cmluZyBuYW1lU3RyaW5nOworICAgIGlm
IChwb3MgPT0gLTEpCisgICAgICAgIG5hbWVTdHJpbmcgPSBjb25kaXRpb25TdHJpbmc7CisgICAg
ZWxzZSB7CisgICAgICAgIGJhc2VJRCA9IGNvbmRpdGlvblN0cmluZy5sZWZ0KHBvcyk7CisgICAg
ICAgIG5hbWVTdHJpbmcgPSBjb25kaXRpb25TdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpOworICAg
IH0KKyAgICBpZiAobmFtZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENvbmRpdGlvbjo6VHlwZSB0eXBlOworICAgIGludCByZXBlYXRzID0gLTE7CisgICAg
aWYgKG5hbWVTdHJpbmcuc3RhcnRzV2l0aCgicmVwZWF0KCIpICYmIG5hbWVTdHJpbmcuZW5kc1dp
dGgoIikiKSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIHJlcGVhdCBldmVudHMgd2UganVzdCBu
ZWVkIHRvIGFkZCB0aGUgZGF0YSBjYXJyeWluZyBUaW1lRXZlbnQgY2xhc3MgYW5kIAorICAgICAg
ICAvLyBmaXJlIHRoZSBldmVudHMgYXQgYXBwcm9waWF0ZSB0aW1lcy4KKyAgICAgICAgcmVwZWF0
cyA9IG5hbWVTdHJpbmcuc3Vic3RyaW5nKDcsIG5hbWVTdHJpbmcubGVuZ3RoKCkgLSA4KS50b1VJ
bnRTdHJpY3QoJm9rKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbmFtZVN0cmluZyA9ICJyZXBlYXQiOworICAgICAgICB0eXBlID0gQ29uZGl0
aW9uOjpFdmVudEJhc2U7CisgICAgfSBlbHNlIGlmIChuYW1lU3RyaW5nID09ICJiZWdpbiIgfHwg
bmFtZVN0cmluZyA9PSAiZW5kIikgeworICAgICAgICBpZiAoYmFzZUlELmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdHlwZSA9IENvbmRpdGlvbjo6U3luY2Jh
c2U7CisgICAgfSBlbHNlIGlmIChuYW1lU3RyaW5nLnN0YXJ0c1dpdGgoImFjY2Vzc2tleSgiKSkg
eworICAgICAgICAvLyBGSVhNRTogYWNjZXNza2V5KCkgc3VwcG9ydC4KKyAgICAgICAgdHlwZSA9
IENvbmRpdGlvbjo6QWNjZXNzS2V5OworICAgIH0gZWxzZQorICAgICAgICB0eXBlID0gQ29uZGl0
aW9uOjpFdmVudEJhc2U7CisgICAgCisgICAgbV9jb25kaXRpb25zLmFwcGVuZChDb25kaXRpb24o
dHlwZSwgYmVnaW5PckVuZCwgYmFzZUlELCBuYW1lU3RyaW5nLCBvZmZzZXQsIHJlcGVhdHMpKTsK
KyAgICBpZiAoYmVnaW5PckVuZCA9PSBFbmQpCisgICAgICAgIG1faGFzRW5kRXZlbnRDb25kaXRp
b25zID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTTUlMVGltaW5nRWxlbWVu
dDo6aXNUaW1pbmdFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnNldFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0
ZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFu
c2Zvcm1UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVDb2xvclRh
Zyk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUJlZ2luT3JFbmQoY29u
c3QgU3RyaW5nJiBwYXJzZVN0cmluZywgQmVnaW5PckVuZCBiZWdpbk9yRW5kKQoreworICAgIFZl
Y3RvcjxTTUlMVGltZT4mIHRpbWVMaXN0ID0gYmVnaW5PckVuZCA9PSBCZWdpbiA/IG1fYmVnaW5U
aW1lcyA6IG1fZW5kVGltZXM7CisgICAgaWYgKGJlZ2luT3JFbmQgPT0gRW5kKQorICAgICAgICBt
X2hhc0VuZEV2ZW50Q29uZGl0aW9ucyA9IGZhbHNlOworICAgIEhhc2hTZXQ8ZG91YmxlPiBleGlz
dGluZzsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdGltZUxpc3Quc2l6ZSgpOyArK24p
CisgICAgICAgIGV4aXN0aW5nLmFkZCh0aW1lTGlzdFtuXS52YWx1ZSgpKTsKKyAgICBWZWN0b3I8
U3RyaW5nPiBzcGxpdFN0cmluZzsKKyAgICBwYXJzZVN0cmluZy5zcGxpdCgnOycsIHNwbGl0U3Ry
aW5nKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc3BsaXRTdHJpbmcuc2l6ZSgpOyAr
K24pIHsKKyAgICAgICAgU01JTFRpbWUgdmFsdWUgPSBwYXJzZUNsb2NrVmFsdWUoc3BsaXRTdHJp
bmdbbl0pOworICAgICAgICBpZiAodmFsdWUuaXNVbnJlc29sdmVkKCkpCisgICAgICAgICAgICBw
YXJzZUNvbmRpdGlvbihzcGxpdFN0cmluZ1tuXSwgYmVnaW5PckVuZCk7CisgICAgICAgIGVsc2Ug
aWYgKCFleGlzdGluZy5jb250YWlucyh2YWx1ZS52YWx1ZSgpKSkKKyAgICAgICAgICAgIHRpbWVM
aXN0LmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIHNvcnRUaW1lTGlzdCh0aW1lTGlzdCk7Cit9
CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiZWdp
bkF0dHIpIHsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOworICAgICAgICAgICAgbV9jb25kaXRpb25zLmNs
ZWFyKCk7CisgICAgICAgICAgICBwYXJzZUJlZ2luT3JFbmQoZ2V0QXR0cmlidXRlKFNWR05hbWVz
OjplbmRBdHRyKSwgRW5kKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUJlZ2luT3JFbmQoYXR0
ci0+dmFsdWUoKS5zdHJpbmcoKSwgQmVnaW4pOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6ZW5kQXR0cikgeworICAgICAgICBpZiAoIW1fY29uZGl0aW9ucy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgICAg
ICAgICBtX2NvbmRpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHBhcnNlQmVnaW5PckVuZChn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmJlZ2luQXR0ciksIEJlZ2luKTsKKyAgICAgICAgfQorICAg
ICAgICBwYXJzZUJlZ2luT3JFbmQoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgRW5kKTsKKyAgICAg
ICAgaWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RDb25kaXRpb25zKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworfQorCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0
ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQoreworICAgIFNWR0VsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CisgICAgCisgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKGF0dHJOYW1lID09IFhMaW5r
TmFtZXM6OmhyZWZBdHRyKQorICAgICAgICBtX3RhcmdldEVsZW1lbnQgPSAwOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkdXJBdHRyKQorICAgICAgICBtX2NhY2hlZER1ciA9
IC0xLjsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVwZWF0RHVyQXR0cikK
KyAgICAgICAgbV9jYWNoZWRSZXBlYXREdXIgPSAtMS47CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnJlcGVhdENvdW50QXR0cikKKyAgICAgICAgbV9jYWNoZWRSZXBlYXRDb3Vu
dCA9IC0xLjsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWluQXR0cikKKyAg
ICAgICAgbV9jYWNoZWRNaW4gPSAtMS47CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1heEF0dHIpCisgICAgICAgIG1fY2FjaGVkTWF4ID0gLTEuOworICAgIAorICAgIGlmIChp
bkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiZWdpbkF0
dHIpCisgICAgICAgICAgICBiZWdpbkxpc3RDaGFuZ2VkKCk7CisgICAgICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQorICAgICAgICAgICAgZW5kTGlzdENoYW5nZWQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OmNvbm5lY3RDb25kaXRpb25z
KCkKK3sKKyAgICBpZiAobV9jb25kaXRpb25zQ29ubmVjdGVkKQorICAgICAgICBkaXNjb25uZWN0
Q29uZGl0aW9ucygpOworICAgIG1fY29uZGl0aW9uc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgeworICAgICAg
ICBDb25kaXRpb24mIGNvbmRpdGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICAgICAgaWYgKGNv
bmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0aW9uOjpFdmVudEJhc2UpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghY29uZGl0aW9uLm1fYmFzZSk7CisgICAgICAgICAgICBpZiAoY29uZGl0aW9uLm1fYmFz
ZUlELmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ubV9iYXNlID0gdGFyZ2V0
RWxlbWVudCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5t
X2Jhc2UgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChjb25kaXRpb24ubV9iYXNlSUQpOwor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb24ubV9iYXNlKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9ldmVudExpc3RlbmVyKTsKKyAg
ICAgICAgICAgIGNvbmRpdGlvbi5tX2V2ZW50TGlzdGVuZXIgPSBuZXcgQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lcih0aGlzLCAmY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2Ut
PmFkZEV2ZW50TGlzdGVuZXIoY29uZGl0aW9uLm1fbmFtZSwgY29uZGl0aW9uLm1fZXZlbnRMaXN0
ZW5lciwgZmFsc2UpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29u
ZGl0aW9uOjpTeW5jYmFzZSkgeworICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9iYXNl
SUQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2UgPSBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChjb25kaXRpb24ubV9iYXNlSUQpOworICAgICAgICAgICAgaWYgKCFp
c1RpbWluZ0VsZW1lbnQoY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBjb25kaXRpb24ubV9iYXNlID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFNNSUxUaW1pbmdFbGVtZW50KiBzeW5jYmFzZSA9IHN0YXRp
Y19jYXN0PFNNSUxUaW1pbmdFbGVtZW50Kj4oY29uZGl0aW9uLm1fYmFzZS5nZXQoKSk7CisgICAg
ICAgICAgICBzeW5jYmFzZS0+YWRkVGltZURlcGVuZGVudCh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMoKQor
eworICAgIGlmICghbV9jb25kaXRpb25zQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb25kaXRpb25zQ29ubmVjdGVkID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgeworICAgICAgICBDb25kaXRpb24mIGNvbmRp
dGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0g
Q29uZGl0aW9uOjpFdmVudEJhc2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kaXRpb24ubV9iYXNl
KQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2UtPnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uZGl0aW9uLm1fbmFtZSwgY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2Up
OworICAgICAgICAgICAgY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lciA9IDA7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OlN5bmNiYXNlKSB7CisgICAg
ICAgICAgICBpZiAoY29uZGl0aW9uLm1fYmFzZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChp
c1RpbWluZ0VsZW1lbnQoY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkpOworICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNNSUxUaW1pbmdFbGVtZW50Kj4oY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkt
PnJlbW92ZVRpbWVEZXBlbmRlbnQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgY29uZGl0aW9uLm1fYmFzZSA9IDA7CisgICAgfQorfQorCit2b2lkIFNNSUxUaW1pbmdF
bGVtZW50OjpyZXNjaGVkdWxlKCkKK3sKKyAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAgICAg
ICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMpOworfQorCitTVkdFbGVtZW50KiBTTUlM
VGltaW5nRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Rhcmdl
dEVsZW1lbnQpIHsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSB4bGlua0hyZWYoKTsKKyAgICAgICAg
Tm9kZSAqdGFyZ2V0ID0gaHJlZi5pc0VtcHR5KCkgPyBwYXJlbnROb2RlKCkgOiBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChocmVmKSk7CisgICAg
ICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIG1f
dGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpOworICAgIH0K
KyAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50LmdldCgpOworfQorICAgIAorU01JTFRpbWUgU01J
TFRpbWluZ0VsZW1lbnQ6OmVsYXBzZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV90aW1lQ29u
dGFpbmVyID8gbV90aW1lQ29udGFpbmVyLT5lbGFwc2VkKCkgOiAwOworfSAKKworU01JTFRpbWlu
Z0VsZW1lbnQ6OlJlc3RhcnQgU01JTFRpbWluZ0VsZW1lbnQ6OnJlc3RhcnQoKSBjb25zdAoreyAg
ICAKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG5ldmVyKCJuZXZlciIpOworICAgIHN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgd2hlbk5vdEFjdGl2ZSgid2hlbk5vdEFjdGl2ZSIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJl
c3RhcnRBdHRyKTsKKyAgICBpZiAodmFsdWUgPT0gbmV2ZXIpCisgICAgICAgIHJldHVybiBSZXN0
YXJ0TmV2ZXI7CisgICAgaWYgKHZhbHVlID09IHdoZW5Ob3RBY3RpdmUpCisgICAgICAgIHJldHVy
biBSZXN0YXJ0V2hlbk5vdEFjdGl2ZTsKKyAgICByZXR1cm4gUmVzdGFydEFsd2F5czsKK30KKyAg
ICAKKyAgICAKK1NNSUxUaW1pbmdFbGVtZW50OjpGaWxsTW9kZSBTTUlMVGltaW5nRWxlbWVudDo6
ZmlsbCgpIGNvbnN0Cit7ICAgCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBmcmVlemUo
ImZyZWV6ZSIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmZpbGxBdHRyKTsKKyAgICByZXR1cm4gdmFsdWUgPT0gZnJlZXplID8gRmlsbEZy
ZWV6ZSA6IEZpbGxSZW1vdmU7Cit9CisgICAgCitTdHJpbmcgU01JTFRpbWluZ0VsZW1lbnQ6Onhs
aW5rSHJlZigpIGNvbnN0Cit7ICAgIAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoWExpbmtOYW1l
czo6aHJlZkF0dHIpOworfQorICAgIAorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OmR1cigp
IGNvbnN0Cit7ICAgCisgICAgaWYgKG1fY2FjaGVkRHVyID49IDApCisgICAgICAgIHJldHVybiBt
X2NhY2hlZER1cjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRl
KFNWR05hbWVzOjpkdXJBdHRyKTsKKyAgICBTTUlMVGltZSBjbG9ja1ZhbHVlID0gcGFyc2VDbG9j
a1ZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbV9jYWNoZWREdXIgPSBjbG9ja1ZhbHVlIDw9IDAg
PyBTTUlMVGltZTo6dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKK30KKworU01JTFRpbWUgU01J
TFRpbWluZ0VsZW1lbnQ6OnJlcGVhdER1cigpIGNvbnN0Cit7ICAgIAorICAgIGlmIChtX2NhY2hl
ZFJlcGVhdER1ciA+PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRSZXBlYXREdXI7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6cmVwZWF0
RHVyQXR0cik7CisgICAgU01JTFRpbWUgY2xvY2tWYWx1ZSA9IHBhcnNlQ2xvY2tWYWx1ZSh2YWx1
ZSk7CisgICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0RHVyID0gY2xvY2tWYWx1ZSA8IDAgPyBTTUlM
VGltZTo6dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKK30KKyAgICAKKy8vIFNvIGEgY291bnQg
aXMgbm90IHJlYWxseSBhIHRpbWUgYnV0IGxldCBqdXN0IGFsbCBwcmV0ZW5kIHdlIGRpZCBub3Qg
bm90aWNlLgorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OnJlcGVhdENvdW50KCkgY29uc3QK
K3sgICAgCisgICAgaWYgKG1fY2FjaGVkUmVwZWF0Q291bnQgPj0gMCkKKyAgICAgICAgcmV0dXJu
IG1fY2FjaGVkUmVwZWF0Q291bnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdl
dEF0dHJpYnV0ZShTVkdOYW1lczo6cmVwZWF0Q291bnRBdHRyKTsKKyAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworCisgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyBpbmRlZmluaXRlVmFsdWUoImluZGVmaW5pdGUiKTsKKyAg
ICBpZiAodmFsdWUgPT0gaW5kZWZpbml0ZVZhbHVlKQorICAgICAgICByZXR1cm4gU01JTFRpbWU6
OmluZGVmaW5pdGUoKTsKKyAgICBib29sIG9rOworICAgIGRvdWJsZSByZXN1bHQgPSB2YWx1ZS5z
dHJpbmcoKS50b0RvdWJsZSgmb2spOworICAgIHJldHVybiBtX2NhY2hlZFJlcGVhdENvdW50ID0g
b2sgJiYgcmVzdWx0ID4gMCA/IHJlc3VsdCA6IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisK
K1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjptYXhWYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAg
IGlmIChtX2NhY2hlZE1heCA+PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRNYXg7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bWF4QXR0
cik7CisgICAgU01JTFRpbWUgcmVzdWx0ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKKyAgICBy
ZXR1cm4gbV9jYWNoZWRNYXggPSAocmVzdWx0LmlzVW5yZXNvbHZlZCgpIHx8IHJlc3VsdCA8IDAp
ID8gU01JTFRpbWU6OmluZGVmaW5pdGUoKSA6IHJlc3VsdDsKK30KKyAgICAKK1NNSUxUaW1lIFNN
SUxUaW1pbmdFbGVtZW50OjptaW5WYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAgIGlmIChtX2NhY2hl
ZE1pbiA+PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRNaW47CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bWluQXR0cik7CisgICAgU01J
TFRpbWUgcmVzdWx0ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbV9jYWNo
ZWRNaW4gPSAocmVzdWx0LmlzVW5yZXNvbHZlZCgpIHx8IHJlc3VsdCA8IDApID8gMCA6IHJlc3Vs
dDsKK30KKyAgICAgICAgICAgICAgICAgCitTTUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6c2lt
cGxlRHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtaW4oZHVyKCksIFNNSUxUaW1lOjpp
bmRlZmluaXRlKCkpOworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6YWRkQmVnaW5U
aW1lKFNNSUxUaW1lIHRpbWUpCit7CisgICAgbV9iZWdpblRpbWVzLmFwcGVuZCh0aW1lKTsKKyAg
ICBzb3J0VGltZUxpc3QobV9iZWdpblRpbWVzKTsKKyAgICBiZWdpbkxpc3RDaGFuZ2VkKCk7Cit9
CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjphZGRFbmRUaW1lKFNNSUxUaW1lIHRpbWUp
Cit7CisgICAgbV9lbmRUaW1lcy5hcHBlbmQodGltZSk7CisgICAgc29ydFRpbWVMaXN0KG1fZW5k
VGltZXMpOworICAgIGVuZExpc3RDaGFuZ2VkKCk7Cit9CisgICAgCitTTUlMVGltZSBTTUlMVGlt
aW5nRWxlbWVudDo6ZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIFNNSUxU
aW1lIG1pbmltdW1UaW1lLCBib29sIGVxdWFsc01pbmltdW1PSykgY29uc3QKK3sKKyAgICBjb25z
dCBWZWN0b3I8U01JTFRpbWU+JiBsaXN0ID0gYmVnaW5PckVuZCA9PSBCZWdpbiA/IG1fYmVnaW5U
aW1lcyA6IG1fZW5kVGltZXM7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGxpc3Quc2l6
ZSgpOyArK24pIHsKKyAgICAgICAgU01JTFRpbWUgdGltZSA9IGxpc3Rbbl07CisgICAgICAgIEFT
U0VSVCghdGltZS5pc1VucmVzb2x2ZWQoKSk7CisgICAgICAgIGlmICh0aW1lLmlzSW5kZWZpbml0
ZSgpICYmIGJlZ2luT3JFbmQgPT0gQmVnaW4pIHsKKyAgICAgICAgICAgIC8vICJUaGUgc3BlY2lh
bCB2YWx1ZSAiaW5kZWZpbml0ZSIgZG9lcyBub3QgeWllbGQgYW4gaW5zdGFuY2UgdGltZSBpbiB0
aGUgYmVnaW4gbGlzdC4iCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZXF1YWxzTWluaW11bU9LKSB7CisgICAgICAgICAgICBpZiAodGltZSA+PSBtaW5pbXVt
VGltZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGltZTsKKyAgICAgICAgfSBlbHNlIGlmICh0
aW1lID4gbWluaW11bVRpbWUpCisgICAgICAgICAgICByZXR1cm4gdGltZTsKKyAgICB9CisgICAg
cmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisKK1NNSUxUaW1lIFNNSUxUaW1pbmdF
bGVtZW50OjpyZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0Cit7CisgICAgLy8gQ29tcHV0aW5nIHRo
ZSBhY3RpdmUgZHVyYXRpb24KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TTUlMMi9zbWls
LXRpbWluZy5odG1sI1RpbWluZy1Db21wdXRpbmdBY3RpdmVEdXIKKyAgICBTTUlMVGltZSByZXBl
YXRDb3VudCA9IHRoaXMtPnJlcGVhdENvdW50KCk7CisgICAgU01JTFRpbWUgcmVwZWF0RHVyID0g
dGhpcy0+cmVwZWF0RHVyKCk7CisgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24gPSB0aGlzLT5z
aW1wbGVEdXJhdGlvbigpOworICAgIGlmIChzaW1wbGVEdXJhdGlvbiA9PSAwIHx8IChyZXBlYXRE
dXIuaXNVbnJlc29sdmVkKCkgJiYgcmVwZWF0Q291bnQuaXNVbnJlc29sdmVkKCkpKQorICAgICAg
ICByZXR1cm4gc2ltcGxlRHVyYXRpb247CisgICAgU01JTFRpbWUgcmVwZWF0Q291bnREdXJhdGlv
biA9IHNpbXBsZUR1cmF0aW9uICogcmVwZWF0Q291bnQ7CisgICAgcmV0dXJuIG1pbihyZXBlYXRD
b3VudER1cmF0aW9uLCBtaW4ocmVwZWF0RHVyLCBTTUlMVGltZTo6aW5kZWZpbml0ZSgpKSk7Cit9
CisKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlQWN0aXZlRW5kKFNNSUxUaW1l
IHJlc29sdmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25zdAoreworICAgIC8vIENv
bXB1dGluZyB0aGUgYWN0aXZlIGR1cmF0aW9uCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
U01JTDIvc21pbC10aW1pbmcuaHRtbCNUaW1pbmctQ29tcHV0aW5nQWN0aXZlRHVyCisgICAgU01J
TFRpbWUgcHJlbGltaW5hcnlBY3RpdmVEdXJhdGlvbjsKKyAgICBpZiAoIXJlc29sdmVkRW5kLmlz
VW5yZXNvbHZlZCgpICYmIGR1cigpLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVhdER1cigpLmlzVW5y
ZXNvbHZlZCgpICYmIHJlcGVhdENvdW50KCkuaXNVbnJlc29sdmVkKCkpCisgICAgICAgIHByZWxp
bWluYXJ5QWN0aXZlRHVyYXRpb24gPSByZXNvbHZlZEVuZCAtIHJlc29sdmVkQmVnaW47CisgICAg
ZWxzZSBpZiAoIXJlc29sdmVkRW5kLmlzRmluaXRlKCkpCisgICAgICAgIHByZWxpbWluYXJ5QWN0
aXZlRHVyYXRpb24gPSByZXBlYXRpbmdEdXJhdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgcHJl
bGltaW5hcnlBY3RpdmVEdXJhdGlvbiA9IG1pbihyZXBlYXRpbmdEdXJhdGlvbigpLCByZXNvbHZl
ZEVuZCAtIHJlc29sdmVkQmVnaW4pOworICAgIAorICAgIFNNSUxUaW1lIG1pblZhbHVlID0gdGhp
cy0+bWluVmFsdWUoKTsKKyAgICBTTUlMVGltZSBtYXhWYWx1ZSA9IHRoaXMtPm1heFZhbHVlKCk7
CisgICAgaWYgKG1pblZhbHVlID4gbWF4VmFsdWUpIHsKKyAgICAgICAgLy8gSWdub3JlIGJvdGgu
CisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXNtaWwtYW5pbWF0aW9u
LTIwMDEwOTA0LyNNaW5NYXgKKyAgICAgICAgbWluVmFsdWUgPSAwOworICAgICAgICBtYXhWYWx1
ZSA9IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CisgICAgfQorICAgIHJldHVybiByZXNvbHZlZEJl
Z2luICsgbWluKG1heFZhbHVlLCBtYXgobWluVmFsdWUsIHByZWxpbWluYXJ5QWN0aXZlRHVyYXRp
b24pKTsKK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVzb2x2ZUludGVydmFsKGJvb2wg
Zmlyc3QsIFNNSUxUaW1lJiBiZWdpblJlc3VsdCwgU01JTFRpbWUmIGVuZFJlc3VsdCkgY29uc3QK
K3sKKyAgICAvLyBTZWUgdGhlIHBzZXVkb2NvZGUgaW4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDAxL1JFQy1zbWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8jVGltaW5nLUJlZ2luRW5kLUxp
ZmVDeWNsZQorICAgIFNNSUxUaW1lIGJlZ2luQWZ0ZXIgPSBmaXJzdCA/IC1udW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpIDogbV9pbnRlcnZhbEVuZDsKKyAgICBTTUlMVGltZSBsYXN0
SW50ZXJ2YWxUZW1wRW5kID0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBTTUlMVGltZSB0ZW1wQmVnaW4gPSBmaW5kSW5zdGFu
Y2VUaW1lKEJlZ2luLCBiZWdpbkFmdGVyLCB0cnVlKTsKKyAgICAgICAgaWYgKHRlbXBCZWdpbi5p
c1VucmVzb2x2ZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTTUlMVGltZSB0ZW1w
RW5kOworICAgICAgICBpZiAobV9lbmRUaW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICB0ZW1w
RW5kID0gcmVzb2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIFNNSUxUaW1lOjppbmRlZmluaXRlKCkp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRlbXBFbmQgPSBmaW5kSW5zdGFuY2VUaW1l
KEVuZCwgdGVtcEJlZ2luLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgoZmlyc3QgJiYgdGVtcEJl
Z2luID09IHRlbXBFbmQgJiYgdGVtcEVuZCA9PSBsYXN0SW50ZXJ2YWxUZW1wRW5kKSB8fCAoIWZp
cnN0ICYmIHRlbXBFbmQgPT0gbV9pbnRlcnZhbEVuZCkpIAorICAgICAgICAgICAgICAgIHRlbXBF
bmQgPSBmaW5kSW5zdGFuY2VUaW1lKEVuZCwgdGVtcEJlZ2luLCBmYWxzZSk7ICAgIAorICAgICAg
ICAgICAgaWYgKHRlbXBFbmQuaXNVbnJlc29sdmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fZW5kVGltZXMuaXNFbXB0eSgpICYmICFtX2hhc0VuZEV2ZW50Q29uZGl0aW9ucykKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZW1wRW5k
ID0gcmVzb2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIHRlbXBFbmQpOworICAgICAgICB9CisgICAg
ICAgIGlmICh0ZW1wRW5kID4gMCB8fCAhZmlyc3QpIHsKKyAgICAgICAgICAgIGJlZ2luUmVzdWx0
ID0gdGVtcEJlZ2luOworICAgICAgICAgICAgZW5kUmVzdWx0ID0gdGVtcEVuZDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN0YXJ0KCkgPT0gUmVzdGFydE5ldmVy
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luQWZ0
ZXIgPSB0ZW1wRW5kOworICAgICAgICBsYXN0SW50ZXJ2YWxUZW1wRW5kID0gdGVtcEVuZDsKKyAg
ICB9CisgICAgYmVnaW5SZXN1bHQgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIGVuZFJl
c3VsdCA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdF
bGVtZW50OjpyZXNvbHZlRmlyc3RJbnRlcnZhbCgpCit7CisgICAgU01JTFRpbWUgYmVnaW47Cisg
ICAgU01JTFRpbWUgZW5kOworICAgIHJlc29sdmVJbnRlcnZhbCh0cnVlLCBiZWdpbiwgZW5kKTsK
KyAgICBBU1NFUlQoIWJlZ2luLmlzSW5kZWZpbml0ZSgpKTsKKworICAgIGlmICghYmVnaW4uaXNV
bnJlc29sdmVkKCkgJiYgKGJlZ2luICE9IG1faW50ZXJ2YWxCZWdpbiB8fCBlbmQgIT0gbV9pbnRl
cnZhbEVuZCkpIHsgICAKKyAgICAgICAgYm9vbCB3YXNVbnJlc29sdmVkID0gbV9pbnRlcnZhbEJl
Z2luLmlzVW5yZXNvbHZlZCgpOworICAgICAgICBtX2ludGVydmFsQmVnaW4gPSBiZWdpbjsKKyAg
ICAgICAgbV9pbnRlcnZhbEVuZCA9IGVuZDsKKyAgICAgICAgbm90aWZ5RGVwZW5kZW50c0ludGVy
dmFsQ2hhbmdlZCh3YXNVbnJlc29sdmVkID8gTmV3SW50ZXJ2YWwgOiBFeGlzdGluZ0ludGVydmFs
KTsKKyAgICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbWluKG1fbmV4dFByb2dyZXNzVGltZSwg
bV9pbnRlcnZhbEJlZ2luKTsKKyAgICAgICAgcmVzY2hlZHVsZSgpOworICAgIH0KK30KKwordm9p
ZCBTTUlMVGltaW5nRWxlbWVudDo6cmVzb2x2ZU5leHRJbnRlcnZhbCgpCit7CisgICAgU01JTFRp
bWUgYmVnaW47CisgICAgU01JTFRpbWUgZW5kOworICAgIHJlc29sdmVJbnRlcnZhbChmYWxzZSwg
YmVnaW4sIGVuZCk7CisgICAgQVNTRVJUKCFiZWdpbi5pc0luZGVmaW5pdGUoKSk7CisgICAgCisg
ICAgaWYgKCFiZWdpbi5pc1VucmVzb2x2ZWQoKSAmJiBiZWdpbiAhPSBtX2ludGVydmFsQmVnaW4p
IHsKKyAgICAgICAgbV9pbnRlcnZhbEJlZ2luID0gYmVnaW47CisgICAgICAgIG1faW50ZXJ2YWxF
bmQgPSBlbmQ7CisgICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQoTmV3SW50
ZXJ2YWwpOworICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBtaW4obV9uZXh0UHJvZ3Jlc3NU
aW1lLCBtX2ludGVydmFsQmVnaW4pOworICAgIH0KK30KKworU01JTFRpbWUgU01JTFRpbWluZ0Vs
ZW1lbnQ6Om5leHRQcm9ncmVzc1RpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25leHRQcm9n
cmVzc1RpbWU7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkxpc3RDaGFu
Z2VkKCkKK3sKKyAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNlZCgpOworICAgIGlm
IChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwpCisgICAgICAgIHJlc29sdmVGaXJzdEludGVy
dmFsKCk7CisgICAgZWxzZSBpZiAoZWxhcHNlZCA8IG1faW50ZXJ2YWxCZWdpbikgeworICAgICAg
ICBTTUlMVGltZSBuZXdCZWdpbiA9IGZpbmRJbnN0YW5jZVRpbWUoQmVnaW4sIGVsYXBzZWQsIGZh
bHNlKTsKKyAgICAgICAgaWYgKG5ld0JlZ2luIDwgbV9pbnRlcnZhbEJlZ2luKSB7CisgICAgICAg
ICAgICAvLyBCZWdpbiB0aW1lIGNoYW5nZWQsIHJlLXJlc29sdmUgdGhlIGludGVydmFsLgorICAg
ICAgICAgICAgU01JTFRpbWUgb2xkQmVnaW4gPSBtX2ludGVydmFsQmVnaW47CisgICAgICAgICAg
ICBtX2ludGVydmFsQmVnaW4gPSBlbGFwc2VkOworICAgICAgICAgICAgcmVzb2x2ZUludGVydmFs
KGZhbHNlLCBtX2ludGVydmFsQmVnaW4sIG1faW50ZXJ2YWxFbmQpOyAgCisgICAgICAgICAgICBB
U1NFUlQoIW1faW50ZXJ2YWxCZWdpbi5pc1VucmVzb2x2ZWQoKSk7CisgICAgICAgICAgICBpZiAo
bV9pbnRlcnZhbEJlZ2luICE9IG9sZEJlZ2luKQorICAgICAgICAgICAgICAgIG5vdGlmeURlcGVu
ZGVudHNJbnRlcnZhbENoYW5nZWQoRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgICAgIH0KKyAgICB9
ICAgIAorICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7CisgICAgcmVzY2hlZHVsZSgp
OworfQorCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjplbmRMaXN0Q2hhbmdlZCgpCit7CisgICAg
U01JTFRpbWUgZWxhcHNlZCA9IHRoaXMtPmVsYXBzZWQoKTsKKyAgICBpZiAobV9pc1dhaXRpbmdG
b3JGaXJzdEludGVydmFsKQorICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZhbCgpOworICAgIGVs
c2UgaWYgKGVsYXBzZWQgPCBtX2ludGVydmFsRW5kICYmIG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0
ZSgpKSB7CisgICAgICAgIFNNSUxUaW1lIG5ld0VuZCA9IGZpbmRJbnN0YW5jZVRpbWUoRW5kLCBt
X2ludGVydmFsQmVnaW4sIGZhbHNlKTsKKyAgICAgICAgaWYgKG5ld0VuZCA8IG1faW50ZXJ2YWxF
bmQpIHsKKyAgICAgICAgICAgIG5ld0VuZCA9IHJlc29sdmVBY3RpdmVFbmQobV9pbnRlcnZhbEJl
Z2luLCBuZXdFbmQpOworICAgICAgICAgICAgaWYgKG5ld0VuZCAhPSBtX2ludGVydmFsRW5kKSB7
CisgICAgICAgICAgICAgICAgbV9pbnRlcnZhbEVuZCA9IG5ld0VuZDsKKyAgICAgICAgICAgICAg
ICBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKEV4aXN0aW5nSW50ZXJ2YWwpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVs
YXBzZWQ7CisgICAgcmVzY2hlZHVsZSgpOworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVu
dDo6Y2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpCit7CisgICAgQVNTRVJUKCFtX2lzV2Fp
dGluZ0ZvckZpcnN0SW50ZXJ2YWwpOworICAgIEFTU0VSVChlbGFwc2VkID49IG1faW50ZXJ2YWxC
ZWdpbik7CisgICAgCisgICAgUmVzdGFydCByZXN0YXJ0ID0gdGhpcy0+cmVzdGFydCgpOworICAg
IGlmIChyZXN0YXJ0ID09IFJlc3RhcnROZXZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChlbGFwc2VkIDwgbV9pbnRlcnZhbEVuZCkgeworICAgICAgICBpZiAocmVzdGFydCAhPSBS
ZXN0YXJ0QWx3YXlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTTUlMVGltZSBuZXh0
QmVnaW4gPSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luLCBtX2ludGVydmFsQmVnaW4sIGZhbHNlKTsK
KyAgICAgICAgaWYgKG5leHRCZWdpbiA8IG1faW50ZXJ2YWxFbmQpIHsgCisgICAgICAgICAgICBt
X2ludGVydmFsRW5kID0gbmV4dEJlZ2luOworICAgICAgICAgICAgbm90aWZ5RGVwZW5kZW50c0lu
dGVydmFsQ2hhbmdlZChFeGlzdGluZ0ludGVydmFsKTsKKyAgICAgICAgfQorICAgIH0gCisgICAg
aWYgKGVsYXBzZWQgPj0gbV9pbnRlcnZhbEVuZCkKKyAgICAgICAgcmVzb2x2ZU5leHRJbnRlcnZh
bCgpOworfQorICAgIAorZmxvYXQgU01JTFRpbWluZ0VsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGlv
blBlcmNlbnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5zaWduZWQmIHJlcGVhdCkgY29u
c3QKK3sKKyAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRoaXMtPnNpbXBsZUR1cmF0aW9u
KCk7CisgICAgcmVwZWF0ID0gMDsKKyAgICBpZiAoc2ltcGxlRHVyYXRpb24uaXNJbmRlZmluaXRl
KCkpIHsKKyAgICAgICAgcmVwZWF0ID0gMDsKKyAgICAgICAgcmV0dXJuIDAuZjsKKyAgICB9Cisg
ICAgaWYgKHNpbXBsZUR1cmF0aW9uID09IDApIHsKKyAgICAgICAgcmVwZWF0ID0gMDsKKyAgICAg
ICAgcmV0dXJuIDEuZjsKKyAgICB9CisgICAgQVNTRVJUKG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0
ZSgpKTsKKyAgICBBU1NFUlQoc2ltcGxlRHVyYXRpb24uaXNGaW5pdGUoKSk7CisgICAgU01JTFRp
bWUgYWN0aXZlVGltZSA9IGVsYXBzZWQgLSBtX2ludGVydmFsQmVnaW47CisgICAgU01JTFRpbWUg
cmVwZWF0aW5nRHVyYXRpb24gPSB0aGlzLT5yZXBlYXRpbmdEdXJhdGlvbigpOworICAgIGlmIChl
bGFwc2VkID49IG1faW50ZXJ2YWxFbmQgfHwgYWN0aXZlVGltZSA+IHJlcGVhdGluZ0R1cmF0aW9u
KSB7CisgICAgICAgIHJlcGVhdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXBlYXRpbmdEdXJh
dGlvbi52YWx1ZSgpIC8gc2ltcGxlRHVyYXRpb24udmFsdWUoKSk7CisgICAgICAgIGlmIChmbW9k
KHJlcGVhdGluZ0R1cmF0aW9uLnZhbHVlKCksIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkgPT0gMC4p
KQorICAgICAgICAgICAgcmVwZWF0LS07CisgICAgICAgIHJldHVybiAxLmY7CisgICAgfQorICAg
IHJlcGVhdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3RpdmVUaW1lLnZhbHVlKCkgLyBzaW1w
bGVEdXJhdGlvbi52YWx1ZSgpKTsKKyAgICBTTUlMVGltZSBzaW1wbGVUaW1lID0gZm1vZChhY3Rp
dmVUaW1lLnZhbHVlKCksIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpOworICAgIHJldHVybiBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHNpbXBsZVRpbWUudmFsdWUoKSAvIHNpbXBsZUR1cmF0aW9uLnZh
bHVlKCkpOworfQorICAgIAorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OmNhbGN1bGF0ZU5l
eHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3Rp
dmVTdGF0ZSA9PSBBY3RpdmUpIHsKKyAgICAgICAgLy8gSWYgZHVyYXRpb24gaXMgaW5kZWZpbml0
ZSB0aGUgdmFsdWUgZG9lcyBub3QgYWN0dWFsbHkgY2hhbmdlIG92ZXIgdGltZS4gU2FtZSBpcyB0
cnVlIGZvciA8c2V0Pi4KKyAgICAgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24gPSB0aGlzLT5z
aW1wbGVEdXJhdGlvbigpOworICAgICAgICBpZiAoc2ltcGxlRHVyYXRpb24uaXNJbmRlZmluaXRl
KCkgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkgeworICAgICAgICAgICAgU01JTFRp
bWUgcmVwZWF0Q291bnQgPSB0aGlzLT5yZXBlYXRDb3VudCgpOworICAgICAgICAgICAgU01JTFRp
bWUgcmVwZWF0aW5nRHVyYXRpb25FbmQgPSBtX2ludGVydmFsQmVnaW4gKyByZXBlYXRpbmdEdXJh
dGlvbigpOworICAgICAgICAgICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGZyZWV6ZSBzZW1h
bnRpY3Mgd2hlbiByZXBlYXRpbmcgZW5kcywgZXZlbiBpZiB0aGUgZWxlbWVudCBpcyBzdGlsbCBh
Y3RpdmUuIAorICAgICAgICAgICAgLy8gVGFrZSBjYXJlIHRoYXQgd2UgZ2V0IGEgdGltZXIgY2Fs
bGJhY2sgYXQgdGhhdCBwb2ludC4KKyAgICAgICAgICAgIGlmIChlbGFwc2VkIDwgcmVwZWF0aW5n
RHVyYXRpb25FbmQgJiYgcmVwZWF0aW5nRHVyYXRpb25FbmQgPCBtX2ludGVydmFsRW5kICYmIHJl
cGVhdGluZ0R1cmF0aW9uRW5kLmlzRmluaXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
cGVhdGluZ0R1cmF0aW9uRW5kOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2ludGVydmFsRW5kOworICAgICAgICB9IAorICAgICAgICByZXR1cm4gZWxhcHNlZCAr
IDAuMDI1OworICAgIH0KKyAgICByZXR1cm4gbV9pbnRlcnZhbEJlZ2luID49IGVsYXBzZWQgPyBt
X2ludGVydmFsQmVnaW4gOiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworfQorICAgIAorU01JTFRp
bWluZ0VsZW1lbnQ6OkFjdGl2ZVN0YXRlIFNNSUxUaW1pbmdFbGVtZW50OjpkZXRlcm1pbmVBY3Rp
dmVTdGF0ZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdAoreworICAgIGlmIChlbGFwc2VkID49IG1f
aW50ZXJ2YWxCZWdpbikgeworICAgICAgICBpZiAoZWxhcHNlZCA8IG1faW50ZXJ2YWxFbmQpCisg
ICAgICAgICAgICByZXR1cm4gQWN0aXZlOworICAgICAgICBpZiAoZmlsbCgpID09IEZpbGxGcmVl
emUpCisgICAgICAgICAgICByZXR1cm4gRnJlZXplOworICAgICAgICByZXR1cm4gSW5hY3RpdmU7
CisgICAgfSAKKyAgICBpZiAobV9hY3RpdmVTdGF0ZSA9PSBBY3RpdmUpIHsKKyAgICAgICAgaWYg
KGZpbGwoKSA9PSBGaWxsRnJlZXplKQorICAgICAgICAgICAgcmV0dXJuIEZyZWV6ZTsKKyAgICAg
ICAgcmV0dXJuIEluYWN0aXZlOworICAgIH0KKyAgICBpZiAobV9hY3RpdmVTdGF0ZSA9PSBGcmVl
emUpCisgICAgICAgIHJldHVybiBGcmVlemU7CisgICAgcmV0dXJuIEluYWN0aXZlOworfQorICAg
IAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCkKK3sK
KyAgICBBU1NFUlQobV90aW1lQ29udGFpbmVyKTsKKyAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JG
aXJzdEludGVydmFsIHx8IG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsKKyAgICAKKyAgICBp
ZiAoIW1fY29uZGl0aW9uc0Nvbm5lY3RlZCkKKyAgICAgICAgY29ubmVjdENvbmRpdGlvbnMoKTsK
KyAgICAKKyAgICBpZiAoIW1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKSB7CisgICAgICAgIEFT
U0VSVChtX2FjdGl2ZVN0YXRlID09IEluYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoZWxhcHNlZCA8IG1faW50ZXJ2YWxCZWdpbikgeworICAgICAgICBBU1NF
UlQobV9hY3RpdmVTdGF0ZSAhPSBBY3RpdmUpOworICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUg
PSBtX2ludGVydmFsQmVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fYWN0aXZlU3RhdGUgPT0gSW5hY3RpdmUpIHsKKyAgICAgICAgbV9pc1dhaXRpbmdGb3JGaXJz
dEludGVydmFsID0gZmFsc2U7CisgICAgICAgIG1fYWN0aXZlU3RhdGUgPSBBY3RpdmU7CisgICAg
ICAgIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBy
ZXBlYXQ7CisgICAgZmxvYXQgcGVyY2VudCA9IGNhbGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRS
ZXBlYXQoZWxhcHNlZCwgcmVwZWF0KTsKKyAgICBhcHBseUFuaW1hdGlvbihwZXJjZW50LCByZXBl
YXQpOworCisgICAgY2hlY2tSZXN0YXJ0KGVsYXBzZWQpOworCisgICAgQWN0aXZlU3RhdGUgbmV3
U3RhdGUgPSBkZXRlcm1pbmVBY3RpdmVTdGF0ZShlbGFwc2VkKTsKKyAgICBpZiAobmV3U3RhdGUg
PT0gQWN0aXZlKSB7CisgICAgICAgIGlmIChmaWxsKCkgPT0gRmlsbFJlbW92ZSAmJiBlbGFwc2Vk
ID4gbV9pbnRlcnZhbEJlZ2luICsgcmVwZWF0aW5nRHVyYXRpb24oKSkKKyAgICAgICAgICAgIHVu
YXBwbHlBbmltYXRpb24oKTsKKyAgICB9IAorICAgIGlmIChtX2FjdGl2ZVN0YXRlID09IEFjdGl2
ZSAmJiBuZXdTdGF0ZSAhPSBBY3RpdmUpIHsKKyAgICAgICAgaWYgKG5ld1N0YXRlICE9IEZyZWV6
ZSkKKyAgICAgICAgICAgIHVuYXBwbHlBbmltYXRpb24oKTsKKyAgICAgICAgZW5kZWRBY3RpdmVJ
bnRlcnZhbCgpOworICAgIH0KKyAgICBtX2FjdGl2ZVN0YXRlID0gbmV3U3RhdGU7CisgICAgbV9u
ZXh0UHJvZ3Jlc3NUaW1lID0gY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShlbGFwc2VkKTsKK30K
KyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENo
YW5nZWQoTmV3T3JFeGlzdGluZ0ludGVydmFsIG5ld09yRXhpc3RpbmcpCit7CisgICAgQVNTRVJU
KG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsKKyAgICBzdGF0aWMgSGFzaFNldDxTTUlMVGlt
aW5nRWxlbWVudCo+IGxvb3BCcmVha2VyOworICAgIGlmIChsb29wQnJlYWtlci5jb250YWlucyh0
aGlzKSkKKyAgICAgICAgcmV0dXJuOworICAgIGxvb3BCcmVha2VyLmFkZCh0aGlzKTsKKyAgICAK
KyAgICBUaW1lRGVwZW5kZW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3RpbWVEZXBlbmRlbnRzLmVu
ZCgpOworICAgIGZvciAoVGltZURlcGVuZGVudFNldDo6aXRlcmF0b3IgaXQgPSBtX3RpbWVEZXBl
bmRlbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTTUlMVGltaW5nRWxl
bWVudCogZGVwZW5kZW50ID0gKml0OworICAgICAgICBkZXBlbmRlbnQtPmNyZWF0ZUluc3RhbmNl
VGltZXNGcm9tU3luY2Jhc2UodGhpcywgbmV3T3JFeGlzdGluZyk7CisgICAgfQorCisgICAgbG9v
cEJyZWFrZXIucmVtb3ZlKHRoaXMpOworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6
Y3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZShTTUlMVGltaW5nRWxlbWVudCogc3luY2Jh
c2UsIE5ld09yRXhpc3RpbmdJbnRlcnZhbCBuZXdPckV4aXN0aW5nKQoreworICAgIC8vIEZJWE1F
OiBUbyBiZSByZWFsbHkgY29ycmVjdCwgdGhpcyBzaG91bGQgaGFuZGxlIHVwZGF0aW5nIGV4aXNp
bmcgaW50ZXJ2YWwgYnkgY2hhbmdpbmcgCisgICAgLy8gdGhlIGFzc29jaWF0ZWQgdGltZXMgaW5z
dGVhZCBvZiBjcmVhdGluZyBuZXcgb25lcy4KKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
bV9jb25kaXRpb25zLnNpemUoKTsgKytuKSB7CisgICAgICAgIENvbmRpdGlvbiYgY29uZGl0aW9u
ID0gbV9jb25kaXRpb25zW25dOworICAgICAgICBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25k
aXRpb246OlN5bmNiYXNlICYmIGNvbmRpdGlvbi5tX2Jhc2UgPT0gc3luY2Jhc2UpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjb25kaXRpb24ubV9uYW1lID09ICJiZWdpbiIgfHwgY29uZGl0aW9uLm1f
bmFtZSA9PSAiZW5kIik7CisgICAgICAgICAgICAvLyBObyBuZXN0ZWQgdGltZSBjb250YWluZXJz
IGluIFNWRywgbm8gbmVlZCBmb3IgY3JhenkgdGltZSBzcGFjZSBjb252ZXJzaW9ucy4gUGhldyEK
KyAgICAgICAgICAgIFNNSUxUaW1lIHRpbWUgPSAwOworICAgICAgICAgICAgaWYgKGNvbmRpdGlv
bi5tX25hbWUgPT0gImJlZ2luIikKKyAgICAgICAgICAgICAgICB0aW1lID0gc3luY2Jhc2UtPm1f
aW50ZXJ2YWxCZWdpbiArIGNvbmRpdGlvbi5tX29mZnNldDsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0aW1lID0gc3luY2Jhc2UtPm1faW50ZXJ2YWxFbmQgKyBjb25kaXRpb24u
bV9vZmZzZXQ7CisgICAgICAgICAgICBBU1NFUlQodGltZS5pc0Zpbml0ZSgpKTsKKyAgICAgICAg
ICAgIGlmIChjb25kaXRpb24ubV9iZWdpbk9yRW5kID09IEJlZ2luKQorICAgICAgICAgICAgICAg
IGFkZEJlZ2luVGltZSh0aW1lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
ZGRFbmRUaW1lKHRpbWUpOworICAgICAgICB9CisgICAgfQorfQorICAgIAordm9pZCBTTUlMVGlt
aW5nRWxlbWVudDo6YWRkVGltZURlcGVuZGVudChTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9u
KQoreworICAgIG1fdGltZURlcGVuZGVudHMuYWRkKGFuaW1hdGlvbik7CisgICAgaWYgKG1faW50
ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKQorICAgICAgICBhbmltYXRpb24tPmNyZWF0ZUluc3RhbmNl
VGltZXNGcm9tU3luY2Jhc2UodGhpcywgTmV3SW50ZXJ2YWwpOworfQorICAgIAordm9pZCBTTUlM
VGltaW5nRWxlbWVudDo6cmVtb3ZlVGltZURlcGVuZGVudChTTUlMVGltaW5nRWxlbWVudCogYW5p
bWF0aW9uKQoreworICAgIG1fdGltZURlcGVuZGVudHMucmVtb3ZlKGFuaW1hdGlvbik7Cit9Cisg
ICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpoYW5kbGVDb25kaXRpb25FdmVudChFdmVudCog
ZXZlbnQsIENvbmRpdGlvbiogY29uZGl0aW9uKQoreworICAgIGlmIChjb25kaXRpb24tPm1fYmVn
aW5PckVuZCA9PSBCZWdpbikKKyAgICAgICAgYWRkQmVnaW5UaW1lKGVsYXBzZWQoKSArIGNvbmRp
dGlvbi0+bV9vZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAgYWRkRW5kVGltZShlbGFwc2VkKCkg
KyBjb25kaXRpb24tPm1fb2Zmc2V0KTsKK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6YmVn
aW5CeUxpbmtBY3RpdmF0aW9uKCkKK3sKKyAgICBhZGRCZWdpblRpbWUoZWxhcHNlZCgpKTsKK30K
KyAgICAKK30KKworI2VuZGlmCisKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
aW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
aW5nRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1pbmdFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworI2lmbmRlZiBTTUlMVGltaW5n
RWxlbWVudF9oCisjZGVmaW5lIFNNSUxUaW1pbmdFbGVtZW50X2gKKyNpZiBFTkFCTEUoU1ZHKQor
CisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNNSUxUaW1lLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNz
IENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgU01JTFRpbWVDb250YWluZXI7CisK
KyAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgU01JTCBpbnRlcnZhbCB0aW1pbmcgbW9kZWwg
YXMgbmVlZGVkIGZvciBTVkcgYW5pbWF0aW9uLgorICAgIGNsYXNzIFNNSUxUaW1pbmdFbGVtZW50
IDogcHVibGljIFNWR0VsZW1lbnQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTTUlMVGlt
aW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICAgICAgdmly
dHVhbCB+U01JTFRpbWluZ0VsZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBib29s
IGlzVGltaW5nRWxlbWVudChFbGVtZW50KiBlbGVtZW50KTsKKyAgICAgICAgCisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2
ZURlY2xzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWVDb250YWluZXIuZ2V0KCk7IH0KKworICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlvbigp
OworCisgICAgICAgIGVudW0gUmVzdGFydCB7IFJlc3RhcnRBbHdheXMsIFJlc3RhcnRXaGVuTm90
QWN0aXZlLCBSZXN0YXJ0TmV2ZXIgfTsKKyAgICAgICAgUmVzdGFydCByZXN0YXJ0KCkgY29uc3Q7
CisgICAgICAgIAorICAgICAgICBlbnVtIEZpbGxNb2RlIHsgRmlsbFJlbW92ZSwgRmlsbEZyZWV6
ZSB9OworICAgICAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBT
dHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBTTUlMVGltZSBkdXIo
KSBjb25zdDsKKyAgICAgICAgU01JTFRpbWUgcmVwZWF0RHVyKCkgY29uc3Q7CisgICAgICAgIFNN
SUxUaW1lIHJlcGVhdENvdW50KCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1lIG1heFZhbHVlKCkg
Y29uc3Q7CisgICAgICAgIFNNSUxUaW1lIG1pblZhbHVlKCkgY29uc3Q7CisgICAgICAgIAorICAg
ICAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7IAorICAgICAgICAKKyAgICAgICAgU01JTFRp
bWUgaW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxCZWdpbjsgfQorICAg
ICAgICBTTUlMVGltZSBpbnRlcnZhbEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxFbmQ7
IH0KKyAgICAgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24oKSBjb25zdDsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCk7CisgICAgICAgIFNNSUxUaW1l
IG5leHRQcm9ncmVzc1RpbWUoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBTTUlM
VGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBTTUlM
VGltZSBwYXJzZU9mZnNldFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAgICAKK3Byb3RlY3Rl
ZDoKKyAgICAgICAgdm9pZCBhZGRCZWdpblRpbWUoU01JTFRpbWUgdGltZSk7CisgICAgICAgIHZv
aWQgYWRkRW5kVGltZShTTUlMVGltZSB0aW1lKTsKKyAgICAgICAgCitwcml2YXRlOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmFwcGx5QW5pbWF0aW9uKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGVudW0gQmVnaW5PckVuZCB7IEJlZ2luLCBFbmQgfTsKKyAgICAgICAgU01JTFRpbWUgZmlu
ZEluc3RhbmNlVGltZShCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIFNNSUxUaW1lIG1pbmltdW1UaW1l
LCBib29sIGVxdWFsc01pbmltdW1PSykgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZUZpcnN0
SW50ZXJ2YWwoKTsKKyAgICAgICAgdm9pZCByZXNvbHZlTmV4dEludGVydmFsKCk7CisgICAgICAg
IHZvaWQgcmVzb2x2ZUludGVydmFsKGJvb2wgZmlyc3QsIFNNSUxUaW1lJiBiZWdpblJlc3VsdCwg
U01JTFRpbWUmIGVuZFJlc3VsdCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1lIHJlc29sdmVBY3Rp
dmVFbmQoU01JTFRpbWUgcmVzb2x2ZWRCZWdpbiwgU01JTFRpbWUgcmVzb2x2ZWRFbmQpIGNvbnN0
OworICAgICAgICBTTUlMVGltZSByZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0OworICAgICAgICB2
b2lkIGNoZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAgICAgdm9pZCBiZWdpbkxp
c3RDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgZW5kTGlzdENoYW5nZWQoKTsKKyAgICAgICAgdm9p
ZCByZXNjaGVkdWxlKCk7CisKKyAgICAgICAgLy8gVGhpcyByZXByZXNlbnRzIGNvbmRpdGlvbnMg
b24gZWxlbWVudHMgYmVnaW4gb3IgZW5kIGxpc3QgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIG9u
IHJ1bnRpbWUKKyAgICAgICAgLy8gZm9yIGV4YW1wbGUgPGFuaW1hdGUgYmVnaW49Im90aGVyRWxl
bWVudC5iZWdpbiArIDhzOyBidXR0b24uY2xpY2siIC4uLiAvPgorICAgICAgICBzdHJ1Y3QgQ29u
ZGl0aW9uIHsKKyAgICAgICAgICAgIGVudW0gVHlwZSB7IEV2ZW50QmFzZSwgU3luY2Jhc2UsIEFj
Y2Vzc0tleSB9OworICAgICAgICAgICAgQ29uZGl0aW9uKFR5cGUsIEJlZ2luT3JFbmQgYmVnaW5P
ckVuZCwgU3RyaW5nIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTTUlMVGltZSBvZmZzZXQs
IGludCByZXBlYXRzID0gLTEpOworICAgICAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgICAg
ICBCZWdpbk9yRW5kIG1fYmVnaW5PckVuZDsKKyAgICAgICAgICAgIFN0cmluZyBtX2Jhc2VJRDsK
KyAgICAgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgICAgICBTTUlMVGltZSBtX29mZnNl
dDsKKyAgICAgICAgICAgIGludCBtX3JlcGVhdHM7CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gbV9iYXNlOworICAgICAgICAgICAgUmVmUHRyPENvbmRpdGlvbkV2ZW50TGlzdGVuZXI+IG1f
ZXZlbnRMaXN0ZW5lcjsKKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBwYXJzZUNvbmRpdGlvbihj
b25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgICAgICB2b2lkIHBhcnNl
QmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBjb25uZWN0Q29uZGl0aW9ucygpOworICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RDb25kaXRpb25zKCk7CisgICAgICAgIAorICAgICAgICAvLyBFdmVudCBiYXNlIHRpbWlu
ZworICAgICAgICB2b2lkIGhhbmRsZUNvbmRpdGlvbkV2ZW50KEV2ZW50KiwgQ29uZGl0aW9uKik7
CisgICAgICAgIAorICAgICAgICAvLyBTeW5jYmFzZSB0aW1pbmcKKyAgICAgICAgZW51bSBOZXdP
ckV4aXN0aW5nSW50ZXJ2YWwgeyBOZXdJbnRlcnZhbCwgRXhpc3RpbmdJbnRlcnZhbCB9OyAKKyAg
ICAgICAgdm9pZCBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKE5ld09yRXhpc3RpbmdJ
bnRlcnZhbCk7CisgICAgICAgIHZvaWQgY3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZShT
TUlMVGltaW5nRWxlbWVudCogc3luY2Jhc2UsIE5ld09yRXhpc3RpbmdJbnRlcnZhbCk7CisgICAg
ICAgIHZvaWQgYWRkVGltZURlcGVuZGVudChTTUlMVGltaW5nRWxlbWVudCopOworICAgICAgICB2
b2lkIHJlbW92ZVRpbWVEZXBlbmRlbnQoU01JTFRpbWluZ0VsZW1lbnQqKTsKKyAgICAgICAgCisg
ICAgICAgIGVudW0gQWN0aXZlU3RhdGUgeyBJbmFjdGl2ZSwgQWN0aXZlLCBGcmVlemUgfTsKKyAg
ICAgICAgQWN0aXZlU3RhdGUgZGV0ZXJtaW5lQWN0aXZlU3RhdGUoU01JTFRpbWUgZWxhcHNlZCkg
Y29uc3Q7CisgICAgICAgIGZsb2F0IGNhbGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRSZXBlYXQo
U01JTFRpbWUgZWxhcHNlZCwgdW5zaWduZWQmIHJlcGVhdCkgY29uc3Q7CisgICAgICAgIFNNSUxU
aW1lIGNhbGN1bGF0ZU5leHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8Q29uZGl0aW9uPiBtX2NvbmRpdGlvbnM7CisgICAgICAg
IGJvb2wgbV9jb25kaXRpb25zQ29ubmVjdGVkOworICAgICAgICBib29sIG1faGFzRW5kRXZlbnRD
b25kaXRpb25zOyAgICAgCisgICAgICAgIAorICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U01JTFRp
bWluZ0VsZW1lbnQqPiBUaW1lRGVwZW5kZW50U2V0OworICAgICAgICBUaW1lRGVwZW5kZW50U2V0
IG1fdGltZURlcGVuZGVudHM7CisgICAgICAgIAorICAgICAgICAvLyBJbnN0YW5jZSB0aW1lIGxp
c3RzCisgICAgICAgIFZlY3RvcjxTTUlMVGltZT4gbV9iZWdpblRpbWVzOworICAgICAgICBWZWN0
b3I8U01JTFRpbWU+IG1fZW5kVGltZXM7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHRo
ZSB1cGNvbWluZyBvciBjdXJyZW50IGludGVydmFsCisgICAgICAgIFNNSUxUaW1lIG1faW50ZXJ2
YWxCZWdpbjsKKyAgICAgICAgU01JTFRpbWUgbV9pbnRlcnZhbEVuZDsKKyAgICAgICAgCisgICAg
ICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsOworICAgIAorICAgICAgICBBY3Rp
dmVTdGF0ZSBtX2FjdGl2ZVN0YXRlOworICAgICAgICAKKyAgICAgICAgU01JTFRpbWUgbV9uZXh0
UHJvZ3Jlc3NUaW1lOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVy
PiBtX3RpbWVDb250YWluZXI7CisKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHRWxlbWVudD4g
bV90YXJnZXRFbGVtZW50OworICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkRHVyOwor
ICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0RHVyOworICAgICAgICBtdXRh
YmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0Q291bnQ7CisgICAgICAgIG11dGFibGUgU01JTFRp
bWUgbV9jYWNoZWRNaW47CisgICAgICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWRNYXg7Cisg
ICAgICAgIAorICAgICAgICBmcmllbmQgY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjsKKyAg
ICB9OworCit9CisKKyNlbmRpZgorI2VuZGlmCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20438</attachid>
            <date>2008-04-09 12:00:22 -0700</date>
            <delta_ts>2008-04-10 11:39:40 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>svg-animation-5.patch</filename>
            <type>text/plain</type>
            <size>191608</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTc1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjgwIEBACisyMDA4LTA0LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWRvIHRoZSBTVkcgYW5pbWF0aW9uIHN1cHBvcnQuCisgICAgICAgIAorICAgICAgICBJdCBkb2Vz
CisgICAgICAgIC0gRnVsbCBTTUlMIGludGVydmFsIHRpbWluZyBtb2RlbCBpbmNsdWRpbmcgc3lu
Y2Jhc2UgYW5kIGV2ZW50IGJhc2UgdGltaW5nICh0aGUgaGFyZCBwYXJ0KS4KKyAgICAgICAgLSBD
U1MgYW5kIFhNTCBhdHRyaWJ1dGUgYW5pbWF0aW9uLgorICAgICAgICAtIExpbmVhciwgZGlzY3Jl
dGUgYW5kIHNwbGluZSBjYWxjTW9kZXMuCisgICAgICAgIC0gVmFsdWVzIGFuaW1hdGlvbiB3aXRo
IGtleVRpbWVzIGFuZCBrZXlTcGxpbmVzLgorICAgICAgICAtIExpbmsgYWN0aXZhdGVkIGFuaW1h
dGlvbnMuCisgICAgICAgIC0gUHJldHR5IGdvb2Qgc3VwcG9ydCBmb3IgPGFuaW1hdGU+IGFuZCA8
c2V0PiBhbmltYXRpb25zCisgICAgICAgIC0gQmFzaWMgc3VwcG9ydCBmb3IgPGFuaW1hdGVDb2xv
cj4sIDxhbmltYXRlTW90aW9uPiBhbmQgPGFuaW1hdGVUcmFuc2Zvcm0+LgorCisgICAgICAgIFRo
aXMgcGFzc2VzIHNvbWUgMzUgb2YgdGhlIDU2IHRlc3RzIGluIFczQyBTVkcgYW5pbWF0aW9uIHRl
c3Qgc3VpdGUsIGEgYnVuY2ggbW9yZQorICAgICAgICB3aXRoIHNvbWUgc3VidGVzdCBmYWlsdXJl
cy4KKworICAgICAgICBXaGF0IGlzIHN0aWxsIG1pc3NpbmcKKyAgICAgICAgLSBBZGRpdGl2ZSBh
bmltYXRpb24gd2l0aCBtdWx0aXBsZSBhbmltYXRpb25zIG9wZXJhdGluZyBvbiB0aGUgc2FtZSBw
cm9wZXJ0eS4gVGhpcyBpcyBhCisgICAgICAgICAgbWFqb3IgYXJjaGl0ZWN0dXJhbCBmZWF0dXJl
IGluIGFuaW1hdGlvbiBjb2RlLiBJdCBzaG91bGRuJ3QgYmUgdG9vIGhhcmQgdG8gYWRkLgorICAg
ICAgICAtIE9ubHkgPGFuaW1hdGU+IGltcGxlbWVudHMgYWNjdW11bGF0ZS4KKyAgICAgICAgLSA8
YW5pbWF0ZU1vdGlvbj4gZG9lcyBub3QgZG8gcGF0aHMsIGtleXBvaW50cywgcm90YXRlLgorICAg
ICAgICAtIDxhbmltYXRlVHJhbnNmb3JtPiBkb2VzIG5vdCB3b3JrIHdpdGggdGV4dCwgc29tZSB0
cmFuc2Zvcm1zIGFyZSBicm9rZW4uCisgICAgICAgIC0gY2FsY01vZGUgcGFjZWQgaXMgbWlzc2lu
Zy4KKyAgICAgICAgLSByZXBlYXQsIGJlZ2luRXZlbnQsIGVuZEV2ZW50IGFyZSBtaXNzaW5nLgor
ICAgICAgICAtIGFjY2Vzc2tleSgpIGlzIG1pc3NpbmcuCisgICAgICAgIC0gSlMgZG9lcyBub3Qg
c2VlIGNvcnJlY3QgdmFsdWVzIGZvciBiYXNlVmFsL2FuaW1WYWwsIGNoYW5naW5nIHZhbHVlcyB0
aGF0IGFyZSBiZWluZworICAgICAgICAgIGFuaW10ZWQgZm9yIGEgc2NyaXB0IHByb2R1Y2VzIHdy
b25nIHJlc3VsdHMuIE5vdCBtYWludGFpbmluZyBzZXBhcmF0ZSBwcmVzZW50YXRpb24gCisgICAg
ICAgICAgdmFsdWVzIGZvciBYTUwgYXR0cmlidXRlcyBpcyBhbiBhcmNoaXRlY3R1cmFsIHByb2Js
ZW0gaW4gb3VyIFNWRyBjb2RlLgorICAgICAgICAtIFNvbWUgb3RoZXIgc3R1ZmYgSSBmb3Jnb3Qg
b3IgZG8gbm90IGtub3cgYWJvdXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKiBoaXN0
b3J5L0NhY2hlZFBhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFnZTo6Q2FjaGVk
UGFnZSk6CisgICAgICAgIAorICAgICAgICBVc2UgY2FjaGUgbm90aWZpY2F0aW9uIG1lY2hhbmlz
bSB0byBzdGFydC9zdG9wIGFuaW1hdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvQW5p
bWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgICogc3ZnL0N1cnZlRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKEN1cnZlRGF0YTo6Q3VydmVEYXRhKToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2Ft
cGxlQ3VydmVYKToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVZKToKKyAgICAgICAg
KEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVEZXJpdmF0aXZlWCk6CisgICAgICAgIChDdXJ2ZURhdGE6
OnNvbHZlQ3VydmVYKToKKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RydWN0IHdhcyBpbiBwYWdl
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwLCBtb3ZlZCB0byBhIGhlYWRlciBzbyBpdAorICAgICAg
ICBjYW4gYmUgdXNlZCBmcm9tIFNWRyBhbmltYXRpb24gY29kZSB0b28uCisgICAgCisgICAgICAg
ICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgCisgICAgICAgIFN0YXJ0IHRhcmdldCBhbmlt
YXRpb24gb24gbGluayBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlQ29sb3JF
bGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJv
bUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0NvbG9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50
OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6KToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6c3RhcnRl
ZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5k
VG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpTVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6On5TVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlS2V5VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxpbmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0U3RhcnRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEN1cnJlbnRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFNpbXBsZUR1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnRBdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnRBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGNNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjpieVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjphdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmlzQWRkaXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNBY2N1bXVsYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
Ojp0YXJnZXRBdHRyaWJ1dGVJc0NTUyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzb2x2ZUVwc2lsb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dW5hcHBseUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFs
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6KToKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgcHJl
dHR5IG11Y2ggYSBjb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBTVkdBbmltYXRpb25FbGVtZW50LiBU
aW1pbmcgcmVsYXRlZCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdhcyByZWZhY3RvcmVkIHRvIFNN
SUxUaW1pbmdFbGVtZW50IGNsYXNzIHRoYXQgdGhpcyBjbGFzcyBub3cgaW5oZXJpdHMuCisgICAg
ICAgIAorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFuaW1hdGlvbnMpOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Om93
bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIAorICAgICAgICBXZSBuZWVkIHRvIHJlYWNoIHRoZSA8
c3ZnPiBlbGVtZW50IGZyb20gPHVzZT4gdG9vIHNvIGdvIG91dCBmcm9tIHRoZSBzaGFkb3cgdHJl
ZS4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
VkdFbGVtZW50OjpwYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxl
bWVudDo6dW5wYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6YW5pbWF0aW9uc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpn
ZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp3aWxsU2F2
ZVRvQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6d2lsbFJlc3RvcmVG
cm9tQ2FjaGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50Ojp0aW1lQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50OjphcHBseUFuaW1h
dGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6Y2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5o
OgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHVGltZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9TVkdUaW1lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9UaW1lU2NoZWR1bGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvVGltZVNjaGVkdWxlci5oOiBSZW1vdmVkLgor
ICAgICAgICAKKyAgICAgICAgUmVwbGFjZWQgdGhlc2Ugd2l0aCBTTUlMVGltZUNvbnRhaW5lciBj
bGFzcy4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAg
IAorICAgICAgICBCdWcgZml4IHRvIHByZXZlbnQgY3Jhc2hlcyBpbiBhbmltYXRpb25zIHRlc3Rz
IHVzaW5nIDx1c2U+LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcispOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3ItKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjpTTUlMVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dW5yZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZTo6aW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjp2YWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTTUlMVGltZTo6aXNGaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Omlz
SW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aXNVbnJlc29sdmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj4pOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjptYXgpOgorICAgICAgICAoV2Vi
Q29yZTo6bWluKToKKyAgICAgICAgCisgICAgICAgIEEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdp
dGggc3BlY2lhbCB2YWx1ZXMgImluZGVmaW5pdGUiIGFuZCAidW5yZXNvbHZlZCIuCisgICAgICAg
IAorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2NoZWR1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWVDb250YWluZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29u
dGFpbmVyOjppc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpyZXN1bWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuaDogQWRkZWQuCisgICAgICAgIAorICAgICAgICBNYW5hZ2VzIHRo
ZSBjbG9jayBhbmQga2VlcHMgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBhbmltYXRpb25zLgorICAgICAg
ICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1pbmdFbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVyOjpDb25kaXRpb25FdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmRpdGlvbkV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpDb25kaXRp
b246OkNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6U01J
TFRpbWluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6On5T
TUlMVGltaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
aW5nRWxlbWVudDo6cGFyc2VPZmZzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
aW5nRWxlbWVudDo6cGFyc2VDbG9ja1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVNv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFRpbWVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltaW5nRWxlbWVudDo6aXNUaW1pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNN
SUxUaW1pbmdFbGVtZW50OjpwYXJzZUJlZ2luT3JFbmQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltaW5nRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWluZ0VsZW1lbnQ6OnRhcmdldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OmVsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZp
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnhsaW5rSHJlZik6Cisg
ICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6ZHVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXBlYXREdXIpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OnJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1p
bmdFbGVtZW50OjptYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVu
dDo6bWluVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnNpbXBs
ZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjphZGRCZWdp
blRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmFkZEVuZFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZpbmRJbnN0YW5jZVRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlQWN0aXZlRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlSW50ZXJ2YWwp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc29sdmVGaXJzdEludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlTmV4dElu
dGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpuZXh0UHJvZ3Jl
c3NUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkxpc3RD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjplbmRMaXN0Q2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6Y2hlY2tSZXN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRp
b25QZXJjZW50QW5kUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50
OjpjYWxjdWxhdGVOZXh0UHJvZ3Jlc3NUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1p
bmdFbGVtZW50OjpkZXRlcm1pbmVBY3RpdmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltaW5nRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmFkZFRpbWVEZXBlbmRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlbW92ZVRpbWVEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmhhbmRsZUNvbmRpdGlvbkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkJ5TGlua0Fj
dGl2YXRpb24pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6dGltZUNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEJlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltaW5nRWxlbWVudDo6Q29uZGl0aW9uOjopOgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
YnN0cmFjdCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBTTUlMIHRpbWluZyBtb2RlbC4gQXMgYW4gb3V0
cHV0IGl0IHByb2R1Y2VzIGNhbGxzCisgICAgICAgIHRvIHRoZXNlIHZpcnR1YWwgZnVuY3Rpb25z
OgorICAgICAgICAKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2
YWwoKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQg
cGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQg
dW5hcHBseUFuaW1hdGlvbigpID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFj
dGl2ZUludGVydmFsKCkgPSAwOworCiAyMDA4LTA0LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaXR6LgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDMxNzQwKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMxNTYsMTAgKzMxNTYsNiBAQAogCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkEy
MDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3BwICovOyB9OwogCQlCMjhDNkEy
QTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTIxMEQwMEM0NDgwMDMzNEFBNCAvKiBT
VkdJbWFnZUxvYWRlci5oICovOyB9OwotCQlCMjhDNkEyQjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZH
VGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI4QzZBMjIwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmNwcCAqLzsgfTsKLQkJQjI4QzZB
MkMwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkEyMzBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHVGlt
ZXIuaCAqLzsgfTsKLQkJQjI4QzZBMkQwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZB
MjQwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIuY3BwICovOyB9OwotCQlCMjhDNkEy
RTBEMDBDNDQ4MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZBMjUwRDAwQzQ0ODAwMzM0QUE0IC8qIFRp
bWVTY2hlZHVsZXIuaCAqLzsgfTsKIAkJQjI5N0JDNzAwQjNDMTRDRjAwNDVBNTkwIC8qIEpTU1ZH
UGF0aFNlZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI5N0JDNkYwQjNDMTRDRjAwNDVBNTkwIC8qIEpTU1ZHUGF0aFNlZ0xpc3RD
dXN0b20uY3BwICovOyB9OwogCQlCMkEwMTVBODBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3ND
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovOyB9Owog
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4OTYsNiArMzg5MiwxMyBAQAogCQlFNDQ2MTQzQzBDRDY4
OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpT
SFRNTFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8q
IFJlbmRlclZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07
CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYy
RUNFIC8qIFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0NkU5NzhEMERBQUQ2NTMwMDcxRTg5NCAv
KiBTTUlMVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDZFOTc4NzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuY3BwICovOyB9OworCQlF
NDZFOTc4RTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5Nzg4MERBQUQ2NTMwMDcxRTg5NCAvKiBT
TUlMVGltZS5oICovOyB9OworCQlFNDZFOTc4RjBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWVD
b250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ2RTk3ODkwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmNwcCAqLzsg
fTsKKwkJRTQ2RTk3OTAwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZFOTc4QTBEQUFE
NjUzMDA3MUU4OTQgLyogU01JTFRpbWVDb250YWluZXIuaCAqLzsgfTsKKwkJRTQ2RTk3OTEwREFB
RDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5NzhCMERBQUQ2NTMwMDcxRTg5NCAvKiBT
TUlMVGltaW5nRWxlbWVudC5jcHAgKi87IH07CisJCUU0NkU5NzkyMERBQUQ2NTMwMDcxRTg5NCAv
KiBTTUlMVGltaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2RTk3OEMwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50
LmggKi87IH07CisJCUU0NkU5RUIyMERBQzdDNjAwMDcxRTg5NCAvKiBDdXJ2ZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5RUIxMERBQzdD
NjAwMDcxRTg5NCAvKiBDdXJ2ZURhdGEuaCAqLzsgfTsKIAkJRTQ5NjI2QzIwRDgwRDk0ODAwRTM0
MDVDIC8qIFByZWxvYWRTY2FubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5l
ci5jcHAgKi87IH07CiAJCUU0OTYyNkMzMEQ4MEQ5NDkwMEUzNDA1QyAvKiBQcmVsb2FkU2Nhbm5l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENEFC
RTEwRDc1NDJGMTAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVyLmggKi87IH07CiAJCUU0QzI3OTU4
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVu
ZGVyTWVkaWEuY3BwICovOyB9OwpAQCAtODE1MCw2ICs4MTUzLDEzIEBACiAJCUU0NDYxNDExMENE
NjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDYxNDEyMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTk3ODcwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxU
aW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNNSUxUaW1lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTk3ODgwREFBRDY1MzAwNzFFODk0
IC8qIFNNSUxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNNSUxUaW1l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NkU5Nzg5MERBQUQ2NTMwMDcxRTg5
NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTTUlMVGltZUNvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0NkU5NzhBMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTTUlMVGltZUNvbnRhaW5lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDZFOTc4QjBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRp
bWluZ0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU01J
TFRpbWluZ0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDZFOTc4
QzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU01JTFRpbWluZ0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTQ2RTlFQjEwREFDN0M2MDAwNzFFODk0IC8qIEN1cnZlRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXJ2ZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMDEwQ0JGOEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3Jlc3NFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQxRTAyMENCRjhFQUEwMEFGMkVD
RSAvKiBQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMDMwQ0JG
OEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFByb2dyZXNzRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwNTMs
OSArMTEwNjMsMTEgQEAKIAkJQjIyMjc3Q0EwRDAwQkYxRTAwNzFCNzgyIC8qIHN2ZyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTQ2RTk3ODYwREFBRDYx
QjAwNzFFODk0IC8qIGFuaW1hdGlvbiAqLywKIAkJCQlCMjU1OTg4NjBEMDBEOEI4MDBCQjgyNUMg
LyogZ3JhcGhpY3MgKi8sCiAJCQkJQjIyMjc3Q0IwRDAwQkYxRjAwNzFCNzgyIC8qIENvbG9yRGlz
dGFuY2UuY3BwICovLAogCQkJCUIyMjI3N0NDMEQwMEJGMUYwMDcxQjc4MiAvKiBDb2xvckRpc3Rh
bmNlLmggKi8sCisJCQkJRTQ2RTlFQjEwREFDN0M2MDAwNzFFODk0IC8qIEN1cnZlRGF0YS5oICov
LAogCQkJCUU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAq
LywKIAkJCQlFNDE1RjEwQzBEOUEwNTg3MDAzM0NFOTcgLyogRWxlbWVudFRpbWVDb250cm9sLmlk
bCAqLywKIAkJCQlCMjIyNzdDRDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCkBAIC0xMjMwOSw2ICsxMjMyMSwxOSBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNl
c1RhYnMgPSAwOwogCQl9OworCQlFNDZFOTc4NjBEQUFENjFCMDA3MUU4OTQgLyogYW5pbWF0aW9u
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlFNDZFOTc4
NzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuY3BwICovLAorCQkJCUU0NkU5Nzg4MERBQUQ2
NTMwMDcxRTg5NCAvKiBTTUlMVGltZS5oICovLAorCQkJCUU0NkU5Nzg5MERBQUQ2NTMwMDcxRTg5
NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8sCisJCQkJRTQ2RTk3OEEwREFBRDY1MzAwNzFF
ODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmggKi8sCisJCQkJRTQ2RTk3OEIwREFBRDY1MzAwNzFF
ODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNwcCAqLywKKwkJCQlFNDZFOTc4QzBEQUFENjUzMDA3
MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gYW5pbWF0
aW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRUQ1MDFEQzkwQjI0OUYz
OTAwQUUxOEQ5IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC0xNDQ3NSw3ICsxNDUwMCw2IEBACiAJCQkJQjIyMjdBQ0IwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1RleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FDRTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHVGV4dFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0FEMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQjI4QzZBMkMwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0FENDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGl0bGVFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FENzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
VHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FERDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ1NDgsNyArMTQ1
NzIsNiBAQAogCQkJCUIyQzNEQTRCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MURGNkQ3RTBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0IwMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFu
Z2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjhDNkEyRTBEMDBDNDQ4MDAzMzRBQTQgLyogVGlt
ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1
IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGQkFFODBCNTE1MkVEMDAwMUYxRDcg
LyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1OEQ3
QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NzUyLDYgKzE0Nzc1LDkgQEAK
IAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQxNUYxODQwRDlBMUE4MzAwMzNDRTk3IC8qIEVsZW1lbnRUaW1lQ29udHJvbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRkJGMkIwRDlBRjA0NzAwOEZDMjkyIC8qIFNWR0hLZXJu
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ2RTk3OEUwREFBRDY1MzAwNzFFODk0IC8q
IFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZFOTc5MDBEQUFENjUzMDA3MUU4OTQg
LyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NkU5NzkyMERBQUQ2
NTMwMDcxRTg5NCAvKiBTTUlMVGltaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdB
Q0NFNDIwREEyOTgwRjAwODlFNjAyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ3NTksNiArMTQ3ODUsNyBAQAogCQkJCTUxRTBCQjM4MERB
NUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzUzQzVG
NTBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjcy
RDg0MERBOTgwMDkwMDg0NEUyRiAvKiBPcmlnaW5TdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFNDZFOUVCMjBEQUM3QzYwMDA3MUU4OTQgLyogQ3VydmVEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE2MTU4LDcgKzE2MTg1LDYgQEAKIAkJCQlCMjIyN0FDQTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQ0QwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0FEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCMjhDNkEyQjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RpdGxl
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FENjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QURDMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2
MjI4LDcgKzE2MjU0LDYgQEAKIAkJCQlCMkMzREE0QTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0
cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURGNkQ4MDBCOTJBMThFMDBDMkRDODUgLyog
VGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTNBRjBDRDYzMzEwMDBGQURB
NzUgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjhDNkEyRDBEMDBDNDQ4
MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUVB
NDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3
MzYwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczODBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTE2NDEzLDYgKzE2NDM4LDkgQEAKIAkJCQlCQ0UxQzQxQzBEOTgyOTgxMDAzQjAyRjIgLyog
TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMUM0M0IwRDk4MzBEMzAwM0IwMkYy
IC8qIEpTTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMUM0NDAwRDk4MzBGNDAw
M0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ2RTk3
OEQwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
NkU5NzhGMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlFNDZFOTc5MTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5QzcwREEwNTlEQzAwMjUwOTExIC8qIFN0b3Jh
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpT
U3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUwQkFCQzBEQTU1NDcxMDBBOUU0MTcg
LyogU3RvcmFnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMzE3NDApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw3ICsxMzgsNiBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVk
ZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVGltZVNjaGVkdWxlci5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4
OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDExICsxMDcsNiBAQCBDYWNo
ZWRQYWdlOjpDYWNoZWRQYWdlKFBhZ2UqIHBhZ2UpCiAgICAgfQogCiAgICAgbV9kb2N1bWVudC0+
c2V0SW5QYWdlQ2FjaGUodHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX2RvY3Vt
ZW50ICYmIG1fZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkKLSAgICAgICAgbV9kb2N1bWVudC0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5wYXVzZUFuaW1hdGlvbnMoKTsKLSNlbmRpZgogfQogCiBD
YWNoZWRQYWdlOjp+Q2FjaGVkUGFnZSgpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNs
dWRlICJDdXJ2ZURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00Miw5MSArNDMsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVs
YXkgPSAwLjAyNTsKIAotc3RydWN0IEN1cnZlRGF0YSB7Ci0gICAgQ3VydmVEYXRhKGRvdWJsZSBw
MXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnkpCi0gICAgewotICAgICAgICAv
LyBDYWxjdWxhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzLCBpbXBsaWNpdCBmaXJzdCBh
bmQgbGFzdCBjb250cm9sIHBvaW50cyBhcmUgKDAsMCkgYW5kICgxLDEpLgotICAgICAgICBjeCA9
IDMuMCAqIHAxeDsKLSAgICAgICAgYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIGN4OwotICAgICAg
ICBheCA9IDEuMCAtIGN4IC1ieDsKLSAgICAgICAgIAotICAgICAgICBjeSA9IDMuMCAqIHAxeTsK
LSAgICAgICAgYnkgPSAzLjAgKiAocDJ5IC0gcDF5KSAtIGN5OwotICAgICAgICBheSA9IDEuMCAt
IGN5IC0gYnk7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBzYW1wbGVDdXJ2ZVgoZG91YmxlIHQp
Ci0gICAgewotICAgICAgICAvLyBgYXggdF4zICsgYnggdF4yICsgY3ggdCcgZXhwYW5kZWQgdXNp
bmcgSG9ybmVyJ3MgcnVsZS4KLSAgICAgICAgcmV0dXJuICgoYXggKiB0ICsgYngpICogdCArIGN4
KSAqIHQ7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBzYW1wbGVDdXJ2ZVkoZG91YmxlIHQpCi0g
ICAgewotICAgICAgICByZXR1cm4gKChheSAqIHQgKyBieSkgKiB0ICsgY3kpICogdDsKLSAgICB9
Ci0gICAgCi0gICAgZG91YmxlIHNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoZG91YmxlIHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gKDMuMCAqIGF4ICogdCArIDIuMCAqIGJ4KSAqIHQgKyBjeDsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gR2l2ZW4gYW4geCB2YWx1ZSwgZmluZCBhIHBhcmFtZXRyaWMgdmFs
dWUgaXQgY2FtZSBmcm9tLgotICAgIGRvdWJsZSBzb2x2ZUN1cnZlWChkb3VibGUgeCwgZG91Ymxl
IGVwc2lsb24pCi0gICAgewotICAgICAgICBkb3VibGUgdDA7Ci0gICAgICAgIGRvdWJsZSB0MTsK
LSAgICAgICAgZG91YmxlIHQyOwotICAgICAgICBkb3VibGUgeDI7Ci0gICAgICAgIGRvdWJsZSBk
MjsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgLy8gRmlyc3QgdHJ5IGEgZmV3IGl0ZXJhdGlv
bnMgb2YgTmV3dG9uJ3MgbWV0aG9kIC0tIG5vcm1hbGx5IHZlcnkgZmFzdC4KLSAgICAgICAgZm9y
ICh0MiA9IHgsIGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICB4MiA9IHNhbXBsZUN1
cnZlWCh0MikgLSB4OwotICAgICAgICAgICAgaWYgKGZhYnMgKHgyKSA8IGVwc2lsb24pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHQyOwotICAgICAgICAgICAgZDIgPSBzYW1wbGVDdXJ2ZURlcml2
YXRpdmVYKHQyKTsKLSAgICAgICAgICAgIGlmIChmYWJzKGQyKSA8IDFlLTYpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0MiA9IHQyIC0geDIgLyBkMjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgYmlzZWN0aW9uIG1ldGhvZCBmb3IgcmVsaWFi
aWxpdHkuCi0gICAgICAgIHQwID0gMC4wOwotICAgICAgICB0MSA9IDEuMDsKLSAgICAgICAgdDIg
PSB4OwotCi0gICAgICAgIGlmICh0MiA8IHQwKQotICAgICAgICAgICAgcmV0dXJuIHQwOwotICAg
ICAgICBpZiAodDIgPiB0MSkKLSAgICAgICAgICAgIHJldHVybiB0MTsKLQotICAgICAgICB3aGls
ZSAodDAgPCB0MSkgewotICAgICAgICAgICAgeDIgPSBzYW1wbGVDdXJ2ZVgodDIpOwotICAgICAg
ICAgICAgaWYgKGZhYnMoeDIgLSB4KSA8IGVwc2lsb24pCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHQyOwotICAgICAgICAgICAgaWYgKHggPiB4MikKLSAgICAgICAgICAgICAgICB0MCA9IHQyOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHQxID0gdDI7Ci0gICAgICAgICAgICB0
MiA9ICh0MSAtIHQwKSAqIC41ICsgdDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsdXJl
LgotICAgICAgICByZXR1cm4gdDI7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBkb3VibGUg
YXg7Ci0gICAgZG91YmxlIGJ4OwotICAgIGRvdWJsZSBjeDsKLSAgICAKLSAgICBkb3VibGUgYXk7
Ci0gICAgZG91YmxlIGJ5OwotICAgIGRvdWJsZSBjeTsKLX07Ci0KIC8vIFRoZSBlcHNpbG9uIHZh
bHVlIHdlIHBhc3MgdG8gc29sdmVDdXJ2ZVggZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdv
aW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBhbmltYXRp
b24sIHRoZSBtb3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24gcmVz
dWx0IHRvIGF2b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBkb3VibGUg
c29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0
aW9uKTsgfQpJbmRleDogV2ViQ29yZS9zdmcvQ3VydmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvQ3VydmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9DdXJ2ZURh
dGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyAjaWZuZGVmIEN1cnZlRGF0YV9oCisgI2RlZmlu
ZSBDdXJ2ZURhdGFfaAorCitzdHJ1Y3QgQ3VydmVEYXRhIHsKKyAgICBDdXJ2ZURhdGEoZG91Ymxl
IHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSkKKyAgICB7CisgICAgICAg
IC8vIENhbGN1bGF0ZSB0aGUgcG9seW5vbWlhbCBjb2VmZmljaWVudHMsIGltcGxpY2l0IGZpcnN0
IGFuZCBsYXN0IGNvbnRyb2wgcG9pbnRzIGFyZSAoMCwwKSBhbmQgKDEsMSkuCisgICAgICAgIGN4
ID0gMy4wICogcDF4OworICAgICAgICBieCA9IDMuMCAqIChwMnggLSBwMXgpIC0gY3g7CisgICAg
ICAgIGF4ID0gMS4wIC0gY3ggLWJ4OworICAgICAgICAgCisgICAgICAgIGN5ID0gMy4wICogcDF5
OworICAgICAgICBieSA9IDMuMCAqIChwMnkgLSBwMXkpIC0gY3k7CisgICAgICAgIGF5ID0gMS4w
IC0gY3kgLSBieTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHNhbXBsZUN1cnZlWChkb3VibGUg
dCkKKyAgICB7CisgICAgICAgIC8vIGBheCB0XjMgKyBieCB0XjIgKyBjeCB0JyBleHBhbmRlZCB1
c2luZyBIb3JuZXIncyBydWxlLgorICAgICAgICByZXR1cm4gKChheCAqIHQgKyBieCkgKiB0ICsg
Y3gpICogdDsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHNhbXBsZUN1cnZlWShkb3VibGUgdCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoKGF5ICogdCArIGJ5KSAqIHQgKyBjeSkgKiB0OworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChkb3VibGUgdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAoMy4wICogYXggKiB0ICsgMi4wICogYngpICogdCArIGN4Owor
ICAgIH0KKyAgICAKKyAgICAvLyBHaXZlbiBhbiB4IHZhbHVlLCBmaW5kIGEgcGFyYW1ldHJpYyB2
YWx1ZSBpdCBjYW1lIGZyb20uCisgICAgZG91YmxlIHNvbHZlQ3VydmVYKGRvdWJsZSB4LCBkb3Vi
bGUgZXBzaWxvbikKKyAgICB7CisgICAgICAgIGRvdWJsZSB0MDsKKyAgICAgICAgZG91YmxlIHQx
OworICAgICAgICBkb3VibGUgdDI7CisgICAgICAgIGRvdWJsZSB4MjsKKyAgICAgICAgZG91Ymxl
IGQyOworICAgICAgICBpbnQgaTsKKworICAgICAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0
aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LgorICAgICAgICBm
b3IgKHQyID0geCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIHgyID0gc2FtcGxl
Q3VydmVYKHQyKSAtIHg7CisgICAgICAgICAgICBpZiAoZmFicyAoeDIpIDwgZXBzaWxvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdDI7CisgICAgICAgICAgICBkMiA9IHNhbXBsZUN1cnZlRGVy
aXZhdGl2ZVgodDIpOworICAgICAgICAgICAgaWYgKGZhYnMoZDIpIDwgMWUtNikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHQyID0gdDIgLSB4MiAvIGQyOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxp
YWJpbGl0eS4KKyAgICAgICAgdDAgPSAwLjA7CisgICAgICAgIHQxID0gMS4wOworICAgICAgICB0
MiA9IHg7CisKKyAgICAgICAgaWYgKHQyIDwgdDApCisgICAgICAgICAgICByZXR1cm4gdDA7Cisg
ICAgICAgIGlmICh0MiA+IHQxKQorICAgICAgICAgICAgcmV0dXJuIHQxOworCisgICAgICAgIHdo
aWxlICh0MCA8IHQxKSB7CisgICAgICAgICAgICB4MiA9IHNhbXBsZUN1cnZlWCh0Mik7CisgICAg
ICAgICAgICBpZiAoZmFicyh4MiAtIHgpIDwgZXBzaWxvbikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdDI7CisgICAgICAgICAgICBpZiAoeCA+IHgyKQorICAgICAgICAgICAgICAgIHQwID0gdDI7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdDEgPSB0MjsKKyAgICAgICAgICAg
IHQyID0gKHQxIC0gdDApICogLjUgKyB0MDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhaWx1
cmUuCisgICAgICAgIHJldHVybiB0MjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGRvdWJs
ZSBheDsKKyAgICBkb3VibGUgYng7CisgICAgZG91YmxlIGN4OworICAgIAorICAgIGRvdWJsZSBh
eTsKKyAgICBkb3VibGUgYnk7CisgICAgZG91YmxlIGN5OworfTsKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTTUlMVGltaW5nRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogCkBA
IC0xMzgsMTAgKzEzOSwyMSBAQCB2b2lkIFNWR0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2CiAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5pc0VtcHR5KCkpIC8vIGlmIHRhcmdldCBpcyBl
bXB0eSwgZGVmYXVsdCB0byAiX3NlbGYiIG9yIHVzZSB4bGluazp0YXJnZXQgaWYgc2V0CiAgICAg
ICAgICAgICB0YXJnZXQgPSAoZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnNob3dBdHRyKSA9PSAi
bmV3IikgPyAiX2JsYW5rIiA6ICJfc2VsZiI7CiAKLSAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNl
VVJMKGhyZWYoKSk7Ci0gICAgICAgIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAg
ICAgIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB1
cmwgPSBwYXJzZVVSTChocmVmKCkpOworICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCIj
IikpIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQodXJsLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICAgICAgaWYg
KFNNSUxUaW1pbmdFbGVtZW50Ojppc1RpbWluZ0VsZW1lbnQodGFyZ2V0RWxlbWVudCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgU01JTFRpbWluZ0VsZW1lbnQqIHRpbWVkID0gc3RhdGljX2Nhc3Q8
U01JTFRpbWluZ0VsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
dGltZWQtPmJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBldnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsKSwgdGFyZ2V0LCBldnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgfQogCiAgICAgICAgIGV2
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
Q29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBAIC0z
NCw2ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgbmVlZHMgdG8gZGllLiBTVkdBbmlt
YXRlRWxlbWVudCAod2hpY2ggaGFzIHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5KSBzaG91
bGQgYmUgaW5zdGFudGlhdGVkIGluc3RlYWQuCiAKIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNW
R0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQpAQCAtNDQs
NTcgKzQ1LDMzIEBAIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsK
IH0KIAotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCgpCit2b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpCiB7Ci0gICAgbV9iYXNlQ29sb3IgPSBT
VkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZSgpKTsKLSAgICBtX2Zyb21Db2xvciA9IENvbG9yKCk7Ci0gICAgbV90b0NvbG9yID0gQ29s
b3IoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAg
IENvbG9yIGJhc2VDb2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3Nh
dmVkQmFzZVZhbHVlKTsKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShD
b2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNlQ29sb3IsIG1fYW5pbWF0ZWRDb2xv
cikubmFtZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKQorYm9vbCBTVkdBbmltYXRl
Q29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpCiB7Ci0g
ICAgaWYgKGlzQWRkaXRpdmUoKSkKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZShDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Jhc2VDb2xvciwgbV9hbmlt
YXRlZENvbG9yKS5uYW1lKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKKyAgICBDb2xvciBvbGRDb2xv
ciA9IG1fYW5pbWF0ZWRDb2xvcjsKKyAgICBtX2FuaW1hdGVkQ29sb3IgPSBDb2xvckRpc3RhbmNl
KG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2UpLmFkZFRv
Q29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgcmV0dXJuIG1fYW5pbWF0ZWRDb2xvciAh
PSBvbGRDb2xvcjsKK30KKyAgICAKK2Jvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5n
JiB0b1N0cmluZykKK3sKKyAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JG
cm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1v
ZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQorYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpj
YWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJ5U3RyaW5nKQogewotICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRPX0FOSU1BVElP
TikKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVhdGlvbjogdmFs
dWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UKLSAgICAgICAgbV9hbmlt
YXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZShtX2Jhc2VDb2xvciwgbV90b0NvbG9yKS5zY2FsZWRE
aXN0YW5jZSh0aW1lUGVyY2VudGFnZSkuYWRkVG9Db2xvckFuZENsYW1wKG1fYmFzZUNvbG9yKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENvbG9yRGlzdGFuY2UobV9mcm9t
Q29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFkZFRvQ29s
b3JBbmRDbGFtcChtX2Zyb21Db2xvcik7Ci0gICAgcmV0dXJuIChtX2FuaW1hdGVkQ29sb3IgIT0g
bV9iYXNlQ29sb3IpOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0
ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2
YWx1ZUluZGV4KQotewotICAgIHN3aXRjaCAoYW5pbWF0aW9uTW9kZSkgewotICAgIGNhc2UgRlJP
TV9UT19BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJv
bVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAgIGNh
c2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9t
UkdCQ29sb3JTdHJpbmcobV90byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRlJPTV9CWV9B
TklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNv
bG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyhtX2J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCWV9BTklN
QVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9y
U3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENv
bG9yc0FuZENsYW1wKG1fZnJvbUNvbG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJp
bmcobV9ieSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZBTFVFU19BTklNQVRJT046Ci0g
ICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1f
dmFsdWVzW3ZhbHVlSW5kZXhdKTsKLSAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsg
MSkgPCBtX3ZhbHVlcy5zaXplKCkpID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21Db2xvcjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOT19BTklNQVRJT046Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLSAgICAKKyAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xv
clN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRD
b2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3Ry
aW5nKGJ5U3RyaW5nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMCArMzcsMTggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVh
bCB+U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVB
bmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1
ZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVu
dCh1bnNpZ25lZCByZXBlYXQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21B
bmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJp
bmcpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKICAgICAgICAgQ29sb3IgbV9hbmltYXRl
ZENvbG9yOwotCiAgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKICAgICAgICAgQ29sb3IgbV9mcm9t
Q29sb3I7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNSArMjUsMjAgQEAKICNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNsdWRlICJTVkdBbmltYXRlRWxlbWVu
dC5oIgogCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJDb2xv
ckRpc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXJzZXJV
dGlsaXRpZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQo
dGFnTmFtZSwgZG9jKQotICAgICwgbV9jdXJyZW50SXRlbSgtMSkKKyAgICAsIG1fcHJvcGVydHlU
eXBlKFN0cmluZ1Byb3BlcnR5KQorICAgICwgbV9mcm9tTnVtYmVyKDApCisgICAgLCBtX3RvTnVt
YmVyKDApCisgICAgLCBtX2FuaW1hdGVkTnVtYmVyKG51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCkpCiB7CiB9CiAKQEAgLTQwLDYgKzQ2LDEzMSBAQCBTVkdBbmltYXRlRWxlbWVudDo6
flNWR0FuaW1hdGVFbGVtZW50KCkKIHsKIH0KIAorc3RhdGljIGJvb2wgcGFyc2VOdW1iZXJWYWx1
ZUFuZFVuaXQoY29uc3QgU3RyaW5nJiBpbiwgZG91YmxlJiB2YWx1ZSwgU3RyaW5nJiB1bml0KQor
eworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZnJvbSB0b3Agb2YgbXkgaGVhZCwgZmlndXJlIG91
dCBhbGwgcHJvcGVydHkgdHlwZXMgdGhhdCBjYW4gYmUgYW5pbWF0ZWQgYXMgbnVtYmVycy4KKyAg
ICB1bnNpZ25lZCB1bml0TGVuZ3RoID0gMDsKKyAgICBTdHJpbmcgcGFyc2UgPSBpbi5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICBpZiAocGFyc2UuZW5kc1dpdGgoIiUiKSkKKyAgICAgICAgdW5pdExl
bmd0aCA9IDE7CisgICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoInB4IikgfHwgcGFyc2UuZW5k
c1dpdGgoInB0IikgfHwgcGFyc2UuZW5kc1dpdGgoImVtIikpCisgICAgICAgIHVuaXRMZW5ndGgg
PSAyOworICAgIGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJkZWciKSB8fCBwYXJzZS5lbmRzV2l0
aCgicmFkIikpCisgICAgICAgIHVuaXRMZW5ndGggPSAzOworICAgIGVsc2UgaWYgKHBhcnNlLmVu
ZHNXaXRoKCJncmFkIikpCisgICAgICAgIHVuaXRMZW5ndGggPSA0OworICAgIFN0cmluZyBuZXdV
bml0ID0gcGFyc2UucmlnaHQodW5pdExlbmd0aCk7CisgICAgU3RyaW5nIG51bWJlciA9IHBhcnNl
LmxlZnQocGFyc2UubGVuZ3RoKCkgLSB1bml0TGVuZ3RoKTsKKyAgICBpZiAoIXVuaXQuaXNFbXB0
eSgpICYmIG5ld1VuaXQgIT0gdW5pdCB8fCBudW1iZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgVUNoYXIgbGFzdCA9IG51bWJlcltudW1iZXIubGVuZ3RoKCkgLSAxXTsK
KyAgICBpZiAobGFzdCA8ICcwJyB8fCBsYXN0ID4gJzknKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdW5pdCA9IG5ld1VuaXQ7CisgICAgYm9vbCBvazsKKyAgICB2YWx1ZSA9IG51bWJlci50
b0RvdWJsZSgmb2spOworICAgIHJldHVybiBvazsKK30KKwordm9pZCBTVkdBbmltYXRlRWxlbWVu
dDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBlbnRpcmVseSB3cm9uZyB3YXkgdG8gZG8gYWRkaXRpdmUuIEl0IHdv
bid0IHdvcmsgd2l0aAorICAgIC8vIG11bHRpcGxlIGFuaW1hdGlvbnMgb24gdGhlIHNhbWUgZWxl
bWVudC4KKyAgICAvLyBXZSBuZWVkIHRvIGFkZCB0b2dldGhlciBhbGwgYW5pbWF0aW9uIGNvbnRy
aWJ1dGlvbnMgcGVyIHByb3BlcnR5IGFuZAorICAgIC8vIHRoZW4gYXBwbHkgaW4gb25lIGdvLgor
ICAgIFN0cmluZyB2YWx1ZVRvQXBwbHk7CisgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJl
clByb3BlcnR5KSB7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSBtX2FuaW1hdGVkTnVtYmVyOwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB3b3JrIGZvciB2YWx1ZXMgYW5pbWF0aW9u
LgorICAgICAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdCkKKyAgICAgICAgICAgIG51
bWJlciArPSBtX3RvTnVtYmVyICogcmVwZWF0OworICAgICAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7
CisgICAgICAgICAgICBkb3VibGUgYmFzZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJW
YWx1ZUFuZFVuaXQobV9zYXZlZEJhc2VWYWx1ZSwgYmFzZSwgbV9udW1iZXJVbml0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBudW1iZXIgKz0gYmFzZTsKKyAgICAgICAg
fQorICAgICAgICB2YWx1ZVRvQXBwbHkgPSBTdHJpbmc6Om51bWJlcihudW1iZXIpICsgbV9udW1i
ZXJVbml0OworICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkg
eworICAgICAgICBDb2xvciBiYXNlID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KG1fc2F2ZWRCYXNlVmFsdWUpOworICAgICAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNl
LCBtX2FuaW1hdGVkQ29sb3IpLm5hbWUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2
YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkQ29sb3IubmFtZSgpOworICAgIH0gZWxzZQorICAgICAg
ICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOworICAgIHNldFRhcmdldEF0dHJpYnV0
ZUFuaW1hdGVkVmFsdWUodmFsdWVUb0FwcGx5KTsKK30KKworYm9vbCBTVkdBbmltYXRlRWxlbWVu
dDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKQoreworICAgIGlmIChtX3By
b3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgICAgICBkb3VibGUgb2xkVmFsdWUg
PSBtX2FuaW1hdGVkTnVtYmVyOworICAgICAgICBtX2FuaW1hdGVkTnVtYmVyID0gKG1fdG9OdW1i
ZXIgLSBtX2Zyb21OdW1iZXIpICogcGVyY2VudGFnZSArIG1fZnJvbU51bWJlcjsKKyAgICAgICAg
cmV0dXJuIG9sZFZhbHVlID09IG1fYW5pbWF0ZWROdW1iZXI7CisgICAgfSAKKyAgICBpZiAobV9w
cm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgICAgICBtX2FuaW1hdGVkQ29sb3Ig
PSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHBl
cmNlbnRhZ2UpLmFkZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSB0
aGlzLT5hbmltYXRpb25Nb2RlKCk7CisgICAgQVNTRVJUKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRv
QW5pbWF0aW9uIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgYW5pbWF0aW9uTW9k
ZSA9PSBWYWx1ZXNBbmltYXRpb24pOworICAgIFN0cmluZyBvbGRWYWx1ZSA9IG1fYW5pbWF0ZWRT
dHJpbmc7CisgICAgaWYgKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJj
ZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50
YWdlID09IDEuMGYpCisgICAgICAgIG1fYW5pbWF0ZWRTdHJpbmcgPSBtX3RvU3RyaW5nOworICAg
IGVsc2UKKyAgICAgICAgbV9hbmltYXRlZFN0cmluZyA9IG1fZnJvbVN0cmluZzsKKyAgICByZXR1
cm4gb2xkVmFsdWUgPT0gbV9hbmltYXRlZFN0cmluZzsKK30KKyAKK3N0YXRpYyBib29sIGlzQ29s
b3JBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIGF0dHJp
YnV0ZSA9PSAiY29sb3IiIHx8IGF0dHJpYnV0ZSA9PSAiZmlsbCIgfHwgYXR0cmlidXRlID09ICJz
dHJva2UiOworfQorCitib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9W
YWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQor
eworICAgIC8vIEZJWE1FOiBOZWVkcyBtb3JlIHNvbGlkIHdheSBkZXRlcm1pbmUgdGFyZ2V0IGF0
dHJpYnV0ZSB0eXBlLgorICAgIG1fcHJvcGVydHlUeXBlID0gaXNDb2xvckF0dHJpYnV0ZShhdHRy
aWJ1dGVOYW1lKCkpID8gQ29sb3JQcm9wZXJ0eSA6IE51bWJlclByb3BlcnR5OworICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGZyb21TdHJpbmcpOworICAgICAgICBt
X3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwor
ICAgICAgICBpZiAobV9mcm9tQ29sb3IuaXNWYWxpZCgpICYmIG1fdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX251bWJl
clVuaXQgPSBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZy
b21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkgeworICAgICAgICAgICAgaWYg
KHBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KHRvU3RyaW5nLCBtX3RvTnVtYmVyLCBtX251bWJlclVu
aXQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IG1fZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CisgICAgbV90b1N0cmluZyA9IHRvU3RyaW5nOwor
ICAgIG1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25z
dCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpCit7CisgICAgbV9w
cm9wZXJ0eVR5cGUgPSBpc0NvbG9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUoKSkgPyBDb2xvclBy
b3BlcnR5IDogTnVtYmVyUHJvcGVydHk7CisgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9y
UHJvcGVydHkpIHsKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBmcm9tU3RyaW5nLmlzRW1wdHkoKSA/
IENvbG9yKCkgOiBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7
CisgICAgICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1f
ZnJvbUNvbG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYnlTdHJpbmcpKTsK
KyAgICAgICAgaWYgKCFtX2Zyb21Db2xvci5pc1ZhbGlkKCkgfHwgIW1fdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9u
dW1iZXJVbml0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fZnJvbU51bWJlciA9IDA7CisgICAgICAg
IGlmICghZnJvbVN0cmluZy5pc0VtcHR5KCkgJiYgIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZy
b21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFwYXJzZU51bWJlclZhbHVlQW5kVW5pdChieVN0cmluZywg
bV90b051bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgbV90b051bWJlciArPSBtX2Zyb21OdW1iZXI7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
aAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNywxMyArMzgsMjUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBm
bG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFn
ZVBhc3QpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVG
cm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1
ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcm
IGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fY3VycmVudEl0ZW07Ci0KLSAgICAgICAgU3RyaW5n
IG1fc2F2ZWRUbzsKKyAgICAgICAgZW51bSBQcm9wZXJ0eVR5cGUgeyBOdW1iZXJQcm9wZXJ0eSwg
Q29sb3JQcm9wZXJ0eSwgU3RyaW5nUHJvcGVydHkgfTsKKyAgICAgICAgUHJvcGVydHlUeXBlIG1f
cHJvcGVydHlUeXBlOworICAgICAgICAKKyAgICAgICAgZG91YmxlIG1fZnJvbU51bWJlcjsKKyAg
ICAgICAgZG91YmxlIG1fdG9OdW1iZXI7CisgICAgICAgIGRvdWJsZSBtX2FuaW1hdGVkTnVtYmVy
OworICAgICAgICBTdHJpbmcgbV9udW1iZXJVbml0OworICAgICAgICBDb2xvciBtX2Zyb21Db2xv
cjsKKyAgICAgICAgQ29sb3IgbV90b0NvbG9yOworICAgICAgICBDb2xvciBtX2FuaW1hdGVkQ29s
b3I7CisgICAgICAgIFN0cmluZyBtX2Zyb21TdHJpbmc7CisgICAgICAgIFN0cmluZyBtX3RvU3Ry
aW5nOworICAgICAgICBTdHJpbmcgbV9hbmltYXRlZFN0cmluZzsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBTVkdOYW1lczsKIAogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAg
OiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fYmFzZUluZGV4SW5U
cmFuc2Zvcm1MaXN0KDApCiAgICAgLCBtX3JvdGF0ZU1vZGUoQW5nbGVNb2RlKQogICAgICwgbV9h
bmdsZSgwKQogewotICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9QQUNFRDsKIH0KIAogU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRlTW90aW9uRWxlbWVudCgpCkBAIC04Niw4ICs4
Niw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGUKICAgICAgICAg
ICAgIG1fYW5nbGUgPSBhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyKSB7Ci0gICAg
ICAgIG1fa2V5UG9pbnRzLmNsZWFyKCk7Ci0gICAgICAgIHBhcnNlS2V5TnVtYmVycyhtX2tleVBv
aW50cywgYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQga2V5IHBv
aW50cy4KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZEF0dHIpIHsK
ICAgICAgICAgbV9wYXRoID0gUGF0aCgpOwogICAgICAgICBwYXRoRnJvbVNWR0RhdGEobV9wYXRo
LCBhdHRyLT52YWx1ZSgpKTsKQEAgLTExMSwxOCArMTEwLDEzIEBAIFBhdGggU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2Rl
IGFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4
LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKIHsKLSAgICBpZiAoYW5pbWF0aW9u
TW9kZSA9PSBUT19BTklNQVRJT04pIHsKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEg
c3BlY2lhbCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSAr
IGJhc2UKLSAgICAgICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldFdpZHRoKChtX3RvUG9pbnQu
eCgpIC0gbV9iYXNlUG9pbnQueCgpKSAqIHRpbWVQZXJjZW50YWdlICsgbV9iYXNlUG9pbnQueCgp
KTsKLSAgICAgICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodCgobV90b1BvaW50Lnko
KSAtIG1fYmFzZVBvaW50LnkoKSkgKiB0aW1lUGVyY2VudGFnZSArIG1fYmFzZVBvaW50LnkoKSk7
Ci0gICAgICAgIG1fYW5pbWF0ZWRBbmdsZSA9IDAuMGY7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldFdpZHRoKG1fcG9pbnREaWZmLndpZHRoKCkgKiBwZXJj
ZW50YWdlUGFzdCArIG1fZnJvbVBvaW50LngoKSk7Ci0gICAgICAgIG1fYW5pbWF0ZWRUcmFuc2xh
dGlvbi5zZXRIZWlnaHQobV9wb2ludERpZmYuaGVpZ2h0KCkgKiBwZXJjZW50YWdlUGFzdCArIG1f
ZnJvbVBvaW50LnkoKSk7Ci0gICAgICAgIG1fYW5pbWF0ZWRBbmdsZSA9IG1fYW5nbGVEaWZmICog
cGVyY2VudGFnZVBhc3QgKyBtX2Zyb21BbmdsZTsKLSAgICB9CisgICAgRmxvYXRTaXplIGRpZmYg
PSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKKyAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0
V2lkdGgoZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50LngoKSk7CisgICAg
bV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodChkaWZmLmhlaWdodCgpICogcGVyY2VudGFn
ZSArIG1fZnJvbVBvaW50LnkoKSk7CisgICAgLy8gRklYTUU6IEFuaW1hdGUgYW5nbGVzCisgICAg
bV9hbmltYXRlZEFuZ2xlID0gMDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTUwLDU1ICsx
NDQsMjMgQEAgc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIAogICAgIHJl
dHVybiAhc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5kKTsKIH0KIAotYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlIGFu
aW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCitib29sIFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewotICAgIG1fZnJvbUFuZ2xlID0gMC4wZjsKLSAg
ICBtX3RvQW5nbGUgPSAwLjBmOwotICAgIHN3aXRjaCAoYW5pbWF0aW9uTW9kZSkgewotICAgIGNh
c2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAgIHBhcnNlUG9pbnQobV9mcm9tLCBtX2Zyb21Q
b2ludCk7Ci0gICAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAgIGNhc2UgVE9fQU5JTUFUSU9OOgot
ICAgICAgICBwYXJzZVBvaW50KG1fdG8sIG1fdG9Qb2ludCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRlJPTV9CWV9BTklNQVRJT046Ci0gICAgICAgIHBhcnNlUG9pbnQobV9mcm9tLCBtX2Zy
b21Qb2ludCk7Ci0gICAgICAgIHBhcnNlUG9pbnQobV90bywgbV90b1BvaW50KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCWV9BTklNQVRJT046Ci0gICAgewotICAgICAgICBwYXJzZVBvaW50
KG1fZnJvbSwgbV9mcm9tUG9pbnQpOwotICAgICAgICBGbG9hdFBvaW50IGJ5UG9pbnQ7Ci0gICAg
ICAgIHBhcnNlUG9pbnQobV9ieSwgYnlQb2ludCk7Ci0gICAgICAgIG1fdG9Qb2ludCA9IEZsb2F0
UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQb2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5
UG9pbnQueSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVkFMVUVTX0FOSU1B
VElPTjoKLSAgICAgICAgcGFyc2VQb2ludChtX3ZhbHVlc1t2YWx1ZUluZGV4XSwgbV9mcm9tUG9p
bnQpOwotICAgICAgICBpZiAoKHZhbHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkKLSAg
ICAgICAgICAgIHBhcnNlUG9pbnQobV92YWx1ZXNbdmFsdWVJbmRleCArIDFdLCBtX3RvUG9pbnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RvUG9pbnQgPSBtX2Zyb21Qb2ludDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOT19BTklNQVRJT046Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBtX3BvaW50RGlmZiA9IG1fdG9Qb2ludCAtIG1f
ZnJvbVBvaW50OwotICAgIG1fYW5nbGVEaWZmID0gMC4wZjsKLSAgICByZXR1cm4gKG1fcG9pbnRE
aWZmLndpZHRoKCkgIT0gMCB8fCBtX3BvaW50RGlmZi5oZWlnaHQoKSAhPSAwKTsKKyAgICBwYXJz
ZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKKyAgICBwYXJzZVBvaW50KHRvU3RyaW5n
LCBtX3RvUG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQotCi1ib29sIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpCi17Ci0gICAg
aWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbV9iYXNlUG9pbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSktPmdldEJCb3goKS5sb2Nh
dGlvbigpOworYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykK
K3sKKyAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKKyAgICBGbG9hdFBv
aW50IGJ5UG9pbnQ7CisgICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV90
b1BvaW50ID0gRmxvYXRQb2ludChtX2Zyb21Qb2ludC54KCkgKyBieVBvaW50LngoKSwgbV9mcm9t
UG9pbnQueSgpICsgYnlQb2ludC55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKQordm9p
ZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVu
c2lnbmVkIHJlcGVhdCkKIHsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFu
c2Zvcm1hYmxlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIwOCwxOSArMTcwLDM0IEBAIHZvaWQg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWEKICAgICBpZiAoIXRyYW5zZm9ybUxp
c3QpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpcGxl
IGFkZGl0aXZlIGFuaW1hdGlvbnMuCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIWlz
QWRkaXRpdmUoKSkKKyAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAgIHdoaWxlICh0cmFu
c2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCkgPiBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdCkK
KyAgICAgICAgICAgIHRyYW5zZm9ybUxpc3QtPnJlbW92ZUl0ZW0odHJhbnNmb3JtTGlzdC0+bnVt
YmVyT2ZJdGVtcygpIC0gMSwgZWMpOworICAgIH0gZWxzZQogICAgICAgICB0cmFuc2Zvcm1MaXN0
LT5jbGVhcihlYyk7Ci0gICAgCisKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAg
IHRyYW5zZm9ybS5yb3RhdGUobV9hbmltYXRlZEFuZ2xlKTsKICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKG1fYW5pbWF0ZWRUcmFuc2xhdGlvbi53aWR0aCgpLCBtX2FuaW1hdGVkVHJhbnNsYXRpb24u
aGVpZ2h0KCkpOwogICAgIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewogICAgICAgICB0
cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0pLCBlYyk7CiAg
ICAgICAgIHRyYW5zZm9ybWFibGVFbGVtZW50LT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtTGlzdC5n
ZXQoKSk7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgICAgIHRyYW5zZm9ybWFibGVFbGVtZW50LT5yZW5kZXJlcigpLT5zZXROZWVkc0xheW91
dCh0cnVlKTsgLy8gc2hvdWxkIGJlIHBhcnQgb2Ygc2V0VHJhbnNmb3JtCiAgICAgfQorICAgIGlm
ICh0cmFuc2Zvcm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgdHJhbnNmb3JtYWJs
ZUVsZW1lbnQtPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBzaG91bGQgYmUg
cGFydCBvZiBzZXRUcmFuc2Zvcm0KK30KKwordm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
c3RhcnRlZEFjdGl2ZUludGVydmFsKCkKK3sKKyAgICAvLyBGSVhNRTogTWFrZSBtdWx0aXBsZSBh
ZGRpdGl2ZSBhbmltYXRpb25zIHdvcmsuCisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRl
ZEFjdGl2ZUludGVydmFsKCk7CisgICAgaWYgKCFtX2FuaW1hdGlvblZhbGlkKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9y
bWFibGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
Pih0YXJnZXRFbGVtZW50KCkpOworICAgIG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0ID0gdHJh
bnNmb3JtYWJsZUVsZW1lbnQtPnRyYW5zZm9ybSgpLT5udW1iZXJPZkl0ZW1zKCk7CiB9CiAKIH0K
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzE3NDAp
CisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw4ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQp
OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwogICAgICAgICAgICAgICAgIApAQCAtNDYsMTEgKzQ1LDEzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAg
ICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9u
TW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBl
cmNlbnRhZ2VQYXN0KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1Zh
bHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnQpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxh
dGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGJ5U3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZl
SW50ZXJ2YWwoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRmxvYXRQb2ludCBt
X2Jhc2VQb2ludDsKICAgICAgICAgRmxvYXRTaXplIG1fYW5pbWF0ZWRUcmFuc2xhdGlvbjsKICAg
ICAgICAgZmxvYXQgbV9hbmltYXRlZEFuZ2xlOwogICAgICAgICAKQEAgLTYwLDkgKzYxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKICAgICAg
ICAgZmxvYXQgbV90b0FuZ2xlOwogICAgICAgICAKLSAgICAgICAgRmxvYXRTaXplIG1fcG9pbnRE
aWZmOwotICAgICAgICBmbG9hdCBtX2FuZ2xlRGlmZjsKLSAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0OworICAgICAgICAgICAgICAgIAogICAgICAg
ICBQYXRoIG1fcGF0aDsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2tleVBvaW50czsKICAgICAg
ICAgZW51bSBSb3RhdGVNb2RlIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiVGlt
ZVNjaGVkdWxlci5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CkBAIC00NSw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1VOS05PV04pCisgICAgLCBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdCgwKQogewogfQogCkBA
IC01NCw3ICs1NCw3IEBAIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp+U1ZHQW5pbWF0ZVQK
IAogYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKSBjb25z
dAogewotICAgIHJldHVybiAoU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKSAm
JiB0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKTsKKyAgICByZXR1cm4g
U1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKSAmJiB0YXJnZXRFbGVtZW50KCkt
PmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC03
NCw5NCArNzQsNjcgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYQog
ICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KIAotYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1
ZShFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5z
aWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpCitib29sIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpCiB7
Ci0gICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVE9fQU5JTUFUSU9OKQotICAgICAgICAvLyB0by1h
bmltYXRpb25zIGhhdmUgYSBzcGVjaWFsIGVxdWF0aW9uOiB2YWx1ZSA9ICh0byAtIGJhc2UpICog
KHRpbWUvZHVyYXRpb24pICsgYmFzZQotICAgICAgICBtX2FuaW1hdGVkVHJhbnNmb3JtID0gU1ZH
VHJhbnNmb3JtRGlzdGFuY2UobV9iYXNlVHJhbnNmb3JtLCBtX3RvVHJhbnNmb3JtKS5zY2FsZWRE
aXN0YW5jZSh0aW1lUGVyY2VudGFnZSkuYWRkVG9TVkdUcmFuc2Zvcm0obV9iYXNlVHJhbnNmb3Jt
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm1E
aXN0YW5jZShtX2Zyb21UcmFuc2Zvcm0sIG1fdG9UcmFuc2Zvcm0pLnNjYWxlZERpc3RhbmNlKHBl
cmNlbnRhZ2VQYXN0KS5hZGRUb1NWR1RyYW5zZm9ybShtX2Zyb21UcmFuc2Zvcm0pOwotICAgIHJl
dHVybiAobV9hbmltYXRlZFRyYW5zZm9ybSAhPSBtX2Jhc2VUcmFuc2Zvcm0pOwotfQotCi1ib29s
IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9t
RWxlbWVudCgpCi17Ci0gICAgbV9iYXNlVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAg
bV90b1RyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNW
R1RyYW5zZm9ybSgpOwotICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsK
LSAgICAKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOwotICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiB0
cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtLT50cmFuc2Zvcm0oKTsKLSAgICBpZiAoIXRyYW5zZm9y
bUxpc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX2Jhc2VUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm1MaXN0LT5jb25jYXRlbmF0ZUZvclR5cGUobV90eXBlKTsKLSAgICAKLSAgICAv
LyBJZiBhIGJhc2UgdmFsdWUgaXMgZW1wdHksIGl0cyB0eXBlIHNob3VsZCBtYXRjaCBtX3R5cGUg
aW5zdGVhZCBvZiBiZWluZyB1bmtub3duLgotICAgIC8vIEl0J3Mgbm90IGNlcnRhaW4gd2hldGhl
ciB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIFNWR1RyYW5zZm9ybUxpc3Qgb3Igbm90IC0tIGN5aW5n
Ci0gICAgaWYgKG1fYmFzZVRyYW5zZm9ybS50eXBlKCkgPT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1VOS05PV04pCi0gICAgICAgIG1fYmFzZVRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybSht
X3R5cGUpOwotICAgICAgICAKKyAgICBtX2FuaW1hdGVkVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UobV9mcm9tVHJhbnNmb3JtLCBtX3RvVHJhbnNmb3JtKS5zY2FsZWREaXN0YW5jZShw
ZXJjZW50YWdlKS5hZGRUb1NWR1RyYW5zZm9ybShtX2Zyb21UcmFuc2Zvcm0pOwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjphcHBseUFuaW1h
dGVkVmFsdWVUb0VsZW1lbnQoKQordm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6YXBw
bHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkKIHsKLSAgICBpZiAoIXRh
cmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkp
OwotICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3Jt
LT50cmFuc2Zvcm0oKTsKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5z
Zm9ybWFibGUoKSk7CisgICAKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJh
bnNmb3JtYWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRy
YW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+dHJhbnNmb3JtKCk7CiAgICAgaWYg
KCF0cmFuc2Zvcm1MaXN0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICAvLyBGSVhNRTog
SGFuZGxlIG11bHRpcGxlIGFkZGl0aXZlIHRyYW5mb3Jtcy4KICAgICBFeGNlcHRpb25Db2RlIGVj
OwotICAgIGlmICghaXNBZGRpdGl2ZSgpKQorICAgIGlmIChpc0FkZGl0aXZlKCkpIHsKKyAgICAg
ICAgd2hpbGUgKHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKSA+IG1fYmFzZUluZGV4SW5U
cmFuc2Zvcm1MaXN0KQorICAgICAgICAgICAgdHJhbnNmb3JtTGlzdC0+cmVtb3ZlSXRlbSh0cmFu
c2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCkgLSAxLCBlYyk7CisgICAgfSBlbHNlCiAgICAgICAg
IHRyYW5zZm9ybUxpc3QtPmNsZWFyKGVjKTsKLSAgICAKICAgICB0cmFuc2Zvcm1MaXN0LT5hcHBl
bmRJdGVtKG1fYW5pbWF0ZWRUcmFuc2Zvcm0sIGVjKTsKLSAgICB0cmFuc2Zvcm0tPnNldFRyYW5z
Zm9ybSh0cmFuc2Zvcm1MaXN0LmdldCgpKTsKLSAgICBpZiAodHJhbnNmb3JtLT5yZW5kZXJlcigp
KQotICAgICAgICB0cmFuc2Zvcm0tPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAv
LyBzaG91bGQgcmVhbGx5IGJlIGluIHNldFRyYW5zZm9ybQotfQotCi1ib29sIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUg
YW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkKLXsKLSAgICBzd2l0Y2ggKGFuaW1h
dGlvbk1vZGUpIHsKLSAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICBtX2Zyb21U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7Ci0gICAgICAgIC8vIGZhbGwg
dGhyb3VnaAotICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBtX3RvVHJhbnNmb3JtID0g
cGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3RvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGUk9N
X0JZX0FOSU1BVElPTjoKLSAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShtX2Zyb20pOwotICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1
ZShtX2J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCWV9BTklNQVRJT046Ci0gICAgICAg
IG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAg
bV90b1RyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKG1f
ZnJvbVRyYW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVkFMVUVTX0FOSU1BVElPTjoKLSAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0g
cGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3ZhbHVlc1t2YWx1ZUluZGV4XSk7Ci0gICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSAoKHZhbHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkgPyBwYXJzZVRy
YW5zZm9ybVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21UcmFuc2Zvcm07
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTk9fQU5JTUFUSU9OOgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9CiAgICAgCisgICAgaWYgKHRyYW5zZm9ybWFibGVFbGVtZW50
LT5yZW5kZXJlcigpKQorICAgICAgICB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3VsZCByZWFsbHkgYmUgaW4gc2V0VHJhbnNmb3Jt
Cit9CisgICAgCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3Ry
aW5nKQoreworICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUoZnJvbVN0
cmluZyk7CisgICAgbV90b1RyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodG9TdHJpbmcp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGJ5U3RyaW5nKQoreworCisgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFu
c2Zvcm1WYWx1ZShmcm9tU3RyaW5nKTsKKyAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMobV9mcm9tVHJhbnNmb3JtLCBwYXJzZVRyYW5zZm9y
bVZhbHVlKGJ5U3RyaW5nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CisgICAgCit2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQoreworICAgIC8v
IEZJWE1FOiBNYWtlIG11bHRpcGxlIGFkZGl0aXZlIGFuaW1hdGlvbnMgd29yay4KKyAgICBTVkdB
bmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICBpZiAoIW1fYW5p
bWF0aW9uVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCogdHJhbnNmb3JtYWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgbV9iYXNlSW5k
ZXhJblRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+dHJhbnNmb3JtKCktPm51
bWJlck9mSXRlbXMoKTsKK30KIAogU1ZHVHJhbnNmb3JtIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAg
ICAgU1ZHVHJhbnNmb3JtIHJlc3VsdDsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdmFsdWUuY2hh
cmFjdGVycygpOwotICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUobV90
eXBlLCBwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgpLCByZXN1bHQpOyAvLyBpZ25vcmluZyByZXR1
cm4gdmFsdWUKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBwcmV0dHkgZHVtYiBidXQgcGFyc2VUcmFu
c2Zvcm1WYWx1ZSgpIHdhbnRzIHRob3NlIHBhcmVudGhlc2lzLgorICAgIFN0cmluZyBwYXJzZVN0
cmluZygiKCIgKyB2YWx1ZSArICIpIik7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHBhcnNlU3Ry
aW5nLmNoYXJhY3RlcnMoKTsKKyAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZh
bHVlKG1fdHlwZSwgcHRyLCBwdHIgKyBwYXJzZVN0cmluZy5sZW5ndGgoKSwgcmVzdWx0KTsgLy8g
aWdub3JpbmcgcmV0dXJuIHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShyZXZpc2lvbiAzMTc0MCkKKysr
IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDI2ICs0MSwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAgICAgICAgCi0gICAgICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQp
OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNv
bnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRp
bWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
QW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdG9TdHJpbmcpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFs
dWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7Cisg
ICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCk7Cisg
ICAgICAgIAogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHVHJhbnNmb3JtIHBhcnNlVHJhbnNm
b3JtVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIHZvaWQgY2FsY3VsYXRlUm90
YXRpb25Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGRvdWJsZSYgYW5nbGUsIGRv
dWJsZSYgY3gsIGRvdWJsZSYgY3kpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgU1ZHVHJhbnNm
b3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0OwogCiAgICAgICAgIFNWR1RyYW5zZm9ybSBtX3Rv
VHJhbnNmb3JtOwogICAgICAgICBTVkdUcmFuc2Zvcm0gbV9mcm9tVHJhbnNmb3JtOwogCi0gICAg
ICAgIFNWR1RyYW5zZm9ybSBtX2Jhc2VUcmFuc2Zvcm07CiAgICAgICAgIFNWR1RyYW5zZm9ybSBt
X2FuaW1hdGVkVHJhbnNmb3JtOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KICAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI1LDc3OCAr
MjYsNDExIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50
LmgiCiAKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIK
LSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2lu
Y2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0K
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwg
ZG9jKQorICAgIDogU01JTFRpbWluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgU1ZHVGVz
dHMoKQogICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCi0gICAgLCBtX3Rhcmdl
dEVsZW1lbnQoMCkKLSAgICAsIG1fY29ubmVjdGVkVG9UaW1lcihmYWxzZSkKLSAgICAsIG1fY3Vy
cmVudFRpbWUoMC4wKQotICAgICwgbV9zaW1wbGVEdXJhdGlvbigwLjApCi0gICAgLCBtX2ZpbGwo
RklMTF9SRU1PVkUpCi0gICAgLCBtX3Jlc3RhcnQoUkVTVEFSVF9BTFdBWVMpCi0gICAgLCBtX2Nh
bGNNb2RlKENBTENNT0RFX0xJTkVBUikKLSAgICAsIG1fYWRkaXRpdmUoQURESVRJVkVfUkVQTEFD
RSkKLSAgICAsIG1fYWNjdW11bGF0ZShBQ0NVTVVMQVRFX05PTkUpCi0gICAgLCBtX2F0dHJpYnV0
ZVR5cGUoQVRUUklCVVRFVFlQRV9BVVRPKQotICAgICwgbV9tYXgoMC4wKQotICAgICwgbV9taW4o
MC4wKQotICAgICwgbV9lbmQoMC4wKQotICAgICwgbV9iZWdpbigwLjApCi0gICAgLCBtX3JlcGV0
aXRpb25zKDApCi0gICAgLCBtX3JlcGVhdENvdW50KDApCi0gICAgLCBtX2FuaW1hdGlvbkJlZ2lu
KERCTF9NQVgpCi0gICAgLCBtX2FuaW1hdGlvbkVuZChEQkxfTUFYKQorICAgICwgbV9hbmltYXRp
b25WYWxpZChmYWxzZSkKIHsKLQogfQogCiBTVkdBbmltYXRpb25FbGVtZW50Ojp+U1ZHQW5pbWF0
aW9uRWxlbWVudCgpCiB7CiB9Ci0KLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiB0YXJnZXRFbGVtZW50KCk7Ci19Ci0KLVNWR0Vs
ZW1lbnQqIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKSBjb25zdAotewotICAg
IGlmICghbV90YXJnZXRFbGVtZW50KSB7Ci0gICAgICAgIE5vZGUgKnRhcmdldCA9IDA7Ci0gICAg
ICAgIGlmICghbV9ocmVmLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudEJ5SWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQobV9ocmVmKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAvLyBUT0RP
IDogZG8gd2UgcmVhbGx5IG5lZWQgdG8gc2tpcCBub24gZWxlbWVudCBub2Rlcz8gQ2FuIHRoYXQg
aGFwcGVuIGF0IGFsbD8KLSAgICAgICAgICAgIHRhcmdldCA9IHBhcmVudE5vZGUoKTsKLSAgICAg
ICAgICAgIHdoaWxlICh0YXJnZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LT5ub2Rl
VHlwZSgpICE9IEVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFy
Z2V0LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodGFyZ2V0
ICYmIHRhcmdldC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAgICBtX3RhcmdldEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4odGFyZ2V0KTsKLSAgICB9Ci0gCi0gICAgcmV0dXJu
IG1fdGFyZ2V0RWxlbWVudDsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0RW5k
VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9lbmQp
OwotfQotCi1mbG9hdCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRTdGFydFRpbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fYmVnaW4pOwotfQotCi1mbG9h
dCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRDdXJyZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9jdXJyZW50VGltZSk7Ci19Ci0KLWZsb2F0IFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmdldFNpbXBsZUR1cmF0aW9uKEV4Y2VwdGlvbkNvZGUmKSBjb25z
dAotewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fc2ltcGxlRHVyYXRpb24p
OwotfQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlS2V5TnVtYmVycyhWZWN0b3I8
ZmxvYXQ+JiBrZXlOdW1iZXJzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGZsb2F0IG51
bWJlciA9IDAuMGY7CiAgICAgCi0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAg
c2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0g
ICAgICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgZmFsc2UpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBrZXlOdW1iZXJzLmFwcGVuZChudW1iZXIpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpIHx8ICpwdHIgIT0g
JzsnKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwdHIrKzsKLSAgICAgICAgc2tpcE9w
dGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlS2V5
U3BsaW5lcyhWZWN0b3I8U1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5U3BsaW5lPiYga2V5U3BsaW5l
cywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyB2b2lkIHBhcnNlS2V5VGltZXMoY29uc3Qg
U3RyaW5nJiBwYXJzZSwgVmVjdG9yPGZsb2F0PiYgcmVzdWx0KQogewotICAgIGZsb2F0IG51bWJl
ciA9IDAuMGY7Ci0gICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5U3BsaW5lIGtleVNwbGluZTsK
LSAgICAKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdmFsdWUuY2hhcmFjdGVycygpOwotICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxT
cGFjZXMocHRyLCBlbmQpOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYgKCEo
cGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgZmFsc2UpICYmIHNraXBPcHRpb25hbFNwYWNl
cyhwdHIsIGVuZCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBrZXlTcGxpbmUuY29u
dHJvbDEuc2V0WChudW1iZXIpOwotICAgICAgICBpZiAoIShwYXJzZU51bWJlcihwdHIsIGVuZCwg
bnVtYmVyLCBmYWxzZSkgJiYgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGtleVNwbGluZS5jb250cm9sMS5zZXRZKG51bWJlcik7Ci0g
ICAgICAgIGlmICghKHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIGZhbHNlKSAmJiBza2lw
T3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
a2V5U3BsaW5lLmNvbnRyb2wyLnNldFgobnVtYmVyKTsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihwdHIsIGVuZCwgbnVtYmVyLCBmYWxzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGtleVNwbGluZS5jb250cm9sMi5zZXRZKG51bWJlcik7Ci0gICAgICAgIGtleVNwbGluZXMuYXBw
ZW5kKGtleVNwbGluZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNl
cyhwdHIsIGVuZCkgfHwgKnB0ciAhPSAnOycpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHB0cisrOwotICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpOwotICAgIH0KLX0K
LQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUJlZ2luT3JFbmRWYWx1ZShkb3VibGUm
IG51bWJlciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICAvLyBUT0RPOiBEb24ndCB1c2Ug
U1ZHU3RyaW5nTGlzdCBmb3IgcGFyc2luZy4KLSAgICBBdG9taWNTdHJpbmcgZHVtbXk7Ci0gICAg
UmVmUHRyPFNWR1N0cmluZ0xpc3Q+IHZhbHVlTGlzdCA9IFNWR1N0cmluZ0xpc3Q6OmNyZWF0ZShR
dWFsaWZpZWROYW1lKGR1bW15LCBkdW1teSwgZHVtbXkpKTsKLSAgICB2YWx1ZUxpc3QtPnBhcnNl
KHZhbHVlLCAnOycpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykg
ewotICAgICAgICBTdHJpbmcgY3VycmVudCA9IHZhbHVlTGlzdC0+Z2V0SXRlbShpLCBlYyk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY3VycmVudC5zdGFydHNXaXRoKCJhY2Nlc3NLZXkiKSkgewot
ICAgICAgICAgICAgLy8gUmVnaXN0ZXIga2V5RG93bkV2ZW50TGlzdGVuZXIgZm9yIHRoZSBjaGFy
YWN0ZXIKLSAgICAgICAgICAgIFN0cmluZyBjaGFyYWN0ZXIgPSBjdXJyZW50LnN1YnN0cmluZyhj
dXJyZW50Lmxlbmd0aCgpIC0gMiwgMSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkISBTdXBwb3NlZCB0byByZWdpc3RlciBhY2Nlc3NLZXkgY2hhcmFjdGVyCi0gICAgICAg
IH0gZWxzZSBpZiAoY3VycmVudC5zdGFydHNXaXRoKCJ3YWxsY2xvY2siKSkgewotICAgICAgICAg
ICAgaW50IGZpcnN0QnJhY2UgPSBjdXJyZW50LmZpbmQoJygnKTsKLSAgICAgICAgICAgIGludCBz
ZWNvbmRCcmFjZSA9IGN1cnJlbnQuZmluZCgnKScpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBTdHJpbmcgd2FsbGNsb2NrVmFsdWUgPSBjdXJyZW50LnN1YnN0cmluZyhmaXJzdEJyYWNlICsg
MSwgc2Vjb25kQnJhY2UgLSBmaXJzdEJyYWNlIC0gMik7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkISBTdXBwb3NlZCB0byB1c2Ugd2FsbENsb2NrIHZhbHVlCi0gICAgICAg
IH0gZWxzZSBpZiAoY3VycmVudC5jb250YWlucygnLicpKSB7Ci0gICAgICAgICAgICBpbnQgZG90
UG9zaXRpb24gPSBjdXJyZW50LmZpbmQoJy4nKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
U3RyaW5nIGVsZW1lbnQgPSBjdXJyZW50LnN1YnN0cmluZygwLCBkb3RQb3NpdGlvbik7Ci0gICAg
ICAgICAgICBTdHJpbmcgY2xvY2tWYWx1ZTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50LmNvbnRh
aW5zKCJiZWdpbiIpKQotICAgICAgICAgICAgICAgIGNsb2NrVmFsdWUgPSBjdXJyZW50LnN1YnN0
cmluZyhkb3RQb3NpdGlvbiArIDYpOwotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC5jb250
YWlucygiZW5kIikpCi0gICAgICAgICAgICAgICAgY2xvY2tWYWx1ZSA9IGN1cnJlbnQuc3Vic3Ry
aW5nKGRvdFBvc2l0aW9uICsgNCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LmNvbnRh
aW5zKCJyZXBlYXQiKSkKLSAgICAgICAgICAgICAgICBjbG9ja1ZhbHVlID0gY3VycmVudC5zdWJz
dHJpbmcoZG90UG9zaXRpb24gKyA3KTsKLSAgICAgICAgICAgIGVsc2UgeyAvLyBET00yIEV2ZW50
IFJlZmVyZW5jZQotICAgICAgICAgICAgICAgIGludCBwbHVzTWludXNQb3NpdGlvbiA9IC0xOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmNvbnRhaW5zKCcr
JykpCi0gICAgICAgICAgICAgICAgICAgIHBsdXNNaW51c1Bvc2l0aW9uID0gY3VycmVudC5maW5k
KCcrJyk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC5jb250YWlucygnLScpKQot
ICAgICAgICAgICAgICAgICAgICBwbHVzTWludXNQb3NpdGlvbiA9IGN1cnJlbnQuZmluZCgnLScp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBldmVudCA9IGN1cnJl
bnQuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSwgcGx1c01pbnVzUG9zaXRpb24gLSBkb3RQb3Np
dGlvbiAtIDEpOwotICAgICAgICAgICAgICAgIGNsb2NrVmFsdWUgPSBjdXJyZW50LnN1YnN0cmlu
Zyhkb3RQb3NpdGlvbiArIGV2ZW50Lmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IHN1cHBvc2VkIHRvIHVzZSBET00gRXZlbnQKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG51bWJlciA9IHBhcnNlQ2xvY2tWYWx1ZShjdXJyZW50KTsK
LSAgICAgICAgICAgIGlmICghaXNJbmRlZmluaXRlKG51bWJlcikpCi0gICAgICAgICAgICAgICAg
bnVtYmVyICo9IDEwMDAuMDsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3NlZCB0byBzZXQg
YmVnaW4vZW5kIHRpbWUKKyAgICByZXN1bHQuY2xlYXIoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBw
YXJzZUxpc3Q7CisgICAgcGFyc2Uuc3BsaXQoJzsnLCBwYXJzZUxpc3QpOworICAgIGZvciAodW5z
aWduZWQgbiA9IDA7IG4gPCBwYXJzZUxpc3Quc2l6ZSgpOyArK24pIHsKKyAgICAgICAgU3RyaW5n
IHRpbWVTdHJpbmcgPSBwYXJzZUxpc3Rbbl07CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIGZs
b2F0IHRpbWUgPSBzdGF0aWNfY2FzdDxmbG9hdD4odGltZVN0cmluZy50b0RvdWJsZSgmb2spKTsK
KyAgICAgICAgaWYgKCFvayB8fCB0aW1lIDwgMC4wIHx8IHRpbWUgPiAxLjApCisgICAgICAgICAg
ICBnb3RvIGZhaWw7CisgICAgICAgIGlmICghbikgeworICAgICAgICAgICAgaWYgKHRpbWUgIT0g
MCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0gZWxzZSBpZiAodGltZSA8
PSByZXN1bHQubGFzdCgpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICByZXN1bHQu
YXBwZW5kKHRpbWUpOworICAgIH0KKyAgICByZXR1cm47CitmYWlsOgorICAgIHJlc3VsdC5jbGVh
cigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nJiBwYXJz
ZSwgVmVjdG9yPEN1cnZlRGF0YT4mIHJlc3VsdCkKK3sKKyAgICByZXN1bHQuY2xlYXIoKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBwYXJzZUxpc3Q7CisgICAgcGFyc2Uuc3BsaXQoJzsnLCBwYXJzZUxp
c3QpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwYXJzZUxpc3Quc2l6ZSgpOyArK24p
IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFyc2VTcGxpbmU7CisgICAgICAgIHBhcnNlTGlz
dFtuXS5zcGxpdCgnLCcsIHBhcnNlU3BsaW5lKTsKKyAgICAgICAgLy8gVGhlIHNwZWMgc2F5cyB0
aGUgc2VwYXRvciBpcyBhIHNwYWNlLCBhbGwgdGVzdHMgdXNlIGNvbW1hcy4gV2VpcmQuCisgICAg
ICAgIGlmIChwYXJzZUxpc3Quc2l6ZSgpID09IDEpIAorICAgICAgICAgICAgcGFyc2VMaXN0W25d
LnNwbGl0KCcgJywgcGFyc2VTcGxpbmUpOworICAgICAgICBpZiAocGFyc2VTcGxpbmUuc2l6ZSgp
ICE9IDQpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGRvdWJsZSBjdXJ2ZVZhbHVl
c1s0XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAg
ICAgICAgU3RyaW5nIHBhcnNlTnVtYmVyID0gcGFyc2VTcGxpbmVbaV07IAorICAgICAgICAgICAg
Ym9vbCBvazsKKyAgICAgICAgICAgIGN1cnZlVmFsdWVzW2ldID0gcGFyc2VOdW1iZXIudG9Eb3Vi
bGUoJm9rKTsKKyAgICAgICAgICAgIGlmICghb2sgfHwgY3VydmVWYWx1ZXNbaV0gPCAwLjAgfHwg
Y3VydmVWYWx1ZXNbaV0gPiAxLjApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAg
ICB9Ci0gICAgfSAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDdXJ2ZURhdGEoY3VydmVWYWx1
ZXNbMF0sIGN1cnZlVmFsdWVzWzFdLCBjdXJ2ZVZhbHVlc1syXSwgY3VydmVWYWx1ZXNbM10pKTsK
KyAgICB9CisgICAgcmV0dXJuOworZmFpbDoKKyAgICByZXN1bHQuY2xlYXIoKTsKIH0KIAogdm9p
ZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKS5tYXRjaGVzKFhMaW5rTmFtZXM6Omhy
ZWZBdHRyKSkKLSAgICAgICAgbV9ocmVmID0gYXR0ci0+dmFsdWUoKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKQotICAgICAgICBtX2F0
dHJpYnV0ZU5hbWUgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6YXR0cmlidXRlVHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVl
KCkgPT0gIkNTUyIpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBF
X0NTUzsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiWE1MIikKLSAgICAgICAg
ICAgIG1fYXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfWE1MOwotICAgICAgICBlbHNlIGlm
IChhdHRyLT52YWx1ZSgpID09ICJhdXRvIikKLSAgICAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9
IEFUVFJJQlVURVRZUEVfQVVUTzsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6YmVnaW5BdHRyKQotICAgICAgICBwYXJzZUJlZ2luT3JFbmRWYWx1ZShtX2JlZ2luLCBh
dHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVu
ZEF0dHIpCi0gICAgICAgIHBhcnNlQmVnaW5PckVuZFZhbHVlKG1fZW5kLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmR1ckF0dHIpIHsKLSAg
ICAgICAgbV9zaW1wbGVEdXJhdGlvbiA9IHBhcnNlQ2xvY2tWYWx1ZShhdHRyLT52YWx1ZSgpKTsK
LSAgICAgICAgaWYgKCFpc0luZGVmaW5pdGUobV9zaW1wbGVEdXJhdGlvbikpCi0gICAgICAgICAg
ICBtX3NpbXBsZUR1cmF0aW9uICo9IDEwMDAuMDsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6bWluQXR0cikgewotICAgICAgICBtX21pbiA9IHBhcnNlQ2xvY2tWYWx1
ZShhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCFpc0luZGVmaW5pdGUobV9taW4pKQotICAg
ICAgICAgICAgbV9taW4gKj0gMTAwMC4wOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjptYXhBdHRyKSB7Ci0gICAgICAgIG1fbWF4ID0gcGFyc2VDbG9ja1ZhbHVlKGF0
dHItPnZhbHVlKCkpOwotICAgICAgICBpZiAoIWlzSW5kZWZpbml0ZShtX21heCkpCi0gICAgICAg
ICAgICBtX21heCAqPSAxMDAwLjA7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnJlc3RhcnRBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJ3aGVu
Tm90QWN0aXZlIikKLSAgICAgICAgICAgIG1fcmVzdGFydCA9IFJFU1RBUlRfV0hFTk5PVEFDVElW
RTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAibmV2ZXIiKQotICAgICAgICAg
ICAgbV9yZXN0YXJ0ID0gUkVTVEFSVF9ORVZFUjsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFs
dWUoKSA9PSAiYWx3YXlzIikKLSAgICAgICAgICAgIG1fcmVzdGFydCA9IFJFU1RBUlRfQUxXQVlT
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXBlYXRDb3VudEF0
dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gImluZGVmaW5pdGUiKQotICAgICAg
ICAgICAgbV9yZXBlYXRDb3VudCA9IERCTF9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcmVwZWF0Q291bnQgPSBhdHRyLT52YWx1ZSgpLnRvRG91YmxlKCk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlcGVhdER1ckF0dHIpCi0gICAgICAgIG1fcmVw
ZWF0RHVyID0gYXR0ci0+dmFsdWUoKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmZpbGxBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJmcmVlemUi
KQotICAgICAgICAgICAgbV9maWxsID0gRklMTF9GUkVFWkU7Ci0gICAgICAgIGVsc2UgaWYgKGF0
dHItPnZhbHVlKCkgPT0gInJlbW92ZSIpCi0gICAgICAgICAgICBtX2ZpbGwgPSBGSUxMX1JFTU9W
RTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y2FsY01vZGVBdHRy
KSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJkaXNjcmV0ZSIpCi0gICAgICAgICAg
ICBtX2NhbGNNb2RlID0gQ0FMQ01PREVfRElTQ1JFVEU7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHIt
PnZhbHVlKCkgPT0gImxpbmVhciIpCi0gICAgICAgICAgICBtX2NhbGNNb2RlID0gQ0FMQ01PREVf
TElORUFSOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJzcGxpbmUiKQotICAg
ICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX1NQTElORTsKLSAgICAgICAgZWxzZSBpZiAo
YXR0ci0+dmFsdWUoKSA9PSAicGFjZWQiKQotICAgICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENN
T0RFX1BBQ0VEOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1
ZXNBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fdmFsdWVzID0g
cGFyc2VEZWxpbWl0ZWRTdHJpbmcoYXR0ci0+dmFsdWUoKSwgJzsnKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7Ci0gICAgICAgIG1fa2V5
VGltZXMuY2xlYXIoKTsKLSAgICAgICAgcGFyc2VLZXlOdW1iZXJzKG1fa2V5VGltZXMsIGF0dHIt
PnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlT
cGxpbmVzQXR0cikgewotICAgICAgICBtX2tleVNwbGluZXMuY2xlYXIoKTsKLSAgICAgICAgcGFy
c2VLZXlTcGxpbmVzKG1fa2V5U3BsaW5lcywgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZyb21BdHRyKQotICAgICAgICBtX2Zyb20gPSBh
dHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dG9B
dHRyKQotICAgICAgICBtX3RvID0gYXR0ci0+dmFsdWUoKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmJ5QXR0cikKLSAgICAgICAgbV9ieSA9IGF0dHItPnZhbHVlKCk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphZGRpdGl2ZUF0dHIpIHsK
LSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gInN1bSIpCi0gICAgICAgICAgICBtX2FkZGl0
aXZlID0gQURESVRJVkVfU1VNOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJy
ZXBsYWNlIikKLSAgICAgICAgICAgIG1fYWRkaXRpdmUgPSBBRERJVElWRV9SRVBMQUNFOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjphY2N1bXVsYXRlQXR0cikgewot
ICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAic3VtIikKLSAgICAgICAgICAgIG1fYWNjdW11
bGF0ZSA9IEFDQ1VNVUxBVEVfU1VNOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09
ICJub25lIikKLSAgICAgICAgICAgIG1fYWNjdW11bGF0ZSA9IEFDQ1VNVUxBVEVfTk9ORTsKLSAg
ICB9IGVsc2UgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIp
CisgICAgICAgIGF0dHItPnZhbHVlKCkuc3RyaW5nKCkuc3BsaXQoJzsnLCBtX3ZhbHVlcyk7Cisg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlUaW1lc0F0dHIpCisgICAg
ICAgIHBhcnNlS2V5VGltZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlUaW1lcyk7CisgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlTcGxpbmVzQXR0cikKKyAgICAgICAgcGFy
c2VLZXlTcGxpbmVzKGF0dHItPnZhbHVlKCksIG1fa2V5U3BsaW5lcyk7CisgICAgZWxzZSB7CiAg
ICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
U1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIFNNSUxUaW1p
bmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9CiAKLWRvdWJs
ZSBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJiBkYXRh
KQordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSog
YXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQogewotICAgIFN0cmluZyBwYXJzZSA9IGRhdGEuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBpZiAocGFyc2UgPT0gImluZGVmaW5pdGUiKQotICAgICAg
ICByZXR1cm4gREJMX01BWDsKLQotICAgIGRvdWJsZSByZXN1bHQ7Ci0KLSAgICBpbnQgZG91Ymxl
UG9pbnRPbmUgPSBwYXJzZS5maW5kKCc6Jyk7Ci0gICAgaW50IGRvdWJsZVBvaW50VHdvID0gcGFy
c2UuZmluZCgnOicsIGRvdWJsZVBvaW50T25lICsgMSk7Ci0KLSAgICBpZiAoZG91YmxlUG9pbnRP
bmUgIT0gLTEgJiYgZG91YmxlUG9pbnRUd28gIT0gLTEpIHsgLy8gU3BlYzogIkZ1bGwgY2xvY2sg
dmFsdWVzIgotICAgICAgICB1bnNpZ25lZCBob3VycyA9IHBhcnNlLnN1YnN0cmluZygwLCAyKS50
b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbWludXRlcyA9IHBhcnNlLnN1YnN0cmlu
ZygzLCAyKS50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25kcyA9IHBhcnNl
LnN1YnN0cmluZyg2LCAyKS50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbWlsbGlz
ZWNvbmRzID0gMDsKLQotICAgICAgICByZXN1bHQgPSAoMzYwMCAqIGhvdXJzKSArICg2MCAqIG1p
bnV0ZXMpICsgc2Vjb25kczsKLQotICAgICAgICBpZiAocGFyc2UuZmluZCgnLicpICE9IC0xKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNlLnN1YnN0cmluZyg5LCAyKTsKLSAgICAg
ICAgICAgIG1pbGxpc2Vjb25kcyA9IHRlbXAudG9VSW50U3RyaWN0KCk7Ci0gICAgICAgICAgICBy
ZXN1bHQgKz0gKG1pbGxpc2Vjb25kcyAqICgxIC8gcG93KDEwLjAsIGludCh0ZW1wLmxlbmd0aCgp
KSkpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZG91YmxlUG9pbnRPbmUgIT0gLTEgJiYg
ZG91YmxlUG9pbnRUd28gPT0gLTEpIHsgLy8gU3BlYzogIlBhcnRpYWwgY2xvY2sgdmFsdWVzIgot
ICAgICAgICB1bnNpZ25lZCBtaW51dGVzID0gcGFyc2Uuc3Vic3RyaW5nKDAsIDIpLnRvVUludFN0
cmljdCgpOwotICAgICAgICB1bnNpZ25lZCBzZWNvbmRzID0gcGFyc2Uuc3Vic3RyaW5nKDMsIDIp
LnRvVUludFN0cmljdCgpOwotICAgICAgICB1bnNpZ25lZCBtaWxsaXNlY29uZHMgPSAwOwotCi0g
ICAgICAgIHJlc3VsdCA9ICg2MCAqIG1pbnV0ZXMpICsgc2Vjb25kczsKLQotICAgICAgICBpZiAo
cGFyc2UuZmluZCgnLicpICE9IC0xKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNl
LnN1YnN0cmluZyg2LCAyKTsKLSAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRlbXAudG9VSW50
U3RyaWN0KCk7Ci0gICAgICAgICAgICByZXN1bHQgKz0gKG1pbGxpc2Vjb25kcyAqICgxIC8gcG93
KDEwLjAsIGludCh0ZW1wLmxlbmd0aCgpKSkpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7IC8v
IFNwZWM6ICJUaW1lY291bnQgdmFsdWVzIgotICAgICAgICBpbnQgZG90UG9zaXRpb24gPSBwYXJz
ZS5maW5kKCcuJyk7Ci0KLSAgICAgICAgaWYgKHBhcnNlLmVuZHNXaXRoKCJoIikpIHsKLSAgICAg
ICAgICAgIGlmIChkb3RQb3NpdGlvbiA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBw
YXJzZS5zdWJzdHJpbmcoMCwgcGFyc2UubGVuZ3RoKCkgLSAxKS50b1VJbnRTdHJpY3QoKSAqIDM2
MDA7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5z
dWJzdHJpbmcoMCwgZG90UG9zaXRpb24pLnRvVUludFN0cmljdCgpICogMzYwMDsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNlLnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDEsIHBh
cnNlLmxlbmd0aCgpIC0gZG90UG9zaXRpb24gLSAyKTsKLSAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gKDM2MDAuMCAqIHRlbXAudG9VSW50U3RyaWN0KCkpICogKDEgLyBwb3coMTAuMCwgaW50KHRl
bXAubGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocGFyc2Uu
ZW5kc1dpdGgoIm1pbiIpKSB7Ci0gICAgICAgICAgICBpZiAoZG90UG9zaXRpb24gPT0gLTEpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIHBhcnNlLmxlbmd0aCgp
IC0gMykudG9VSW50U3RyaWN0KCkgKiA2MDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHBhcnNlLnN1YnN0cmluZygwLCBkb3RQb3NpdGlvbikudG9VSW50U3Ry
aWN0KCkgKiA2MDsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHBhcnNlLnN1YnN0cmlu
Zyhkb3RQb3NpdGlvbiArIDEsIHBhcnNlLmxlbmd0aCgpIC0gZG90UG9zaXRpb24gLSA0KTsKLSAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gKDYwLjAgKiB0ZW1wLnRvVUludFN0cmljdCgpKSAqICgx
IC8gcG93KDEwLjAsIGludCh0ZW1wLmxlbmd0aCgpKSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJtcyIpKSB7Ci0gICAgICAgICAgICBpZiAoZG90
UG9zaXRpb24gPT0gLTEpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5n
KDAsIHBhcnNlLmxlbmd0aCgpIC0gMikudG9VSW50U3RyaWN0KCkgLyAxMDAwLjA7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5zdWJzdHJpbmcoMCwg
ZG90UG9zaXRpb24pLnRvVUludFN0cmljdCgpIC8gMTAwMC4wOwotICAgICAgICAgICAgICAgIFN0
cmluZyB0ZW1wID0gcGFyc2Uuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSwgcGFyc2UubGVuZ3Ro
KCkgLSBkb3RQb3NpdGlvbiAtIDMpOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAodGVtcC50
b1VJbnRTdHJpY3QoKSAvIDEwMDAuMCkgKiAoMSAvIHBvdygxMC4wLCBpbnQodGVtcC5sZW5ndGgo
KSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChwYXJzZS5lbmRzV2l0aCgi
cyIpKSB7Ci0gICAgICAgICAgICBpZiAoZG90UG9zaXRpb24gPT0gLTEpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIHBhcnNlLmxlbmd0aCgpIC0gMSkudG9VSW50
U3RyaWN0KCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBw
YXJzZS5zdWJzdHJpbmcoMCwgZG90UG9zaXRpb24pLnRvVUludFN0cmljdCgpOwotICAgICAgICAg
ICAgICAgIFN0cmluZyB0ZW1wID0gcGFyc2Uuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSwgcGFy
c2UubGVuZ3RoKCkgLSBkb3RQb3NpdGlvbiAtIDIpOwotICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSB0ZW1wLnRvVUludFN0cmljdCgpICogKDEgLyBwb3coMTAuMCwgaW50KHRlbXAubGVuZ3RoKCkp
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0g
cGFyc2UudG9Eb3VibGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIC8vIEFz
c3VtcHRpb25zIG1heSBub3QgaG9sZCBhZnRlciBhdHRyaWJ1dGUgY2hhbmdlLgorICAgIG1fYW5p
bWF0aW9uVmFsaWQgPSBmYWxzZTsKKyAgICBTTUlMVGltaW5nRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQotewotICAgIGlmIChvd25lclNWR0VsZW1lbnQoKSkK
LSAgICAgICAgb3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+YWRkVGltZXIodGhp
cywgbHJvdW5kKGdldFN0YXJ0VGltZSgpKSk7Ci0gICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCk7Ci19Ci0KLVN0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRy
aWJ1dGVBbmltYXRlZFZhbHVlKCkgY29uc3QKK2Zsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omdl
dFN0YXJ0VGltZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBl
bnRpcmVseSBjb3JyZWN0Ci0gICAgLy8gSXQgZG9lcyBub3QgcHJvcGVybHkgZ3JhYiB0aGUgdHJ1
ZSAiYW5pbVZhbCIgaW5zdGVhZCBncmFicyB0aGUgYmFzZVZhbCAob3Igc29tZXRoaW5nIHZlcnkg
Y2xvc2UpCi0KLSAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIAotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWQgPSAwOwotICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0
LT5pc1N0eWxlZCgpKQotICAgICAgICBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50Kj4odGFyZ2V0KTsKLSAgICAKLSAgICBTdHJpbmcgcmV0OwotCi0gICAgRUF0dHJpYnV0ZVR5
cGUgYXR0cmlidXRlVHlwZSA9IHN0YXRpY19jYXN0PEVBdHRyaWJ1dGVUeXBlPihtX2F0dHJpYnV0
ZVR5cGUpOwotICAgIGlmIChhdHRyaWJ1dGVUeXBlID09IEFUVFJJQlVURVRZUEVfQVVUTykgewot
ICAgICAgICBhdHRyaWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9YTUw7Ci0KLSAgICAgICAgLy8g
U3BlYzogVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBtYXRjaCB0aGUgYXR0cmlidXRlTmFtZSB0
byBhbiBhdHRyaWJ1dGUKLSAgICAgICAgLy8gZm9yIHRoZSB0YXJnZXQgZWxlbWVudC4gVGhlIGlt
cGxlbWVudGF0aW9uIG11c3QgZmlyc3Qgc2VhcmNoIHRocm91Z2ggdGhlCi0gICAgICAgIC8vIGxp
c3Qgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGEgbWF0Y2hpbmcgcHJvcGVydHkgbmFtZSwgYW5kIGlm
IG5vbmUgaXMgZm91bmQsCi0gICAgICAgIC8vIHNlYXJjaCB0aGUgZGVmYXVsdCBYTUwgbmFtZXNw
YWNlIGZvciB0aGUgZWxlbWVudC4KLSAgICAgICAgaWYgKHN0eWxlZCAmJiBzdHlsZWQtPnN0eWxl
KCkpIHsKLSAgICAgICAgICAgIGlmIChzdHlsZWQtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFs
dWUobV9hdHRyaWJ1dGVOYW1lKSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gQVRU
UklCVVRFVFlQRV9DU1M7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0
ZVR5cGUgPT0gQVRUUklCVVRFVFlQRV9DU1MpIHsKLSAgICAgICAgaWYgKHN0eWxlZCAmJiBzdHls
ZWQtPnN0eWxlKCkpCi0gICAgICAgICAgICByZXQgPSBzdHlsZWQtPnN0eWxlKCktPmdldFByb3Bl
cnR5VmFsdWUobV9hdHRyaWJ1dGVOYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoYXR0cmlidXRlVHlw
ZSA9PSBBVFRSSUJVVEVUWVBFX1hNTCB8fCByZXQuaXNFbXB0eSgpKQotICAgICAgICByZXQgPSB0
YXJnZXRFbGVtZW50KCktPmdldEF0dHJpYnV0ZShtX2F0dHJpYnV0ZU5hbWUpOwotCi0gICAgcmV0
dXJuIHJldDsKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChpbnRlcnZhbEJlZ2lu
KCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorZmxvYXQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6Z2V0Q3VycmVudFRpbWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyBub3QgZW50aXJlbHkgY29ycmVjdAotICAgIC8vIEl0IGRvZXMgbm90IHByb3Bl
cmx5IHNldCB0aGUgImFuaW1WYWwiLCByYXRoZXIgaXQgc2V0cyB0aGUgImJhc2VWYWwiCi0gICAg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlKHRhcmdldEVsZW1lbnQoKSwg
bV9hdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8RUF0dHJpYnV0ZVR5cGU+KG1fYXR0
cmlidXRlVHlwZSkpOworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGVsYXBzZWQo
KS52YWx1ZSgpKTsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRy
aWJ1dGUoU1ZHRWxlbWVudCogdGFyZ2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIEVBdHRyaWJ1dGVUeXBlIHR5cGUpCitmbG9hdCBTVkdBbmltYXRpb25FbGVtZW50
OjpnZXRTaW1wbGVEdXJhdGlvbihFeGNlcHRpb25Db2RlJikgY29uc3QKIHsKLSAgICBpZiAoIXRh
cmdldCB8fCBuYW1lLmlzTnVsbCgpIHx8IHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47
CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc2ltcGxlRHVyYXRpb24oKS52YWx1
ZSgpKTsKK30gICAgCiAgICAgCi0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkID0gKHRhcmdl
dCAmJiB0YXJnZXQtPmlzU3R5bGVkKCkpID8gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+
KHRhcmdldCkgOiAwOwotCi0gICAgRUF0dHJpYnV0ZVR5cGUgYXR0cmlidXRlVHlwZSA9IHR5cGU7
Ci0gICAgaWYgKHR5cGUgPT0gQVRUUklCVVRFVFlQRV9BVVRPKSB7Ci0gICAgICAgIC8vIFNwZWM6
IFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbWF0Y2ggdGhlIGF0dHJpYnV0ZU5hbWUgdG8gYW4g
YXR0cmlidXRlCi0gICAgICAgIC8vIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQuIFRoZSBpbXBsZW1l
bnRhdGlvbiBtdXN0IGZpcnN0IHNlYXJjaCB0aHJvdWdoIHRoZQotICAgICAgICAvLyBsaXN0IG9m
IENTUyBwcm9wZXJ0aWVzIGZvciBhIG1hdGNoaW5nIHByb3BlcnR5IG5hbWUsIGFuZCBpZiBub25l
IGlzIGZvdW5kLAotICAgICAgICAvLyBzZWFyY2ggdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSBm
b3IgdGhlIGVsZW1lbnQuCi0gICAgICAgIGlmIChzdHlsZWQgJiYgc3R5bGVkLT5zdHlsZSgpICYm
IHN0eWxlZC0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShuYW1lKSkKLSAgICAgICAgICAg
IGF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0NTUzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfWE1MOwotICAgIH0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoYXR0cmlidXRlVHlwZSA9PSBBVFRSSUJVVEVUWVBF
X0NTUyAmJiBzdHlsZWQgJiYgc3R5bGVkLT5zdHlsZSgpKQotICAgICAgICBzdHlsZWQtPnN0eWxl
KCktPnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCAiIiwgZWMpOwotICAgIGVsc2UgaWYgKGF0dHJp
YnV0ZVR5cGUgPT0gQVRUUklCVVRFVFlQRV9YTUwpCi0gICAgICAgIHRhcmdldC0+c2V0QXR0cmli
dXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci19Ci0KLVN0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojph
dHRyaWJ1dGVOYW1lKCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YmVnaW5FbGVt
ZW50KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7Cisg
ICAgcmV0dXJuIGJlZ2luRWxlbWVudEF0KDAsIGVjKTsKIH0KIAotYm9vbCBTVkdBbmltYXRpb25F
bGVtZW50Ojpjb25uZWN0ZWRUb1RpbWVyKCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6YmVnaW5FbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICByZXR1cm4gbV9jb25uZWN0ZWRUb1RpbWVyOworICAgIGFkZEJlZ2luVGltZShlbGFwc2VkKCkg
KyBvZmZzZXQpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmlzRnJvemVuKCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kRWxlbWVu
dChFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4gKG1fZmlsbCA9PSBGSUxMX0ZSRUVa
RSk7CisgICAgcmV0dXJuIGVuZEVsZW1lbnRBdCgwLCBlYyk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6aXNBZGRpdGl2ZSgpIGNvbnN0Citib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmVuZEVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHJl
dHVybiAobV9hZGRpdGl2ZSA9PSBBRERJVElWRV9TVU0pIHx8IChkZXRlY3RBbmltYXRpb25Nb2Rl
KCkgPT0gQllfQU5JTUFUSU9OKTsKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGFkZEVuZFRpbWUoZWxhcHNlZCgpICsgb2Zmc2V0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KLQotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVk
KCkgY29uc3QKKyAgICAKK1NWR0FuaW1hdGlvbkVsZW1lbnQ6OkFuaW1hdGlvbk1vZGUgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6YW5pbWF0aW9uTW9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX2Fj
Y3VtdWxhdGUgPT0gQUNDVU1VTEFURV9TVU0pICYmIChkZXRlY3RBbmltYXRpb25Nb2RlKCkgIT0g
VE9fQU5JTUFUSU9OKTsKLX0KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1z
bWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8jQW5pbUZ1bmNWYWx1ZXMKKyAgICAKKyAgICAvLyA8c2V0
PiBpcyBhbHdheXMgYSB0by1hbmltYXRpb24KKyAgICBpZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6
c2V0VGFnKSkKKyAgICAgICAgcmV0dXJuIFRvQW5pbWF0aW9uOwogCi1FQW5pbWF0aW9uTW9kZSBT
VkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3QKLXsKICAgICBp
ZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSkKLSAgICAgICAgcmV0dXJuIFZB
TFVFU19BTklNQVRJT047Ci0gICAgZWxzZSBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX3Rv
LmlzRW1wdHkoKSkgfHwgKCFtX3RvLmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmltYXRp
b24KLSAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9tLXRvIGFuaW1hdGlvbgot
ICAgICAgICAgICAgcmV0dXJuIEZST01fVE9fQU5JTUFUSU9OOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gVE9fQU5JTUFUSU9OOwotICAgIH0gZWxzZSBpZiAoKG1fZnJvbS5pc0Vt
cHR5KCkgJiYgbV90by5pc0VtcHR5KCkgJiYgIW1fYnkuaXNFbXB0eSgpKSB8fAotICAgICAgICAg
ICAgKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX2J5LmlzRW1wdHkoKSkpIHsgLy8gYnkvZnJvbS1i
eSBhbmltYXRpb24KLSAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9tLWJ5IGFu
aW1hdGlvbgotICAgICAgICAgICAgcmV0dXJuIEZST01fQllfQU5JTUFUSU9OOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gQllfQU5JTUFUSU9OOwotICAgIH0KLQotICAgIHJldHVy
biBOT19BTklNQVRJT047CisgICAgICAgIHJldHVybiBWYWx1ZXNBbmltYXRpb247CisgICAgaWYg
KCF0b1ZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0
eSgpID8gVG9BbmltYXRpb24gOiBGcm9tVG9BbmltYXRpb247CisgICAgaWYgKCFieVZhbHVlKCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gQnlBbmlt
YXRpb24gOiBGcm9tQnlBbmltYXRpb247CisgICAgcmV0dXJuIE5vQW5pbWF0aW9uOworfQorCitT
VkdBbmltYXRpb25FbGVtZW50OjpDYWxjTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjTW9k
ZSgpIGNvbnN0Cit7ICAgIAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgZGlzY3JldGUo
ImRpc2NyZXRlIik7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBsaW5lYXIoImxpbmVh
ciIpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgcGFjZWQoInBhY2VkIik7CisgICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBzcGxpbmUoInNwbGluZSIpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNhbGNNb2RlQXR0cik7
CisgICAgaWYgKHZhbHVlID09IGRpc2NyZXRlKQorICAgICAgICByZXR1cm4gQ2FsY01vZGVEaXNj
cmV0ZTsKKyAgICBpZiAodmFsdWUgPT0gbGluZWFyKQorICAgICAgICByZXR1cm4gQ2FsY01vZGVM
aW5lYXI7CisgICAgaWYgKHZhbHVlID09IHBhY2VkKQorICAgICAgICByZXR1cm4gQ2FsY01vZGVQ
YWNlZDsKKyAgICBpZiAodmFsdWUgPT0gc3BsaW5lKQorICAgICAgICByZXR1cm4gQ2FsY01vZGVT
cGxpbmU7CisgICAgcmV0dXJuIGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcp
ID8gQ2FsY01vZGVQYWNlZCA6IENhbGNNb2RlTGluZWFyOworfQorCitTVkdBbmltYXRpb25FbGVt
ZW50OjpBdHRyaWJ1dGVUeXBlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUoKSBj
b25zdAoreyAgICAKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIGNzcygiQ1NTIik7Cisg
ICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyB4bWwoIlhNTCIpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZVR5cGVBdHRy
KTsKKyAgICBpZiAodmFsdWUgPT0gY3NzKQorICAgICAgICByZXR1cm4gQXR0cmlidXRlVHlwZUNT
UzsKKyAgICBpZiAodmFsdWUgPT0geG1sKQorICAgICAgICByZXR1cm4gQXR0cmlidXRlVHlwZVhN
TDsKKyAgICByZXR1cm4gQXR0cmlidXRlVHlwZUF1dG87Cit9CisKK1N0cmluZyBTVkdBbmltYXRp
b25FbGVtZW50Ojp0b1ZhbHVlKCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShTVkdOYW1lczo6dG9BdHRyKTsKK30KKworU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJ5
VmFsdWUoKSBjb25zdAoreyAgICAKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpi
eUF0dHIpOworfQorCitTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZnJvbVZhbHVlKCkgY29u
c3QKK3sgICAgCisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZnJvbUF0dHIpOwog
fQotCi1kb3VibGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVwZWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcmVwZXRpdGlvbnM7CisgICAgCitTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6YXR0cmlidXRlTmFtZSgpIGNvbnN0Cit7ICAgIAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsK
IH0KIAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0luZGVmaW5pdGUoZG91YmxlIHZhbHVl
KQorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FkZGl0aXZlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gKHZhbHVlID09IERCTF9NQVgpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcg
c3VtKCJzdW0iKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRl
KFNWR05hbWVzOjphZGRpdGl2ZUF0dHIpOworICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gfHwgYW5p
bWF0aW9uTW9kZSgpID09IEJ5QW5pbWF0aW9uOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmNvbm5lY3RUaW1lcigpCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNjdW11bGF0
ZWQoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9jb25uZWN0ZWRUb1RpbWVyKTsKLSAgICBvd25l
clNWR0VsZW1lbnQoKS0+dGltZVNjaGVkdWxlcigpLT5jb25uZWN0SW50ZXJ2YWxUaW1lcih0aGlz
KTsKLSAgICBtX2Nvbm5lY3RlZFRvVGltZXIgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcgc3VtKCJzdW0iKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0
QXR0cmlidXRlKFNWR05hbWVzOjphY2N1bXVsYXRlQXR0cik7CisgICAgcmV0dXJuIHZhbHVlID09
IHN1bSAmJiBhbmltYXRpb25Nb2RlKCkgIT0gVG9BbmltYXRpb247CiB9CiAKLXZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6ZGlzY29ubmVjdFRpbWVyKCkKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aGFzVmFsaWRUYXJnZXQoKSBjb25zdAogewotICAgIEFTU0VSVChtX2Nvbm5lY3RlZFRvVGlt
ZXIpOwotICAgIG93bmVyU1ZHRWxlbWVudCgpLT50aW1lU2NoZWR1bGVyKCktPmRpc2Nvbm5lY3RJ
bnRlcnZhbFRpbWVyKHRoaXMpOwotICAgIG1fY29ubmVjdGVkVG9UaW1lciA9IGZhbHNlOworICAg
IHJldHVybiB0YXJnZXRFbGVtZW50KCk7CiB9Ci0KLXN0YXRpYyBkb3VibGUgY2FsY3VsYXRlVGlt
ZVBlcmNlbnRhZ2UoZG91YmxlIGVsYXBzZWRTZWNvbmRzLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBl
bmQsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIHJlcGV0aXRpb25zKQotewotICAgIGRvdWJsZSBw
ZXJjZW50YWdlID0gMC4wOwotICAgIGRvdWJsZSB1c2VFbGFwc2VkID0gZWxhcHNlZFNlY29uZHMg
LSAoZHVyYXRpb24gKiByZXBldGl0aW9ucyk7Ci0gICAgCi0gICAgaWYgKGR1cmF0aW9uID4gMC4w
ICYmIGVuZCA9PSAwLjApCi0gICAgICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGR1
cmF0aW9uKSAtIHVzZUVsYXBzZWQpIC8gZHVyYXRpb24pOwotICAgIGVsc2UgaWYgKGR1cmF0aW9u
ID4gMC4wICYmIGVuZCAhPSAwLjApIHsKLSAgICAgICAgaWYgKGR1cmF0aW9uID4gZW5kKQotICAg
ICAgICAgICAgcGVyY2VudGFnZSA9IDEuMCAtICgoKHN0YXJ0ICsgZW5kKSAtIHVzZUVsYXBzZWQp
IC8gZW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEuMCAtICgo
KHN0YXJ0ICsgZHVyYXRpb24pIC0gdXNlRWxhcHNlZCkgLyBkdXJhdGlvbik7Ci0gICAgfSBlbHNl
IGlmIChkdXJhdGlvbiA9PSAwLjAgJiYgZW5kICE9IDAuMCkKLSAgICAgICAgcGVyY2VudGFnZSA9
IDEuMCAtICgoKHN0YXJ0ICsgZW5kKSAtIHVzZUVsYXBzZWQpIC8gZW5kKTsKICAgICAKLSAgICBy
ZXR1cm4gcGVyY2VudGFnZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdFBlcmNlbnRh
Z2VQYXN0Rm9yS2V5U3BsaW5lcyhjb25zdCBWZWN0b3I8U1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5
U3BsaW5lPiYga2V5U3BsaW5lcywgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRh
Z2VQYXN0KQotewotICAgIGlmIChwZXJjZW50YWdlUGFzdCA9PSAwLjBmKSAvLyB2YWx1ZXMgYXQg
a2V5IHRpbWVzIG5lZWQgbm8gc3BsaW5lIGFkanVzdG1lbnQKLSAgICAgICAgcmV0dXJuOwotICAg
IGNvbnN0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNwbGluZSYga2V5U3BsaW5lID0ga2V5U3Bs
aW5lc1t2YWx1ZUluZGV4XTsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludCgpKTsKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oa2V5U3BsaW5lLmNvbnRyb2wxLCBr
ZXlTcGxpbmUuY29udHJvbDIsIEZsb2F0UG9pbnQoMS4wZiwgMS4wZikpOwotICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIHVzZSBhIHktYXQteCBmdW5jdGlvbiBvbiBwYXRoLCB0byBjb21wdXRl
IHRoZSB5IHZhbHVlIHRoZW4gbXVsdGlwbHkgcGVyY2VudGFnZVBhc3QgYnkgdGhhdCB2YWx1ZQot
fQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFz
dEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5k
ZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFy
Z2V0QXR0cmlidXRlSXNDU1MoKSBjb25zdAogewotICAgIC8vIFVuc3BlY2lmaWVkOiBhbmltYXRp
b24gZWxlbWVudHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgQ0FMQ01PREVfUEFDRUQsIHdlIGp1c3Qg
YWx3YXlzIHNob3cgdGhlIGZpcnN0IHZhbHVlCi0gICAgdmFsdWVJbmRleCA9IDA7Ci0gICAgcGVy
Y2VudGFnZVBhc3QgPSAwOworICAgIEF0dHJpYnV0ZVR5cGUgdHlwZSA9IGF0dHJpYnV0ZVR5cGUo
KTsKKyAgICBpZiAodHlwZSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAodHlwZSA9PSBBdHRyaWJ1dGVUeXBlWE1MKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgbWFwIG9mIGFsbCBTVkcgcHJvcGVy
dGllcyBhbmQgdGhlaXIgYXR0cmlidXRlIHR5cGVzIHNvIHdlCisgICAgLy8gY291bGQgdmFsaWRh
dGUgYW5pbWF0aW9ucyBiZXR0ZXIuIFRoZSBzcGVjIGlzIHZlcnkgdmFndWEgYWJvdXQgdGhpcy4K
KyAgICB1bnNpZ25lZCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZSgpKTsKKyAgICAv
LyBTVkcgcmFuZ2UKKyAgICBpZiAoaWQgPj0gQ1NTUHJvcGVydHlDbGlwUGF0aCAmJiBpZCA8PSBD
U1NQcm9wZXJ0eVdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZWd1
bGFyIENTUyBwcm9wZXJ0aWVzIGFsc28gaW4gU1ZHCisgICAgcmV0dXJuIGlkID09IENTU1Byb3Bl
cnR5Q29sb3IgfHwgaWQgPT0gQ1NTUHJvcGVydHlEaXNwbGF5IHx8IGlkID09IENTU1Byb3BlcnR5
T3BhY2l0eQorICAgICAgICB8fCAoaWQgPj0gQ1NTUHJvcGVydHlGb250ICYmIGlkIDw9IENTU1By
b3BlcnR5Rm9udFdlaWdodCkgCisgICAgICAgIHx8IGlkID09IENTU1Byb3BlcnR5T3ZlcmZsb3cg
fHwgaWQgPT0gQ1NTUHJvcGVydHlWaXNpYmlsaXR5OwogfQogCi1mbG9hdCBTVkdBbmltYXRpb25F
bGVtZW50OjpjYWxjdWxhdGVUb3RhbERpc3RhbmNlKCkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIHJldHVybiAwOworICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQo
KTsKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKKyAg
ICBpZiAoIXRhcmdldCB8fCBhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSB8fCB2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYgKHRhcmdl
dEF0dHJpYnV0ZUlzQ1NTKCkpIHsKKyAgICAgICAgdGFyZ2V0LT5zdHlsZSgpLT5zZXRQcm9wZXJ0
eShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgIiIsIGVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGFy
Z2V0LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUsIGVjKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIGNhY3VsYXRlVmFsdWVJbmRleEZvcktleVRpbWVzKGZsb2F0IHRpbWVQZXJj
ZW50YWdlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXlUaW1lcywgdW5zaWduZWQmIHZhbHVlSW5k
ZXgsIGZsb2F0JiBsYXN0S2V5VGltZSwgZmxvYXQmIG5leHRLZXlUaW1lKQorU3RyaW5nIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpIGNvbnN0CiB7Ci0gICAg
dW5zaWduZWQga2V5VGltZXNDb3VudE1pbnVzT25lID0ga2V5VGltZXMuc2l6ZSgpIC0gMTsKLSAg
ICB2YWx1ZUluZGV4ID0gMDsKLSAgICBBU1NFUlQodGltZVBlcmNlbnRhZ2UgPj0ga2V5VGltZXMu
Zmlyc3QoKSk7Ci0gICAgd2hpbGUgKCh2YWx1ZUluZGV4IDwga2V5VGltZXNDb3VudE1pbnVzT25l
KSAmJiAodGltZVBlcmNlbnRhZ2UgPj0ga2V5VGltZXNbdmFsdWVJbmRleCArIDFdKSkKLSAgICAg
ICAgdmFsdWVJbmRleCsrOworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmli
dXRlTmFtZSgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCgpIHx8IGF0dHJpYnV0ZU5hbWUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCi0gICAgbGFzdEtleVRpbWUg
PSBrZXlUaW1lc1t2YWx1ZUluZGV4XTsKLSAgICBpZiAodmFsdWVJbmRleCA8IGtleVRpbWVzQ291
bnRNaW51c09uZSkKLSAgICAgICAgbmV4dEtleVRpbWUgPSBrZXlUaW1lc1t2YWx1ZUluZGV4ICsg
MV07Ci0gICAgZWxzZQotICAgICAgICBuZXh0S2V5VGltZSA9IGxhc3RLZXlUaW1lOwotfQotCi1i
b29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVmFsaWRBbmltYXRpb24oKSBjb25zdAotewotICAg
IEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7Ci0g
ICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpIHx8IChhbmltYXRpb25Nb2RlID09IE5PX0FOSU1BVElP
TikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWQUxV
RVNfQU5JTUFUSU9OKSB7Ci0gICAgICAgIGlmICghbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkpIHsKLSAgICAg
ICAgICAgIGlmICgobV92YWx1ZXMuc2l6ZSgpICE9IG1fa2V5VGltZXMuc2l6ZSgpKSB8fCAobV9r
ZXlUaW1lcy5maXJzdCgpICE9IDApKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICgoKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfU1BMSU5FKSB8fCAobV9jYWxj
TW9kZSA9PSBDQUxDTU9ERV9MSU5FQVIpKSAmJiAobV9rZXlUaW1lcy5sYXN0KCkgIT0gMSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZmxvYXQgbGFzdEtleVRp
bWUgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IG1fa2V5VGltZXMu
c2l6ZSgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9rZXlUaW1lc1t4XSA8IGxhc3RL
ZXlUaW1lIHx8IG1fa2V5VGltZXNbeF0gPiAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fa2V5U3BsaW5l
cy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmICgobV92YWx1ZXMuc2l6ZSgpIC0gMSkgIT0gbV9r
ZXlTcGxpbmVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbV9rZXlUaW1lcy5zaXplKCk7IHgrKykKLSAg
ICAgICAgICAgICAgICBpZiAobV9rZXlUaW1lc1t4XSA8IDAgfHwgbV9rZXlUaW1lc1t4XSA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVW
YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QoZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVk
JiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCi17Ci0gICAgQVNTRVJUKHRpbWVQ
ZXJjZW50YWdlIDw9IDEuMGYpOwotICAgIEFTU0VSVChpc1ZhbGlkQW5pbWF0aW9uKCkpOwotICAg
IEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7Cisg
ICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudCgpOworICAgIFN0cmluZyByZXN1
bHQ7CiAgICAgCi0gICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIHRoZWlyIG93biBzcGVjaWFsIGhh
bmRsaW5nCi0gICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVE9fQU5JTUFUSU9OKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKHRhcmdldEF0dHJpYnV0ZUlzQ1NTKCkpIHsKKyAgICAgICAgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uIGNvbXB1dGVkU3R5bGUodGFyZ2V0KTsKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0
ZU5hbWUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gdGFyZ2V0RWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CiAgICAgCi0gICAgLy8gcGFjZWQgaXMgc3BlY2lh
bCwgY2FjdWxhdGVzIHZhbHVlcyBiYXNlZCBvbiBkaXN0YW5jZSBpbnN0ZWFkIG9mIHRpbWUKLSAg
ICBpZiAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9QQUNFRCkgewotICAgICAgICBmbG9hdCB0b3Rh
bERpc3RhbmNlID0gY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOwotICAgICAgICBmbG9hdCBkaXN0
YW5jZVBlcmNlbnRhZ2UgPSB0b3RhbERpc3RhbmNlICogdGltZVBlcmNlbnRhZ2U7Ci0gICAgICAg
IHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGRpc3RhbmNlUGVyY2VudGFn
ZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CiAgICAgCi0gICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBj
dXJyZW50IGluZGV4IGlzIGJhc2VkIG9uIG9uIHRpbWUKLSAgICAvLyBhbGwgZnVydGhlciBjYWxj
dWxhdGlvbnMgYXJlIGJhc2VkIG9uIHRpbWUgcGVyY2VudGFnZXMsIHRvIGFsbG93IHVuaWZ5aW5n
IGtleVRpbWVzIGhhbmRsaW5nICYgbm9ybWFsIGFuaW1hdGlvbgotICAgIGZsb2F0IGxhc3RLZXlU
aW1lUGVyY2VudGFnZSA9IDA7Ci0gICAgZmxvYXQgbmV4dEtleVRpbWVQZXJjZW50YWdlID0gMDsK
LSAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkgJiYgKG1fa2V5VGltZXMuc2l6ZSgpID09IG1fdmFs
dWVzLnNpemUoKSkpCi0gICAgICAgIGNhY3VsYXRlVmFsdWVJbmRleEZvcktleVRpbWVzKHRpbWVQ
ZXJjZW50YWdlLCBtX2tleVRpbWVzLCB2YWx1ZUluZGV4LCBsYXN0S2V5VGltZVBlcmNlbnRhZ2Us
IG5leHRLZXlUaW1lUGVyY2VudGFnZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGxh
c3RQb3NzaWJsZUluZGV4ID0gKG1fdmFsdWVzLnNpemUoKSA/IG1fdmFsdWVzLnNpemUoKSAtIDE6
IDEpOwotICAgICAgICB1bnNpZ25lZCBmbG9vcmVkVmFsdWVJbmRleCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0aW1lUGVyY2VudGFnZSAqIGxhc3RQb3NzaWJsZUluZGV4KTsKLSAgICAgICAgdmFs
dWVJbmRleCA9IGZsb29yZWRWYWx1ZUluZGV4OwotICAgICAgICBsYXN0S2V5VGltZVBlcmNlbnRh
Z2UgPSBmbG9vcmVkVmFsdWVJbmRleCAvIChmbG9hdClsYXN0UG9zc2libGVJbmRleDsKLSAgICAg
ICAgbmV4dEtleVRpbWVQZXJjZW50YWdlID0gKGZsb29yZWRWYWx1ZUluZGV4ICsgMSkgLyAoZmxv
YXQpbGFzdFBvc3NpYmxlSW5kZXg7Ci0gICAgfQorc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVF
cHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsg
fQogICAgIAotICAgIC8vIE5vIGZ1cnRoZXIgY2FjdWxhdGlvbiBpcyBuZWVkZWQgaWYgd2UncmUg
ZXhhY3RseSBvbiBhbiBpbmRleC4KLSAgICBpZiAodGltZVBlcmNlbnRhZ2UgPT0gbGFzdEtleVRp
bWVQZXJjZW50YWdlIHx8IGxhc3RLZXlUaW1lUGVyY2VudGFnZSA9PSBuZXh0S2V5VGltZVBlcmNl
bnRhZ2UpIHsKLSAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAwLjBmOwordm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQs
IGZsb2F0JiBlZmZlY3RpdmVQZXJjZW50LCBTdHJpbmcmIGZyb20sIFN0cmluZyYgdG8pCit7Cisg
ICAgQVNTRVJUKG1fYW5pbWF0aW9uVmFsaWQpOworICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnQg
PSBtX2tleVRpbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB2YWx1ZXNDb3VudCA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICBBU1NFUlQodmFsdWVzQ291bnQgPiAxKTsKKyAgICBBU1NFUlQoIWtleVRp
bWVzQ291bnQgfHwgdmFsdWVzQ291bnQgPT0ga2V5VGltZXNDb3VudCk7CisgICAgQVNTRVJUKCFr
ZXlUaW1lc0NvdW50IHx8IChrZXlUaW1lc0NvdW50ID4gMSAmJiBtX2tleVRpbWVzWzBdID09IDAp
KTsKKyAgICB1bnNpZ25lZCBpbmRleDsKKyAgICBmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBrZXlU
aW1lc0NvdW50OyArK2luZGV4KSB7CisgICAgICAgIGlmIChtX2tleVRpbWVzW2luZGV4XSA+PSBw
ZXJjZW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC0taW5kZXg7CisgICAgCisg
ICAgaWYgKGNhbGNNb2RlKCkgPT0gQ2FsY01vZGVEaXNjcmV0ZSkgeworICAgICAgICBpZiAoIWtl
eVRpbWVzQ291bnQpIAorICAgICAgICAgICAgaW5kZXggPSBwZXJjZW50ID09IDEuMGYgPyB2YWx1
ZXNDb3VudCAtIDEgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGVyY2VudCAqIHZhbHVlc0NvdW50
KTsKKyAgICAgICAgZnJvbSA9IG1fdmFsdWVzW2luZGV4XTsKKyAgICAgICAgdG8gPSBtX3ZhbHVl
c1tpbmRleF07CisgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSAwLjBmOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIC8vIG90aGVyd2lzZSB3ZSBkZWNpZGUgd2hhdCBwZXJjZW50
IGFmdGVyIHRoYXQgaW5kZXgKLSAgICBpZiAoKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfU1BMSU5F
KSAmJiAobV9rZXlTcGxpbmVzLnNpemUoKSA9PSAobV92YWx1ZXMuc2l6ZSgpIC0gMSkpKQotICAg
ICAgICBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNwbGluZXMobV9rZXlTcGxpbmVzLCB2YWx1
ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7Ci0gICAgZWxzZSBpZiAobV9jYWxjTW9kZSA9PSBDQUxD
TU9ERV9ESVNDUkVURSkKLSAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAwLjBmOwotICAgIGVsc2Ug
eyAvLyBkZWZhdWx0IChhbmQgZmFsbGJhY2spIG1vZGU6IGxpbmVhcgotICAgICAgICBmbG9hdCBr
ZXlUaW1lU3BhbiA9IG5leHRLZXlUaW1lUGVyY2VudGFnZSAtIGxhc3RLZXlUaW1lUGVyY2VudGFn
ZTsKLSAgICAgICAgZmxvYXQgdGltZVNpbmNlTGFzdEtleVRpbWUgPSB0aW1lUGVyY2VudGFnZSAt
IGxhc3RLZXlUaW1lUGVyY2VudGFnZTsKLSAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAodGltZVNp
bmNlTGFzdEtleVRpbWUgLyBrZXlUaW1lU3Bhbik7CisgICAgZmxvYXQgZnJvbVBlcmNlbnQ7Cisg
ICAgZmxvYXQgdG9QZXJjZW50OworICAgIGlmIChrZXlUaW1lc0NvdW50KSB7CisgICAgICAgIGZy
b21QZXJjZW50ID0gbV9rZXlUaW1lc1tpbmRleF07CisgICAgICAgIHRvUGVyY2VudCA9IG1fa2V5
VGltZXNbaW5kZXggKyAxXTsKKyAgICB9IGVsc2UgeyAgICAgICAgCisgICAgICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBlcmNlbnQgKiAodmFsdWVzQ291bnQgLSAxKSk7CisgICAg
ICAgIGZyb21QZXJjZW50ID0gIHN0YXRpY19jYXN0PGZsb2F0PihpbmRleCkgLyAodmFsdWVzQ291
bnQgLSAxKTsKKyAgICAgICAgdG9QZXJjZW50ID0gIHN0YXRpY19jYXN0PGZsb2F0PihpbmRleCAr
IDEpIC8gKHZhbHVlc0NvdW50IC0gMSk7CisgICAgfQorICAgIAorICAgIGlmIChpbmRleCA9PSB2
YWx1ZXNDb3VudCAtIDEpCisgICAgICAgIC0taW5kZXg7CisgICAgZnJvbSA9IG1fdmFsdWVzW2lu
ZGV4XTsKKyAgICB0byA9IG1fdmFsdWVzW2luZGV4ICsgMV07CisgICAgQVNTRVJUKHRvUGVyY2Vu
dCA+IGZyb21QZXJjZW50KTsKKyAgICBlZmZlY3RpdmVQZXJjZW50ID0gcGVyY2VudCA9PSAxLjBm
ID8gMS4wZiA6IChwZXJjZW50IC0gZnJvbVBlcmNlbnQpIC8gKHRvUGVyY2VudCAtIGZyb21QZXJj
ZW50KTsKKyAgICAKKyAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZVNwbGluZSkgeworICAg
ICAgICBBU1NFUlQobV9rZXlTcGxpbmVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkgLSAxKTsK
KyAgICAgICAgQ3VydmVEYXRhIGJlemllciA9IG1fa2V5U3BsaW5lc1tpbmRleF07CisgICAgICAg
IFNNSUxUaW1lIGR1cmF0aW9uID0gc2ltcGxlRHVyYXRpb24oKTsKKyAgICAgICAgaWYgKCFkdXJh
dGlvbi5pc0Zpbml0ZSgpKQorICAgICAgICAgICAgZHVyYXRpb24gPSAxMC4wOworICAgICAgICBk
b3VibGUgdCA9IGJlemllci5zb2x2ZUN1cnZlWChlZmZlY3RpdmVQZXJjZW50LCBzb2x2ZUVwc2ls
b24oZHVyYXRpb24udmFsdWUoKSkpOworICAgICAgICB0ID0gYmV6aWVyLnNhbXBsZUN1cnZlWSh0
KTsKKyAgICAgICAgZWZmZWN0aXZlUGVyY2VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodCk7
CiAgICAgfQogfQotCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJh
c2VWYWx1ZUZyb21FbGVtZW50KCkKLXsKLSAgICBtX2Jhc2VWYWx1ZSA9IHRhcmdldEF0dHJpYnV0
ZUFuaW1hdGVkVmFsdWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKQorICAgIAordm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQogewotICAgIHNldFRhcmdl
dEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUobV9hbmltYXRlZFZhbHVlKTsKLX0KKyAgICBtX2FuaW1h
dGlvblZhbGlkID0gZmFsc2U7CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFuZGxlVGlt
ZXJFdmVudChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKLXsK
LSAgICB0aW1lUGVyY2VudGFnZSA9IG1pbih0aW1lUGVyY2VudGFnZSwgMS4wKTsKLSAgICBpZiAo
IWNvbm5lY3RlZFRvVGltZXIoKSkgewotICAgICAgICBjb25uZWN0VGltZXIoKTsKKyAgICBpZiAo
IWhhc1ZhbGlkVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8g
RklYTUU6IGFjY3VtdWxhdGU9InN1bSIgd2lsbCBub3Qgd29yayB3L28gY29kZSBzaW1pbGFyIHRv
IHRoaXM6Ci0vLyAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAwLjAp
Ci0vLyAgICAgICAgYWNjdW11bGF0ZUZvclJlcGV0aXRpb25zKG1fcmVwZXRpdGlvbnMpOwotICAg
IAotICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2Rl
KCk7Ci0gICAgCi0gICAgdW5zaWduZWQgdmFsdWVJbmRleCA9IDA7Ci0gICAgZmxvYXQgcGVyY2Vu
dGFnZVBhc3QgPSAwOwotICAgIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRpbWVQZXJjZW50YWdlKSwgdmFsdWVJbmRleCwgcGVyY2Vu
dGFnZVBhc3QpOwotICAgICAgICAKLSAgICBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoYW5pbWF0
aW9uTW9kZSwgdmFsdWVJbmRleCk7Ci0gICAgCi0gICAgdXBkYXRlQW5pbWF0ZWRWYWx1ZShhbmlt
YXRpb25Nb2RlLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRpbWVQZXJjZW50YWdlKSwgdmFsdWVJ
bmRleCwgcGVyY2VudGFnZVBhc3QpOwotICAgIAotICAgIGlmICh0aW1lUGVyY2VudGFnZSA9PSAx
LjApIHsKLSAgICAgICAgaWYgKChtX3JlcGVhdENvdW50ID4gMCAmJiBtX3JlcGV0aXRpb25zIDwg
bV9yZXBlYXRDb3VudCAtIDEpIHx8IGlzSW5kZWZpbml0ZShtX3JlcGVhdENvdW50KSkgewotICAg
ICAgICAgICAgbV9yZXBldGl0aW9ucysrOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGRpc2Nvbm5lY3RUaW1lcigpOwotICAgIH0KLX0KIAotYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlRm9yRWxhcHNlZFNlY29uZHMo
ZG91YmxlIGVsYXBzZWRTZWNvbmRzKQotewotICAgIC8vIEZJWE1FOiBmaWxsPSJmcmVlemUiIHdp
bGwgbm90IHdvcmsgd2l0aG91dCBzYXZpbmcgb2ZmIHRoZSBtX3N0b3BwZWRUaW1lIGluIGEgc3Rv
cCgpIG1ldGhvZCBhbmQgaGF2aW5nIGNvZGUgc2ltaWxhciB0byB0aGlzOgotLy8gICAgaWYgKGlz
U3RvcHBlZCgpKSB7Ci0vLyAgICAgICAgaWYgKG1fZmlsbCA9PSBGSUxMX0ZSRUVaRSkKLS8vICAg
ICAgICAgICAgZWxhcHNlZFNlY29uZHMgPSBtX3N0b3BwZWRUaW1lOwotLy8gICAgICAgIGVsc2UK
LS8vICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotLy8gICAgfQotICAgIAotICAgIC8vIFZhbGlk
YXRlIGFuaW1hdGlvbiB0aW1pbmcgc2V0dGluZ3M6Ci0gICAgLy8gIzEgKGR1cmF0aW9uID4gMCkg
LT4gZmluZQotICAgIC8vICMyIChkdXJhdGlvbiA8PSAwLjAgJiYgZW5kID4gMCkgLT4gZmluZQot
ICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBpbmRlZmluaXRlIGR1cmF0aW9uIGZvciB0aGUgPHNl
dD4gZWxlbWVudCwgbm90IHN1cmUgaWYgaXQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIG90aGVycyB0
b28uIAotICAgIC8vIEZJWE1FOiBWYWx1ZSB3b24ndCBuYXR1cmFsbHkgYW5pbWF0ZSBpbiB0aGlz
IGNhc2Ugc28ga2VlcGluZyB0aGUgdGltZXIgcmVwZWF0aW5nIGlzIHNvcnQgb2YgcG9pbnRsZXNz
LgotICAgIGlmICgobV9zaW1wbGVEdXJhdGlvbiA8PSAwLjAgJiYgbV9lbmQgPD0gMC4wKSB8fCAo
aXNJbmRlZmluaXRlKG1fc2ltcGxlRHVyYXRpb24pICYmIG1fZW5kIDw9IDAuMCAmJiAhaGFzVGFn
TmFtZShzZXRUYWcpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZ25vcmUgZHVyPSIwIiBv
ciBkdXI9Ii1uZWciCi0gICAgCi0gICAgaWYgKGlzSW5kZWZpbml0ZShtX2FuaW1hdGlvbkJlZ2lu
KSkKLSAgICAgICAgbV9hbmltYXRpb25CZWdpbiA9IG1fYmVnaW47Ci0gICAgCi0gICAgZG91Ymxl
IHBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVUaW1lUGVyY2VudGFnZShlbGFwc2VkU2Vjb25kcywgbV9h
bmltYXRpb25CZWdpbiwgbV9lbmQsIG1fc2ltcGxlRHVyYXRpb24sIG1fcmVwZXRpdGlvbnMpOwot
ICAgIAotICAgIGlmIChwZXJjZW50YWdlIDw9IDEuMCB8fCBjb25uZWN0ZWRUb1RpbWVyKCkpCi0g
ICAgICAgIGhhbmRsZVRpbWVyRXZlbnQoZWxhcHNlZFNlY29uZHMsIHBlcmNlbnRhZ2UpOwotICAg
IAotICAgIGlmIChlbGFwc2VkU2Vjb25kcyA+IG1fYW5pbWF0aW9uRW5kKSB7Ci0gICAgICAgIGlm
IChjb25uZWN0ZWRUb1RpbWVyKCkpCi0gICAgICAgICAgICBkaXNjb25uZWN0VGltZXIoKTsKLSAg
ICAgICAgbV9hbmltYXRpb25FbmQgPSBEQkxfTUFYOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5v
dCBjb3JyZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBhbmltYXRpb25zIG9uIHRoZSBzYW1lIHRh
cmdldCBvciBpZiAKKyAgICAvLyB0aGUgdGltaW5nIGF0dGlidXRlcyBjaGFuZ2UgZHVyaW5nIGFu
aW1hdGlvbiBkdWUgdG8gRE9NIG1hbmlwdWxhdGlvbi4KKyAgICBtX3NhdmVkQmFzZVZhbHVlID0g
dGFyZ2V0QXR0cmlidXRlQmFzZVZhbHVlKCk7CisKKyAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlv
bk1vZGUgPSB0aGlzLT5hbmltYXRpb25Nb2RlKCk7CisgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0g
Tm9BbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBG
cm9tVG9BbmltYXRpb24pCisgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoZnJvbVZhbHVlKCksIHRvVmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYW5pbWF0
aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyhtX3NhdmVkQmFzZVZhbHVlLCB0b1ZhbHVlKCkpOworICAgIGVs
c2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gRnJvbUJ5QW5pbWF0aW9uKQorICAgICAgICBtX2FuaW1h
dGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGZyb21WYWx1ZSgpLCBieVZhbHVl
KCkpOworICAgIGVsc2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gQnlBbmltYXRpb24pCisgICAgICAg
IG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoU3RyaW5nKCksIGJ5
VmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWYWx1ZXNBbmltYXRpb24p
IHsKKyAgICAgICAgQ2FsY01vZGUgY2FsY01vZGUgPSB0aGlzLT5jYWxjTW9kZSgpOworICAgICAg
ICBtX2FuaW1hdGlvblZhbGlkID0gbV92YWx1ZXMuc2l6ZSgpID4gMQorICAgICAgICAgICAgJiYg
KGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6a2V5
VGltZXNBdHRyKSB8fCAobV92YWx1ZXMuc2l6ZSgpID09IG1fa2V5VGltZXMuc2l6ZSgpKSkKKyAg
ICAgICAgICAgICYmIChjYWxjTW9kZSA9PSBDYWxjTW9kZURpc2NyZXRlIHx8ICFtX2tleVRpbWVz
LnNpemUoKSB8fCBtX2tleVRpbWVzLmxhc3QoKSA9PSAxLjApCisgICAgICAgICAgICAmJiAoY2Fs
Y01vZGUgIT0gQ2FsY01vZGVTcGxpbmUgfHwgKG1fa2V5U3BsaW5lcy5zaXplKCkgJiYgbV9rZXlT
cGxpbmVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkgLSAxKSk7CiAgICAgfQotICAgIAotICAg
IHJldHVybiB0cnVlOyAvLyB2YWx1ZSB3YXMgdXBkYXRlZCwgbmVlZCB0byBhcHBseQogfQogICAg
IAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnQoRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHN5bmNocm9ub3VzPwotICAgIHJl
dHVybiBiZWdpbkVsZW1lbnRBdCgwLCBlYyk7Ci19Cit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmFwcGx5QW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCkKK3sgICAgCisg
ICAgaWYgKCF0YXJnZXRFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKIAotYm9vbCBTVkdBbmlt
YXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIC8vIEZJWE1FOiBIYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyBjb3JyZWN0bHku
Ci0gICAgLy8gSW4gZ2VuZXJhbCB3ZSBuZWVkIHRvIG1ha2UgU01JTCBjb25jZXB0cyBsaWtlICJh
Y3RpdmUgZHVyYXRpb24iIGV4cGxpY2l0IGluIHRoZSBjb2RlIAotICAgIGlmIChvZmZzZXQgPCAw
KQotICAgICAgICBvZmZzZXQgPSAwOwotICAgIAotICAgIGlmIChjb25uZWN0ZWRUb1RpbWVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fYW5pbWF0aW9uVmFsaWQpCisgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBtX2FuaW1hdGlvbkJlZ2luID0gb2Zmc2V0OwotICAgIGlm
IChvd25lclNWR0VsZW1lbnQoKSkgewotICAgICAgICBvd25lclNWR0VsZW1lbnQoKS0+dGltZVNj
aGVkdWxlcigpLT5hZGRUaW1lcih0aGlzLCBvZmZzZXQpOwotICAgICAgICBvd25lclNWR0VsZW1l
bnQoKS0+dGltZVNjaGVkdWxlcigpLT5zdGFydEFuaW1hdGlvbnMoKTsKLSAgICAgICAgY29ubmVj
dFRpbWVyKCk7CisgICAgaWYgKGFuaW1hdGlvbk1vZGUoKSA9PSBWYWx1ZXNBbmltYXRpb24pIHsK
KyAgICAgICAgU3RyaW5nIGZyb207CisgICAgICAgIFN0cmluZyB0bzsKKyAgICAgICAgZmxvYXQg
ZWZmZWN0aXZlUGVyY2VudDsKKyAgICAgICAgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlv
bihwZXJjZW50LCBlZmZlY3RpdmVQZXJjZW50LCBmcm9tLCB0byk7CisgICAgICAgIGlmIChmcm9t
ICE9IG1fbGFzdFZhbHVlc0FuaW1hdGlvbkZyb20gfHwgdG8gIT0gbV9sYXN0VmFsdWVzQW5pbWF0
aW9uVG8gKSB7CisgICAgICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGZyb20sIHRvKTsKKyAgICAgICAgICAgIGlmICghbV9hbmltYXRpb25WYWxpZCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2xhc3RWYWx1ZXNBbmltYXRp
b25Gcm9tID0gZnJvbTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVBbmltYXRlZFZhbHVlKGVm
ZmVjdGl2ZVBlcmNlbnQpOwogICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHVwZGF0ZUFuaW1hdGVkVmFsdWUocGVyY2VudCk7CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHJlcGVhdCk7CiB9CiAKLWJvb2wgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6ZW5kRWxlbWVudChFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dW5hcHBseUFuaW1hdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGJlIHN5bmNocm9ub3VzPwotICAgIHJldHVybiBlbmRFbGVtZW50QXQoMCwgZWMpOwor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBh
bmltYXRpb25zIG9uIHRoZSBzYW1lIHRhcmdldCBvciBpZiAKKyAgICAvLyB0aGUgdGltaW5nIGF0
dGlidXRlcyBjaGFuZ2UgZHVyaW5nIGFuaW1hdGlvbiBkdWUgdG8gRE9NIG1hbmlwdWxhdGlvbi4K
KyAgICBpZiAobV9zYXZlZEJhc2VWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fc2F2ZWRCYXNlVmFsdWUpOworICAg
IG1fc2F2ZWRCYXNlVmFsdWUgPSBTdHJpbmcoKTsKIH0KIAotYm9vbCBTVkdBbmltYXRpb25FbGVt
ZW50OjplbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCgpCiB7Ci0gICAgaWYgKG9m
ZnNldCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWNvbm5lY3RlZFRvVGlt
ZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYW5pbWF0aW9uRW5kID0gb3duZXJT
VkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+ZWxhcHNlZCgpICsgb2Zmc2V0OwotICAgIHJl
dHVybiB0cnVlOworICAgIG1fc2F2ZWRCYXNlVmFsdWUgPSBTdHJpbmcoKTsKIH0KIAogfQpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBA
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMjUsNTggKzI2LDIwIEBACiAjZGVmaW5lIFNWR0FuaW1hdGlvbkVsZW1lbnRfaAogI2lmIEVO
QUJMRShTVkcpCiAKKyNpbmNsdWRlICJDdXJ2ZURhdGEuaCIKICNpbmNsdWRlICJFbGVtZW50VGlt
ZUNvbnRyb2wuaCIKKyNpbmNsdWRlICJTTUlMVGltZS5oIgorI2luY2x1ZGUgIlNNSUxUaW1pbmdF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIgogI2lu
Y2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJTVkdUZXN0cy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0ZW5lcjsKKyAg
ICBjbGFzcyBUaW1lQ29udGFpbmVyOwogCi0gICAgZW51bSBFRmlsbE1vZGUgewotICAgICAgICBG
SUxMX1JFTU9WRSA9IDAsCi0gICAgICAgIEZJTExfRlJFRVpFCi0gICAgfTsKLQotICAgIGVudW0g
RUFkZGl0aXZlTW9kZSB7Ci0gICAgICAgIEFERElUSVZFX1JFUExBQ0UgPSAwLAotICAgICAgICBB
RERJVElWRV9TVU0KLSAgICB9OwotCi0gICAgZW51bSBFQWNjdW11bGF0ZU1vZGUgewotICAgICAg
ICBBQ0NVTVVMQVRFX05PTkUgPSAwLAotICAgICAgICBBQ0NVTVVMQVRFX1NVTQotICAgIH07Ci0K
LSAgICBlbnVtIEVDYWxjTW9kZSB7Ci0gICAgICAgIENBTENNT0RFX0RJU0NSRVRFID0gMCwKLSAg
ICAgICAgQ0FMQ01PREVfTElORUFSLAotICAgICAgICBDQUxDTU9ERV9QQUNFRCwKLSAgICAgICAg
Q0FMQ01PREVfU1BMSU5FCi0gICAgfTsKLQotICAgIGVudW0gRVJlc3RhcnQgewotICAgICAgICBS
RVNUQVJUX0FMV0FZUyA9IDAsCi0gICAgICAgIFJFU1RBUlRfV0hFTk5PVEFDVElWRSwKLSAgICAg
ICAgUkVTVEFSVF9ORVZFUgotICAgIH07Ci0KLSAgICBlbnVtIEVBdHRyaWJ1dGVUeXBlIHsKLSAg
ICAgICAgQVRUUklCVVRFVFlQRV9DU1MgPSAwLAotICAgICAgICBBVFRSSUJVVEVUWVBFX1hNTCwK
LSAgICAgICAgQVRUUklCVVRFVFlQRV9BVVRPCi0gICAgfTsKLQotICAgIC8vIGludGVybmFsCi0g
ICAgZW51bSBFQW5pbWF0aW9uTW9kZSB7Ci0gICAgICAgIE5PX0FOSU1BVElPTiA9IDAsCi0gICAg
ICAgIFRPX0FOSU1BVElPTiwKLSAgICAgICAgQllfQU5JTUFUSU9OLAotICAgICAgICBWQUxVRVNf
QU5JTUFUSU9OLAotICAgICAgICBGUk9NX1RPX0FOSU1BVElPTiwKLSAgICAgICAgRlJPTV9CWV9B
TklNQVRJT04KLSAgICB9OwotCi0gICAgY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudCA6IHB1Ymxp
YyBTVkdFbGVtZW50LAorICAgIGNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQgOiBwdWJsaWMgU01J
TFRpbWluZ0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBFbGVtZW50VGltZUNvbnRyb2wKQEAgLTg0LDEyMyArNDcsNzMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHQW5pbWF0aW9u
RWxlbWVudCgpOwotCi0gICAgICAgIC8vICdTVkdBbmltYXRpb25FbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0OwotICAgICAgICAKLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wg
aXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVz
ZXJ2ZURlY2xzKTsKIAotICAgICAgICBmbG9hdCBnZXRFbmRUaW1lKCkgY29uc3Q7CisgICAgICAg
IC8vIFNWR0FuaW1hdGlvbkVsZW1lbnQKICAgICAgICAgZmxvYXQgZ2V0U3RhcnRUaW1lKCkgY29u
c3Q7CiAgICAgICAgIGZsb2F0IGdldEN1cnJlbnRUaW1lKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0
IGdldFNpbXBsZUR1cmF0aW9uKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpOwot
ICAgICAgICBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUg
ZWxhcHNlZFNlY29uZHMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVl
VG9FbGVtZW50KCk7Ci0KLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKLQot
ICAgICAgICBib29sIGNvbm5lY3RlZFRvVGltZXIoKSBjb25zdDsKLQotICAgICAgICBib29sIGlz
RnJvemVuKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0OwotICAgICAg
ICBib29sIGlzQWNjdW11bGF0ZWQoKSBjb25zdDsKLQotICAgICAgICBkb3VibGUgcmVwZWF0aW9u
cygpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBpc0luZGVmaW5pdGUoZG91YmxlIHZhbHVl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEVsZW1lbnRUaW1lQ29udHJvbAogICAgICAgICB2aXJ0
dWFsIGJvb2wgYmVnaW5FbGVtZW50KEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdmlydHVhbCBi
b29sIGJlZ2luRWxlbWVudEF0KGZsb2F0IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZW5kRWxlbWVudChFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBlbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
ICAgIAogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxlIFNWR0VsZW1lbnQqIG1fdGFy
Z2V0RWxlbWVudDsKK3Byb3RlY3RlZDoKICAgICAgICAgCi0gICAgICAgIEVBbmltYXRpb25Nb2Rl
IGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25zdDsKKyAgICAgICAgZW51bSBDYWxjTW9kZSB7IENh
bGNNb2RlRGlzY3JldGUsIENhbGNNb2RlTGluZWFyLCBDYWxjTW9kZVBhY2VkLCBDYWxjTW9kZVNw
bGluZSB9OworICAgICAgICBDYWxjTW9kZSBjYWxjTW9kZSgpIGNvbnN0OwogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIGRvdWJsZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgPSBB
VFRSSUJVVEVUWVBFX0FVVE8pOworICAgICAgICBlbnVtIEF0dHJpYnV0ZVR5cGUgeyBBdHRyaWJ1
dGVUeXBlQ1NTLCBBdHRyaWJ1dGVUeXBlWE1MLCBBdHRyaWJ1dGVUeXBlQXV0byB9OworICAgICAg
ICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IFN0cmluZyB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICAg
ICAgU3RyaW5nIHRvVmFsdWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGJ5VmFsdWUoKSBjb25z
dDsKKyAgICAgICAgU3RyaW5nIGZyb21WYWx1ZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgYXR0
cmlidXRlTmFtZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdm9pZCBjb25uZWN0VGltZXIo
KTsKLSAgICAgICAgdm9pZCBkaXNjb25uZWN0VGltZXIoKTsKKyAgICAgICAgZW51bSBBbmltYXRp
b25Nb2RlIHsgTm9BbmltYXRpb24sIFRvQW5pbWF0aW9uLCBCeUFuaW1hdGlvbiwgVmFsdWVzQW5p
bWF0aW9uLCBGcm9tVG9BbmltYXRpb24sIEZyb21CeUFuaW1hdGlvbiB9OworICAgICAgICBBbmlt
YXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUoKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIGZsb2F0
IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHZhbHVlSW5k
ZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2VudGFnZSwg
dW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCk7Ci0gICAgICAgIAot
ICAgICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdChmbG9hdCB0
aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFz
dCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OwogICAgICAg
ICAKLSAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSBlbGFwc2VkU2Vjb25kcywg
ZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUJh
c2VWYWx1ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVk
VmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgdGFyZ2V0QXR0cmlidXRlSXNDU1Mo
KSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZh
bHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJ
bmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCkgPSAwOworICAgICAgICBib29sIGlzQWRkaXRpdmUoKSBjb25zdDsKKyAgICAgICAgYm9vbCBp
c0FjY3VtdWxhdGVkKCkgY29uc3Q7CisgICAgCisgICAgICAgIC8vIGZyb20gU01JTFRpbWluZ0Vs
ZW1lbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQg
cmVwZWF0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuYXBwbHlBbmltYXRpb24oKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyB2b2lkIHBhcnNlS2V5TnVtYmVycyhWZWN0b3I8ZmxvYXQ+JiBrZXlOdW1iZXJzLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VCZWdpbk9yRW5k
VmFsdWUoZG91YmxlJiBudW1iZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCiAgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0ZPUldBUkRfREVDTEFSQVRJT05TKFNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQsIGJvb2wsIEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQpCi0KLSAgICAgICAgYm9vbCBtX2Nvbm5lY3RlZFRvVGltZXIgOiAxOworcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25z
dCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpID0gMDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkg
PSAwOwogICAgICAgICAKLSAgICAgICAgZG91YmxlIG1fY3VycmVudFRpbWU7Ci0gICAgICAgIGRv
dWJsZSBtX3NpbXBsZUR1cmF0aW9uOwotCi0gICAgICAgIC8vIFNoYXJlZCBhbmltYXRpb24gcHJv
cGVydGllcwotICAgICAgICB1bnNpZ25lZCBtX2ZpbGwgOiAxOyAvLyBFRmlsbE1vZGUgbV9maWxs
Ci0gICAgICAgIHVuc2lnbmVkIG1fcmVzdGFydCA6IDI7IC8vIEVSZXN0YXJ0Ci0gICAgICAgIHVu
c2lnbmVkIG1fY2FsY01vZGUgOiAyOyAvLyBFQ2FsY01vZGUKLSAgICAgICAgdW5zaWduZWQgbV9h
ZGRpdGl2ZSA6IDE7IC8vIEVBZGRpdGl2ZU1vZGUKLSAgICAgICAgdW5zaWduZWQgbV9hY2N1bXVs
YXRlIDogMTsgLy8gRUFjY3VtdWxhdGVNb2RlCi0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
VHlwZSA6IDI7IC8vIEVBdHRyaWJ1dGVUeXBlCi0gICAgICAgIAotICAgICAgICBTdHJpbmcgbV90
bzsKLSAgICAgICAgU3RyaW5nIG1fYnk7Ci0gICAgICAgIFN0cmluZyBtX2Zyb207Ci0gICAgICAg
IFN0cmluZyBtX2hyZWY7Ci0gICAgICAgIFN0cmluZyBtX3JlcGVhdER1cjsKLSAgICAgICAgU3Ry
aW5nIG1fYXR0cmlidXRlTmFtZTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBtX2Jhc2VWYWx1
ZTsKLSAgICAgICAgU3RyaW5nIG1fYW5pbWF0ZWRWYWx1ZTsKLQotICAgICAgICBkb3VibGUgbV9t
YXg7Ci0gICAgICAgIGRvdWJsZSBtX21pbjsKLSAgICAgICAgZG91YmxlIG1fZW5kOwotICAgICAg
ICBkb3VibGUgbV9iZWdpbjsKLQotICAgICAgICBkb3VibGUgbV9yZXBldGl0aW9uczsKLSAgICAg
ICAgZG91YmxlIG1fcmVwZWF0Q291bnQ7CisgICAgICAgIHZvaWQgY3VycmVudFZhbHVlc0ZvclZh
bHVlc0FuaW1hdGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3Ry
aW5nJiBmcm9tLCBTdHJpbmcmIHRvKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICAgICAgU3RyaW5n
IG1fc2F2ZWRCYXNlVmFsdWU7CisgICAgICAgIGJvb2wgbV9hbmltYXRpb25WYWxpZDsKIAogICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBtX3ZhbHVlczsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2tl
eVRpbWVzOwotICAgICAgICAKLSAgICAgICAgc3RydWN0IEtleVNwbGluZSB7Ci0gICAgICAgICAg
ICBGbG9hdFBvaW50IGNvbnRyb2wxOwotICAgICAgICAgICAgRmxvYXRQb2ludCBjb250cm9sMjsK
LSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBtX2FuaW1hdGlvbkJlZ2luOwot
ICAgICAgICBkb3VibGUgbV9hbmltYXRpb25FbmQ7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8
S2V5U3BsaW5lPiBtX2tleVNwbGluZXM7CisgICAgICAgIFZlY3RvcjxDdXJ2ZURhdGE+IG1fa2V5
U3BsaW5lczsKKyAgICAgICAgU3RyaW5nIG1fbGFzdFZhbHVlc0FuaW1hdGlvbkZyb207CisgICAg
ICAgIFN0cmluZyBtX2xhc3RWYWx1ZXNBbmltYXRpb25UbzsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR0FuaW1h
dGlvbkVsZW1lbnRfaAotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU01JTFRp
bWVDb250YWluZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJranNf
cHJveHkuaCIKIApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
c3RhcnRBbmltYXRpCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pICAgIAogICAgIEhhc2hTZXQ8
U1ZHU1ZHRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVDb250YWluZXJzLmVuZCgpOwog
ICAgIGZvciAoSGFzaFNldDxTVkdTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ciA9IG1fdGltZUNv
bnRhaW5lcnMuYmVnaW4oKTsgaXRyICE9IGVuZDsgKytpdHIpCi0gICAgICAgICgqaXRyKS0+dGlt
ZVNjaGVkdWxlcigpLT5zdGFydEFuaW1hdGlvbnMoKTsKKyAgICAgICAgKCppdHIpLT50aW1lQ29u
dGFpbmVyKCktPmJlZ2luKCk7CiAjZW5kaWYKIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NywxMiArODcsMTIgQEAgdm9pZCBTVkdFbGVtZW50OjpzZXRYbWxiYXNlKGNvbnN0
IFN0cmluZwogCiBTVkdTVkdFbGVtZW50KiBTVkdFbGVtZW50Ojpvd25lclNWR0VsZW1lbnQoKSBj
b25zdAogewotICAgIE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7CisgICAgTm9kZSogbiA9IGlzU2hh
ZG93Tm9kZSgpID8gY29uc3RfY2FzdDxTVkdFbGVtZW50Kj4odGhpcyktPnNoYWRvd1BhcmVudE5v
ZGUoKSA6IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAobikgewogICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTVkdTVkdFbGVtZW50Kj4obik7CiAKLSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKKyAg
ICAgICAgbiA9IG4tPmlzU2hhZG93Tm9kZSgpID8gbi0+c2hhZG93UGFyZW50Tm9kZSgpIDogbi0+
cGFyZW50Tm9kZSgpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJTVkdWaWV3U3BlYy5o
IgogI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU01JTFRpbWVDb250
YWluZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02OCwyMCArNjgsMTkgQEAgU1ZH
U1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaQogICAgICwgbV93aWR0aCh0aGlz
LCBMZW5ndGhNb2RlV2lkdGgpCiAgICAgLCBtX2hlaWdodCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0
KQogICAgICwgbV91c2VDdXJyZW50VmlldyhmYWxzZSkKLSAgICAsIG1fdGltZVNjaGVkdWxlcihu
ZXcgVGltZVNjaGVkdWxlcihkb2MpKQorICAgICwgbV90aW1lQ29udGFpbmVyKG5ldyBTTUlMVGlt
ZUNvbnRhaW5lcikKICAgICAsIG1fdmlld1NwZWMoMCkKICAgICAsIG1fY29udGFpbmVyU2l6ZSgz
MDAsIDE1MCkKICAgICAsIG1faGFzU2V0Q29udGFpbmVyU2l6ZShmYWxzZSkKIHsKICAgICBzZXRX
aWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCAiMTAwJSIpKTsK
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQs
ICIxMDAlIikpOworICAgIGRvYy0+cmVnaXN0ZXJGb3JDYWNoZUNhbGxiYWNrcyh0aGlzKTsKIH0K
IAogU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogewotICAgIGRlbGV0ZSBtX3RpbWVT
Y2hlZHVsZXI7Ci0gICAgbV90aW1lU2NoZWR1bGVyID0gMDsKLQorICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJGb3JDYWNoZUNhbGxiYWNrcyh0aGlzKTsKICAgICAvLyBUaGVyZSBhcmUgY2FzZXMg
d2hlcmUgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGlzIG5vdCBjYWxsZWQuCiAgICAgLy8gc2VlIENv
bnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuLCBjYWxsZWQgYnkgaXQncyBkZXN0cnVjdG9y
LgogICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlVGltZUNvbnRh
aW5lcih0aGlzKTsKQEAgLTQ1NCwyNCArNDUzLDI0IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgKIAogdm9pZCBTVkdTVkdFbGVtZW50OjpwYXVzZUFuaW1hdGlvbnMo
KQogewotICAgIGlmICghbV90aW1lU2NoZWR1bGVyLT5hbmltYXRpb25zUGF1c2VkKCkpCi0gICAg
ICAgIG1fdGltZVNjaGVkdWxlci0+dG9nZ2xlQW5pbWF0aW9ucygpOworICAgIGlmICghbV90aW1l
Q29udGFpbmVyLT5pc1BhdXNlZCgpKQorICAgICAgICBtX3RpbWVDb250YWluZXItPnBhdXNlKCk7
CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6dW5wYXVzZUFuaW1hdGlvbnMoKQogewotICAgIGlm
IChtX3RpbWVTY2hlZHVsZXItPmFuaW1hdGlvbnNQYXVzZWQoKSkKLSAgICAgICAgbV90aW1lU2No
ZWR1bGVyLT50b2dnbGVBbmltYXRpb25zKCk7CisgICAgaWYgKG1fdGltZUNvbnRhaW5lci0+aXNQ
YXVzZWQoKSkKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5yZXN1bWUoKTsKIH0KIAogYm9vbCBT
VkdTVkdFbGVtZW50OjphbmltYXRpb25zUGF1c2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90
aW1lU2NoZWR1bGVyLT5hbmltYXRpb25zUGF1c2VkKCk7CisgICAgcmV0dXJuIG1fdGltZUNvbnRh
aW5lci0+aXNQYXVzZWQoKTsKIH0KIAogZmxvYXQgU1ZHU1ZHRWxlbWVudDo6Z2V0Q3VycmVudFRp
bWUoKSBjb25zdAogewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdGltZVNj
aGVkdWxlci0+ZWxhcHNlZCgpKTsKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdCht
X3RpbWVDb250YWluZXItPmVsYXBzZWQoKS52YWx1ZSgpKTsKIH0KIAogdm9pZCBTVkdTVkdFbGVt
ZW50OjpzZXRDdXJyZW50VGltZShmbG9hdCAvKiBzZWNvbmRzICovKQpAQCAtNTMwLDYgKzUyOSwx
NiBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmluaGVyaXRWaWV3QXR0cmlidXRlCiAgICAgICAgIGN1
cnJlbnRWaWV3KCktPnNldFpvb21BbmRQYW4odmlld0VsZW1lbnQtPnpvb21BbmRQYW4oKSk7CiAg
ICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CisgICAgCit2b2lkIFNWR1NW
R0VsZW1lbnQ6OndpbGxTYXZlVG9DYWNoZSgpCit7CisgICAgcGF1c2VBbmltYXRpb25zKCk7Cit9
CisKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6d2lsbFJlc3RvcmVGcm9tQ2FjaGUoKQoreworICAgIHVu
cGF1c2VBbmltYXRpb25zKCk7Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkocmV2aXNp
b24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBjbGFzcyBTVkdUcmFuc2Zv
cm07CiAgICAgY2xhc3MgU1ZHVmlld1NwZWM7CiAgICAgY2xhc3MgU1ZHVmlld0VsZW1lbnQ7Ci0g
ICAgY2xhc3MgVGltZVNjaGVkdWxlcjsKKyAgICBjbGFzcyBTTUlMVGltZUNvbnRhaW5lcjsKICAg
ICBjbGFzcyBTVkdTVkdFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTg3LDcgKzg3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50VHJhbnNsYXRlKCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50Jik7
CiAgICAgICAgIAotICAgICAgICBUaW1lU2NoZWR1bGVyKiB0aW1lU2NoZWR1bGVyKCkgeyByZXR1
cm4gbV90aW1lU2NoZWR1bGVyOyB9CisgICAgICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAgICAgICB2b2lkIHVucGF1c2VB
bmltYXRpb25zKCk7CkBAIC0xNTUsOSArMTU1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdTVkdFbGVtZW50LCBTVkdMZW5n
dGgsIFNWR0xlbmd0aCwgWSwgeSkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCwgU1ZHTGVuZ3RoLCBXaWR0aCwgd2lkdGgpCiAg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdTVkdFbGVtZW50LCBTVkdM
ZW5ndGgsIFNWR0xlbmd0aCwgSGVpZ2h0LCBoZWlnaHQpCisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNhdmVUb0NhY2hlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVz
dG9yZUZyb21DYWNoZSgpOwogCiAgICAgICAgIGJvb2wgbV91c2VDdXJyZW50VmlldzsKLSAgICAg
ICAgVGltZVNjaGVkdWxlciogbV90aW1lU2NoZWR1bGVyOworICAgICAgICBSZWZQdHI8U01JTFRp
bWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKICAgICAgICAgRmxvYXRQb2ludCBtX3RyYW5z
bGF0aW9uOwogICAgICAgICBtdXRhYmxlIE93blB0cjxTVkdWaWV3U3BlYz4gbV92aWV3U3BlYzsK
ICAgICAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdT
ZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNw
cAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdTZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVGltZVNj
aGVkdWxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCisvLyBGSVhNRTogVGhpcyBjbGFzcyBuZWVkcyB0byBkaWUuIFNWR0FuaW1h
dGVFbGVtZW50IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW5zdGVhZC4KIAogU1ZHU2V0RWxlbWVu
dDo6U1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCkBAIC0zOSwxMyAr
NDAsMjMgQEAgU1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQoKQogewogfQogCi1ib29sIFNW
R1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRp
bWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkK
K3ZvaWQgU1ZHU2V0RWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVk
IHJlcGVhdCkKIHsKLSAgICBtX2FuaW1hdGVkVmFsdWUgPSBtX3RvOwotICAgIHJldHVybiB0cnVl
OworICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUodG9WYWx1ZSgpKTsKK30KKyAg
ICAKK2Jvb2wgU1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIAoreyAKKyAgICBtX2FuaW1hdGVkVmFsdWUg
PSB0b1N0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK2Jvb2wgU1ZHU2V0RWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiBieVN0cmluZykgCit7IAorICAgIHJldHVybiBmYWxzZTsgCiB9CiAKLWJvb2wgU1ZH
U2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNp
Z25lZCB2YWx1ZUluZGV4KQorYm9vbCBTVkdTZXRFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVl
KGZsb2F0IHBlcmNlbnRhZ2UpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2V0RWxl
bWVudC5oCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50
YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVu
c2lnbmVkIHZhbHVlSW5kZXgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
Zyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICAgICAgdmly
dHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0
KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBtX3NhdmVkVG87CisgICAgICAgIFN0
cmluZyBtX2FuaW1hdGVkVmFsdWU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR1RpbWVyLmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdUaW1lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAgIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICAgIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiU1ZHVGltZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlQ29sb3JFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdUaW1lcjo6U1ZH
VGltZXIoVGltZVNjaGVkdWxlciogc2NoZWR1bGVyLCBkb3VibGUgaW50ZXJ2YWwsIGJvb2wgc2lu
Z2xlU2hvdCkKLSAgICA6IFRpbWVyPFRpbWVTY2hlZHVsZXI+KHNjaGVkdWxlciwgJlRpbWVTY2hl
ZHVsZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX3NjaGVkdWxlcihzY2hlZHVsZXIpCi0gICAgLCBt
X2ludGVydmFsKGludGVydmFsKQotICAgICwgbV9zaW5nbGVTaG90KHNpbmdsZVNob3QpCi17Ci19
Ci0KLXZvaWQgU1ZHVGltZXI6OnN0YXJ0KCkKLXsKLSAgICBpZiAobV9zaW5nbGVTaG90KQotICAg
ICAgICBzdGFydE9uZVNob3QobV9pbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICBzdGFydFJl
cGVhdGluZyhtX2ludGVydmFsKTsKLX0KLQotU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCBT
VkdUaW1lcjo6YW5pbWF0aW9uc0J5RWxlbWVudChkb3VibGUgZWxhcHNlZFNlY29uZHMpCi17Ci0g
ICAgLy8gQnVpbGQgYSBsaXN0IG9mIGFsbCBhbmltYXRpb25zIHdoaWNoIGFwcGx5IHRvIGVhY2gg
ZWxlbWVudAotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBieSBhbmlt
YXRpb24gcHJpb3JpdHkKLSAgICBUYXJnZXRBbmltYXRpb25NYXAgdGFyZ2V0TWFwOwotI2lmIEVO
QUJMRShTVkdfQU5JTUFUSU9OKQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR05v
dGlmeVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ub3RpZnlTZXQuZW5kKCk7Ci0gICAgZm9y
IChTVkdOb3RpZnlTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub3RpZnlTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlv
biA9ICppdDsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRp
c2FibGVkIGVsZW1lbnQgd2l0aCBmaWxsPSJmcmVlemUiLAotICAgICAgICAvLyB3ZSBoYXZlIHRv
IHRha2UgaXQgaW50byBhY2NvdW50IGZvciBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4KLSAgICAgICAg
aWYgKCFtX2VuYWJsZWROb3RpZnlTZXQuY29udGFpbnMoYW5pbWF0aW9uKSkgewotICAgICAgICAg
ICAgaWYgKCFhbmltYXRpb24tPmlzRnJvemVuKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAoZWxhcHNlZFNlY29uZHMgPD0gKGFuaW1hdGlvbi0+Z2V0U3RhcnRU
aW1lKCkgKyBhbmltYXRpb24tPmdldFNpbXBsZUR1cmF0aW9uKGVjKSkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNWR0VsZW1lbnQqIHRh
cmdldCA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KGFuaW1hdGlvbi0+dGFyZ2V0RWxlbWVudCgp
KTsKLSAgICAgICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjppdGVyYXRvciBpID0gdGFyZ2V0TWFwLmZp
bmQodGFyZ2V0KTsKLSAgICAgICAgaWYgKGkgIT0gdGFyZ2V0TWFwLmVuZCgpKQotICAgICAgICAg
ICAgaS0+c2Vjb25kLmFwcGVuZChhbmltYXRpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50Kj4gbGlzdDsKLSAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICB0YXJnZXRNYXAuc2V0KHRhcmdldCwgbGlz
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gdGFyZ2V0TWFwOwotfQot
Ci0vLyBGSVhNRTogVGhpcyBmdW50aW9uIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgcGFydCBvZiB0
aGUgQW5pbWF0aW9uQ29tcG9zaXRvcgotdm9pZCBTVkdUaW1lcjo6YXBwbHlBbmltYXRpb25zKGRv
dWJsZSBlbGFwc2VkU2Vjb25kcywgY29uc3QgU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCYg
dGFyZ2V0TWFwKQoteyAgICAKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAgICBUYXJnZXRB
bmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEl0ZXJhdG9yID0gdGFyZ2V0TWFwLmJl
Z2luKCk7Ci0gICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciB0ZW5kID0gdGFy
Z2V0TWFwLmVuZCgpOwotICAgIGZvciAoOyB0YXJnZXRJdGVyYXRvciAhPSB0ZW5kOyArK3Rhcmdl
dEl0ZXJhdG9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN0aWxsIG5vdCAxMDAlIGNv
cnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgotICAgICAgICAvLyAxLiBXYWxrIGJhY2t3YXJkcyB0
aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVudGlsIGEgcmVwbGFjZSAoIWlzQWRkaXRpdmUoKSkg
aXMgZm91bmQKLSAgICAgICAgLy8gLS0gVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IHBvc3NpYmxl
IHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBkZXBlbmRlbnQgdmFsdWVzIChzdWNo
IGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgLy8gMi4gU2V0IHRo
ZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJlcGxhY2UpIGFzIHRoZSBuZXcgYW5pbVZhbAotICAg
ICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxlZCBhbmltYXRpb24gaW4gdHVybiwgdG8gaGF2ZSBp
dCBhcHBseSBpdHMgY2hhbmdlcwotICAgICAgICAvLyA0LiBBZnRlciBidWlsZGluZyBhIG5ldyBh
bmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1lbnQuCi0gICAgICAgIAotICAgICAgICAvLyBDdXJy
ZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmltVmFsIG9uIHRoZSBlbGVtZW50IGFzICJ0ZW1wb3Jh
cnkgc3RvcmFnZSIKLSAgICAgICAgLy8gYW5kIGFic3RyYWN0IHRoZSBnZXR0aW5nL3NldHRpbmcg
b2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUgU1ZHQW5pbWF0ZSogY2xhc3NlcwotICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgY291bnQgPSB0YXJnZXRJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbiA9IHRhcmdldEl0ZXJhdG9yLT5zZWNv
bmRbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5pc1ZhbGlk
QW5pbWF0aW9uKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghYW5pbWF0aW9uLT51cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxl
bWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWFuaW1hdGlvbi0+dXBkYXRlQW5pbWF0ZWRWYWx1ZUZvckVsYXBzZWRTZWNvbmRz
KGVsYXBzZWRTZWNvbmRzKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgYW5pbWF0aW9uLT5hcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgc2Vjb25kIHBhc3MgdGhyb3Vn
aCB0aGUgbWFwIHRvIGF2b2lkIG11bHRpcGxlIHNldENoYW5nZWQgY2FsbHMgb24gdGhlIHNhbWUg
ZWxlbWVudC4KLSAgICBmb3IgKHRhcmdldEl0ZXJhdG9yID0gdGFyZ2V0TWFwLmJlZ2luKCk7IHRh
cmdldEl0ZXJhdG9yICE9IHRlbmQ7ICsrdGFyZ2V0SXRlcmF0b3IpIHsKLSAgICAgICAgU1ZHRWxl
bWVudCoga2V5ID0gdGFyZ2V0SXRlcmF0b3ItPmZpcnN0OwotICAgICAgICBpZiAoa2V5ICYmIGtl
eS0+aXNTdHlsZWQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
PihrZXkpLT5zZXRDaGFuZ2VkKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgU1ZHVGltZXI6
Om5vdGlmeUFsbCgpCi17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgaWYgKG1fZW5h
YmxlZE5vdGlmeVNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZpcnN0
IGJ1aWxkIGEgbGlzdCBvZiBhbmltYXRpb24gZWxlbWVudHMgcGVyIHRhcmdldCBlbGVtZW50Ci0g
ICAgZG91YmxlIGVsYXBzZWRTZWNvbmRzID0gbV9zY2hlZHVsZXItPmVsYXBzZWQoKSAqIDEwMDAu
MDsgLy8gVGFrZSB0aW1lIG5vdy4KLSAgICBUYXJnZXRBbmltYXRpb25NYXAgdGFyZ2V0TWFwID0g
YW5pbWF0aW9uc0J5RWxlbWVudChlbGFwc2VkU2Vjb25kcyk7Ci0gICAgCi0gICAgLy8gVGhlbiBj
b21wb3NpdGUgdGhvc2UgYW5pbWF0aW9ucyBkb3duIHRvIGZpbmFsIHZhbHVlcyBhbmQgYXBwbHkK
LSAgICBhcHBseUFuaW1hdGlvbnMoZWxhcHNlZFNlY29uZHMsIHRhcmdldE1hcCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBTVkdUaW1lcjo6YWRkTm90aWZ5KFNWR0FuaW1hdGlvbkVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgZW5hYmxlZCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAgICBtX25v
dGlmeVNldC5hZGQoZWxlbWVudCk7Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIG1fZW5hYmxl
ZE5vdGlmeVNldC5hZGQoZWxlbWVudCk7Ci0gICAgZWxzZQotICAgICAgICBtX2VuYWJsZWROb3Rp
ZnlTZXQucmVtb3ZlKGVsZW1lbnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgU1ZHVGltZXI6OnJlbW92
ZU5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50ICplbGVtZW50KQotewotI2lmIEVOQUJMRShTVkdf
QU5JTUFUSU9OKQotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Uga2VlcCBhIHBvaW50ZXIgdG8gdGhl
IGVsZW1lbnQgZm9yZXZlciAobWFya2VkIGRpc2FibGVkKT8KLSAgICAvLyBUaGF0IGNhbid0IGJl
IHJpZ2h0IQotCi0gICAgbV9lbmFibGVkTm90aWZ5U2V0LnJlbW92ZShlbGVtZW50KTsKLSAgICBp
ZiAobV9lbmFibGVkTm90aWZ5U2V0LmlzRW1wdHkoKSkKLSAgICAgICAgc3RvcCgpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGltZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdUaW1lci5oCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1Rp
bWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0KLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUg
IlRpbWVTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBTVkdFbGVtZW50OwotY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudDsKLQotdHlwZWRl
ZiBIYXNoU2V0PFNWR0FuaW1hdGlvbkVsZW1lbnQqPiBTVkdOb3RpZnlTZXQ7Ci0KLWNsYXNzIFNW
R1RpbWVyIDogcHJpdmF0ZSBUaW1lcjxUaW1lU2NoZWR1bGVyPgotewotcHVibGljOgotICAgIFNW
R1RpbWVyKFRpbWVTY2hlZHVsZXIqLCBkb3VibGUgaW50ZXJ2YWwsIGJvb2wgc2luZ2xlU2hvdCk7
Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdXNpbmcgVGltZXI8VGltZVNjaGVkdWxlcj46OnN0
b3A7Ci0gICAgdXNpbmcgVGltZXI8VGltZVNjaGVkdWxlcj46OmlzQWN0aXZlOwotCi0gICAgdm9p
ZCBub3RpZnlBbGwoKTsKLSAgICB2b2lkIGFkZE5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50Kiwg
Ym9vbCBlbmFibGVkID0gZmFsc2UpOwotICAgIHZvaWQgcmVtb3ZlTm90aWZ5KFNWR0FuaW1hdGlv
bkVsZW1lbnQqKTsKLQotICAgIHN0YXRpYyBTVkdUaW1lciogZG93bmNhc3QoVGltZXI8VGltZVNj
aGVkdWxlcj4qIHQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1RpbWVyKj4odCk7IH0KLQotcHJp
dmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U1ZHRWxlbWVudCosIFZlY3RvcjxTVkdBbmltYXRp
b25FbGVtZW50Kj4gPiBUYXJnZXRBbmltYXRpb25NYXA7Ci0gICAgVGFyZ2V0QW5pbWF0aW9uTWFw
IGFuaW1hdGlvbnNCeUVsZW1lbnQoZG91YmxlIGVsYXBzZWRUaW1lKTsKLSAgICB2b2lkIGFwcGx5
QW5pbWF0aW9ucyhkb3VibGUgZWxhcHNlZFNlY29uZHMsIGNvbnN0IFNWR1RpbWVyOjpUYXJnZXRB
bmltYXRpb25NYXAmIHRhcmdldE1hcCk7Ci0KLSAgICBUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxl
cjsKLSAgICBkb3VibGUgbV9pbnRlcnZhbDsKLSAgICBib29sIG1fc2luZ2xlU2hvdDsKLQotICAg
IFNWR05vdGlmeVNldCBtX25vdGlmeVNldDsKLSAgICBTVkdOb3RpZnlTZXQgbV9lbmFibGVkTm90
aWZ5U2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0K
LS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0
MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTksMTAgKzExOSw5IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQK
IAogdm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBTVkdF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KICAgICBtX3RhcmdldEVsZW1lbnRJbnN0
YW5jZSA9IDA7CiAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSAwOworICAgIFNWR0VsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpJbmRleDogV2Vi
Q29yZS9zdmcvVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvVGlt
ZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvVGltZVNjaGVk
dWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgot
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAg
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotCi0gICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgotCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiU1ZHVGltZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUgc3RhdGljVGltZXJJbnRlcnZh
bCA9IDAuMDUwOyAvLyA1MCBtcwotCi1UaW1lU2NoZWR1bGVyOjpUaW1lU2NoZWR1bGVyKERvY3Vt
ZW50KiBkb2N1bWVudCkKLSAgICA6IG1fY3JlYXRpb25UaW1lKGN1cnJlbnRUaW1lKCkpCi0gICAg
LCBtX3NhdmVkVGltZSgwKQotICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLXsKLSAgICAvLyBE
b24ndCBzdGFydCB0aGlzIHRpbWVyIHlldC4KLSAgICBtX2ludGVydmFsVGltZXIgPSBuZXcgU1ZH
VGltZXIodGhpcywgc3RhdGljVGltZXJJbnRlcnZhbCwgZmFsc2UpOwotfQotCi1UaW1lU2NoZWR1
bGVyOjp+VGltZVNjaGVkdWxlcigpCi17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fdGltZXJTZXQp
OwotICAgIGRlbGV0ZSBtX2ludGVydmFsVGltZXI7Ci19Ci0KLXZvaWQgVGltZVNjaGVkdWxlcjo6
YWRkVGltZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgbXMpCi17Ci0j
aWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgU1ZHVGltZXIqIHN2Z1RpbWVyID0gbmV3IFNW
R1RpbWVyKHRoaXMsIG1zICogMC4wMDEsIHRydWUpOwotICAgIHN2Z1RpbWVyLT5hZGROb3RpZnko
ZWxlbWVudCwgdHJ1ZSk7Ci0gICAgbV90aW1lclNldC5hZGQoc3ZnVGltZXIpOwotICAgIG1faW50
ZXJ2YWxUaW1lci0+YWRkTm90aWZ5KGVsZW1lbnQsIGZhbHNlKTsKLSNlbmRpZgotfQotCi12b2lk
IFRpbWVTY2hlZHVsZXI6OmNvbm5lY3RJbnRlcnZhbFRpbWVyKFNWR0FuaW1hdGlvbkVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgbV9pbnRlcnZhbFRp
bWVyLT5hZGROb3RpZnkoZWxlbWVudCwgdHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUaW1lU2No
ZWR1bGVyOjpkaXNjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50KiBlbGVt
ZW50KQotewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAgIG1faW50ZXJ2YWxUaW1lci0+
cmVtb3ZlTm90aWZ5KGVsZW1lbnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGltZVNjaGVkdWxlcjo6
c3RhcnRBbmltYXRpb25zKCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKLSAgICBtX2Ny
ZWF0aW9uVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0KLSAgICBTVkdUaW1lclNldDo6aXRlcmF0b3Ig
ZW5kID0gbV90aW1lclNldC5lbmQoKTsKLSAgICBmb3IgKFNWR1RpbWVyU2V0OjppdGVyYXRvciBp
dCA9IG1fdGltZXJTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1Rp
bWVyKiBzdmdUaW1lciA9ICppdDsKLSAgICAgICAgaWYgKHN2Z1RpbWVyICYmICFzdmdUaW1lci0+
aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHN2Z1RpbWVyLT5zdGFydCgpOwotICAgIH0KLSNlbmRp
ZgotfQotCi12b2lkIFRpbWVTY2hlZHVsZXI6OnRvZ2dsZUFuaW1hdGlvbnMoKQotewotI2lmIEVO
QUJMRShTVkdfQU5JTUFUSU9OKQotICAgIGlmIChtX2ludGVydmFsVGltZXItPmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgbV9pbnRlcnZhbFRpbWVyLT5zdG9wKCk7Ci0gICAgICAgIG1fc2F2ZWRUaW1l
ID0gY3VycmVudFRpbWUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zYXZlZFRpbWUg
IT0gMCkgewotICAgICAgICAgICAgbV9jcmVhdGlvblRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1f
c2F2ZWRUaW1lOwotICAgICAgICAgICAgbV9zYXZlZFRpbWUgPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIG1faW50ZXJ2YWxUaW1lci0+c3RhcnQoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotYm9vbCBU
aW1lU2NoZWR1bGVyOjphbmltYXRpb25zUGF1c2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1f
aW50ZXJ2YWxUaW1lci0+aXNBY3RpdmUoKTsKLX0KLQotdm9pZCBUaW1lU2NoZWR1bGVyOjp0aW1l
ckZpcmVkKFRpbWVyPFRpbWVTY2hlZHVsZXI+KiBiYXNlVGltZXIpCi17Ci0jaWYgRU5BQkxFKFNW
R19BTklNQVRJT04pCi0gICAgLy8gR2V0IHRoZSBwb2ludGVyIG5vdywgYmVjYXVzZSBub3RpZnlB
bGwgY291bGQgbWFrZSB0aGUgZG9jdW1lbnQsCi0gICAgLy8gaW5jbHVkaW5nIHRoaXMgVGltZVNj
aGVkdWxlciwgZ28gYXdheS4KLSAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvYyA9IG1fZG9jdW1lbnQ7
Ci0KLSAgICBTVkdUaW1lciogdGltZXIgPSBTVkdUaW1lcjo6ZG93bmNhc3QoYmFzZVRpbWVyKTsK
LQotICAgIHRpbWVyLT5ub3RpZnlBbGwoKTsKLQotICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkg
c2FmZSB0byBsb29rIGF0IG1faW50ZXJ2YWxUaW1lciBub3c/Ci0gICAgLy8gSXNuJ3QgaXQgcG9z
c2libGUgdGhlIFRpbWVTY2hlZHVsZXIgd2FzIGRlbGV0ZWQgYWxyZWFkeT8KLSAgICAvLyBJZiBz
bywgdGltZXIsIG1fdGltZXJTZXQsIGFuZCBtX2ludGVydmFsVGltZXIgaGF2ZSBhbGwKLSAgICAv
LyBiZWVuIGRlbGV0ZWQuIE1heSBuZWVkIHRvIHJlZmVyZW5jZSBjb3VudCB0aGUgVGltZVNjaGVk
dWxlcgotICAgIC8vIHRvIHdvcmsgYXJvdW5kIHRoaXMsIGFuZCByZWYvZGVyZWYgaXQgaW4gdGhp
cyBmdW5jdGlvbi4KLSAgICBpZiAodGltZXIgIT0gbV9pbnRlcnZhbFRpbWVyKSB7Ci0gICAgICAg
IEFTU0VSVCghdGltZXItPmlzQWN0aXZlKCkpOwotICAgICAgICBBU1NFUlQobV90aW1lclNldC5j
b250YWlucyh0aW1lcikpOwotICAgICAgICBtX3RpbWVyU2V0LnJlbW92ZSh0aW1lcik7Ci0gICAg
ICAgIGRlbGV0ZSB0aW1lcjsKLQotICAgICAgICAvLyBUaGUgc2luZ2xlU2hvdCB0aW1lcnMgb2Yg
aWUuIDxhbmltYXRlPiB3aXRoIGJlZ2luPSIzcyIgYXJlIG5vdGlmaWVkCi0gICAgICAgIC8vIGJ5
IHRoZSBwcmV2aW91cyBjYWxsLCBhbmQgbm93IGFsbCBjb25uZWN0aW9ucyB0byB0aGUgaW50ZXJ2
YWwgdGltZXIKLSAgICAgICAgLy8gYXJlIGNyZWF0ZWQgYW5kIG5vdyB3ZSBqdXN0IG5lZWQgdG8g
ZmlyZSB0aGF0IHRpbWVyIChOaWtvKQotICAgICAgICBpZiAoIW1faW50ZXJ2YWxUaW1lci0+aXNB
Y3RpdmUoKSkKLSAgICAgICAgICAgIG1faW50ZXJ2YWxUaW1lci0+c3RhcnQoKTsKLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgYW55ICdkaXJ0eScgc2hhcGVzLgotICAgIGRvYy0+dXBkYXRlUmVuZGVy
aW5nKCk7Ci0jZW5kaWYKLX0KLQotZG91YmxlIFRpbWVTY2hlZHVsZXI6OmVsYXBzZWQoKSBjb25z
dAotewotICAgIHJldHVybiBjdXJyZW50VGltZSgpIC0gbV9jcmVhdGlvblRpbWU7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlCi0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJ
bmRleDogV2ViQ29yZS9zdmcvVGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1RpbWVTY2hlZHVsZXIuaAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9UaW1l
U2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0KLSAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIFRpbWVTY2hlZHVsZXJf
aAotI2RlZmluZSBUaW1lU2NoZWR1bGVyX2gKLSNpZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIERvY3VtZW50
OwotICAgIGNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHVGltZXI7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7Ci0KLSAgICB0eXBlZGVmIEhh
c2hTZXQ8U1ZHVGltZXIqPiBTVkdUaW1lclNldDsKLQotICAgIGNsYXNzIFRpbWVTY2hlZHVsZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgVGltZVNjaGVkdWxlcihEb2N1bWVudCopOwotICAgICAg
ICB+VGltZVNjaGVkdWxlcigpOwotCi0gICAgICAgIC8vIEFkZHMgc2luZ2xlU2hvdCBUaW1lcnMK
LSAgICAgICAgdm9pZCBhZGRUaW1lcihTVkdBbmltYXRpb25FbGVtZW50KiwgdW5zaWduZWQgaW50
IG1zKTsKLQotICAgICAgICAvLyAoRGlzLSlDb25uZWN0cyB0byBpbnRlcnZhbCB0aW1lciB3aXRo
ICdzdGF0aWNUaW1lckludGVydmFsJwotICAgICAgICB2b2lkIGNvbm5lY3RJbnRlcnZhbFRpbWVy
KFNWR0FuaW1hdGlvbkVsZW1lbnQqKTsKLSAgICAgICAgdm9pZCBkaXNjb25uZWN0SW50ZXJ2YWxU
aW1lcihTVkdBbmltYXRpb25FbGVtZW50Kik7Ci0KLSAgICAgICAgdm9pZCBzdGFydEFuaW1hdGlv
bnMoKTsKLSAgICAgICAgdm9pZCB0b2dnbGVBbmltYXRpb25zKCk7Ci0gICAgICAgIGJvb2wgYW5p
bWF0aW9uc1BhdXNlZCgpIGNvbnN0OwotCi0gICAgICAgIC8vIHRpbWUgZWxhcHNlZCBpbiBzZWNv
bmRzIGFmdGVyIGNyZWF0aW9uIG9mIHRoaXMgb2JqZWN0Ci0gICAgICAgIGRvdWJsZSBlbGFwc2Vk
KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU1ZHVGltZXI7
Ci0gICAgICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxUaW1lU2NoZWR1bGVyPiopOwotICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBkb3VibGUgbV9jcmVhdGlvblRpbWU7Ci0gICAgICAgIGRvdWJs
ZSBtX3NhdmVkVGltZTsKLSAgICAgICAgCi0gICAgICAgIFNWR1RpbWVyU2V0IG1fdGltZXJTZXQ7
Ci0gICAgICAgIAotICAgICAgICBTVkdUaW1lciogbV9pbnRlcnZhbFRpbWVyOwotICAgICAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKLSAgICB9OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykK
LSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlNNSUxUaW1lLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitj
b25zdCBkb3VibGUgU01JTFRpbWU6OnVucmVzb2x2ZWRWYWx1ZSA9IERCTF9NQVg7CisvLyBKdXN0
IGEgYmlnIHZhbHVlIHNtYWxsZXIgdGhhbiBEQkxfTUFYLiBPdXIgdGltZXMgYXJlIHJlbGF0aXZl
IHRvIDAsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRoZSBmdWxsIHJhbmdlLgorY29uc3QgZG91Ymxl
IFNNSUxUaW1lOjppbmRlZmluaXRlVmFsdWUgPSBGTFRfTUFYOyAgICAKKworU01JTFRpbWUgV2Vi
Q29yZTo6b3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyAg
ICAgCisgICAgaWYgKGEuaXNVbnJlc29sdmVkKCkgfHwgYi5pc1VucmVzb2x2ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgaWYgKGEuaXNJbmRlZmluaXRl
KCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjppbmRlZmlu
aXRlKCk7CisgICAgcmV0dXJuIGEudmFsdWUoKSArIGIudmFsdWUoKTsKK30KKworU01JTFRpbWUg
V2ViQ29yZTo6b3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikg
eyAgICAgCisgICAgaWYgKGEuaXNVbnJlc29sdmVkKCkgfHwgYi5pc1VucmVzb2x2ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgaWYgKGEuaXNJbmRlZmlu
aXRlKCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjppbmRl
ZmluaXRlKCk7CisgICAgcmV0dXJuIGEudmFsdWUoKSAtIGIudmFsdWUoKTsKK30KKworU01JTFRp
bWUgV2ViQ29yZTo6b3BlcmF0b3IqKGNvbnN0IFNNSUxUaW1lJiBhLCAgY29uc3QgU01JTFRpbWUm
IGIpIHsgICAgIAorICAgIGlmIChhLmlzVW5yZXNvbHZlZCgpIHx8IGIuaXNVbnJlc29sdmVkKCkp
CisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIGlmIChhLnZhbHVl
KCkgPT0gMCB8fCBiLnZhbHVlKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lKDApOwor
ICAgIGlmIChhLmlzSW5kZWZpbml0ZSgpIHx8IGIuaXNJbmRlZmluaXRlKCkpCisgICAgICAgIHJl
dHVybiBTTUlMVGltZTo6aW5kZWZpbml0ZSgpOworICAgIHJldHVybiBhLnZhbHVlKCkgKiBiLnZh
bHVlKCk7Cit9CisjZW5kaWYKKwpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFNNSUxUaW1lX2gKKyNkZWZpbmUgU01JTFRpbWVfaAorCisjaWYgRU5B
QkxFKFNWRykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU01JTFRpbWUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgU01JTFRpbWUoKSA6IG1fdGltZSgwKSB7IH0KKyAgICAgICAg
U01JTFRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsgfQorICAgICAgICBTTUlMVGlt
ZShjb25zdCBTTUlMVGltZSYgbykgOiBtX3RpbWUoby5tX3RpbWUpIHsgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIFNNSUxUaW1lIHVucmVzb2x2ZWQoKSB7IHJldHVybiB1bnJlc29sdmVkVmFs
dWU7IH0KKyAgICAgICAgc3RhdGljIFNNSUxUaW1lIGluZGVmaW5pdGUoKSB7IHJldHVybiBpbmRl
ZmluaXRlVmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIFNNSUxUaW1lJiBvcGVyYXRvcj0oY29u
c3QgU01JTFRpbWUmIG8pIHsgbV90aW1lID0gby5tX3RpbWU7IHJldHVybiAqdGhpczsgfQorICAg
ICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3RpbWU7IH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiBtX3RpbWUgPCBpbmRlZmluaXRl
VmFsdWU7IH0KKyAgICAgICAgYm9vbCBpc0luZGVmaW5pdGUoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWUgPT0gaW5kZWZpbml0ZVZhbHVlOyB9CisgICAgICAgIGJvb2wgaXNVbnJlc29sdmVkKCkgY29u
c3QgeyByZXR1cm4gbV90aW1lID09IHVucmVzb2x2ZWRWYWx1ZTsgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHVucmVzb2x2ZWRWYWx1ZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBpbmRlZmluaXRlVmFsdWU7CisKKyAgICAgICAgZG91
YmxlIG1fdGltZTsKKyAgICB9OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
TUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEuaXNGaW5pdGUoKSAmJiBh
LnZhbHVlKCkgPT0gYi52YWx1ZSgpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGEs
IGIpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25z
dCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpOyB9CisgICAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikg
eyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFs
dWUoKSA+IGIudmFsdWUoKSB8fCBvcGVyYXRvcj09KGEsIGIpOyB9CisgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IGEudmFsdWUoKSA8IGIudmFsdWUoKSB8fCBvcGVyYXRvcj09KGEsIGIpOyB9CisKKyAgICBpbmxp
bmUgU01JTFRpbWUgbWF4KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyBy
ZXR1cm4gc3RkOjptYXgoYS52YWx1ZSgpLCBiLnZhbHVlKCkpOyB9CisgICAgaW5saW5lIFNNSUxU
aW1lIG1pbihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIHN0
ZDo6bWluKGEudmFsdWUoKSwgYi52YWx1ZSgpKTsgfQorICAgIFNNSUxUaW1lIG9wZXJhdG9yKyhj
b25zdCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7CisgICAgU01JTFRpbWUgb3BlcmF0b3It
KGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKyAgICAvLyBTbyBtdWx0aXBseWlu
ZyB0aW1lcyBkb2VzIG5vdCBtYWtlIHRvbyBtdWNoIHNlbnNlIGJ1dCBTTUlMIGRlZmluZXMgaXQg
Zm9yIGR1cmF0aW9uICogcmVwZWF0Q291bnQKKyAgICBTTUlMVGltZSBvcGVyYXRvciooY29uc3Qg
U01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNNSUxUaW1lQ29u
dGFpbmVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlNNSUxUaW1pbmdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3Rk
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdGF0aWMgY29uc3QgZG91YmxlIGFuaW1h
dGlvbkZyYW1lRGVsYXkgPSAwLjAyNTsKKworU01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1lQ29u
dGFpbmVyKCkgCisgICAgOiBtX2JlZ2luVGltZSgwKQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAg
ICAsIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWUoMCkKKyAgICAsIG1fdGltZXIodGhpcywgJlNNSUxU
aW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQoreworfQorCit2b2lkIFNNSUxUaW1lQ29udGFpbmVy
OjpzY2hlZHVsZShTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9uKQoreworICAgIEFTU0VSVChh
bmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAgICBTTUlMVGltZSBuZXh0Rmly
ZVRpbWUgPSBhbmltYXRpb24tPm5leHRQcm9ncmVzc1RpbWUoKTsKKyAgICBpZiAoIW5leHRGaXJl
VGltZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9zY2hlZHVsZWRBbmltYXRp
b25zLmFkZChhbmltYXRpb24pOworICAgIHN0YXJ0VGltZXIoMCk7Cit9CisgICAgCit2b2lkIFNN
SUxUaW1lQ29udGFpbmVyOjp1bnNjaGVkdWxlKFNNSUxUaW1pbmdFbGVtZW50KiBhbmltYXRpb24p
Cit7CisgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOworICAg
IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uKTsKK30KKworU01JTFRpbWUg
U01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQoKSBjb25zdAoreworICAgIGlmICghbV9iZWdpblRp
bWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjdXJyZW50VGltZSgpIC0gbV9iZWdp
blRpbWUgLSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOworfQorICAgIAorYm9vbCBTTUlMVGltZUNv
bnRhaW5lcjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JlZ2luVGltZSAmJiAh
aXNQYXVzZWQoKTsKK30KKyAgICAKK2Jvb2wgU01JTFRpbWVDb250YWluZXI6OmlzUGF1c2VkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXVzZVRpbWU7Cit9CisKK3ZvaWQgU01JTFRpbWVDb250
YWluZXI6OmJlZ2luKCkKK3sKKyAgICBBU1NFUlQoIW1fYmVnaW5UaW1lKTsKKyAgICBtX2JlZ2lu
VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgdXBkYXRlQW5pbWF0aW9ucygwKTsKK30KKwordm9p
ZCBTTUlMVGltZUNvbnRhaW5lcjo6cGF1c2UoKQoreworICAgIGlmICghbV9iZWdpblRpbWUpCisg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIWlzUGF1c2VkKCkpOworICAgIG1fcGF1c2VUaW1l
ID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3RpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTTUlMVGlt
ZUNvbnRhaW5lcjo6cmVzdW1lKCkKK3sKKyAgICBpZiAoIW1fYmVnaW5UaW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKGlzUGF1c2VkKCkpOworICAgIG1fYWNjdW11bGF0ZWRQYXVzZVRp
bWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgIG1fcGF1c2VUaW1lID0gMDsK
KyAgICBzdGFydFRpbWVyKDApOworfQorCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRp
bWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVtRGVsYXkpCit7CisgICAgaWYg
KCFtX2JlZ2luVGltZSB8fCBpc1BhdXNlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKCFmaXJlVGltZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU01J
TFRpbWUgZGVsYXkgPSBtYXgoZmlyZVRpbWUgLSBlbGFwc2VkKCksIG1pbmltdW1EZWxheSk7Cisg
ICAgbV90aW1lci5zdGFydE9uZVNob3QoZGVsYXkudmFsdWUoKSk7Cit9CisgICAgCit2b2lkIFNN
SUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiopCit7
CisgICAgQVNTRVJUKG1fYmVnaW5UaW1lKTsKKyAgICBBU1NFUlQoIW1fcGF1c2VUaW1lKTsKKyAg
ICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNlZCgpOworICAgIHVwZGF0ZUFuaW1hdGlv
bnMoZWxhcHNlZCk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmlt
YXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpCit7CisgICAgLy8gRklYTUU6IFNvcnQgYnkgcHJpb3Jp
dHkgKGJlZ2luIHRpbWUgb3JkZXIsIGRvY3VtZW50IG9yZGVyKSBmb3IgZWFjaCB0YXJnZXQgZWxl
bWVudC4KKyAgICAvLyBIaWdoZXN0IHByaW9yaXR5IHJlcGxhY2UgYW5pbWF0aW9uIG92ZXJyaWRl
cyB0aGUgbG93ZXIgcHJpb3JpdHkgb25lcy4KKworICAgIFNNSUxUaW1lIGVhcmxpZXJzRmlyZVRp
bWUgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIAorICAgIFZlY3RvcjxTTUlMVGltaW5n
RWxlbWVudCo+IHRvQW5pbWF0ZTsKKyAgICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRp
b25zLCB0b0FuaW1hdGUpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b0FuaW1hdGUu
c2l6ZSgpOyArK24pIHsKKyAgICAgICAgLy8gQSBzY2hlZHVsZWQgYW5pbWF0aW9uIG1heSBoYXZl
IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGJ5IHByZXZpb3VzIGFuaW1hdGlvbi4KKyAgICAg
ICAgaWYgKCFtX3NjaGVkdWxlZEFuaW1hdGlvbnMuY29udGFpbnModG9BbmltYXRlW25dKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFNNSUxUaW1pbmdF
bGVtZW50PiBhbmltYXRpb24gPSB0b0FuaW1hdGVbbl07CisgICAgICAgIEFTU0VSVChhbmltYXRp
b24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKworICAgICAgICBpZiAoZWxhcHNlZCA+PSBh
bmltYXRpb24tPm5leHRQcm9ncmVzc1RpbWUoKSkKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+cHJv
Z3Jlc3MoZWxhcHNlZCk7CisKKyAgICAgICAgLy8gUGVyaGFwcyBpdCBkZWNpZGVkIG5vdCB0byBh
bmltYXRlIGFueW1vcmUuCisgICAgICAgIGlmICghbV9zY2hlZHVsZWRBbmltYXRpb25zLmNvbnRh
aW5zKGFuaW1hdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAKKyAgICAg
ICAgU01JTFRpbWUgbmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7
CisgICAgICAgIGlmIChuZXh0RmlyZVRpbWUuaXNGaW5pdGUoKSkKKyAgICAgICAgICAgIGVhcmxp
ZXJzRmlyZVRpbWUgPSBtaW4obmV4dEZpcmVUaW1lLCBlYXJsaWVyc0ZpcmVUaW1lKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9zY2hlZHVsZWRBbmltYXRpb25zLnJlbW92ZShhbmltYXRp
b24uZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBzdGFydFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUs
IGFuaW1hdGlvbkZyYW1lRGVsYXkpOworICAgIAorICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVu
dHNSZW5kZXJpbmcoKTsKK30KKworCit9CkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU01JTFRpbWVD
b250YWluZXJfSAorI2RlZmluZSBTTUlMVGltZUNvbnRhaW5lcl9ICisKKyNpbmNsdWRlICJTTUlM
VGltZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKFNWRykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFNNSUxUaW1pbmdFbGVtZW50OworCisgICAgY2xh
c3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5l
cj4gIHsKKyAgICBwdWJsaWM6CisgICAgICAgIAorICAgICAgICBTTUlMVGltZUNvbnRhaW5lcigp
OworICAgIAorICAgICAgICB2b2lkIHNjaGVkdWxlKFNNSUxUaW1pbmdFbGVtZW50Kik7CisgICAg
ICAgIHZvaWQgdW5zY2hlZHVsZShTTUlMVGltaW5nRWxlbWVudCopOworICAgICAgICAKKyAgICAg
ICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OworCisgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKKyAgICAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
dm9pZCBiZWdpbigpOworICAgICAgICB2b2lkIHBhdXNlKCk7CisgICAgICAgIHZvaWQgcmVzdW1l
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8U01JTFRp
bWVDb250YWluZXI+Kik7CisgICAgICAgIHZvaWQgc3RhcnRUaW1lcihTTUlMVGltZSBmaXJlVGlt
ZSwgU01JTFRpbWUgbWluaW11bURlbGF5ID0gMCk7CisgICAgICAgIHZvaWQgdXBkYXRlQW5pbWF0
aW9ucyhTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBtX2JlZ2lu
VGltZTsKKyAgICAgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAgICAgICBkb3VibGUgbV9hY2N1
bXVsYXRlZFBhdXNlVGltZTsKKyAgICAgICAgCisgICAgICAgIFRpbWVyPFNNSUxUaW1lQ29udGFp
bmVyPiBtX3RpbWVyOworCisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxTTUlMVGltaW5nRWxlbWVu
dCo+IFRpbWluZ0VsZW1lbnRTZXQ7CisgICAgICAgIFRpbWluZ0VsZW1lbnRTZXQgbV9zY2hlZHVs
ZWRBbmltYXRpb25zOworICAgIH07Cit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltaW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJT
TUlMVGltaW5nRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiU01JTFRpbWVDb250YWlu
ZXIuaCIKKyNpbmNsdWRlICJYTGlua05hbWVzLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXIgOiBw
dWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgQ29uZGl0aW9uRXZlbnRMaXN0ZW5l
cihTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9uLCBTTUlMVGltaW5nRWxlbWVudDo6Q29uZGl0
aW9uKiBjb25kaXRpb24pIAorICAgICAgICA6IG1fYW5pbWF0aW9uKGFuaW1hdGlvbikKKyAgICAg
ICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pIHt9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KSB7CisgICAgICAgIG1fYW5pbWF0
aW9uLT5oYW5kbGVDb25kaXRpb25FdmVudChldmVudCwgbV9jb25kaXRpb24pOworICAgIH0KK3By
aXZhdGU6CisgICAgU01JTFRpbWluZ0VsZW1lbnQqIG1fYW5pbWF0aW9uOworICAgIFNNSUxUaW1p
bmdFbGVtZW50OjpDb25kaXRpb24qIG1fY29uZGl0aW9uOworfTsKKyAgICAKK1NNSUxUaW1pbmdF
bGVtZW50OjpDb25kaXRpb246OkNvbmRpdGlvbihUeXBlIHR5cGUsIEJlZ2luT3JFbmQgYmVnaW5P
ckVuZCwgU3RyaW5nIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTTUlMVGltZSBvZmZzZXQs
IGludCByZXBlYXRzKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2JlZ2luT3JFbmQoYmVn
aW5PckVuZCkKKyAgICAsIG1fYmFzZUlEKGJhc2VJRCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9yZXBlYXRzKHJlcGVhdHMpIAoreworfQorICAg
IAorU01JTFRpbWluZ0VsZW1lbnQ6OlNNSUxUaW1pbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRv
YykKKyAgICAsIG1fY29uZGl0aW9uc0Nvbm5lY3RlZChmYWxzZSkKKyAgICAsIG1faGFzRW5kRXZl
bnRDb25kaXRpb25zKGZhbHNlKQorICAgICwgbV9pbnRlcnZhbEJlZ2luKFNNSUxUaW1lOjp1bnJl
c29sdmVkKCkpCisgICAgLCBtX2ludGVydmFsRW5kKFNNSUxUaW1lOjp1bnJlc29sdmVkKCkpCisg
ICAgLCBtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwodHJ1ZSkKKyAgICAsIG1fYWN0aXZlU3Rh
dGUoSW5hY3RpdmUpCisgICAgLCBtX25leHRQcm9ncmVzc1RpbWUoMCkKKyAgICAsIG1fY2FjaGVk
RHVyKC0xLikKKyAgICAsIG1fY2FjaGVkUmVwZWF0RHVyKC0xLikKKyAgICAsIG1fY2FjaGVkUmVw
ZWF0Q291bnQoLTEuKQorICAgICwgbV9jYWNoZWRNaW4oLTEuKQorICAgICwgbV9jYWNoZWRNYXgo
LTEuKQoreworfQorCitTTUlMVGltaW5nRWxlbWVudDo6flNNSUxUaW1pbmdFbGVtZW50KCkKK3sK
KyAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOworICAgIGlmIChtX3RpbWVDb250YWluZXIpCisg
ICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzKTsKK30KKyAgICAKK3ZvaWQg
U01JTFRpbWluZ0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKK3sKKyAgICBTVkdFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIFNWR1NWR0VsZW1lbnQqIG93bmVyID0g
b3duZXJTVkdFbGVtZW50KCk7CisgICAgaWYgKCFvd25lcikKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdGltZUNvbnRhaW5lciA9IG93bmVyLT50aW1lQ29udGFpbmVyKCk7CisgICAgQVNTRVJUKG1f
dGltZUNvbnRhaW5lcik7CisgICAgcmVzY2hlZHVsZSgpOworfQorCit2b2lkIFNNSUxUaW1pbmdF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKK3sKKyAgICBpZiAobV90aW1lQ29udGFpbmVy
KSB7CisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzKTsKKyAgICAgICAg
bV90aW1lQ29udGFpbmVyID0gMDsKKyAgICB9CisgICAgLy8gQ2FsbGluZyBkaXNjb25uZWN0Q29u
ZGl0aW9ucygpIG1heSBraWxsIHVzIGlmIHRoZXJlIGFyZSBzeW5jYmFzZSBjb25kaXRpb25zLgor
ICAgIC8vIE9LLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBkaWUgaW5zaWRlIHRoZSBjYWxsLgorICAg
IFJlZlB0cjxTTUlMVGltaW5nRWxlbWVudD4ga2VlcEFsaXZlKHRoaXMpOworICAgIGRpc2Nvbm5l
Y3RDb25kaXRpb25zKCk7CisgICAgbV90YXJnZXRFbGVtZW50ID0gMDsKKyAgICBTVkdFbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQoreworICAgIFNWR0VsZW1lbnQ6OmZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpOworICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpiZWdpbkF0dHIp
KQorICAgICAgICBtX2JlZ2luVGltZXMuYXBwZW5kKDApOworICAgIGlmIChtX2lzV2FpdGluZ0Zv
ckZpcnN0SW50ZXJ2YWwpIHsKKyAgICAgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKKyAgICAg
ICAgcmVzY2hlZHVsZSgpOworICAgIH0KK30KKworU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6
OnBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGJvb2wgb2s7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IDA7CisgICAgU3RyaW5nIHBhcnNlID0gZGF0YS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICBpZiAocGFyc2UuZW5kc1dpdGgoImgiKSkKKyAgICAgICAgcmVzdWx0ID0g
cGFyc2UubGVmdChwYXJzZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCZvaykgKiA2MCAqIDYwOwor
ICAgIGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJtaW4iKSkKKyAgICAgICAgcmVzdWx0ID0gcGFy
c2UubGVmdChwYXJzZS5sZW5ndGgoKSAtIDMpLnRvRG91YmxlKCZvaykgKiA2MDsKKyAgICBlbHNl
IGlmIChwYXJzZS5lbmRzV2l0aCgibXMiKSkKKyAgICAgICAgcmVzdWx0ID0gcGFyc2UubGVmdChw
YXJzZS5sZW5ndGgoKSAtIDIpLnRvRG91YmxlKCZvaykgLyAxMDAwOworICAgIGVsc2UgaWYgKHBh
cnNlLmVuZHNXaXRoKCJzIikpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlLmxlZnQocGFyc2UubGVu
Z3RoKCkgLSAxKS50b0RvdWJsZSgmb2spOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gcGFy
c2UudG9Eb3VibGUoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gU01JTFRpbWU6
OnVucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorU01JTFRpbWUgU01J
TFRpbWluZ0VsZW1lbnQ6OnBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEpCit7Cisg
ICAgaWYgKGRhdGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZl
ZCgpOworICAgIAorICAgIFN0cmluZyBwYXJzZSA9IGRhdGEuc3RyaXBXaGl0ZVNwYWNlKCk7CisK
KyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIGluZGVmaW5pdGVWYWx1ZSgiaW5kZWZpbml0
ZSIpOworICAgIGlmIChwYXJzZSA9PSBpbmRlZmluaXRlVmFsdWUpCisgICAgICAgIHJldHVybiBT
TUlMVGltZTo6aW5kZWZpbml0ZSgpOworCisgICAgZG91YmxlIHJlc3VsdCA9IDA7CisgICAgYm9v
bCBvazsKKyAgICBpbnQgZG91YmxlUG9pbnRPbmUgPSBwYXJzZS5maW5kKCc6Jyk7CisgICAgaW50
IGRvdWJsZVBvaW50VHdvID0gcGFyc2UuZmluZCgnOicsIGRvdWJsZVBvaW50T25lICsgMSk7Cisg
ICAgaWYgKGRvdWJsZVBvaW50T25lID09IDIgJiYgZG91YmxlUG9pbnRUd28gPT0gNSAmJiBwYXJz
ZS5sZW5ndGgoKSA+PSA4KSB7IAorICAgICAgICByZXN1bHQgKz0gcGFyc2Uuc3Vic3RyaW5nKDAs
IDIpLnRvVUludFN0cmljdCgmb2spICogNjAgKiA2MDsKKyAgICAgICAgaWYgKCFvaykKKyAgICAg
ICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgICAgICByZXN1bHQgKz0g
cGFyc2Uuc3Vic3RyaW5nKDMsIDIpLnRvVUludFN0cmljdCgmb2spICogNjA7CisgICAgICAgIGlm
ICghb2spCisgICAgICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICAg
ICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZyg2KS50b0RvdWJsZSgmb2spOworICAgIH0gZWxz
ZSBpZiAoZG91YmxlUG9pbnRPbmUgPT0gMiAmJiBkb3VibGVQb2ludFR3byA9PSAtMSAmJiBwYXJz
ZS5sZW5ndGgoKSA+PSA1KSB7IAorICAgICAgICByZXN1bHQgKz0gcGFyc2Uuc3Vic3RyaW5nKDAs
IDIpLnRvVUludFN0cmljdCgmb2spICogNjA7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAg
ICByZXR1cm4gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICAgICAgcmVzdWx0ICs9IHBhcnNl
LnN1YnN0cmluZygzKS50b0RvdWJsZSgmb2spOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4g
cGFyc2VPZmZzZXRWYWx1ZShwYXJzZSk7CisKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4g
U01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorc3Rh
dGljIGludCBzbWlsVGltZVNvcnRGdW5jdGlvbihjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBi
KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KCgqc3RhdGljX2Nhc3Q8Y29uc3QgU01J
TFRpbWUqPihhKSAtICpzdGF0aWNfY2FzdDxjb25zdCBTTUlMVGltZSo+KGIpKS52YWx1ZSgpKTsK
K30KKyAgICAKK3N0YXRpYyB2b2lkIHNvcnRUaW1lTGlzdChWZWN0b3I8U01JTFRpbWU+JiB0aW1l
TGlzdCkKK3sKKyAgICBtZXJnZXNvcnQodGltZUxpc3QuZGF0YSgpLCB0aW1lTGlzdC5zaXplKCks
IHNpemVvZihTTUlMVGltZSksIHNtaWxUaW1lU29ydEZ1bmN0aW9uKTsKK30KKyAgICAKK2Jvb2wg
U01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUsIEJl
Z2luT3JFbmQgYmVnaW5PckVuZCkKK3sKKyAgICBTdHJpbmcgcGFyc2VTdHJpbmcgPSB2YWx1ZS5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAKKyAgICBkb3VibGUgc2lnbiA9IDEuOworICAgIGJvb2wg
b2s7CisgICAgaW50IHBvcyA9IHBhcnNlU3RyaW5nLmZpbmQoJysnKTsKKyAgICBpZiAocG9zID09
IC0xKSB7CisgICAgICAgIHBvcyA9IHBhcnNlU3RyaW5nLmZpbmQoJy0nKTsKKyAgICAgICAgaWYg
KHBvcyAhPSAtMSkKKyAgICAgICAgICAgIHNpZ24gPSAtMS47CisgICAgfQorICAgIFN0cmluZyBj
b25kaXRpb25TdHJpbmc7CisgICAgU01JTFRpbWUgb2Zmc2V0ID0gMDsKKyAgICBpZiAocG9zID09
IC0xKQorICAgICAgICBjb25kaXRpb25TdHJpbmcgPSBwYXJzZVN0cmluZzsKKyAgICBlbHNlIHsK
KyAgICAgICAgY29uZGl0aW9uU3RyaW5nID0gcGFyc2VTdHJpbmcubGVmdChwb3MpLnN0cmlwV2hp
dGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgb2Zmc2V0U3RyaW5nID0gcGFyc2VTdHJpbmcuc3Vi
c3RyaW5nKHBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBvZmZzZXQgPSBwYXJz
ZU9mZnNldFZhbHVlKG9mZnNldFN0cmluZyk7CisgICAgICAgIGlmIChvZmZzZXQuaXNVbnJlc29s
dmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9mZnNldCA9IG9mZnNl
dCAqIHNpZ247CisgICAgfQorICAgIGlmIChjb25kaXRpb25TdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zID0gY29uZGl0aW9uU3RyaW5nLmZpbmQoJy4nKTsK
KyAgICAKKyAgICBTdHJpbmcgYmFzZUlEOworICAgIFN0cmluZyBuYW1lU3RyaW5nOworICAgIGlm
IChwb3MgPT0gLTEpCisgICAgICAgIG5hbWVTdHJpbmcgPSBjb25kaXRpb25TdHJpbmc7CisgICAg
ZWxzZSB7CisgICAgICAgIGJhc2VJRCA9IGNvbmRpdGlvblN0cmluZy5sZWZ0KHBvcyk7CisgICAg
ICAgIG5hbWVTdHJpbmcgPSBjb25kaXRpb25TdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpOworICAg
IH0KKyAgICBpZiAobmFtZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENvbmRpdGlvbjo6VHlwZSB0eXBlOworICAgIGludCByZXBlYXRzID0gLTE7CisgICAg
aWYgKG5hbWVTdHJpbmcuc3RhcnRzV2l0aCgicmVwZWF0KCIpICYmIG5hbWVTdHJpbmcuZW5kc1dp
dGgoIikiKSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIHJlcGVhdCBldmVudHMgd2UganVzdCBu
ZWVkIHRvIGFkZCB0aGUgZGF0YSBjYXJyeWluZyBUaW1lRXZlbnQgY2xhc3MgYW5kIAorICAgICAg
ICAvLyBmaXJlIHRoZSBldmVudHMgYXQgYXBwcm9waWF0ZSB0aW1lcy4KKyAgICAgICAgcmVwZWF0
cyA9IG5hbWVTdHJpbmcuc3Vic3RyaW5nKDcsIG5hbWVTdHJpbmcubGVuZ3RoKCkgLSA4KS50b1VJ
bnRTdHJpY3QoJm9rKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbmFtZVN0cmluZyA9ICJyZXBlYXQiOworICAgICAgICB0eXBlID0gQ29uZGl0
aW9uOjpFdmVudEJhc2U7CisgICAgfSBlbHNlIGlmIChuYW1lU3RyaW5nID09ICJiZWdpbiIgfHwg
bmFtZVN0cmluZyA9PSAiZW5kIikgeworICAgICAgICBpZiAoYmFzZUlELmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdHlwZSA9IENvbmRpdGlvbjo6U3luY2Jh
c2U7CisgICAgfSBlbHNlIGlmIChuYW1lU3RyaW5nLnN0YXJ0c1dpdGgoImFjY2Vzc2tleSgiKSkg
eworICAgICAgICAvLyBGSVhNRTogYWNjZXNza2V5KCkgc3VwcG9ydC4KKyAgICAgICAgdHlwZSA9
IENvbmRpdGlvbjo6QWNjZXNzS2V5OworICAgIH0gZWxzZQorICAgICAgICB0eXBlID0gQ29uZGl0
aW9uOjpFdmVudEJhc2U7CisgICAgCisgICAgbV9jb25kaXRpb25zLmFwcGVuZChDb25kaXRpb24o
dHlwZSwgYmVnaW5PckVuZCwgYmFzZUlELCBuYW1lU3RyaW5nLCBvZmZzZXQsIHJlcGVhdHMpKTsK
KyAgICBpZiAoYmVnaW5PckVuZCA9PSBFbmQpCisgICAgICAgIG1faGFzRW5kRXZlbnRDb25kaXRp
b25zID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTTUlMVGltaW5nRWxlbWVu
dDo6aXNUaW1pbmdFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnNldFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0
ZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFu
c2Zvcm1UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVDb2xvclRh
Zyk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUJlZ2luT3JFbmQoY29u
c3QgU3RyaW5nJiBwYXJzZVN0cmluZywgQmVnaW5PckVuZCBiZWdpbk9yRW5kKQoreworICAgIFZl
Y3RvcjxTTUlMVGltZT4mIHRpbWVMaXN0ID0gYmVnaW5PckVuZCA9PSBCZWdpbiA/IG1fYmVnaW5U
aW1lcyA6IG1fZW5kVGltZXM7CisgICAgaWYgKGJlZ2luT3JFbmQgPT0gRW5kKQorICAgICAgICBt
X2hhc0VuZEV2ZW50Q29uZGl0aW9ucyA9IGZhbHNlOworICAgIEhhc2hTZXQ8ZG91YmxlPiBleGlz
dGluZzsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdGltZUxpc3Quc2l6ZSgpOyArK24p
CisgICAgICAgIGV4aXN0aW5nLmFkZCh0aW1lTGlzdFtuXS52YWx1ZSgpKTsKKyAgICBWZWN0b3I8
U3RyaW5nPiBzcGxpdFN0cmluZzsKKyAgICBwYXJzZVN0cmluZy5zcGxpdCgnOycsIHNwbGl0U3Ry
aW5nKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc3BsaXRTdHJpbmcuc2l6ZSgpOyAr
K24pIHsKKyAgICAgICAgU01JTFRpbWUgdmFsdWUgPSBwYXJzZUNsb2NrVmFsdWUoc3BsaXRTdHJp
bmdbbl0pOworICAgICAgICBpZiAodmFsdWUuaXNVbnJlc29sdmVkKCkpCisgICAgICAgICAgICBw
YXJzZUNvbmRpdGlvbihzcGxpdFN0cmluZ1tuXSwgYmVnaW5PckVuZCk7CisgICAgICAgIGVsc2Ug
aWYgKCFleGlzdGluZy5jb250YWlucyh2YWx1ZS52YWx1ZSgpKSkKKyAgICAgICAgICAgIHRpbWVM
aXN0LmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIHNvcnRUaW1lTGlzdCh0aW1lTGlzdCk7Cit9
CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpiZWdp
bkF0dHIpIHsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOworICAgICAgICAgICAgbV9jb25kaXRpb25zLmNs
ZWFyKCk7CisgICAgICAgICAgICBwYXJzZUJlZ2luT3JFbmQoZ2V0QXR0cmlidXRlKFNWR05hbWVz
OjplbmRBdHRyKSwgRW5kKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUJlZ2luT3JFbmQoYXR0
ci0+dmFsdWUoKS5zdHJpbmcoKSwgQmVnaW4pOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6ZW5kQXR0cikgeworICAgICAgICBpZiAoIW1fY29uZGl0aW9ucy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgICAg
ICAgICBtX2NvbmRpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHBhcnNlQmVnaW5PckVuZChn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmJlZ2luQXR0ciksIEJlZ2luKTsKKyAgICAgICAgfQorICAg
ICAgICBwYXJzZUJlZ2luT3JFbmQoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgRW5kKTsKKyAgICAg
ICAgaWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RDb25kaXRpb25zKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OworfQorCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0
ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQoreworICAgIFNWR0VsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CisgICAgCisgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKGF0dHJOYW1lID09IFhMaW5r
TmFtZXM6OmhyZWZBdHRyKQorICAgICAgICBtX3RhcmdldEVsZW1lbnQgPSAwOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkdXJBdHRyKQorICAgICAgICBtX2NhY2hlZER1ciA9
IC0xLjsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVwZWF0RHVyQXR0cikK
KyAgICAgICAgbV9jYWNoZWRSZXBlYXREdXIgPSAtMS47CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnJlcGVhdENvdW50QXR0cikKKyAgICAgICAgbV9jYWNoZWRSZXBlYXRDb3Vu
dCA9IC0xLjsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bWluQXR0cikKKyAg
ICAgICAgbV9jYWNoZWRNaW4gPSAtMS47CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Om1heEF0dHIpCisgICAgICAgIG1fY2FjaGVkTWF4ID0gLTEuOworICAgIAorICAgIGlmIChp
bkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiZWdpbkF0
dHIpCisgICAgICAgICAgICBiZWdpbkxpc3RDaGFuZ2VkKCk7CisgICAgICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQorICAgICAgICAgICAgZW5kTGlzdENoYW5nZWQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OmNvbm5lY3RDb25kaXRpb25z
KCkKK3sKKyAgICBpZiAobV9jb25kaXRpb25zQ29ubmVjdGVkKQorICAgICAgICBkaXNjb25uZWN0
Q29uZGl0aW9ucygpOworICAgIG1fY29uZGl0aW9uc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgeworICAgICAg
ICBDb25kaXRpb24mIGNvbmRpdGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICAgICAgaWYgKGNv
bmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0aW9uOjpFdmVudEJhc2UpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghY29uZGl0aW9uLm1fYmFzZSk7CisgICAgICAgICAgICBpZiAoY29uZGl0aW9uLm1fYmFz
ZUlELmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ubV9iYXNlID0gdGFyZ2V0
RWxlbWVudCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5t
X2Jhc2UgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChjb25kaXRpb24ubV9iYXNlSUQpOwor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb24ubV9iYXNlKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9ldmVudExpc3RlbmVyKTsKKyAg
ICAgICAgICAgIGNvbmRpdGlvbi5tX2V2ZW50TGlzdGVuZXIgPSBuZXcgQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lcih0aGlzLCAmY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2Ut
PmFkZEV2ZW50TGlzdGVuZXIoY29uZGl0aW9uLm1fbmFtZSwgY29uZGl0aW9uLm1fZXZlbnRMaXN0
ZW5lciwgZmFsc2UpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29u
ZGl0aW9uOjpTeW5jYmFzZSkgeworICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9iYXNl
SUQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2UgPSBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChjb25kaXRpb24ubV9iYXNlSUQpOworICAgICAgICAgICAgaWYgKCFp
c1RpbWluZ0VsZW1lbnQoY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBjb25kaXRpb24ubV9iYXNlID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFNNSUxUaW1pbmdFbGVtZW50KiBzeW5jYmFzZSA9IHN0YXRp
Y19jYXN0PFNNSUxUaW1pbmdFbGVtZW50Kj4oY29uZGl0aW9uLm1fYmFzZS5nZXQoKSk7CisgICAg
ICAgICAgICBzeW5jYmFzZS0+YWRkVGltZURlcGVuZGVudCh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMoKQor
eworICAgIGlmICghbV9jb25kaXRpb25zQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb25kaXRpb25zQ29ubmVjdGVkID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgeworICAgICAgICBDb25kaXRpb24mIGNvbmRp
dGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0g
Q29uZGl0aW9uOjpFdmVudEJhc2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kaXRpb24ubV9iYXNl
KQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2UtPnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uZGl0aW9uLm1fbmFtZSwgY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2Up
OworICAgICAgICAgICAgY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lciA9IDA7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OlN5bmNiYXNlKSB7CisgICAg
ICAgICAgICBpZiAoY29uZGl0aW9uLm1fYmFzZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChp
c1RpbWluZ0VsZW1lbnQoY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkpOworICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNNSUxUaW1pbmdFbGVtZW50Kj4oY29uZGl0aW9uLm1fYmFzZS5nZXQoKSkt
PnJlbW92ZVRpbWVEZXBlbmRlbnQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgY29uZGl0aW9uLm1fYmFzZSA9IDA7CisgICAgfQorfQorCit2b2lkIFNNSUxUaW1pbmdF
bGVtZW50OjpyZXNjaGVkdWxlKCkKK3sKKyAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAgICAg
ICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMpOworfQorCitTVkdFbGVtZW50KiBTTUlM
VGltaW5nRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Rhcmdl
dEVsZW1lbnQpIHsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSB4bGlua0hyZWYoKTsKKyAgICAgICAg
Tm9kZSAqdGFyZ2V0ID0gaHJlZi5pc0VtcHR5KCkgPyBwYXJlbnROb2RlKCkgOiBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChocmVmKSk7CisgICAg
ICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIG1f
dGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpOworICAgIH0K
KyAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50LmdldCgpOworfQorICAgIAorU01JTFRpbWUgU01J
TFRpbWluZ0VsZW1lbnQ6OmVsYXBzZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV90aW1lQ29u
dGFpbmVyID8gbV90aW1lQ29udGFpbmVyLT5lbGFwc2VkKCkgOiAwOworfSAKKworU01JTFRpbWlu
Z0VsZW1lbnQ6OlJlc3RhcnQgU01JTFRpbWluZ0VsZW1lbnQ6OnJlc3RhcnQoKSBjb25zdAoreyAg
ICAKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG5ldmVyKCJuZXZlciIpOworICAgIHN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgd2hlbk5vdEFjdGl2ZSgid2hlbk5vdEFjdGl2ZSIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJl
c3RhcnRBdHRyKTsKKyAgICBpZiAodmFsdWUgPT0gbmV2ZXIpCisgICAgICAgIHJldHVybiBSZXN0
YXJ0TmV2ZXI7CisgICAgaWYgKHZhbHVlID09IHdoZW5Ob3RBY3RpdmUpCisgICAgICAgIHJldHVy
biBSZXN0YXJ0V2hlbk5vdEFjdGl2ZTsKKyAgICByZXR1cm4gUmVzdGFydEFsd2F5czsKK30KKyAg
ICAKK1NNSUxUaW1pbmdFbGVtZW50OjpGaWxsTW9kZSBTTUlMVGltaW5nRWxlbWVudDo6ZmlsbCgp
IGNvbnN0Cit7ICAgCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBmcmVlemUoImZyZWV6
ZSIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmZpbGxBdHRyKTsKKyAgICByZXR1cm4gdmFsdWUgPT0gZnJlZXplID8gRmlsbEZyZWV6ZSA6
IEZpbGxSZW1vdmU7Cit9CisgICAgCitTdHJpbmcgU01JTFRpbWluZ0VsZW1lbnQ6OnhsaW5rSHJl
ZigpIGNvbnN0Cit7ICAgIAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJl
ZkF0dHIpOworfQorICAgIAorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OmR1cigpIGNvbnN0
Cit7ICAgCisgICAgaWYgKG1fY2FjaGVkRHVyID49IDApCisgICAgICAgIHJldHVybiBtX2NhY2hl
ZER1cjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05h
bWVzOjpkdXJBdHRyKTsKKyAgICBTTUlMVGltZSBjbG9ja1ZhbHVlID0gcGFyc2VDbG9ja1ZhbHVl
KHZhbHVlKTsKKyAgICByZXR1cm4gbV9jYWNoZWREdXIgPSBjbG9ja1ZhbHVlIDw9IDAgPyBTTUlM
VGltZTo6dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKK30KKworU01JTFRpbWUgU01JTFRpbWlu
Z0VsZW1lbnQ6OnJlcGVhdER1cigpIGNvbnN0Cit7ICAgIAorICAgIGlmIChtX2NhY2hlZFJlcGVh
dER1ciA+PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRSZXBlYXREdXI7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6cmVwZWF0RHVyQXR0
cik7CisgICAgU01JTFRpbWUgY2xvY2tWYWx1ZSA9IHBhcnNlQ2xvY2tWYWx1ZSh2YWx1ZSk7Cisg
ICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0RHVyID0gY2xvY2tWYWx1ZSA8IDAgPyBTTUlMVGltZTo6
dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKK30KKyAgICAKKy8vIFNvIGEgY291bnQgaXMgbm90
IHJlYWxseSBhIHRpbWUgYnV0IGxldCBqdXN0IGFsbCBwcmV0ZW5kIHdlIGRpZCBub3Qgbm90aWNl
LgorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OnJlcGVhdENvdW50KCkgY29uc3QKK3sgICAg
CisgICAgaWYgKG1fY2FjaGVkUmVwZWF0Q291bnQgPj0gMCkKKyAgICAgICAgcmV0dXJuIG1fY2Fj
aGVkUmVwZWF0Q291bnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJp
YnV0ZShTVkdOYW1lczo6cmVwZWF0Q291bnRBdHRyKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworCisgICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyBpbmRlZmluaXRlVmFsdWUoImluZGVmaW5pdGUiKTsKKyAgICBpZiAo
dmFsdWUgPT0gaW5kZWZpbml0ZVZhbHVlKQorICAgICAgICByZXR1cm4gU01JTFRpbWU6OmluZGVm
aW5pdGUoKTsKKyAgICBib29sIG9rOworICAgIGRvdWJsZSByZXN1bHQgPSB2YWx1ZS5zdHJpbmco
KS50b0RvdWJsZSgmb2spOworICAgIHJldHVybiBtX2NhY2hlZFJlcGVhdENvdW50ID0gb2sgJiYg
cmVzdWx0ID4gMCA/IHJlc3VsdCA6IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisKK1NNSUxU
aW1lIFNNSUxUaW1pbmdFbGVtZW50OjptYXhWYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAgIGlmICht
X2NhY2hlZE1heCA+PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRNYXg7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bWF4QXR0cik7Cisg
ICAgU01JTFRpbWUgcmVzdWx0ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4g
bV9jYWNoZWRNYXggPSAocmVzdWx0LmlzVW5yZXNvbHZlZCgpIHx8IHJlc3VsdCA8IDApID8gU01J
TFRpbWU6OmluZGVmaW5pdGUoKSA6IHJlc3VsdDsKK30KKyAgICAKK1NNSUxUaW1lIFNNSUxUaW1p
bmdFbGVtZW50OjptaW5WYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAgIGlmIChtX2NhY2hlZE1pbiA+
PSAwKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRNaW47CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bWluQXR0cik7CisgICAgU01JTFRpbWUg
cmVzdWx0ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbV9jYWNoZWRNaW4g
PSAocmVzdWx0LmlzVW5yZXNvbHZlZCgpIHx8IHJlc3VsdCA8IDApID8gMCA6IHJlc3VsdDsKK30K
KyAgICAgICAgICAgICAgICAgCitTTUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6c2ltcGxlRHVy
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtaW4oZHVyKCksIFNNSUxUaW1lOjppbmRlZmlu
aXRlKCkpOworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6YWRkQmVnaW5UaW1lKFNN
SUxUaW1lIHRpbWUpCit7CisgICAgbV9iZWdpblRpbWVzLmFwcGVuZCh0aW1lKTsKKyAgICBzb3J0
VGltZUxpc3QobV9iZWdpblRpbWVzKTsKKyAgICBiZWdpbkxpc3RDaGFuZ2VkKCk7Cit9CisgICAg
Cit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjphZGRFbmRUaW1lKFNNSUxUaW1lIHRpbWUpCit7Cisg
ICAgbV9lbmRUaW1lcy5hcHBlbmQodGltZSk7CisgICAgc29ydFRpbWVMaXN0KG1fZW5kVGltZXMp
OworICAgIGVuZExpc3RDaGFuZ2VkKCk7Cit9CisgICAgCitTTUlMVGltZSBTTUlMVGltaW5nRWxl
bWVudDo6ZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIFNNSUxUaW1lIG1p
bmltdW1UaW1lLCBib29sIGVxdWFsc01pbmltdW1PSykgY29uc3QKK3sKKyAgICBjb25zdCBWZWN0
b3I8U01JTFRpbWU+JiBsaXN0ID0gYmVnaW5PckVuZCA9PSBCZWdpbiA/IG1fYmVnaW5UaW1lcyA6
IG1fZW5kVGltZXM7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGxpc3Quc2l6ZSgpOyAr
K24pIHsKKyAgICAgICAgU01JTFRpbWUgdGltZSA9IGxpc3Rbbl07CisgICAgICAgIEFTU0VSVCgh
dGltZS5pc1VucmVzb2x2ZWQoKSk7CisgICAgICAgIGlmICh0aW1lLmlzSW5kZWZpbml0ZSgpICYm
IGJlZ2luT3JFbmQgPT0gQmVnaW4pIHsKKyAgICAgICAgICAgIC8vICJUaGUgc3BlY2lhbCB2YWx1
ZSAiaW5kZWZpbml0ZSIgZG9lcyBub3QgeWllbGQgYW4gaW5zdGFuY2UgdGltZSBpbiB0aGUgYmVn
aW4gbGlzdC4iCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZXF1YWxzTWluaW11bU9LKSB7CisgICAgICAgICAgICBpZiAodGltZSA+PSBtaW5pbXVtVGltZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGltZTsKKyAgICAgICAgfSBlbHNlIGlmICh0aW1lID4g
bWluaW11bVRpbWUpCisgICAgICAgICAgICByZXR1cm4gdGltZTsKKyAgICB9CisgICAgcmV0dXJu
IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50
OjpyZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0Cit7CisgICAgLy8gQ29tcHV0aW5nIHRoZSBhY3Rp
dmUgZHVyYXRpb24KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TTUlMMi9zbWlsLXRpbWlu
Zy5odG1sI1RpbWluZy1Db21wdXRpbmdBY3RpdmVEdXIKKyAgICBTTUlMVGltZSByZXBlYXRDb3Vu
dCA9IHRoaXMtPnJlcGVhdENvdW50KCk7CisgICAgU01JTFRpbWUgcmVwZWF0RHVyID0gdGhpcy0+
cmVwZWF0RHVyKCk7CisgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24gPSB0aGlzLT5zaW1wbGVE
dXJhdGlvbigpOworICAgIGlmIChzaW1wbGVEdXJhdGlvbiA9PSAwIHx8IChyZXBlYXREdXIuaXNV
bnJlc29sdmVkKCkgJiYgcmVwZWF0Q291bnQuaXNVbnJlc29sdmVkKCkpKQorICAgICAgICByZXR1
cm4gc2ltcGxlRHVyYXRpb247CisgICAgU01JTFRpbWUgcmVwZWF0Q291bnREdXJhdGlvbiA9IHNp
bXBsZUR1cmF0aW9uICogcmVwZWF0Q291bnQ7CisgICAgcmV0dXJuIG1pbihyZXBlYXRDb3VudER1
cmF0aW9uLCBtaW4ocmVwZWF0RHVyLCBTTUlMVGltZTo6aW5kZWZpbml0ZSgpKSk7Cit9CisKK1NN
SUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlQWN0aXZlRW5kKFNNSUxUaW1lIHJlc29s
dmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25zdAoreworICAgIC8vIENvbXB1dGlu
ZyB0aGUgYWN0aXZlIGR1cmF0aW9uCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU01JTDIv
c21pbC10aW1pbmcuaHRtbCNUaW1pbmctQ29tcHV0aW5nQWN0aXZlRHVyCisgICAgU01JTFRpbWUg
cHJlbGltaW5hcnlBY3RpdmVEdXJhdGlvbjsKKyAgICBpZiAoIXJlc29sdmVkRW5kLmlzVW5yZXNv
bHZlZCgpICYmIGR1cigpLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVhdER1cigpLmlzVW5yZXNvbHZl
ZCgpICYmIHJlcGVhdENvdW50KCkuaXNVbnJlc29sdmVkKCkpCisgICAgICAgIHByZWxpbWluYXJ5
QWN0aXZlRHVyYXRpb24gPSByZXNvbHZlZEVuZCAtIHJlc29sdmVkQmVnaW47CisgICAgZWxzZSBp
ZiAoIXJlc29sdmVkRW5kLmlzRmluaXRlKCkpCisgICAgICAgIHByZWxpbWluYXJ5QWN0aXZlRHVy
YXRpb24gPSByZXBlYXRpbmdEdXJhdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgcHJlbGltaW5h
cnlBY3RpdmVEdXJhdGlvbiA9IG1pbihyZXBlYXRpbmdEdXJhdGlvbigpLCByZXNvbHZlZEVuZCAt
IHJlc29sdmVkQmVnaW4pOworICAgIAorICAgIFNNSUxUaW1lIG1pblZhbHVlID0gdGhpcy0+bWlu
VmFsdWUoKTsKKyAgICBTTUlMVGltZSBtYXhWYWx1ZSA9IHRoaXMtPm1heFZhbHVlKCk7CisgICAg
aWYgKG1pblZhbHVlID4gbWF4VmFsdWUpIHsKKyAgICAgICAgLy8gSWdub3JlIGJvdGguCisgICAg
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXNtaWwtYW5pbWF0aW9uLTIwMDEw
OTA0LyNNaW5NYXgKKyAgICAgICAgbWluVmFsdWUgPSAwOworICAgICAgICBtYXhWYWx1ZSA9IFNN
SUxUaW1lOjppbmRlZmluaXRlKCk7CisgICAgfQorICAgIHJldHVybiByZXNvbHZlZEJlZ2luICsg
bWluKG1heFZhbHVlLCBtYXgobWluVmFsdWUsIHByZWxpbWluYXJ5QWN0aXZlRHVyYXRpb24pKTsK
K30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVzb2x2ZUludGVydmFsKGJvb2wgZmlyc3Qs
IFNNSUxUaW1lJiBiZWdpblJlc3VsdCwgU01JTFRpbWUmIGVuZFJlc3VsdCkgY29uc3QKK3sKKyAg
ICAvLyBTZWUgdGhlIHBzZXVkb2NvZGUgaW4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAxL1JFQy1zbWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8jVGltaW5nLUJlZ2luRW5kLUxpZmVDeWNs
ZQorICAgIFNNSUxUaW1lIGJlZ2luQWZ0ZXIgPSBmaXJzdCA/IC1udW1lcmljX2xpbWl0czxkb3Vi
bGU+OjppbmZpbml0eSgpIDogbV9pbnRlcnZhbEVuZDsKKyAgICBTTUlMVGltZSBsYXN0SW50ZXJ2
YWxUZW1wRW5kID0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBTTUlMVGltZSB0ZW1wQmVnaW4gPSBmaW5kSW5zdGFuY2VUaW1l
KEJlZ2luLCBiZWdpbkFmdGVyLCB0cnVlKTsKKyAgICAgICAgaWYgKHRlbXBCZWdpbi5pc1VucmVz
b2x2ZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTTUlMVGltZSB0ZW1wRW5kOwor
ICAgICAgICBpZiAobV9lbmRUaW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICB0ZW1wRW5kID0g
cmVzb2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIFNNSUxUaW1lOjppbmRlZmluaXRlKCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRlbXBFbmQgPSBmaW5kSW5zdGFuY2VUaW1lKEVuZCwg
dGVtcEJlZ2luLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgoZmlyc3QgJiYgdGVtcEJlZ2luID09
IHRlbXBFbmQgJiYgdGVtcEVuZCA9PSBsYXN0SW50ZXJ2YWxUZW1wRW5kKSB8fCAoIWZpcnN0ICYm
IHRlbXBFbmQgPT0gbV9pbnRlcnZhbEVuZCkpIAorICAgICAgICAgICAgICAgIHRlbXBFbmQgPSBm
aW5kSW5zdGFuY2VUaW1lKEVuZCwgdGVtcEJlZ2luLCBmYWxzZSk7ICAgIAorICAgICAgICAgICAg
aWYgKHRlbXBFbmQuaXNVbnJlc29sdmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZW5k
VGltZXMuaXNFbXB0eSgpICYmICFtX2hhc0VuZEV2ZW50Q29uZGl0aW9ucykKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZW1wRW5kID0gcmVz
b2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIHRlbXBFbmQpOworICAgICAgICB9CisgICAgICAgIGlm
ICh0ZW1wRW5kID4gMCB8fCAhZmlyc3QpIHsKKyAgICAgICAgICAgIGJlZ2luUmVzdWx0ID0gdGVt
cEJlZ2luOworICAgICAgICAgICAgZW5kUmVzdWx0ID0gdGVtcEVuZDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN0YXJ0KCkgPT0gUmVzdGFydE5ldmVyKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luQWZ0ZXIgPSB0
ZW1wRW5kOworICAgICAgICBsYXN0SW50ZXJ2YWxUZW1wRW5kID0gdGVtcEVuZDsKKyAgICB9Cisg
ICAgYmVnaW5SZXN1bHQgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIGVuZFJlc3VsdCA9
IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50
OjpyZXNvbHZlRmlyc3RJbnRlcnZhbCgpCit7CisgICAgU01JTFRpbWUgYmVnaW47CisgICAgU01J
TFRpbWUgZW5kOworICAgIHJlc29sdmVJbnRlcnZhbCh0cnVlLCBiZWdpbiwgZW5kKTsKKyAgICBB
U1NFUlQoIWJlZ2luLmlzSW5kZWZpbml0ZSgpKTsKKworICAgIGlmICghYmVnaW4uaXNVbnJlc29s
dmVkKCkgJiYgKGJlZ2luICE9IG1faW50ZXJ2YWxCZWdpbiB8fCBlbmQgIT0gbV9pbnRlcnZhbEVu
ZCkpIHsgICAKKyAgICAgICAgYm9vbCB3YXNVbnJlc29sdmVkID0gbV9pbnRlcnZhbEJlZ2luLmlz
VW5yZXNvbHZlZCgpOworICAgICAgICBtX2ludGVydmFsQmVnaW4gPSBiZWdpbjsKKyAgICAgICAg
bV9pbnRlcnZhbEVuZCA9IGVuZDsKKyAgICAgICAgbm90aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hh
bmdlZCh3YXNVbnJlc29sdmVkID8gTmV3SW50ZXJ2YWwgOiBFeGlzdGluZ0ludGVydmFsKTsKKyAg
ICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbWluKG1fbmV4dFByb2dyZXNzVGltZSwgbV9pbnRl
cnZhbEJlZ2luKTsKKyAgICAgICAgcmVzY2hlZHVsZSgpOworICAgIH0KK30KKwordm9pZCBTTUlM
VGltaW5nRWxlbWVudDo6cmVzb2x2ZU5leHRJbnRlcnZhbCgpCit7CisgICAgU01JTFRpbWUgYmVn
aW47CisgICAgU01JTFRpbWUgZW5kOworICAgIHJlc29sdmVJbnRlcnZhbChmYWxzZSwgYmVnaW4s
IGVuZCk7CisgICAgQVNTRVJUKCFiZWdpbi5pc0luZGVmaW5pdGUoKSk7CisgICAgCisgICAgaWYg
KCFiZWdpbi5pc1VucmVzb2x2ZWQoKSAmJiBiZWdpbiAhPSBtX2ludGVydmFsQmVnaW4pIHsKKyAg
ICAgICAgbV9pbnRlcnZhbEJlZ2luID0gYmVnaW47CisgICAgICAgIG1faW50ZXJ2YWxFbmQgPSBl
bmQ7CisgICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQoTmV3SW50ZXJ2YWwp
OworICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBtaW4obV9uZXh0UHJvZ3Jlc3NUaW1lLCBt
X2ludGVydmFsQmVnaW4pOworICAgIH0KK30KKworU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6
Om5leHRQcm9ncmVzc1RpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25leHRQcm9ncmVzc1Rp
bWU7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkxpc3RDaGFuZ2VkKCkK
K3sKKyAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNlZCgpOworICAgIGlmIChtX2lz
V2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwpCisgICAgICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7
CisgICAgZWxzZSBpZiAoZWxhcHNlZCA8IG1faW50ZXJ2YWxCZWdpbikgeworICAgICAgICBTTUlM
VGltZSBuZXdCZWdpbiA9IGZpbmRJbnN0YW5jZVRpbWUoQmVnaW4sIGVsYXBzZWQsIGZhbHNlKTsK
KyAgICAgICAgaWYgKG5ld0JlZ2luIDwgbV9pbnRlcnZhbEJlZ2luKSB7CisgICAgICAgICAgICAv
LyBCZWdpbiB0aW1lIGNoYW5nZWQsIHJlLXJlc29sdmUgdGhlIGludGVydmFsLgorICAgICAgICAg
ICAgU01JTFRpbWUgb2xkQmVnaW4gPSBtX2ludGVydmFsQmVnaW47CisgICAgICAgICAgICBtX2lu
dGVydmFsQmVnaW4gPSBlbGFwc2VkOworICAgICAgICAgICAgcmVzb2x2ZUludGVydmFsKGZhbHNl
LCBtX2ludGVydmFsQmVnaW4sIG1faW50ZXJ2YWxFbmQpOyAgCisgICAgICAgICAgICBBU1NFUlQo
IW1faW50ZXJ2YWxCZWdpbi5pc1VucmVzb2x2ZWQoKSk7CisgICAgICAgICAgICBpZiAobV9pbnRl
cnZhbEJlZ2luICE9IG9sZEJlZ2luKQorICAgICAgICAgICAgICAgIG5vdGlmeURlcGVuZGVudHNJ
bnRlcnZhbENoYW5nZWQoRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgICAgIH0KKyAgICB9ICAgIAor
ICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7CisgICAgcmVzY2hlZHVsZSgpOworfQor
Cit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjplbmRMaXN0Q2hhbmdlZCgpCit7CisgICAgU01JTFRp
bWUgZWxhcHNlZCA9IHRoaXMtPmVsYXBzZWQoKTsKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJz
dEludGVydmFsKQorICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZhbCgpOworICAgIGVsc2UgaWYg
KGVsYXBzZWQgPCBtX2ludGVydmFsRW5kICYmIG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKSB7
CisgICAgICAgIFNNSUxUaW1lIG5ld0VuZCA9IGZpbmRJbnN0YW5jZVRpbWUoRW5kLCBtX2ludGVy
dmFsQmVnaW4sIGZhbHNlKTsKKyAgICAgICAgaWYgKG5ld0VuZCA8IG1faW50ZXJ2YWxFbmQpIHsK
KyAgICAgICAgICAgIG5ld0VuZCA9IHJlc29sdmVBY3RpdmVFbmQobV9pbnRlcnZhbEJlZ2luLCBu
ZXdFbmQpOworICAgICAgICAgICAgaWYgKG5ld0VuZCAhPSBtX2ludGVydmFsRW5kKSB7CisgICAg
ICAgICAgICAgICAgbV9pbnRlcnZhbEVuZCA9IG5ld0VuZDsKKyAgICAgICAgICAgICAgICBub3Rp
ZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKEV4aXN0aW5nSW50ZXJ2YWwpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7
CisgICAgcmVzY2hlZHVsZSgpOworfQorICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6Y2hl
Y2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpCit7CisgICAgQVNTRVJUKCFtX2lzV2FpdGluZ0Zv
ckZpcnN0SW50ZXJ2YWwpOworICAgIEFTU0VSVChlbGFwc2VkID49IG1faW50ZXJ2YWxCZWdpbik7
CisgICAgCisgICAgUmVzdGFydCByZXN0YXJ0ID0gdGhpcy0+cmVzdGFydCgpOworICAgIGlmIChy
ZXN0YXJ0ID09IFJlc3RhcnROZXZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChl
bGFwc2VkIDwgbV9pbnRlcnZhbEVuZCkgeworICAgICAgICBpZiAocmVzdGFydCAhPSBSZXN0YXJ0
QWx3YXlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTTUlMVGltZSBuZXh0QmVnaW4g
PSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luLCBtX2ludGVydmFsQmVnaW4sIGZhbHNlKTsKKyAgICAg
ICAgaWYgKG5leHRCZWdpbiA8IG1faW50ZXJ2YWxFbmQpIHsgCisgICAgICAgICAgICBtX2ludGVy
dmFsRW5kID0gbmV4dEJlZ2luOworICAgICAgICAgICAgbm90aWZ5RGVwZW5kZW50c0ludGVydmFs
Q2hhbmdlZChFeGlzdGluZ0ludGVydmFsKTsKKyAgICAgICAgfQorICAgIH0gCisgICAgaWYgKGVs
YXBzZWQgPj0gbV9pbnRlcnZhbEVuZCkKKyAgICAgICAgcmVzb2x2ZU5leHRJbnRlcnZhbCgpOwor
fQorICAgIAorZmxvYXQgU01JTFRpbWluZ0VsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGlvblBlcmNl
bnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5zaWduZWQmIHJlcGVhdCkgY29uc3QKK3sK
KyAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRoaXMtPnNpbXBsZUR1cmF0aW9uKCk7Cisg
ICAgcmVwZWF0ID0gMDsKKyAgICBpZiAoc2ltcGxlRHVyYXRpb24uaXNJbmRlZmluaXRlKCkpIHsK
KyAgICAgICAgcmVwZWF0ID0gMDsKKyAgICAgICAgcmV0dXJuIDAuZjsKKyAgICB9CisgICAgaWYg
KHNpbXBsZUR1cmF0aW9uID09IDApIHsKKyAgICAgICAgcmVwZWF0ID0gMDsKKyAgICAgICAgcmV0
dXJuIDEuZjsKKyAgICB9CisgICAgQVNTRVJUKG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsK
KyAgICBBU1NFUlQoc2ltcGxlRHVyYXRpb24uaXNGaW5pdGUoKSk7CisgICAgU01JTFRpbWUgYWN0
aXZlVGltZSA9IGVsYXBzZWQgLSBtX2ludGVydmFsQmVnaW47CisgICAgU01JTFRpbWUgcmVwZWF0
aW5nRHVyYXRpb24gPSB0aGlzLT5yZXBlYXRpbmdEdXJhdGlvbigpOworICAgIGlmIChlbGFwc2Vk
ID49IG1faW50ZXJ2YWxFbmQgfHwgYWN0aXZlVGltZSA+IHJlcGVhdGluZ0R1cmF0aW9uKSB7Cisg
ICAgICAgIHJlcGVhdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXBlYXRpbmdEdXJhdGlvbi52
YWx1ZSgpIC8gc2ltcGxlRHVyYXRpb24udmFsdWUoKSk7CisgICAgICAgIGlmIChmbW9kKHJlcGVh
dGluZ0R1cmF0aW9uLnZhbHVlKCksIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkgPT0gMC4pKQorICAg
ICAgICAgICAgcmVwZWF0LS07CisgICAgICAgIHJldHVybiAxLmY7CisgICAgfQorICAgIHJlcGVh
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3RpdmVUaW1lLnZhbHVlKCkgLyBzaW1wbGVEdXJh
dGlvbi52YWx1ZSgpKTsKKyAgICBTTUlMVGltZSBzaW1wbGVUaW1lID0gZm1vZChhY3RpdmVUaW1l
LnZhbHVlKCksIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpOworICAgIHJldHVybiBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHNpbXBsZVRpbWUudmFsdWUoKSAvIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkp
OworfQorICAgIAorU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6OmNhbGN1bGF0ZU5leHRQcm9n
cmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVTdGF0
ZSA9PSBBY3RpdmUpIHsKKyAgICAgICAgLy8gSWYgZHVyYXRpb24gaXMgaW5kZWZpbml0ZSB0aGUg
dmFsdWUgZG9lcyBub3QgYWN0dWFsbHkgY2hhbmdlIG92ZXIgdGltZS4gU2FtZSBpcyB0cnVlIGZv
ciA8c2V0Pi4KKyAgICAgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24gPSB0aGlzLT5zaW1wbGVE
dXJhdGlvbigpOworICAgICAgICBpZiAoc2ltcGxlRHVyYXRpb24uaXNJbmRlZmluaXRlKCkgfHwg
aGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkgeworICAgICAgICAgICAgU01JTFRpbWUgcmVw
ZWF0Q291bnQgPSB0aGlzLT5yZXBlYXRDb3VudCgpOworICAgICAgICAgICAgU01JTFRpbWUgcmVw
ZWF0aW5nRHVyYXRpb25FbmQgPSBtX2ludGVydmFsQmVnaW4gKyByZXBlYXRpbmdEdXJhdGlvbigp
OworICAgICAgICAgICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGZyZWV6ZSBzZW1hbnRpY3Mg
d2hlbiByZXBlYXRpbmcgZW5kcywgZXZlbiBpZiB0aGUgZWxlbWVudCBpcyBzdGlsbCBhY3RpdmUu
IAorICAgICAgICAgICAgLy8gVGFrZSBjYXJlIHRoYXQgd2UgZ2V0IGEgdGltZXIgY2FsbGJhY2sg
YXQgdGhhdCBwb2ludC4KKyAgICAgICAgICAgIGlmIChlbGFwc2VkIDwgcmVwZWF0aW5nRHVyYXRp
b25FbmQgJiYgcmVwZWF0aW5nRHVyYXRpb25FbmQgPCBtX2ludGVydmFsRW5kICYmIHJlcGVhdGlu
Z0R1cmF0aW9uRW5kLmlzRmluaXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGVhdGlu
Z0R1cmF0aW9uRW5kOworICAgICAgICAgICAgcmV0dXJuIG1faW50ZXJ2YWxFbmQ7CisgICAgICAg
IH0gCisgICAgICAgIHJldHVybiBlbGFwc2VkICsgMC4wMjU7CisgICAgfQorICAgIHJldHVybiBt
X2ludGVydmFsQmVnaW4gPj0gZWxhcHNlZCA/IG1faW50ZXJ2YWxCZWdpbiA6IFNNSUxUaW1lOjp1
bnJlc29sdmVkKCk7Cit9CisgICAgCitTTUlMVGltaW5nRWxlbWVudDo6QWN0aXZlU3RhdGUgU01J
TFRpbWluZ0VsZW1lbnQ6OmRldGVybWluZUFjdGl2ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQpIGNv
bnN0Cit7CisgICAgaWYgKGVsYXBzZWQgPj0gbV9pbnRlcnZhbEJlZ2luICYmIGVsYXBzZWQgPCBt
X2ludGVydmFsRW5kKQorICAgICAgICAgICAgcmV0dXJuIEFjdGl2ZTsKKworICAgIGlmIChtX2Fj
dGl2ZVN0YXRlID09IEFjdGl2ZSkKKyAgICAgICAgcmV0dXJuIGZpbGwoKSA9PSBGaWxsRnJlZXpl
ID8gRnJvemVuIDogSW5hY3RpdmU7CisKKyAgICByZXR1cm4gbV9hY3RpdmVTdGF0ZTsKK30KKyAg
ICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQpCit7
CisgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7CisgICAgQVNTRVJUKG1faXNXYWl0aW5nRm9y
Rmlyc3RJbnRlcnZhbCB8fCBtX2ludGVydmFsQmVnaW4uaXNGaW5pdGUoKSk7CisgICAgCisgICAg
aWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCisgICAgICAgIGNvbm5lY3RDb25kaXRpb25zKCk7
CisgICAgCisgICAgaWYgKCFtX2ludGVydmFsQmVnaW4uaXNGaW5pdGUoKSkgeworICAgICAgICBB
U1NFUlQobV9hY3RpdmVTdGF0ZSA9PSBJbmFjdGl2ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGVsYXBzZWQgPCBtX2ludGVydmFsQmVnaW4pIHsKKyAgICAgICAgQVNT
RVJUKG1fYWN0aXZlU3RhdGUgIT0gQWN0aXZlKTsKKyAgICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1l
ID0gbV9pbnRlcnZhbEJlZ2luOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
IChtX2FjdGl2ZVN0YXRlID09IEluYWN0aXZlKSB7CisgICAgICAgIG1faXNXYWl0aW5nRm9yRmly
c3RJbnRlcnZhbCA9IGZhbHNlOworICAgICAgICBtX2FjdGl2ZVN0YXRlID0gQWN0aXZlOworICAg
ICAgICBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
cmVwZWF0OworICAgIGZsb2F0IHBlcmNlbnQgPSBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5k
UmVwZWF0KGVsYXBzZWQsIHJlcGVhdCk7CisgICAgYXBwbHlBbmltYXRpb24ocGVyY2VudCwgcmVw
ZWF0KTsKKworICAgIGNoZWNrUmVzdGFydChlbGFwc2VkKTsKKworICAgIEFjdGl2ZVN0YXRlIG5l
d1N0YXRlID0gZGV0ZXJtaW5lQWN0aXZlU3RhdGUoZWxhcHNlZCk7CisgICAgaWYgKG5ld1N0YXRl
ID09IEFjdGl2ZSkgeworICAgICAgICBpZiAoZmlsbCgpID09IEZpbGxSZW1vdmUgJiYgZWxhcHNl
ZCA+IG1faW50ZXJ2YWxCZWdpbiArIHJlcGVhdGluZ0R1cmF0aW9uKCkpCisgICAgICAgICAgICB1
bmFwcGx5QW5pbWF0aW9uKCk7CisgICAgfSAKKyAgICBpZiAobV9hY3RpdmVTdGF0ZSA9PSBBY3Rp
dmUgJiYgbmV3U3RhdGUgIT0gQWN0aXZlKSB7CisgICAgICAgIGlmIChuZXdTdGF0ZSAhPSBGcm96
ZW4pCisgICAgICAgICAgICB1bmFwcGx5QW5pbWF0aW9uKCk7CisgICAgICAgIGVuZGVkQWN0aXZl
SW50ZXJ2YWwoKTsKKyAgICB9CisgICAgbV9hY3RpdmVTdGF0ZSA9IG5ld1N0YXRlOworICAgIG1f
bmV4dFByb2dyZXNzVGltZSA9IGNhbGN1bGF0ZU5leHRQcm9ncmVzc1RpbWUoZWxhcHNlZCk7Cit9
CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50Ojpub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxD
aGFuZ2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCBuZXdPckV4aXN0aW5nKQoreworICAgIEFTU0VS
VChtX2ludGVydmFsQmVnaW4uaXNGaW5pdGUoKSk7CisgICAgc3RhdGljIEhhc2hTZXQ8U01JTFRp
bWluZ0VsZW1lbnQqPiBsb29wQnJlYWtlcjsKKyAgICBpZiAobG9vcEJyZWFrZXIuY29udGFpbnMo
dGhpcykpCisgICAgICAgIHJldHVybjsKKyAgICBsb29wQnJlYWtlci5hZGQodGhpcyk7CisgICAg
CisgICAgVGltZURlcGVuZGVudFNldDo6aXRlcmF0b3IgZW5kID0gbV90aW1lRGVwZW5kZW50cy5l
bmQoKTsKKyAgICBmb3IgKFRpbWVEZXBlbmRlbnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90aW1lRGVw
ZW5kZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU01JTFRpbWluZ0Vs
ZW1lbnQqIGRlcGVuZGVudCA9ICppdDsKKyAgICAgICAgZGVwZW5kZW50LT5jcmVhdGVJbnN0YW5j
ZVRpbWVzRnJvbVN5bmNiYXNlKHRoaXMsIG5ld09yRXhpc3RpbmcpOworICAgIH0KKworICAgIGxv
b3BCcmVha2VyLnJlbW92ZSh0aGlzKTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6
OmNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UoU01JTFRpbWluZ0VsZW1lbnQqIHN5bmNi
YXNlLCBOZXdPckV4aXN0aW5nSW50ZXJ2YWwgbmV3T3JFeGlzdGluZykKK3sKKyAgICAvLyBGSVhN
RTogVG8gYmUgcmVhbGx5IGNvcnJlY3QsIHRoaXMgc2hvdWxkIGhhbmRsZSB1cGRhdGluZyBleGlz
aW5nIGludGVydmFsIGJ5IGNoYW5naW5nIAorICAgIC8vIHRoZSBhc3NvY2lhdGVkIHRpbWVzIGlu
c3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMuCisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgeworICAgICAgICBDb25kaXRpb24mIGNvbmRpdGlv
biA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29u
ZGl0aW9uOjpTeW5jYmFzZSAmJiBjb25kaXRpb24ubV9iYXNlID09IHN5bmNiYXNlKSB7CisgICAg
ICAgICAgICBBU1NFUlQoY29uZGl0aW9uLm1fbmFtZSA9PSAiYmVnaW4iIHx8IGNvbmRpdGlvbi5t
X25hbWUgPT0gImVuZCIpOworICAgICAgICAgICAgLy8gTm8gbmVzdGVkIHRpbWUgY29udGFpbmVy
cyBpbiBTVkcsIG5vIG5lZWQgZm9yIGNyYXp5IHRpbWUgc3BhY2UgY29udmVyc2lvbnMuIFBoZXch
CisgICAgICAgICAgICBTTUlMVGltZSB0aW1lID0gMDsKKyAgICAgICAgICAgIGlmIChjb25kaXRp
b24ubV9uYW1lID09ICJiZWdpbiIpCisgICAgICAgICAgICAgICAgdGltZSA9IHN5bmNiYXNlLT5t
X2ludGVydmFsQmVnaW4gKyBjb25kaXRpb24ubV9vZmZzZXQ7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgdGltZSA9IHN5bmNiYXNlLT5tX2ludGVydmFsRW5kICsgY29uZGl0aW9u
Lm1fb2Zmc2V0OworICAgICAgICAgICAgQVNTRVJUKHRpbWUuaXNGaW5pdGUoKSk7CisgICAgICAg
ICAgICBpZiAoY29uZGl0aW9uLm1fYmVnaW5PckVuZCA9PSBCZWdpbikKKyAgICAgICAgICAgICAg
ICBhZGRCZWdpblRpbWUodGltZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YWRkRW5kVGltZSh0aW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KKyAgICAKK3ZvaWQgU01JTFRp
bWluZ0VsZW1lbnQ6OmFkZFRpbWVEZXBlbmRlbnQoU01JTFRpbWluZ0VsZW1lbnQqIGFuaW1hdGlv
bikKK3sKKyAgICBtX3RpbWVEZXBlbmRlbnRzLmFkZChhbmltYXRpb24pOworICAgIGlmIChtX2lu
dGVydmFsQmVnaW4uaXNGaW5pdGUoKSkKKyAgICAgICAgYW5pbWF0aW9uLT5jcmVhdGVJbnN0YW5j
ZVRpbWVzRnJvbVN5bmNiYXNlKHRoaXMsIE5ld0ludGVydmFsKTsKK30KKyAgICAKK3ZvaWQgU01J
TFRpbWluZ0VsZW1lbnQ6OnJlbW92ZVRpbWVEZXBlbmRlbnQoU01JTFRpbWluZ0VsZW1lbnQqIGFu
aW1hdGlvbikKK3sKKyAgICBtX3RpbWVEZXBlbmRlbnRzLnJlbW92ZShhbmltYXRpb24pOworfQor
ICAgIAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6aGFuZGxlQ29uZGl0aW9uRXZlbnQoRXZlbnQq
IGV2ZW50LCBDb25kaXRpb24qIGNvbmRpdGlvbikKK3sKKyAgICBpZiAoY29uZGl0aW9uLT5tX2Jl
Z2luT3JFbmQgPT0gQmVnaW4pCisgICAgICAgIGFkZEJlZ2luVGltZShlbGFwc2VkKCkgKyBjb25k
aXRpb24tPm1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIGFkZEVuZFRpbWUoZWxhcHNlZCgp
ICsgY29uZGl0aW9uLT5tX29mZnNldCk7Cit9CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OmJl
Z2luQnlMaW5rQWN0aXZhdGlvbigpCit7CisgICAgYWRkQmVnaW5UaW1lKGVsYXBzZWQoKSk7Cit9
CisgICAgCit9CisKKyNlbmRpZgorCkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWluZ0VsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltaW5nRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNpZm5kZWYgU01JTFRpbWlu
Z0VsZW1lbnRfaAorI2RlZmluZSBTTUlMVGltaW5nRWxlbWVudF9oCisjaWYgRU5BQkxFKFNWRykK
KworI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTTUlMVGltZS5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFz
cyBDb25kaXRpb25FdmVudExpc3RlbmVyOworICAgIGNsYXNzIFNNSUxUaW1lQ29udGFpbmVyOwor
CisgICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNNSUwgaW50ZXJ2YWwgdGltaW5nIG1vZGVs
IGFzIG5lZWRlZCBmb3IgU1ZHIGFuaW1hdGlvbi4KKyAgICBjbGFzcyBTTUlMVGltaW5nRWxlbWVu
dCA6IHB1YmxpYyBTVkdFbGVtZW50CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU01JTFRp
bWluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgICAgIHZp
cnR1YWwgflNNSUxUaW1pbmdFbGVtZW50KCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9v
bCBpc1RpbWluZ0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCk7CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2Vy
dmVEZWNscyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lQ29udGFpbmVyLmdldCgpOyB9CisKKyAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24o
KTsKKworICAgICAgICBlbnVtIFJlc3RhcnQgeyBSZXN0YXJ0QWx3YXlzLCBSZXN0YXJ0V2hlbk5v
dEFjdGl2ZSwgUmVzdGFydE5ldmVyIH07CisgICAgICAgIFJlc3RhcnQgcmVzdGFydCgpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgZW51bSBGaWxsTW9kZSB7IEZpbGxSZW1vdmUsIEZpbGxGcmVl
emUgfTsKKyAgICAgICAgRmlsbE1vZGUgZmlsbCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
U3RyaW5nIHhsaW5rSHJlZigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgU01JTFRpbWUgZHVy
KCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1lIHJlcGVhdER1cigpIGNvbnN0OworICAgICAgICBT
TUlMVGltZSByZXBlYXRDb3VudCgpIGNvbnN0OworICAgICAgICBTTUlMVGltZSBtYXhWYWx1ZSgp
IGNvbnN0OworICAgICAgICBTTUlMVGltZSBtaW5WYWx1ZSgpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OyAKKyAgICAgICAgCisgICAgICAgIFNNSUxU
aW1lIGludGVydmFsQmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsQmVnaW47IH0KKyAg
ICAgICAgU01JTFRpbWUgaW50ZXJ2YWxFbmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsRW5k
OyB9CisgICAgICAgIFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uKCkgY29uc3Q7CisgICAgICAgIAor
ICAgICAgICB2b2lkIHByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQpOworICAgICAgICBTTUlMVGlt
ZSBuZXh0UHJvZ3Jlc3NUaW1lKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgU01J
TFRpbWUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMgU01J
TFRpbWUgcGFyc2VPZmZzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgCitwcm90ZWN0
ZWQ6CisgICAgICAgIHZvaWQgYWRkQmVnaW5UaW1lKFNNSUxUaW1lIHRpbWUpOworICAgICAgICB2
b2lkIGFkZEVuZFRpbWUoU01JTFRpbWUgdGltZSk7CisgICAgICAgIAorcHJpdmF0ZToKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGFwcGx5QW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hcHBseUFuaW1hdGlvbigpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CisgICAgICAgIAorICAg
ICAgICBlbnVtIEJlZ2luT3JFbmQgeyBCZWdpbiwgRW5kIH07CisgICAgICAgIFNNSUxUaW1lIGZp
bmRJbnN0YW5jZVRpbWUoQmVnaW5PckVuZCBiZWdpbk9yRW5kLCBTTUlMVGltZSBtaW5pbXVtVGlt
ZSwgYm9vbCBlcXVhbHNNaW5pbXVtT0spIGNvbnN0OworICAgICAgICB2b2lkIHJlc29sdmVGaXJz
dEludGVydmFsKCk7CisgICAgICAgIHZvaWQgcmVzb2x2ZU5leHRJbnRlcnZhbCgpOworICAgICAg
ICB2b2lkIHJlc29sdmVJbnRlcnZhbChib29sIGZpcnN0LCBTTUlMVGltZSYgYmVnaW5SZXN1bHQs
IFNNSUxUaW1lJiBlbmRSZXN1bHQpIGNvbnN0OworICAgICAgICBTTUlMVGltZSByZXNvbHZlQWN0
aXZlRW5kKFNNSUxUaW1lIHJlc29sdmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBjb25z
dDsKKyAgICAgICAgU01JTFRpbWUgcmVwZWF0aW5nRHVyYXRpb24oKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjaGVja1Jlc3RhcnQoU01JTFRpbWUgZWxhcHNlZCk7CisgICAgICAgIHZvaWQgYmVnaW5M
aXN0Q2hhbmdlZCgpOworICAgICAgICB2b2lkIGVuZExpc3RDaGFuZ2VkKCk7CisgICAgICAgIHZv
aWQgcmVzY2hlZHVsZSgpOworCisgICAgICAgIC8vIFRoaXMgcmVwcmVzZW50cyBjb25kaXRpb25z
IG9uIGVsZW1lbnRzIGJlZ2luIG9yIGVuZCBsaXN0IHRoYXQgbmVlZCB0byBiZSByZXNvbHZlZCBv
biBydW50aW1lCisgICAgICAgIC8vIGZvciBleGFtcGxlIDxhbmltYXRlIGJlZ2luPSJvdGhlckVs
ZW1lbnQuYmVnaW4gKyA4czsgYnV0dG9uLmNsaWNrIiAuLi4gLz4KKyAgICAgICAgc3RydWN0IENv
bmRpdGlvbiB7CisgICAgICAgICAgICBlbnVtIFR5cGUgeyBFdmVudEJhc2UsIFN5bmNiYXNlLCBB
Y2Nlc3NLZXkgfTsKKyAgICAgICAgICAgIENvbmRpdGlvbihUeXBlLCBCZWdpbk9yRW5kIGJlZ2lu
T3JFbmQsIFN0cmluZyBiYXNlSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgU01JTFRpbWUgb2Zmc2V0
LCBpbnQgcmVwZWF0cyA9IC0xKTsKKyAgICAgICAgICAgIFR5cGUgbV90eXBlOworICAgICAgICAg
ICAgQmVnaW5PckVuZCBtX2JlZ2luT3JFbmQ7CisgICAgICAgICAgICBTdHJpbmcgbV9iYXNlSUQ7
CisgICAgICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgICAgICAgICAgU01JTFRpbWUgbV9vZmZz
ZXQ7CisgICAgICAgICAgICBpbnQgbV9yZXBlYXRzOworICAgICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG1fYmFzZTsKKyAgICAgICAgICAgIFJlZlB0cjxDb25kaXRpb25FdmVudExpc3RlbmVyPiBt
X2V2ZW50TGlzdGVuZXI7CisgICAgICAgIH07CisgICAgICAgIGJvb2wgcGFyc2VDb25kaXRpb24o
Y29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsKKyAgICAgICAgdm9pZCBwYXJz
ZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKKyAgICAgICAgdm9pZCBkaXNj
b25uZWN0Q29uZGl0aW9ucygpOworICAgICAgICAKKyAgICAgICAgLy8gRXZlbnQgYmFzZSB0aW1p
bmcKKyAgICAgICAgdm9pZCBoYW5kbGVDb25kaXRpb25FdmVudChFdmVudCosIENvbmRpdGlvbiop
OworICAgICAgICAKKyAgICAgICAgLy8gU3luY2Jhc2UgdGltaW5nCisgICAgICAgIGVudW0gTmV3
T3JFeGlzdGluZ0ludGVydmFsIHsgTmV3SW50ZXJ2YWwsIEV4aXN0aW5nSW50ZXJ2YWwgfTsgCisg
ICAgICAgIHZvaWQgbm90aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZChOZXdPckV4aXN0aW5n
SW50ZXJ2YWwpOworICAgICAgICB2b2lkIGNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2Uo
U01JTFRpbWluZ0VsZW1lbnQqIHN5bmNiYXNlLCBOZXdPckV4aXN0aW5nSW50ZXJ2YWwpOworICAg
ICAgICB2b2lkIGFkZFRpbWVEZXBlbmRlbnQoU01JTFRpbWluZ0VsZW1lbnQqKTsKKyAgICAgICAg
dm9pZCByZW1vdmVUaW1lRGVwZW5kZW50KFNNSUxUaW1pbmdFbGVtZW50Kik7CisgICAgICAgIAor
ICAgICAgICBlbnVtIEFjdGl2ZVN0YXRlIHsgSW5hY3RpdmUsIEFjdGl2ZSwgRnJvemVuIH07Cisg
ICAgICAgIEFjdGl2ZVN0YXRlIGRldGVybWluZUFjdGl2ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQp
IGNvbnN0OworICAgICAgICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0
KFNNSUxUaW1lIGVsYXBzZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OworICAgICAgICBTTUlM
VGltZSBjYWxjdWxhdGVOZXh0UHJvZ3Jlc3NUaW1lKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0Owor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPENvbmRpdGlvbj4gbV9jb25kaXRpb25zOworICAgICAg
ICBib29sIG1fY29uZGl0aW9uc0Nvbm5lY3RlZDsKKyAgICAgICAgYm9vbCBtX2hhc0VuZEV2ZW50
Q29uZGl0aW9uczsgICAgIAorICAgICAgICAKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFNNSUxU
aW1pbmdFbGVtZW50Kj4gVGltZURlcGVuZGVudFNldDsKKyAgICAgICAgVGltZURlcGVuZGVudFNl
dCBtX3RpbWVEZXBlbmRlbnRzOworICAgICAgICAKKyAgICAgICAgLy8gSW5zdGFuY2UgdGltZSBs
aXN0cworICAgICAgICBWZWN0b3I8U01JTFRpbWU+IG1fYmVnaW5UaW1lczsKKyAgICAgICAgVmVj
dG9yPFNNSUxUaW1lPiBtX2VuZFRpbWVzOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyB0
aGUgdXBjb21pbmcgb3IgY3VycmVudCBpbnRlcnZhbAorICAgICAgICBTTUlMVGltZSBtX2ludGVy
dmFsQmVnaW47CisgICAgICAgIFNNSUxUaW1lIG1faW50ZXJ2YWxFbmQ7CisgICAgICAgIAorICAg
ICAgICBib29sIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbDsKKyAgICAKKyAgICAgICAgQWN0
aXZlU3RhdGUgbV9hY3RpdmVTdGF0ZTsKKyAgICAgICAgCisgICAgICAgIFNNSUxUaW1lIG1fbmV4
dFByb2dyZXNzVGltZTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxTTUlMVGltZUNvbnRhaW5l
cj4gbV90aW1lQ29udGFpbmVyOworCisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0VsZW1lbnQ+
IG1fdGFyZ2V0RWxlbWVudDsKKyAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZER1cjsK
KyAgICAgICAgbXV0YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdER1cjsKKyAgICAgICAgbXV0
YWJsZSBTTUlMVGltZSBtX2NhY2hlZFJlcGVhdENvdW50OworICAgICAgICBtdXRhYmxlIFNNSUxU
aW1lIG1fY2FjaGVkTWluOworICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkTWF4Owor
ICAgICAgICAKKyAgICAgICAgZnJpZW5kIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7Cisg
ICAgfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20459</attachid>
            <date>2008-04-10 11:39:40 -0700</date>
            <delta_ts>2008-04-10 18:29:47 -0700</delta_ts>
            <desc>another updated patch</desc>
            <filename>svg-animation-6.patch</filename>
            <type>text/plain</type>
            <size>192246</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTc2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjgwIEBACisyMDA4LTA0LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWRvIHRoZSBTVkcgYW5pbWF0aW9uIHN1cHBvcnQuCisgICAgICAgIAorICAgICAgICBJdCBkb2Vz
CisgICAgICAgIC0gRnVsbCBTTUlMIGludGVydmFsIHRpbWluZyBtb2RlbCBpbmNsdWRpbmcgc3lu
Y2Jhc2UgYW5kIGV2ZW50IGJhc2UgdGltaW5nICh0aGUgaGFyZCBwYXJ0KS4KKyAgICAgICAgLSBD
U1MgYW5kIFhNTCBhdHRyaWJ1dGUgYW5pbWF0aW9uLgorICAgICAgICAtIExpbmVhciwgZGlzY3Jl
dGUgYW5kIHNwbGluZSBjYWxjTW9kZXMuCisgICAgICAgIC0gVmFsdWVzIGFuaW1hdGlvbiB3aXRo
IGtleVRpbWVzIGFuZCBrZXlTcGxpbmVzLgorICAgICAgICAtIExpbmsgYWN0aXZhdGVkIGFuaW1h
dGlvbnMuCisgICAgICAgIC0gUHJldHR5IGdvb2Qgc3VwcG9ydCBmb3IgPGFuaW1hdGU+IGFuZCA8
c2V0PiBhbmltYXRpb25zCisgICAgICAgIC0gQmFzaWMgc3VwcG9ydCBmb3IgPGFuaW1hdGVDb2xv
cj4sIDxhbmltYXRlTW90aW9uPiBhbmQgPGFuaW1hdGVUcmFuc2Zvcm0+LgorCisgICAgICAgIFRo
aXMgcGFzc2VzIHNvbWUgMzUgb2YgdGhlIDU2IHRlc3RzIGluIFczQyBTVkcgYW5pbWF0aW9uIHRl
c3Qgc3VpdGUsIGEgYnVuY2ggbW9yZQorICAgICAgICB3aXRoIHNvbWUgc3VidGVzdCBmYWlsdXJl
cy4KKworICAgICAgICBXaGF0IGlzIHN0aWxsIG1pc3NpbmcKKyAgICAgICAgLSBBZGRpdGl2ZSBh
bmltYXRpb24gd2l0aCBtdWx0aXBsZSBhbmltYXRpb25zIG9wZXJhdGluZyBvbiB0aGUgc2FtZSBw
cm9wZXJ0eS4gVGhpcyBpcyBhCisgICAgICAgICAgbWFqb3IgYXJjaGl0ZWN0dXJhbCBmZWF0dXJl
IGluIGFuaW1hdGlvbiBjb2RlLiBJdCBzaG91bGRuJ3QgYmUgdG9vIGhhcmQgdG8gYWRkLgorICAg
ICAgICAtIE9ubHkgPGFuaW1hdGU+IGltcGxlbWVudHMgYWNjdW11bGF0ZS4KKyAgICAgICAgLSA8
YW5pbWF0ZU1vdGlvbj4gZG9lcyBub3QgZG8gcGF0aHMsIGtleXBvaW50cywgcm90YXRlLgorICAg
ICAgICAtIDxhbmltYXRlVHJhbnNmb3JtPiBkb2VzIG5vdCB3b3JrIHdpdGggdGV4dCwgc29tZSB0
cmFuc2Zvcm1zIGFyZSBicm9rZW4uCisgICAgICAgIC0gY2FsY01vZGUgcGFjZWQgaXMgbWlzc2lu
Zy4KKyAgICAgICAgLSByZXBlYXQsIGJlZ2luRXZlbnQsIGVuZEV2ZW50IGFyZSBtaXNzaW5nLgor
ICAgICAgICAtIGFjY2Vzc2tleSgpIGlzIG1pc3NpbmcuCisgICAgICAgIC0gSlMgZG9lcyBub3Qg
c2VlIGNvcnJlY3QgdmFsdWVzIGZvciBiYXNlVmFsL2FuaW1WYWwsIGNoYW5naW5nIHZhbHVlcyB0
aGF0IGFyZSBiZWluZworICAgICAgICAgIGFuaW10ZWQgZm9yIGEgc2NyaXB0IHByb2R1Y2VzIHdy
b25nIHJlc3VsdHMuIE5vdCBtYWludGFpbmluZyBzZXBhcmF0ZSBwcmVzZW50YXRpb24gCisgICAg
ICAgICAgdmFsdWVzIGZvciBYTUwgYXR0cmlidXRlcyBpcyBhbiBhcmNoaXRlY3R1cmFsIHByb2Js
ZW0gaW4gb3VyIFNWRyBjb2RlLgorICAgICAgICAtIFNvbWUgb3RoZXIgc3R1ZmYgSSBmb3Jnb3Qg
b3IgZG8gbm90IGtub3cgYWJvdXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKiBoaXN0
b3J5L0NhY2hlZFBhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFnZTo6Q2FjaGVk
UGFnZSk6CisgICAgICAgIAorICAgICAgICBVc2UgY2FjaGUgbm90aWZpY2F0aW9uIG1lY2hhbmlz
bSB0byBzdGFydC9zdG9wIGFuaW1hdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvQW5p
bWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgICogc3ZnL0N1cnZlRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKEN1cnZlRGF0YTo6Q3VydmVEYXRhKToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2Ft
cGxlQ3VydmVYKToKKyAgICAgICAgKEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVZKToKKyAgICAgICAg
KEN1cnZlRGF0YTo6c2FtcGxlQ3VydmVEZXJpdmF0aXZlWCk6CisgICAgICAgIChDdXJ2ZURhdGE6
OnNvbHZlQ3VydmVYKToKKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RydWN0IHdhcyBpbiBwYWdl
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwLCBtb3ZlZCB0byBhIGhlYWRlciBzbyBpdAorICAgICAg
ICBjYW4gYmUgdXNlZCBmcm9tIFNWRyBhbmltYXRpb24gY29kZSB0b28uCisgICAgCisgICAgICAg
ICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgCisgICAgICAgIFN0YXJ0IHRhcmdldCBhbmlt
YXRpb24gb24gbGluayBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlQ29sb3JF
bGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJv
bUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0NvbG9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50
OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6KToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6c3RhcnRl
ZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5k
VG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpTVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6On5TVkdBbmltYXRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlS2V5VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxpbmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0U3RhcnRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEN1cnJlbnRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFNpbXBsZUR1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnRBdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnRBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGNNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50OjpieVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjphdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmlzQWRkaXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNBY2N1bXVsYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
Ojp0YXJnZXRBdHRyaWJ1dGVJc0NTUyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzb2x2ZUVwc2lsb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dW5hcHBseUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFs
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6KToKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgcHJl
dHR5IG11Y2ggYSBjb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBTVkdBbmltYXRpb25FbGVtZW50LiBU
aW1pbmcgcmVsYXRlZCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdhcyByZWZhY3RvcmVkIHRvIFNN
SUxUaW1pbmdFbGVtZW50IGNsYXNzIHRoYXQgdGhpcyBjbGFzcyBub3cgaW5oZXJpdHMuCisgICAg
ICAgIAorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFuaW1hdGlvbnMpOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Om93
bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIAorICAgICAgICBXZSBuZWVkIHRvIHJlYWNoIHRoZSA8
c3ZnPiBlbGVtZW50IGZyb20gPHVzZT4gdG9vIHNvIGdvIG91dCBmcm9tIHRoZSBzaGFkb3cgdHJl
ZS4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
VkdFbGVtZW50OjpwYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxl
bWVudDo6dW5wYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6YW5pbWF0aW9uc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpn
ZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp3aWxsU2F2
ZVRvQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6d2lsbFJlc3RvcmVG
cm9tQ2FjaGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50Ojp0aW1lQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50OjphcHBseUFuaW1h
dGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6Y2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5o
OgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHVGltZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9TVkdUaW1lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9UaW1lU2NoZWR1bGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvVGltZVNjaGVkdWxlci5oOiBSZW1vdmVkLgor
ICAgICAgICAKKyAgICAgICAgUmVwbGFjZWQgdGhlc2Ugd2l0aCBTTUlMVGltZUNvbnRhaW5lciBj
bGFzcy4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAg
IAorICAgICAgICBCdWcgZml4IHRvIHByZXZlbnQgY3Jhc2hlcyBpbiBhbmltYXRpb25zIHRlc3Rz
IHVzaW5nIDx1c2U+LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcispOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3ItKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjpTTUlMVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZTo6dW5yZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZTo6aW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lOjp2YWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTTUlMVGltZTo6aXNGaW5pdGUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWU6Omlz
SW5kZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZTo6aXNVbnJlc29sdmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj4pOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjptYXgpOgorICAgICAgICAoV2Vi
Q29yZTo6bWluKToKKyAgICAgICAgCisgICAgICAgIEEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdp
dGggc3BlY2lhbCB2YWx1ZXMgImluZGVmaW5pdGUiIGFuZCAidW5yZXNvbHZlZCIuCisgICAgICAg
IAorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2NoZWR1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWVDb250YWluZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29u
dGFpbmVyOjppc1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpyZXN1bWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRp
bWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuaDogQWRkZWQuCisgICAgICAgIAorICAgICAgICBNYW5hZ2VzIHRo
ZSBjbG9jayBhbmQga2VlcHMgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBhbmltYXRpb25zLgorICAgICAg
ICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1pbmdFbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVyOjpDb25kaXRpb25FdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmRpdGlvbkV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpDb25kaXRp
b246OkNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6U01J
TFRpbWluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6On5T
TUlMVGltaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
aW5nRWxlbWVudDo6cGFyc2VPZmZzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
aW5nRWxlbWVudDo6cGFyc2VDbG9ja1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVNv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFRpbWVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50OjpwYXJzZUNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltaW5nRWxlbWVudDo6aXNUaW1pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNN
SUxUaW1pbmdFbGVtZW50OjpwYXJzZUJlZ2luT3JFbmQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1pbmdFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltaW5nRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWluZ0VsZW1lbnQ6OnRhcmdldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OmVsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZp
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnhsaW5rSHJlZik6Cisg
ICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6ZHVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXBlYXREdXIpOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWluZ0VsZW1lbnQ6OnJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1p
bmdFbGVtZW50OjptYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVu
dDo6bWluVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnNpbXBs
ZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjphZGRCZWdp
blRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmFkZEVuZFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmZpbmRJbnN0YW5jZVRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlcGVhdGluZ0R1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlQWN0aXZlRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlSW50ZXJ2YWwp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlc29sdmVGaXJzdEludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlTmV4dElu
dGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpuZXh0UHJvZ3Jl
c3NUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkxpc3RD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjplbmRMaXN0Q2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6Y2hlY2tSZXN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRp
b25QZXJjZW50QW5kUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50
OjpjYWxjdWxhdGVOZXh0UHJvZ3Jlc3NUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1p
bmdFbGVtZW50OjpkZXRlcm1pbmVBY3RpdmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltaW5nRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0Vs
ZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmFkZFRpbWVEZXBlbmRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OnJlbW92ZVRpbWVEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWluZ0VsZW1lbnQ6OmhhbmRsZUNvbmRpdGlvbkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjpiZWdpbkJ5TGlua0Fj
dGl2YXRpb24pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6dGltZUNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltaW5nRWxlbWVudDo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEJlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlNNSUxUaW1pbmdFbGVtZW50OjppbnRlcnZhbEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltaW5nRWxlbWVudDo6Q29uZGl0aW9uOjopOgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
YnN0cmFjdCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBTTUlMIHRpbWluZyBtb2RlbC4gQXMgYW4gb3V0
cHV0IGl0IHByb2R1Y2VzIGNhbGxzCisgICAgICAgIHRvIHRoZXNlIHZpcnR1YWwgZnVuY3Rpb25z
OgorICAgICAgICAKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2
YWwoKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQg
cGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQg
dW5hcHBseUFuaW1hdGlvbigpID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFj
dGl2ZUludGVydmFsKCkgPSAwOworCiAyMDA4LTA0LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaXR6LgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDMxNzQwKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMxNTYsMTAgKzMxNTYsNiBAQAogCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkEy
MDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3BwICovOyB9OwogCQlCMjhDNkEy
QTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTIxMEQwMEM0NDgwMDMzNEFBNCAvKiBT
VkdJbWFnZUxvYWRlci5oICovOyB9OwotCQlCMjhDNkEyQjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZH
VGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI4QzZBMjIwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmNwcCAqLzsgfTsKLQkJQjI4QzZB
MkMwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkEyMzBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHVGlt
ZXIuaCAqLzsgfTsKLQkJQjI4QzZBMkQwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZB
MjQwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVTY2hlZHVsZXIuY3BwICovOyB9OwotCQlCMjhDNkEy
RTBEMDBDNDQ4MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZBMjUwRDAwQzQ0ODAwMzM0QUE0IC8qIFRp
bWVTY2hlZHVsZXIuaCAqLzsgfTsKIAkJQjI5N0JDNzAwQjNDMTRDRjAwNDVBNTkwIC8qIEpTU1ZH
UGF0aFNlZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI5N0JDNkYwQjNDMTRDRjAwNDVBNTkwIC8qIEpTU1ZHUGF0aFNlZ0xpc3RD
dXN0b20uY3BwICovOyB9OwogCQlCMkEwMTVBODBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3ND
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovOyB9Owog
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4OTYsNiArMzg5MiwxMyBAQAogCQlFNDQ2MTQzQzBDRDY4
OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpT
SFRNTFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8q
IFJlbmRlclZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07
CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYy
RUNFIC8qIFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0NkU5NzhEMERBQUQ2NTMwMDcxRTg5NCAv
KiBTTUlMVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDZFOTc4NzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuY3BwICovOyB9OworCQlF
NDZFOTc4RTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5Nzg4MERBQUQ2NTMwMDcxRTg5NCAvKiBT
TUlMVGltZS5oICovOyB9OworCQlFNDZFOTc4RjBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWVD
b250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ2RTk3ODkwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmNwcCAqLzsg
fTsKKwkJRTQ2RTk3OTAwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZFOTc4QTBEQUFE
NjUzMDA3MUU4OTQgLyogU01JTFRpbWVDb250YWluZXIuaCAqLzsgfTsKKwkJRTQ2RTk3OTEwREFB
RDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5NzhCMERBQUQ2NTMwMDcxRTg5NCAvKiBT
TUlMVGltaW5nRWxlbWVudC5jcHAgKi87IH07CisJCUU0NkU5NzkyMERBQUQ2NTMwMDcxRTg5NCAv
KiBTTUlMVGltaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2RTk3OEMwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50
LmggKi87IH07CisJCUU0NkU5RUIyMERBQzdDNjAwMDcxRTg5NCAvKiBDdXJ2ZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkU5RUIxMERBQzdD
NjAwMDcxRTg5NCAvKiBDdXJ2ZURhdGEuaCAqLzsgfTsKIAkJRTQ5NjI2QzIwRDgwRDk0ODAwRTM0
MDVDIC8qIFByZWxvYWRTY2FubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5l
ci5jcHAgKi87IH07CiAJCUU0OTYyNkMzMEQ4MEQ5NDkwMEUzNDA1QyAvKiBQcmVsb2FkU2Nhbm5l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENEFC
RTEwRDc1NDJGMTAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVyLmggKi87IH07CiAJCUU0QzI3OTU4
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVu
ZGVyTWVkaWEuY3BwICovOyB9OwpAQCAtODE1MCw2ICs4MTUzLDEzIEBACiAJCUU0NDYxNDExMENE
NjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDYxNDEyMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTk3ODcwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxU
aW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNNSUxUaW1lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2RTk3ODgwREFBRDY1MzAwNzFFODk0
IC8qIFNNSUxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNNSUxUaW1l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NkU5Nzg5MERBQUQ2NTMwMDcxRTg5
NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTTUlMVGltZUNvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0NkU5NzhBMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTTUlMVGltZUNvbnRhaW5lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDZFOTc4QjBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRp
bWluZ0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU01J
TFRpbWluZ0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDZFOTc4
QzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU01JTFRpbWluZ0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTQ2RTlFQjEwREFDN0M2MDAwNzFFODk0IC8qIEN1cnZlRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXJ2ZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMDEwQ0JGOEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3Jlc3NFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQxRTAyMENCRjhFQUEwMEFGMkVD
RSAvKiBQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMDMwQ0JG
OEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFByb2dyZXNzRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwNTMs
OSArMTEwNjMsMTEgQEAKIAkJQjIyMjc3Q0EwRDAwQkYxRTAwNzFCNzgyIC8qIHN2ZyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTQ2RTk3ODYwREFBRDYx
QjAwNzFFODk0IC8qIGFuaW1hdGlvbiAqLywKIAkJCQlCMjU1OTg4NjBEMDBEOEI4MDBCQjgyNUMg
LyogZ3JhcGhpY3MgKi8sCiAJCQkJQjIyMjc3Q0IwRDAwQkYxRjAwNzFCNzgyIC8qIENvbG9yRGlz
dGFuY2UuY3BwICovLAogCQkJCUIyMjI3N0NDMEQwMEJGMUYwMDcxQjc4MiAvKiBDb2xvckRpc3Rh
bmNlLmggKi8sCisJCQkJRTQ2RTlFQjEwREFDN0M2MDAwNzFFODk0IC8qIEN1cnZlRGF0YS5oICov
LAogCQkJCUU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAq
LywKIAkJCQlFNDE1RjEwQzBEOUEwNTg3MDAzM0NFOTcgLyogRWxlbWVudFRpbWVDb250cm9sLmlk
bCAqLywKIAkJCQlCMjIyNzdDRDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCkBAIC0xMjMwOSw2ICsxMjMyMSwxOSBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNl
c1RhYnMgPSAwOwogCQl9OworCQlFNDZFOTc4NjBEQUFENjFCMDA3MUU4OTQgLyogYW5pbWF0aW9u
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlFNDZFOTc4
NzBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWUuY3BwICovLAorCQkJCUU0NkU5Nzg4MERBQUQ2
NTMwMDcxRTg5NCAvKiBTTUlMVGltZS5oICovLAorCQkJCUU0NkU5Nzg5MERBQUQ2NTMwMDcxRTg5
NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgKi8sCisJCQkJRTQ2RTk3OEEwREFBRDY1MzAwNzFF
ODk0IC8qIFNNSUxUaW1lQ29udGFpbmVyLmggKi8sCisJCQkJRTQ2RTk3OEIwREFBRDY1MzAwNzFF
ODk0IC8qIFNNSUxUaW1pbmdFbGVtZW50LmNwcCAqLywKKwkJCQlFNDZFOTc4QzBEQUFENjUzMDA3
MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gYW5pbWF0
aW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRUQ1MDFEQzkwQjI0OUYz
OTAwQUUxOEQ5IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC0xNDQ3NSw3ICsxNDUwMCw2IEBACiAJCQkJQjIyMjdBQ0IwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1RleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FDRTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHVGV4dFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0FEMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQjI4QzZBMkMwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR1RpbWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0FENDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGl0bGVFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FENzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
VHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FERDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ1NDgsNyArMTQ1
NzIsNiBAQAogCQkJCUIyQzNEQTRCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MURGNkQ3RTBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0IwMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFu
Z2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjhDNkEyRTBEMDBDNDQ4MDAzMzRBQTQgLyogVGlt
ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1
IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGQkFFODBCNTE1MkVEMDAwMUYxRDcg
LyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1OEQ3
QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NzUyLDYgKzE0Nzc1LDkgQEAK
IAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQxNUYxODQwRDlBMUE4MzAwMzNDRTk3IC8qIEVsZW1lbnRUaW1lQ29udHJvbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRkJGMkIwRDlBRjA0NzAwOEZDMjkyIC8qIFNWR0hLZXJu
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ2RTk3OEUwREFBRDY1MzAwNzFFODk0IC8q
IFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZFOTc5MDBEQUFENjUzMDA3MUU4OTQg
LyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NkU5NzkyMERBQUQ2
NTMwMDcxRTg5NCAvKiBTTUlMVGltaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdB
Q0NFNDIwREEyOTgwRjAwODlFNjAyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ3NTksNiArMTQ3ODUsNyBAQAogCQkJCTUxRTBCQjM4MERB
NUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzUzQzVG
NTBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjcy
RDg0MERBOTgwMDkwMDg0NEUyRiAvKiBPcmlnaW5TdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFNDZFOUVCMjBEQUM3QzYwMDA3MUU4OTQgLyogQ3VydmVEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE2MTU4LDcgKzE2MTg1LDYgQEAKIAkJCQlCMjIyN0FDQTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQ0QwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0FEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCMjhDNkEyQjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RpdGxl
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FENjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QURDMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2
MjI4LDcgKzE2MjU0LDYgQEAKIAkJCQlCMkMzREE0QTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0
cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURGNkQ4MDBCOTJBMThFMDBDMkRDODUgLyog
VGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTNBRjBDRDYzMzEwMDBGQURB
NzUgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjhDNkEyRDBEMDBDNDQ4
MDAzMzRBQTQgLyogVGltZVNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUVB
NDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3
MzYwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczODBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTE2NDEzLDYgKzE2NDM4LDkgQEAKIAkJCQlCQ0UxQzQxQzBEOTgyOTgxMDAzQjAyRjIgLyog
TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMUM0M0IwRDk4MzBEMzAwM0IwMkYy
IC8qIEpTTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMUM0NDAwRDk4MzBGNDAw
M0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ2RTk3
OEQwREFBRDY1MzAwNzFFODk0IC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
NkU5NzhGMERBQUQ2NTMwMDcxRTg5NCAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlFNDZFOTc5MTBEQUFENjUzMDA3MUU4OTQgLyogU01JTFRpbWluZ0VsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5QzcwREEwNTlEQzAwMjUwOTExIC8qIFN0b3Jh
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpT
U3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUwQkFCQzBEQTU1NDcxMDBBOUU0MTcg
LyogU3RvcmFnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMzE3NDApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw3ICsxMzgsNiBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVk
ZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVGltZVNjaGVkdWxlci5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4
OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDExICsxMDcsNiBAQCBDYWNo
ZWRQYWdlOjpDYWNoZWRQYWdlKFBhZ2UqIHBhZ2UpCiAgICAgfQogCiAgICAgbV9kb2N1bWVudC0+
c2V0SW5QYWdlQ2FjaGUodHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX2RvY3Vt
ZW50ICYmIG1fZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkKLSAgICAgICAgbV9kb2N1bWVudC0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5wYXVzZUFuaW1hdGlvbnMoKTsKLSNlbmRpZgogfQogCiBD
YWNoZWRQYWdlOjp+Q2FjaGVkUGFnZSgpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNs
dWRlICJDdXJ2ZURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00Miw5MSArNDMsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVs
YXkgPSAwLjAyNTsKIAotc3RydWN0IEN1cnZlRGF0YSB7Ci0gICAgQ3VydmVEYXRhKGRvdWJsZSBw
MXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnkpCi0gICAgewotICAgICAgICAv
LyBDYWxjdWxhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzLCBpbXBsaWNpdCBmaXJzdCBh
bmQgbGFzdCBjb250cm9sIHBvaW50cyBhcmUgKDAsMCkgYW5kICgxLDEpLgotICAgICAgICBjeCA9
IDMuMCAqIHAxeDsKLSAgICAgICAgYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIGN4OwotICAgICAg
ICBheCA9IDEuMCAtIGN4IC1ieDsKLSAgICAgICAgIAotICAgICAgICBjeSA9IDMuMCAqIHAxeTsK
LSAgICAgICAgYnkgPSAzLjAgKiAocDJ5IC0gcDF5KSAtIGN5OwotICAgICAgICBheSA9IDEuMCAt
IGN5IC0gYnk7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBzYW1wbGVDdXJ2ZVgoZG91YmxlIHQp
Ci0gICAgewotICAgICAgICAvLyBgYXggdF4zICsgYnggdF4yICsgY3ggdCcgZXhwYW5kZWQgdXNp
bmcgSG9ybmVyJ3MgcnVsZS4KLSAgICAgICAgcmV0dXJuICgoYXggKiB0ICsgYngpICogdCArIGN4
KSAqIHQ7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSBzYW1wbGVDdXJ2ZVkoZG91YmxlIHQpCi0g
ICAgewotICAgICAgICByZXR1cm4gKChheSAqIHQgKyBieSkgKiB0ICsgY3kpICogdDsKLSAgICB9
Ci0gICAgCi0gICAgZG91YmxlIHNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoZG91YmxlIHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gKDMuMCAqIGF4ICogdCArIDIuMCAqIGJ4KSAqIHQgKyBjeDsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gR2l2ZW4gYW4geCB2YWx1ZSwgZmluZCBhIHBhcmFtZXRyaWMgdmFs
dWUgaXQgY2FtZSBmcm9tLgotICAgIGRvdWJsZSBzb2x2ZUN1cnZlWChkb3VibGUgeCwgZG91Ymxl
IGVwc2lsb24pCi0gICAgewotICAgICAgICBkb3VibGUgdDA7Ci0gICAgICAgIGRvdWJsZSB0MTsK
LSAgICAgICAgZG91YmxlIHQyOwotICAgICAgICBkb3VibGUgeDI7Ci0gICAgICAgIGRvdWJsZSBk
MjsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgLy8gRmlyc3QgdHJ5IGEgZmV3IGl0ZXJhdGlv
bnMgb2YgTmV3dG9uJ3MgbWV0aG9kIC0tIG5vcm1hbGx5IHZlcnkgZmFzdC4KLSAgICAgICAgZm9y
ICh0MiA9IHgsIGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICB4MiA9IHNhbXBsZUN1
cnZlWCh0MikgLSB4OwotICAgICAgICAgICAgaWYgKGZhYnMgKHgyKSA8IGVwc2lsb24pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHQyOwotICAgICAgICAgICAgZDIgPSBzYW1wbGVDdXJ2ZURlcml2
YXRpdmVYKHQyKTsKLSAgICAgICAgICAgIGlmIChmYWJzKGQyKSA8IDFlLTYpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0MiA9IHQyIC0geDIgLyBkMjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgYmlzZWN0aW9uIG1ldGhvZCBmb3IgcmVsaWFi
aWxpdHkuCi0gICAgICAgIHQwID0gMC4wOwotICAgICAgICB0MSA9IDEuMDsKLSAgICAgICAgdDIg
PSB4OwotCi0gICAgICAgIGlmICh0MiA8IHQwKQotICAgICAgICAgICAgcmV0dXJuIHQwOwotICAg
ICAgICBpZiAodDIgPiB0MSkKLSAgICAgICAgICAgIHJldHVybiB0MTsKLQotICAgICAgICB3aGls
ZSAodDAgPCB0MSkgewotICAgICAgICAgICAgeDIgPSBzYW1wbGVDdXJ2ZVgodDIpOwotICAgICAg
ICAgICAgaWYgKGZhYnMoeDIgLSB4KSA8IGVwc2lsb24pCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHQyOwotICAgICAgICAgICAgaWYgKHggPiB4MikKLSAgICAgICAgICAgICAgICB0MCA9IHQyOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHQxID0gdDI7Ci0gICAgICAgICAgICB0
MiA9ICh0MSAtIHQwKSAqIC41ICsgdDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsdXJl
LgotICAgICAgICByZXR1cm4gdDI7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBkb3VibGUg
YXg7Ci0gICAgZG91YmxlIGJ4OwotICAgIGRvdWJsZSBjeDsKLSAgICAKLSAgICBkb3VibGUgYXk7
Ci0gICAgZG91YmxlIGJ5OwotICAgIGRvdWJsZSBjeTsKLX07Ci0KIC8vIFRoZSBlcHNpbG9uIHZh
bHVlIHdlIHBhc3MgdG8gc29sdmVDdXJ2ZVggZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdv
aW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBhbmltYXRp
b24sIHRoZSBtb3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24gcmVz
dWx0IHRvIGF2b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBkb3VibGUg
c29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0
aW9uKTsgfQpJbmRleDogV2ViQ29yZS9zdmcvQ3VydmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvQ3VydmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9DdXJ2ZURh
dGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyAjaWZuZGVmIEN1cnZlRGF0YV9oCisgI2RlZmlu
ZSBDdXJ2ZURhdGFfaAorCitzdHJ1Y3QgQ3VydmVEYXRhIHsKKyAgICBDdXJ2ZURhdGEoZG91Ymxl
IHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSkKKyAgICB7CisgICAgICAg
IC8vIENhbGN1bGF0ZSB0aGUgcG9seW5vbWlhbCBjb2VmZmljaWVudHMsIGltcGxpY2l0IGZpcnN0
IGFuZCBsYXN0IGNvbnRyb2wgcG9pbnRzIGFyZSAoMCwwKSBhbmQgKDEsMSkuCisgICAgICAgIGN4
ID0gMy4wICogcDF4OworICAgICAgICBieCA9IDMuMCAqIChwMnggLSBwMXgpIC0gY3g7CisgICAg
ICAgIGF4ID0gMS4wIC0gY3ggLWJ4OworICAgICAgICAgCisgICAgICAgIGN5ID0gMy4wICogcDF5
OworICAgICAgICBieSA9IDMuMCAqIChwMnkgLSBwMXkpIC0gY3k7CisgICAgICAgIGF5ID0gMS4w
IC0gY3kgLSBieTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHNhbXBsZUN1cnZlWChkb3VibGUg
dCkKKyAgICB7CisgICAgICAgIC8vIGBheCB0XjMgKyBieCB0XjIgKyBjeCB0JyBleHBhbmRlZCB1
c2luZyBIb3JuZXIncyBydWxlLgorICAgICAgICByZXR1cm4gKChheCAqIHQgKyBieCkgKiB0ICsg
Y3gpICogdDsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHNhbXBsZUN1cnZlWShkb3VibGUgdCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoKGF5ICogdCArIGJ5KSAqIHQgKyBjeSkgKiB0OworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChkb3VibGUgdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAoMy4wICogYXggKiB0ICsgMi4wICogYngpICogdCArIGN4Owor
ICAgIH0KKyAgICAKKyAgICAvLyBHaXZlbiBhbiB4IHZhbHVlLCBmaW5kIGEgcGFyYW1ldHJpYyB2
YWx1ZSBpdCBjYW1lIGZyb20uCisgICAgZG91YmxlIHNvbHZlQ3VydmVYKGRvdWJsZSB4LCBkb3Vi
bGUgZXBzaWxvbikKKyAgICB7CisgICAgICAgIGRvdWJsZSB0MDsKKyAgICAgICAgZG91YmxlIHQx
OworICAgICAgICBkb3VibGUgdDI7CisgICAgICAgIGRvdWJsZSB4MjsKKyAgICAgICAgZG91Ymxl
IGQyOworICAgICAgICBpbnQgaTsKKworICAgICAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0
aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LgorICAgICAgICBm
b3IgKHQyID0geCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIHgyID0gc2FtcGxl
Q3VydmVYKHQyKSAtIHg7CisgICAgICAgICAgICBpZiAoZmFicyAoeDIpIDwgZXBzaWxvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdDI7CisgICAgICAgICAgICBkMiA9IHNhbXBsZUN1cnZlRGVy
aXZhdGl2ZVgodDIpOworICAgICAgICAgICAgaWYgKGZhYnMoZDIpIDwgMWUtNikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHQyID0gdDIgLSB4MiAvIGQyOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxp
YWJpbGl0eS4KKyAgICAgICAgdDAgPSAwLjA7CisgICAgICAgIHQxID0gMS4wOworICAgICAgICB0
MiA9IHg7CisKKyAgICAgICAgaWYgKHQyIDwgdDApCisgICAgICAgICAgICByZXR1cm4gdDA7Cisg
ICAgICAgIGlmICh0MiA+IHQxKQorICAgICAgICAgICAgcmV0dXJuIHQxOworCisgICAgICAgIHdo
aWxlICh0MCA8IHQxKSB7CisgICAgICAgICAgICB4MiA9IHNhbXBsZUN1cnZlWCh0Mik7CisgICAg
ICAgICAgICBpZiAoZmFicyh4MiAtIHgpIDwgZXBzaWxvbikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdDI7CisgICAgICAgICAgICBpZiAoeCA+IHgyKQorICAgICAgICAgICAgICAgIHQwID0gdDI7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdDEgPSB0MjsKKyAgICAgICAgICAg
IHQyID0gKHQxIC0gdDApICogLjUgKyB0MDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhaWx1
cmUuCisgICAgICAgIHJldHVybiB0MjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGRvdWJs
ZSBheDsKKyAgICBkb3VibGUgYng7CisgICAgZG91YmxlIGN4OworICAgIAorICAgIGRvdWJsZSBh
eTsKKyAgICBkb3VibGUgYnk7CisgICAgZG91YmxlIGN5OworfTsKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTTUlMVGltaW5nRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogCkBA
IC0xMzgsMTAgKzEzOSwyMSBAQCB2b2lkIFNWR0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2CiAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5pc0VtcHR5KCkpIC8vIGlmIHRhcmdldCBpcyBl
bXB0eSwgZGVmYXVsdCB0byAiX3NlbGYiIG9yIHVzZSB4bGluazp0YXJnZXQgaWYgc2V0CiAgICAg
ICAgICAgICB0YXJnZXQgPSAoZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnNob3dBdHRyKSA9PSAi
bmV3IikgPyAiX2JsYW5rIiA6ICJfc2VsZiI7CiAKLSAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNl
VVJMKGhyZWYoKSk7Ci0gICAgICAgIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAg
ICAgIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB1
cmwgPSBwYXJzZVVSTChocmVmKCkpOworICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCIj
IikpIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQodXJsLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICAgICAgaWYg
KFNNSUxUaW1pbmdFbGVtZW50Ojppc1RpbWluZ0VsZW1lbnQodGFyZ2V0RWxlbWVudCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgU01JTFRpbWluZ0VsZW1lbnQqIHRpbWVkID0gc3RhdGljX2Nhc3Q8
U01JTFRpbWluZ0VsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
dGltZWQtPmJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBldnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsKSwgdGFyZ2V0LCBldnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgfQogCiAgICAgICAgIGV2
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRl
Q29sb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBAIC0z
NCw2ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgbmVlZHMgdG8gZGllLiBTVkdBbmlt
YXRlRWxlbWVudCAod2hpY2ggaGFzIHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5KSBzaG91
bGQgYmUgaW5zdGFudGlhdGVkIGluc3RlYWQuCiAKIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNW
R0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQpAQCAtNDQs
NTcgKzQ1LDMzIEBAIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsK
IH0KIAotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCgpCit2b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpCiB7Ci0gICAgbV9iYXNlQ29sb3IgPSBT
VkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZSgpKTsKLSAgICBtX2Zyb21Db2xvciA9IENvbG9yKCk7Ci0gICAgbV90b0NvbG9yID0gQ29s
b3IoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAg
IENvbG9yIGJhc2VDb2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3Nh
dmVkQmFzZVZhbHVlKTsKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShD
b2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNlQ29sb3IsIG1fYW5pbWF0ZWRDb2xv
cikubmFtZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKQorYm9vbCBTVkdBbmltYXRl
Q29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpCiB7Ci0g
ICAgaWYgKGlzQWRkaXRpdmUoKSkKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZShDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Jhc2VDb2xvciwgbV9hbmlt
YXRlZENvbG9yKS5uYW1lKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKKyAgICBDb2xvciBvbGRDb2xv
ciA9IG1fYW5pbWF0ZWRDb2xvcjsKKyAgICBtX2FuaW1hdGVkQ29sb3IgPSBDb2xvckRpc3RhbmNl
KG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2UpLmFkZFRv
Q29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgcmV0dXJuIG1fYW5pbWF0ZWRDb2xvciAh
PSBvbGRDb2xvcjsKK30KKyAgICAKK2Jvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5n
JiB0b1N0cmluZykKK3sKKyAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JG
cm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1v
ZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQorYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpj
YWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJ5U3RyaW5nKQogewotICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRPX0FOSU1BVElP
TikKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVhdGlvbjogdmFs
dWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UKLSAgICAgICAgbV9hbmlt
YXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZShtX2Jhc2VDb2xvciwgbV90b0NvbG9yKS5zY2FsZWRE
aXN0YW5jZSh0aW1lUGVyY2VudGFnZSkuYWRkVG9Db2xvckFuZENsYW1wKG1fYmFzZUNvbG9yKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENvbG9yRGlzdGFuY2UobV9mcm9t
Q29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFkZFRvQ29s
b3JBbmRDbGFtcChtX2Zyb21Db2xvcik7Ci0gICAgcmV0dXJuIChtX2FuaW1hdGVkQ29sb3IgIT0g
bV9iYXNlQ29sb3IpOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0
ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2
YWx1ZUluZGV4KQotewotICAgIHN3aXRjaCAoYW5pbWF0aW9uTW9kZSkgewotICAgIGNhc2UgRlJP
TV9UT19BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJv
bVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAgIGNh
c2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9t
UkdCQ29sb3JTdHJpbmcobV90byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRlJPTV9CWV9B
TklNQVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNv
bG9yU3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyhtX2J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCWV9BTklN
QVRJT046Ci0gICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9y
U3RyaW5nKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENv
bG9yc0FuZENsYW1wKG1fZnJvbUNvbG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJp
bmcobV9ieSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZBTFVFU19BTklNQVRJT046Ci0g
ICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1f
dmFsdWVzW3ZhbHVlSW5kZXhdKTsKLSAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsg
MSkgPCBtX3ZhbHVlcy5zaXplKCkpID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21Db2xvcjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOT19BTklNQVRJT046Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLSAgICAKKyAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xv
clN0cmluZyhmcm9tU3RyaW5nKTsKKyAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRD
b2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3Ry
aW5nKGJ5U3RyaW5nKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMCArMzcsMTggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVh
bCB+U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVB
bmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1
ZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVu
dCh1bnNpZ25lZCByZXBlYXQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21B
bmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJp
bmcpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKICAgICAgICAgQ29sb3IgbV9hbmltYXRl
ZENvbG9yOwotCiAgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKICAgICAgICAgQ29sb3IgbV9mcm9t
Q29sb3I7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxNSArMjUsMjAgQEAKICNpZiBFTkFCTEUo
U1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNsdWRlICJTVkdBbmltYXRlRWxlbWVu
dC5oIgogCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJDb2xv
ckRpc3RhbmNlLmgiCisjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXJzZXJV
dGlsaXRpZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQo
dGFnTmFtZSwgZG9jKQotICAgICwgbV9jdXJyZW50SXRlbSgtMSkKKyAgICAsIG1fcHJvcGVydHlU
eXBlKFN0cmluZ1Byb3BlcnR5KQorICAgICwgbV9mcm9tTnVtYmVyKDApCisgICAgLCBtX3RvTnVt
YmVyKDApCisgICAgLCBtX2FuaW1hdGVkTnVtYmVyKG51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCkpCiB7CiB9CiAKQEAgLTQwLDYgKzQ2LDEzMSBAQCBTVkdBbmltYXRlRWxlbWVudDo6
flNWR0FuaW1hdGVFbGVtZW50KCkKIHsKIH0KIAorc3RhdGljIGJvb2wgcGFyc2VOdW1iZXJWYWx1
ZUFuZFVuaXQoY29uc3QgU3RyaW5nJiBpbiwgZG91YmxlJiB2YWx1ZSwgU3RyaW5nJiB1bml0KQor
eworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZnJvbSB0b3Agb2YgbXkgaGVhZCwgZmlndXJlIG91
dCBhbGwgcHJvcGVydHkgdHlwZXMgdGhhdCBjYW4gYmUgYW5pbWF0ZWQgYXMgbnVtYmVycy4KKyAg
ICB1bnNpZ25lZCB1bml0TGVuZ3RoID0gMDsKKyAgICBTdHJpbmcgcGFyc2UgPSBpbi5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICBpZiAocGFyc2UuZW5kc1dpdGgoIiUiKSkKKyAgICAgICAgdW5pdExl
bmd0aCA9IDE7CisgICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoInB4IikgfHwgcGFyc2UuZW5k
c1dpdGgoInB0IikgfHwgcGFyc2UuZW5kc1dpdGgoImVtIikpCisgICAgICAgIHVuaXRMZW5ndGgg
PSAyOworICAgIGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJkZWciKSB8fCBwYXJzZS5lbmRzV2l0
aCgicmFkIikpCisgICAgICAgIHVuaXRMZW5ndGggPSAzOworICAgIGVsc2UgaWYgKHBhcnNlLmVu
ZHNXaXRoKCJncmFkIikpCisgICAgICAgIHVuaXRMZW5ndGggPSA0OworICAgIFN0cmluZyBuZXdV
bml0ID0gcGFyc2UucmlnaHQodW5pdExlbmd0aCk7CisgICAgU3RyaW5nIG51bWJlciA9IHBhcnNl
LmxlZnQocGFyc2UubGVuZ3RoKCkgLSB1bml0TGVuZ3RoKTsKKyAgICBpZiAoIXVuaXQuaXNFbXB0
eSgpICYmIG5ld1VuaXQgIT0gdW5pdCB8fCBudW1iZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgVUNoYXIgbGFzdCA9IG51bWJlcltudW1iZXIubGVuZ3RoKCkgLSAxXTsK
KyAgICBpZiAobGFzdCA8ICcwJyB8fCBsYXN0ID4gJzknKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdW5pdCA9IG5ld1VuaXQ7CisgICAgYm9vbCBvazsKKyAgICB2YWx1ZSA9IG51bWJlci50
b0RvdWJsZSgmb2spOworICAgIHJldHVybiBvazsKK30KKwordm9pZCBTVkdBbmltYXRlRWxlbWVu
dDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBlbnRpcmVseSB3cm9uZyB3YXkgdG8gZG8gYWRkaXRpdmUuIEl0IHdv
bid0IHdvcmsgd2l0aAorICAgIC8vIG11bHRpcGxlIGFuaW1hdGlvbnMgb24gdGhlIHNhbWUgZWxl
bWVudC4KKyAgICAvLyBXZSBuZWVkIHRvIGFkZCB0b2dldGhlciBhbGwgYW5pbWF0aW9uIGNvbnRy
aWJ1dGlvbnMgcGVyIHByb3BlcnR5IGFuZAorICAgIC8vIHRoZW4gYXBwbHkgaW4gb25lIGdvLgor
ICAgIFN0cmluZyB2YWx1ZVRvQXBwbHk7CisgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJl
clByb3BlcnR5KSB7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSBtX2FuaW1hdGVkTnVtYmVyOwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB3b3JrIGZvciB2YWx1ZXMgYW5pbWF0aW9u
LgorICAgICAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdCkKKyAgICAgICAgICAgIG51
bWJlciArPSBtX3RvTnVtYmVyICogcmVwZWF0OworICAgICAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7
CisgICAgICAgICAgICBkb3VibGUgYmFzZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJW
YWx1ZUFuZFVuaXQobV9zYXZlZEJhc2VWYWx1ZSwgYmFzZSwgbV9udW1iZXJVbml0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBudW1iZXIgKz0gYmFzZTsKKyAgICAgICAg
fQorICAgICAgICB2YWx1ZVRvQXBwbHkgPSBTdHJpbmc6Om51bWJlcihudW1iZXIpICsgbV9udW1i
ZXJVbml0OworICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkg
eworICAgICAgICBDb2xvciBiYXNlID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KG1fc2F2ZWRCYXNlVmFsdWUpOworICAgICAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7CisgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNl
LCBtX2FuaW1hdGVkQ29sb3IpLm5hbWUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2
YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkQ29sb3IubmFtZSgpOworICAgIH0gZWxzZQorICAgICAg
ICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOworICAgIHNldFRhcmdldEF0dHJpYnV0
ZUFuaW1hdGVkVmFsdWUodmFsdWVUb0FwcGx5KTsKK30KKworYm9vbCBTVkdBbmltYXRlRWxlbWVu
dDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKQoreworICAgIGlmIChtX3By
b3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgICAgICBkb3VibGUgb2xkVmFsdWUg
PSBtX2FuaW1hdGVkTnVtYmVyOworICAgICAgICBtX2FuaW1hdGVkTnVtYmVyID0gKG1fdG9OdW1i
ZXIgLSBtX2Zyb21OdW1iZXIpICogcGVyY2VudGFnZSArIG1fZnJvbU51bWJlcjsKKyAgICAgICAg
cmV0dXJuIG9sZFZhbHVlID09IG1fYW5pbWF0ZWROdW1iZXI7CisgICAgfSAKKyAgICBpZiAobV9w
cm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgICAgICBtX2FuaW1hdGVkQ29sb3Ig
PSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHBl
cmNlbnRhZ2UpLmFkZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSB0
aGlzLT5hbmltYXRpb25Nb2RlKCk7CisgICAgQVNTRVJUKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRv
QW5pbWF0aW9uIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgYW5pbWF0aW9uTW9k
ZSA9PSBWYWx1ZXNBbmltYXRpb24pOworICAgIFN0cmluZyBvbGRWYWx1ZSA9IG1fYW5pbWF0ZWRT
dHJpbmc7CisgICAgaWYgKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJj
ZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50
YWdlID09IDEuMGYpCisgICAgICAgIG1fYW5pbWF0ZWRTdHJpbmcgPSBtX3RvU3RyaW5nOworICAg
IGVsc2UKKyAgICAgICAgbV9hbmltYXRlZFN0cmluZyA9IG1fZnJvbVN0cmluZzsKKyAgICByZXR1
cm4gb2xkVmFsdWUgPT0gbV9hbmltYXRlZFN0cmluZzsKK30KKyAKK3N0YXRpYyBib29sIGlzQ29s
b3JBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIGF0dHJp
YnV0ZSA9PSAiY29sb3IiIHx8IGF0dHJpYnV0ZSA9PSAiZmlsbCIgfHwgYXR0cmlidXRlID09ICJz
dHJva2UiOworfQorCitib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9W
YWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQor
eworICAgIC8vIEZJWE1FOiBOZWVkcyBtb3JlIHNvbGlkIHdheSBkZXRlcm1pbmUgdGFyZ2V0IGF0
dHJpYnV0ZSB0eXBlLgorICAgIG1fcHJvcGVydHlUeXBlID0gaXNDb2xvckF0dHJpYnV0ZShhdHRy
aWJ1dGVOYW1lKCkpID8gQ29sb3JQcm9wZXJ0eSA6IE51bWJlclByb3BlcnR5OworICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGZyb21TdHJpbmcpOworICAgICAgICBt
X3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwor
ICAgICAgICBpZiAobV9mcm9tQ29sb3IuaXNWYWxpZCgpICYmIG1fdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX251bWJl
clVuaXQgPSBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZy
b21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkgeworICAgICAgICAgICAgaWYg
KHBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KHRvU3RyaW5nLCBtX3RvTnVtYmVyLCBtX251bWJlclVu
aXQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IG1fZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CisgICAgbV90b1N0cmluZyA9IHRvU3RyaW5nOwor
ICAgIG1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25z
dCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpCit7CisgICAgbV9w
cm9wZXJ0eVR5cGUgPSBpc0NvbG9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUoKSkgPyBDb2xvclBy
b3BlcnR5IDogTnVtYmVyUHJvcGVydHk7CisgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9y
UHJvcGVydHkpIHsKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBmcm9tU3RyaW5nLmlzRW1wdHkoKSA/
IENvbG9yKCkgOiBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7
CisgICAgICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1f
ZnJvbUNvbG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYnlTdHJpbmcpKTsK
KyAgICAgICAgaWYgKCFtX2Zyb21Db2xvci5pc1ZhbGlkKCkgfHwgIW1fdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9u
dW1iZXJVbml0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fZnJvbU51bWJlciA9IDA7CisgICAgICAg
IGlmICghZnJvbVN0cmluZy5pc0VtcHR5KCkgJiYgIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZy
b21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFwYXJzZU51bWJlclZhbHVlQW5kVW5pdChieVN0cmluZywg
bV90b051bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgbV90b051bWJlciArPSBtX2Zyb21OdW1iZXI7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
aAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0zNywxMyArMzgsMjUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBm
bG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFn
ZVBhc3QpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVG
cm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1
ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcm
IGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fY3VycmVudEl0ZW07Ci0KLSAgICAgICAgU3RyaW5n
IG1fc2F2ZWRUbzsKKyAgICAgICAgZW51bSBQcm9wZXJ0eVR5cGUgeyBOdW1iZXJQcm9wZXJ0eSwg
Q29sb3JQcm9wZXJ0eSwgU3RyaW5nUHJvcGVydHkgfTsKKyAgICAgICAgUHJvcGVydHlUeXBlIG1f
cHJvcGVydHlUeXBlOworICAgICAgICAKKyAgICAgICAgZG91YmxlIG1fZnJvbU51bWJlcjsKKyAg
ICAgICAgZG91YmxlIG1fdG9OdW1iZXI7CisgICAgICAgIGRvdWJsZSBtX2FuaW1hdGVkTnVtYmVy
OworICAgICAgICBTdHJpbmcgbV9udW1iZXJVbml0OworICAgICAgICBDb2xvciBtX2Zyb21Db2xv
cjsKKyAgICAgICAgQ29sb3IgbV90b0NvbG9yOworICAgICAgICBDb2xvciBtX2FuaW1hdGVkQ29s
b3I7CisgICAgICAgIFN0cmluZyBtX2Zyb21TdHJpbmc7CisgICAgICAgIFN0cmluZyBtX3RvU3Ry
aW5nOworICAgICAgICBTdHJpbmcgbV9hbmltYXRlZFN0cmluZzsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBTVkdOYW1lczsKIAogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAg
OiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fYmFzZUluZGV4SW5U
cmFuc2Zvcm1MaXN0KDApCiAgICAgLCBtX3JvdGF0ZU1vZGUoQW5nbGVNb2RlKQogICAgICwgbV9h
bmdsZSgwKQogewotICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9QQUNFRDsKIH0KIAogU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRlTW90aW9uRWxlbWVudCgpCkBAIC04Niw4ICs4
Niw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGUKICAgICAgICAg
ICAgIG1fYW5nbGUgPSBhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlQb2ludHNBdHRyKSB7Ci0gICAg
ICAgIG1fa2V5UG9pbnRzLmNsZWFyKCk7Ci0gICAgICAgIHBhcnNlS2V5TnVtYmVycyhtX2tleVBv
aW50cywgYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQga2V5IHBv
aW50cy4KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZEF0dHIpIHsK
ICAgICAgICAgbV9wYXRoID0gUGF0aCgpOwogICAgICAgICBwYXRoRnJvbVNWR0RhdGEobV9wYXRo
LCBhdHRyLT52YWx1ZSgpKTsKQEAgLTExMSwxOCArMTEwLDEzIEBAIFBhdGggU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2Rl
IGFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4
LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKIHsKLSAgICBpZiAoYW5pbWF0aW9u
TW9kZSA9PSBUT19BTklNQVRJT04pIHsKLSAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEg
c3BlY2lhbCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSAr
IGJhc2UKLSAgICAgICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldFdpZHRoKChtX3RvUG9pbnQu
eCgpIC0gbV9iYXNlUG9pbnQueCgpKSAqIHRpbWVQZXJjZW50YWdlICsgbV9iYXNlUG9pbnQueCgp
KTsKLSAgICAgICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodCgobV90b1BvaW50Lnko
KSAtIG1fYmFzZVBvaW50LnkoKSkgKiB0aW1lUGVyY2VudGFnZSArIG1fYmFzZVBvaW50LnkoKSk7
Ci0gICAgICAgIG1fYW5pbWF0ZWRBbmdsZSA9IDAuMGY7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldFdpZHRoKG1fcG9pbnREaWZmLndpZHRoKCkgKiBwZXJj
ZW50YWdlUGFzdCArIG1fZnJvbVBvaW50LngoKSk7Ci0gICAgICAgIG1fYW5pbWF0ZWRUcmFuc2xh
dGlvbi5zZXRIZWlnaHQobV9wb2ludERpZmYuaGVpZ2h0KCkgKiBwZXJjZW50YWdlUGFzdCArIG1f
ZnJvbVBvaW50LnkoKSk7Ci0gICAgICAgIG1fYW5pbWF0ZWRBbmdsZSA9IG1fYW5nbGVEaWZmICog
cGVyY2VudGFnZVBhc3QgKyBtX2Zyb21BbmdsZTsKLSAgICB9CisgICAgRmxvYXRTaXplIGRpZmYg
PSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKKyAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0
V2lkdGgoZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50LngoKSk7CisgICAg
bV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodChkaWZmLmhlaWdodCgpICogcGVyY2VudGFn
ZSArIG1fZnJvbVBvaW50LnkoKSk7CisgICAgLy8gRklYTUU6IEFuaW1hdGUgYW5nbGVzCisgICAg
bV9hbmltYXRlZEFuZ2xlID0gMDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQ2LDU5ICsx
NDAsMjcgQEAgc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIAogICAgIAog
ICAgIHBvaW50ID0gRmxvYXRQb2ludCh4LCB5KTsKICAgICAKLSAgICAvLyBkaXNhbGxvdyBhbnlp
bmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kCisgICAgLy8gZGlzYWxsb3cgYW55dGhpbmcgZXhj
ZXB0IHNwYWNlcyBhdCB0aGUgZW5kCiAgICAgcmV0dXJuICFza2lwT3B0aW9uYWxTcGFjZXMoY3Vy
LCBlbmQpOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJ
bmRleCkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1Zh
bHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCiB7
Ci0gICAgbV9mcm9tQW5nbGUgPSAwLjBmOwotICAgIG1fdG9BbmdsZSA9IDAuMGY7Ci0gICAgc3dp
dGNoIChhbmltYXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKLSAgICAg
ICAgcGFyc2VQb2ludChtX2Zyb20sIG1fZnJvbVBvaW50KTsKLSAgICAgICAgLy8gZmFsbCB0aHJv
dWdoCi0gICAgY2FzZSBUT19BTklNQVRJT046Ci0gICAgICAgIHBhcnNlUG9pbnQobV90bywgbV90
b1BvaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGUk9NX0JZX0FOSU1BVElPTjoKLSAg
ICAgICAgcGFyc2VQb2ludChtX2Zyb20sIG1fZnJvbVBvaW50KTsKLSAgICAgICAgcGFyc2VQb2lu
dChtX3RvLCBtX3RvUG9pbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJZX0FOSU1BVElP
TjoKLSAgICB7Ci0gICAgICAgIHBhcnNlUG9pbnQobV9mcm9tLCBtX2Zyb21Qb2ludCk7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgYnlQb2ludDsKLSAgICAgICAgcGFyc2VQb2ludChtX2J5LCBieVBvaW50
KTsKLSAgICAgICAgbV90b1BvaW50ID0gRmxvYXRQb2ludChtX2Zyb21Qb2ludC54KCkgKyBieVBv
aW50LngoKSwgbV9mcm9tUG9pbnQueSgpICsgYnlQb2ludC55KCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgotICAgICAgICBwYXJzZVBvaW50KG1f
dmFsdWVzW3ZhbHVlSW5kZXhdLCBtX2Zyb21Qb2ludCk7Ci0gICAgICAgIGlmICgodmFsdWVJbmRl
eCArIDEpIDwgbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcGFyc2VQb2ludChtX3ZhbHVl
c1t2YWx1ZUluZGV4ICsgMV0sIG1fdG9Qb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fdG9Qb2ludCA9IG1fZnJvbVBvaW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5PX0FO
SU1BVElPTjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAg
IG1fcG9pbnREaWZmID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7Ci0gICAgbV9hbmdsZURpZmYg
PSAwLjBmOwotICAgIHJldHVybiAobV9wb2ludERpZmYud2lkdGgoKSAhPSAwIHx8IG1fcG9pbnRE
aWZmLmhlaWdodCgpICE9IDApOworICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywgbV9mcm9tUG9p
bnQpOworICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAgcmV0dXJuIHRy
dWU7CiB9Ci0KLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJh
c2VWYWx1ZUZyb21FbGVtZW50KCkKLXsKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHls
ZWRUcmFuc2Zvcm1hYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtX2Jh
c2VQb2ludCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFy
Z2V0RWxlbWVudCgpKS0+Z2V0QkJveCgpLmxvY2F0aW9uKCk7Citib29sIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQoreworICAgIHBhcnNlUG9pbnQoZnJvbVN0cmlu
ZywgbV9mcm9tUG9pbnQpOworICAgIEZsb2F0UG9pbnQgYnlQb2ludDsKKyAgICBwYXJzZVBvaW50
KGJ5U3RyaW5nLCBieVBvaW50KTsKKyAgICBtX3RvUG9pbnQgPSBGbG9hdFBvaW50KG1fZnJvbVBv
aW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55KCkgKyBieVBvaW50LnkoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5
QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpCit2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojph
cHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KQogewogICAgIGlmICgh
dGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjA4LDE5ICsxNzAsMzQgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YXBw
bHlBbmltYQogICAgIGlmICghdHJhbnNmb3JtTGlzdCkKICAgICAgICAgcmV0dXJuOwogICAgIAor
ICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlwbGUgYWRkaXRpdmUgYW5pbWF0aW9ucy4KICAgICBF
eGNlcHRpb25Db2RlIGVjOwotICAgIGlmICghaXNBZGRpdGl2ZSgpKQorICAgIGlmIChpc0FkZGl0
aXZlKCkpIHsKKyAgICAgICAgd2hpbGUgKHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKSA+
IG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0KQorICAgICAgICAgICAgdHJhbnNmb3JtTGlzdC0+
cmVtb3ZlSXRlbSh0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCkgLSAxLCBlYyk7CisgICAg
fSBlbHNlCiAgICAgICAgIHRyYW5zZm9ybUxpc3QtPmNsZWFyKGVjKTsKLSAgICAKKwogICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuaW1hdGVk
QW5nbGUpOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV9hbmltYXRlZFRyYW5zbGF0aW9uLndp
ZHRoKCksIG1fYW5pbWF0ZWRUcmFuc2xhdGlvbi5oZWlnaHQoKSk7CiAgICAgaWYgKCF0cmFuc2Zv
cm0uaXNJZGVudGl0eSgpKSB7CiAgICAgICAgIHRyYW5zZm9ybUxpc3QtPmFwcGVuZEl0ZW0oU1ZH
VHJhbnNmb3JtKHRyYW5zZm9ybSksIGVjKTsKICAgICAgICAgdHJhbnNmb3JtYWJsZUVsZW1lbnQt
PnNldFRyYW5zZm9ybSh0cmFuc2Zvcm1MaXN0LmdldCgpKTsKLSAgICAgICAgaWYgKHRyYW5zZm9y
bWFibGVFbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgdHJhbnNmb3JtYWJsZUVsZW1l
bnQtPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBzaG91bGQgYmUgcGFydCBv
ZiBzZXRUcmFuc2Zvcm0KICAgICB9CisgICAgaWYgKHRyYW5zZm9ybWFibGVFbGVtZW50LT5yZW5k
ZXJlcigpKQorICAgICAgICB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3VsZCBiZSBwYXJ0IG9mIHNldFRyYW5zZm9ybQorfQorCit2
b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQorewor
ICAgIC8vIEZJWE1FOiBNYWtlIG11bHRpcGxlIGFkZGl0aXZlIGFuaW1hdGlvbnMgd29yay4KKyAg
ICBTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICBpZiAo
IW1fYW5pbWF0aW9uVmFsaWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtYWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgbV9i
YXNlSW5kZXhJblRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+dHJhbnNmb3Jt
KCktPm51bWJlck9mSXRlbXMoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90
aW9uRWxlbWVudC5oCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0
KCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0aW9u
QmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZh
bHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgICAgICAg
ICAgICAgCkBAIC00NiwxMSArNDUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwg
dW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25l
ZCB2YWx1ZUluZGV4KTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUo
ZmxvYXQgcGVyY2VudCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9W
YWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsK
KyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJp
bmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpOworICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOwogICAgICAgICAKICAgICBw
cml2YXRlOgotICAgICAgICBGbG9hdFBvaW50IG1fYmFzZVBvaW50OwogICAgICAgICBGbG9hdFNp
emUgbV9hbmltYXRlZFRyYW5zbGF0aW9uOwogICAgICAgICBmbG9hdCBtX2FuaW1hdGVkQW5nbGU7
CiAgICAgICAgIApAQCAtNjAsOSArNjEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEZsb2F0UG9pbnQgbV90b1BvaW50OwogICAgICAgICBmbG9hdCBtX3RvQW5nbGU7CiAgICAgICAg
IAotICAgICAgICBGbG9hdFNpemUgbV9wb2ludERpZmY7Ci0gICAgICAgIGZsb2F0IG1fYW5nbGVE
aWZmOwotICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9iYXNlSW5kZXhJblRyYW5zZm9ybUxp
c3Q7CisgICAgICAgICAgICAgICAgCiAgICAgICAgIFBhdGggbV9wYXRoOwogICAgICAgICBWZWN0
b3I8ZmxvYXQ+IG1fa2V5UG9pbnRzOwogICAgICAgICBlbnVtIFJvdGF0ZU1vZGUgewpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMzE3
NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCiAKICNpbmNsdWRlIDxt
YXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQ1LDYgKzQ0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fdHlw
ZShTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKKyAgICAsIG1fYmFzZUluZGV4
SW5UcmFuc2Zvcm1MaXN0KDApCiB7CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6On5TVkdBbmltYXRlVAogCiBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpoYXNWYWxpZFRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChTVkdBbmltYXRp
b25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpICYmIHRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRU
cmFuc2Zvcm1hYmxlKCkpOworICAgIHJldHVybiBTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxp
ZFRhcmdldCgpICYmIHRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCk7CiB9
CiAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKQEAgLTc0LDk0ICs3NCw2NyBAQCB2b2lkIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hCiAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1v
ZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJj
ZW50YWdlUGFzdCkKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKIHsKLSAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBU
T19BTklNQVRJT04pCi0gICAgICAgIC8vIHRvLWFuaW1hdGlvbnMgaGF2ZSBhIHNwZWNpYWwgZXF1
YXRpb246IHZhbHVlID0gKHRvIC0gYmFzZSkgKiAodGltZS9kdXJhdGlvbikgKyBiYXNlCi0gICAg
ICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX2Jhc2VUcmFu
c2Zvcm0sIG1fdG9UcmFuc2Zvcm0pLnNjYWxlZERpc3RhbmNlKHRpbWVQZXJjZW50YWdlKS5hZGRU
b1NWR1RyYW5zZm9ybShtX2Jhc2VUcmFuc2Zvcm0pOwotICAgIGVsc2UKLSAgICAgICAgbV9hbmlt
YXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fZnJvbVRyYW5zZm9ybSwgbV90
b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFkZFRvU1ZHVHJhbnNm
b3JtKG1fZnJvbVRyYW5zZm9ybSk7Ci0gICAgcmV0dXJuIChtX2FuaW1hdGVkVHJhbnNmb3JtICE9
IG1fYmFzZVRyYW5zZm9ybSk7Ci19Ci0KLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCkKLXsKLSAgICBtX2Jhc2VUcmFu
c2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
KCk7Ci0gICAgbV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgbV9hbmltYXRl
ZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotICAgIAotICAgIGlmICghdGFyZ2V0RWxlbWVu
dCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7Ci0g
ICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRy
YW5zZm9ybSgpOwotICAgIGlmICghdHJhbnNmb3JtTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIG1fYmFzZVRyYW5zZm9ybSA9IHRyYW5zZm9ybUxpc3QtPmNvbmNhdGVuYXRl
Rm9yVHlwZShtX3R5cGUpOwotICAgIAotICAgIC8vIElmIGEgYmFzZSB2YWx1ZSBpcyBlbXB0eSwg
aXRzIHR5cGUgc2hvdWxkIG1hdGNoIG1fdHlwZSBpbnN0ZWFkIG9mIGJlaW5nIHVua25vd24uCi0g
ICAgLy8gSXQncyBub3QgY2VydGFpbiB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgU1ZH
VHJhbnNmb3JtTGlzdCBvciBub3QgLS0gY3lpbmcKLSAgICBpZiAobV9iYXNlVHJhbnNmb3JtLnR5
cGUoKSA9PSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgbV9i
YXNlVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKG1fdHlwZSk7Ci0gICAgICAgIAorICAgIG1fYW5p
bWF0ZWRUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX2Zyb21UcmFuc2Zvcm0sIG1f
dG9UcmFuc2Zvcm0pLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2UpLmFkZFRvU1ZHVHJhbnNmb3Jt
KG1fZnJvbVRyYW5zZm9ybSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpCit2b2lkIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5z
aWduZWQgcmVwZWF0KQogewotICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5z
Zm9ybWFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxp
c3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIEFTU0VSVCh0
YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKTsKKyAgIAorICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm1hYmxlRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKKyAg
ICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybWFibGVF
bGVtZW50LT50cmFuc2Zvcm0oKTsKICAgICBpZiAoIXRyYW5zZm9ybUxpc3QpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlwbGUgYWRkaXRpdmUgdHJh
bmZvcm1zLgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgaWYgKCFpc0FkZGl0aXZlKCkpCisg
ICAgaWYgKGlzQWRkaXRpdmUoKSkgeworICAgICAgICB3aGlsZSAodHJhbnNmb3JtTGlzdC0+bnVt
YmVyT2ZJdGVtcygpID4gbV9iYXNlSW5kZXhJblRyYW5zZm9ybUxpc3QpCisgICAgICAgICAgICB0
cmFuc2Zvcm1MaXN0LT5yZW1vdmVJdGVtKHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKSAt
IDEsIGVjKTsKKyAgICB9IGVsc2UKICAgICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwot
ICAgIAogICAgIHRyYW5zZm9ybUxpc3QtPmFwcGVuZEl0ZW0obV9hbmltYXRlZFRyYW5zZm9ybSwg
ZWMpOwotICAgIHRyYW5zZm9ybS0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybUxpc3QuZ2V0KCkpOwot
ICAgIGlmICh0cmFuc2Zvcm0tPnJlbmRlcmVyKCkpCi0gICAgICAgIHRyYW5zZm9ybS0+cmVuZGVy
ZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3VsZCByZWFsbHkgYmUgaW4gc2V0VHJh
bnNmb3JtCi19Ci0KLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1
ZUluZGV4KQotewotICAgIHN3aXRjaCAoYW5pbWF0aW9uTW9kZSkgewotICAgIGNhc2UgRlJPTV9U
T19BTklNQVRJT046Ci0gICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFs
dWUobV9mcm9tKTsKLSAgICAgICAgLy8gZmFsbCB0aHJvdWdoCi0gICAgY2FzZSBUT19BTklNQVRJ
T046Ci0gICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdG8pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICBtX2Zy
b21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7Ci0gICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fYnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFu
c2Zvcm1WYWx1ZShtX2Zyb20pOwotICAgICAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMobV9mcm9tVHJhbnNmb3JtLCBwYXJzZVRyYW5zZm9y
bVZhbHVlKG1fYnkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9O
OgotICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdmFsdWVz
W3ZhbHVlSW5kZXhdKTsKLSAgICAgICAgbV90b1RyYW5zZm9ybSA9ICgodmFsdWVJbmRleCArIDEp
IDwgbV92YWx1ZXMuc2l6ZSgpKSA/IHBhcnNlVHJhbnNmb3JtVmFsdWUobV92YWx1ZXNbdmFsdWVJ
bmRleCArIDFdKSA6IG1fZnJvbVRyYW5zZm9ybTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
T19BTklNQVRJT046Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KICAgICAK
KyAgICBpZiAodHJhbnNmb3JtYWJsZUVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHRyYW5z
Zm9ybWFibGVFbGVtZW50LT5yZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8gc2hv
dWxkIHJlYWxseSBiZSBpbiBzZXRUcmFuc2Zvcm0KK30KKyAgICAKK2Jvb2wgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCit7CisgICAgbV9mcm9tVHJhbnNmb3Jt
ID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShmcm9tU3RyaW5nKTsKKyAgICBtX3RvVHJhbnNmb3JtID0g
cGFyc2VUcmFuc2Zvcm1WYWx1ZSh0b1N0cmluZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpCit7CisKKyAg
ICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKGZyb21TdHJpbmcpOworICAg
IG1fdG9UcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3Jtcyht
X2Zyb21UcmFuc2Zvcm0sIHBhcnNlVHJhbnNmb3JtVmFsdWUoYnlTdHJpbmcpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKyAgICAKK3ZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnN0YXJ0
ZWRBY3RpdmVJbnRlcnZhbCgpCit7CisgICAgLy8gRklYTUU6IE1ha2UgbXVsdGlwbGUgYWRkaXRp
dmUgYW5pbWF0aW9ucyB3b3JrLgorICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3Rp
dmVJbnRlcnZhbCgpOworICAgIGlmICghbV9hbmltYXRpb25WYWxpZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm1hYmxl
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFy
Z2V0RWxlbWVudCgpKTsKKyAgICBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9y
bWFibGVFbGVtZW50LT50cmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpOworfQogCiBTVkdUcmFu
c2Zvcm0gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJhbnNmb3JtVmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKICAgICBTVkdUcmFuc2Zvcm0gcmVzdWx0OwotICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7Ci0gICAgU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3R5cGUsIHB0ciwgcHRyICsgdmFsdWUubGVuZ3Ro
KCksIHJlc3VsdCk7IC8vIGlnbm9yaW5nIHJldHVybiB2YWx1ZQorICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHByZXR0eSBkdW1iIGJ1dCBwYXJzZVRyYW5zZm9ybVZhbHVlKCkgd2FudHMgdGhvc2UgcGFy
ZW50aGVzaXMuCisgICAgU3RyaW5nIHBhcnNlU3RyaW5nKCIoIiArIHZhbHVlICsgIikiKTsKKyAg
ICBjb25zdCBVQ2hhciogcHRyID0gcGFyc2VTdHJpbmcuY2hhcmFjdGVycygpOworICAgIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUobV90eXBlLCBwdHIsIHB0ciArIHBhcnNl
U3RyaW5nLmxlbmd0aCgpLCByZXN1bHQpOyAvLyBpZ25vcmluZyByZXR1cm4gdmFsdWUKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmgJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYgKzQxLDMwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJh
c2VWYWx1ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVk
VmFsdWVUb0VsZW1lbnQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZh
bHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRW
YWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVl
SW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnQp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0
cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICAgICAgCiAKICAgICBwcml2YXRlOgogICAg
ICAgICBTVkdUcmFuc2Zvcm0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25z
dDsKICAgICAgICAgdm9pZCBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgZG91YmxlJiBhbmdsZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7
CiAgICAgICAgIAogICAgICAgICBTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBl
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9iYXNlSW5kZXhJblRyYW5zZm9ybUxpc3Q7
CiAKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fdG9UcmFuc2Zvcm07CiAgICAgICAgIFNWR1RyYW5z
Zm9ybSBtX2Zyb21UcmFuc2Zvcm07CiAKLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYmFzZVRyYW5z
Zm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYW5pbWF0ZWRUcmFuc2Zvcm07CiAgICAgfTsK
IApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxNzQwKQor
KysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIsNiArMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKIApAQCAtMjUsNzc4ICsyNiw0MTMgQEAKICNpZiBFTkFCTEUoU1ZHKQog
I2luY2x1ZGUgIlNWR0FuaW1hdGlvbkVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5j
bHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlRpbWVTY2hlZHVsZXIuaCIK
ICNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxt
YXRoLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
LXVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKLQogU1ZHQW5pbWF0aW9uRWxlbWVudDo6U1ZHQW5p
bWF0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgOiBTTUlMVGltaW5nRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiAgICAgLCBTVkdUZXN0cygpCiAgICAgLCBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkKCkKLSAgICAsIG1fdGFyZ2V0RWxlbWVudCgwKQotICAgICwgbV9jb25uZWN0
ZWRUb1RpbWVyKGZhbHNlKQotICAgICwgbV9jdXJyZW50VGltZSgwLjApCi0gICAgLCBtX3NpbXBs
ZUR1cmF0aW9uKDAuMCkKLSAgICAsIG1fZmlsbChGSUxMX1JFTU9WRSkKLSAgICAsIG1fcmVzdGFy
dChSRVNUQVJUX0FMV0FZUykKLSAgICAsIG1fY2FsY01vZGUoQ0FMQ01PREVfTElORUFSKQotICAg
ICwgbV9hZGRpdGl2ZShBRERJVElWRV9SRVBMQUNFKQotICAgICwgbV9hY2N1bXVsYXRlKEFDQ1VN
VUxBVEVfTk9ORSkKLSAgICAsIG1fYXR0cmlidXRlVHlwZShBVFRSSUJVVEVUWVBFX0FVVE8pCi0g
ICAgLCBtX21heCgwLjApCi0gICAgLCBtX21pbigwLjApCi0gICAgLCBtX2VuZCgwLjApCi0gICAg
LCBtX2JlZ2luKDAuMCkKLSAgICAsIG1fcmVwZXRpdGlvbnMoMCkKLSAgICAsIG1fcmVwZWF0Q291
bnQoMCkKLSAgICAsIG1fYW5pbWF0aW9uQmVnaW4oREJMX01BWCkKLSAgICAsIG1fYW5pbWF0aW9u
RW5kKERCTF9NQVgpCisgICAgLCBtX2FuaW1hdGlvblZhbGlkKGZhbHNlKQogewotCiB9CiAKIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRpb25FbGVtZW50KCkKIHsKIH0KLQotYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRhcmdldEVsZW1lbnQoKTsKLX0KLQotU1ZHRWxlbWVudCogU1ZHQW5pbWF0aW9uRWxlbWVudDo6
dGFyZ2V0RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RhcmdldEVsZW1lbnQpIHsKLSAg
ICAgICAgTm9kZSAqdGFyZ2V0ID0gMDsKLSAgICAgICAgaWYgKCFtX2hyZWYuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChTVkdVUklS
ZWZlcmVuY2U6OmdldFRhcmdldChtX2hyZWYpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgICAgIC8vIFRPRE8gOiBkbyB3ZSByZWFsbHkgbmVlZCB0byBza2lw
IG5vbiBlbGVtZW50IG5vZGVzPyBDYW4gdGhhdCBoYXBwZW4gYXQgYWxsPwotICAgICAgICAgICAg
dGFyZ2V0ID0gcGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgd2hpbGUgKHRhcmdldCkgewotICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQtPm5vZGVUeXBlKCkgIT0gRUxFTUVOVF9OT0RFKQotICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkK
LSAgICAgICAgICAgIG1fdGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0
YXJnZXQpOwotICAgIH0KLSAKLSAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OwotfQotCi1mbG9h
dCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRFbmRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChtX2VuZCk7Ci19Ci0KLWZsb2F0IFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmdldFN0YXJ0VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQobV9iZWdpbik7Ci19Ci0KLWZsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEN1
cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdCht
X2N1cnJlbnRUaW1lKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0U2ltcGxl
RHVyYXRpb24oRXhjZXB0aW9uQ29kZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQobV9zaW1wbGVEdXJhdGlvbik7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6cGFyc2VLZXlOdW1iZXJzKFZlY3RvcjxmbG9hdD4mIGtleU51bWJlcnMsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgZmxvYXQgbnVtYmVyID0gMC4wZjsKICAgICAKLSAgICBjb25z
dCBVQ2hhciogcHRyID0gdmFsdWUuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQp
OwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGtleU51
bWJlcnMuYXBwZW5kKG51bWJlcik7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNraXBPcHRpb25h
bFNwYWNlcyhwdHIsIGVuZCkgfHwgKnB0ciAhPSAnOycpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHB0cisrOwotICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRpb25F
bGVtZW50OjpLZXlTcGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3Rh
dGljIHZvaWQgcGFyc2VLZXlUaW1lcyhjb25zdCBTdHJpbmcmIHBhcnNlLCBWZWN0b3I8ZmxvYXQ+
JiByZXN1bHQpCiB7Ci0gICAgZmxvYXQgbnVtYmVyID0gMC4wZjsKLSAgICBTVkdBbmltYXRpb25F
bGVtZW50OjpLZXlTcGxpbmUga2V5U3BsaW5lOwotICAgIAotICAgIGNvbnN0IFVDaGFyKiBwdHIg
PSB2YWx1ZS5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVl
Lmxlbmd0aCgpOwotICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7Ci0gICAgd2hpbGUg
KHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoIShwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVy
LCBmYWxzZSkgJiYgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGtleVNwbGluZS5jb250cm9sMS5zZXRYKG51bWJlcik7Ci0gICAgICAg
IGlmICghKHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIGZhbHNlKSAmJiBza2lwT3B0aW9u
YWxTcGFjZXMocHRyLCBlbmQpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAga2V5U3Bs
aW5lLmNvbnRyb2wxLnNldFkobnVtYmVyKTsKLSAgICAgICAgaWYgKCEocGFyc2VOdW1iZXIocHRy
LCBlbmQsIG51bWJlciwgZmFsc2UpICYmIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBrZXlTcGxpbmUuY29udHJvbDIuc2V0WChudW1i
ZXIpOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIGZhbHNlKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAga2V5U3BsaW5lLmNvbnRyb2wyLnNldFkobnVt
YmVyKTsKLSAgICAgICAga2V5U3BsaW5lcy5hcHBlbmQoa2V5U3BsaW5lKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICc7JykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcHRyKys7Ci0gICAgICAgIHNraXBPcHRpb25h
bFNwYWNlcyhwdHIsIGVuZCk7Ci0gICAgfQotfQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnBhcnNlQmVnaW5PckVuZFZhbHVlKGRvdWJsZSYgbnVtYmVyLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIC8vIFRPRE86IERvbid0IHVzZSBTVkdTdHJpbmdMaXN0IGZvciBwYXJzaW5nLgot
ICAgIEF0b21pY1N0cmluZyBkdW1teTsKLSAgICBSZWZQdHI8U1ZHU3RyaW5nTGlzdD4gdmFsdWVM
aXN0ID0gU1ZHU3RyaW5nTGlzdDo6Y3JlYXRlKFF1YWxpZmllZE5hbWUoZHVtbXksIGR1bW15LCBk
dW1teSkpOwotICAgIHZhbHVlTGlzdC0+cGFyc2UodmFsdWUsICc7Jyk7Ci0gICAgCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1
ZUxpc3QtPm51bWJlck9mSXRlbXMoKTsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBjdXJyZW50ID0g
dmFsdWVMaXN0LT5nZXRJdGVtKGksIGVjKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50
LnN0YXJ0c1dpdGgoImFjY2Vzc0tleSIpKSB7Ci0gICAgICAgICAgICAvLyBSZWdpc3RlciBrZXlE
b3duRXZlbnRMaXN0ZW5lciBmb3IgdGhlIGNoYXJhY3RlcgotICAgICAgICAgICAgU3RyaW5nIGNo
YXJhY3RlciA9IGN1cnJlbnQuc3Vic3RyaW5nKGN1cnJlbnQubGVuZ3RoKCkgLSAyLCAxKTsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQhIFN1cHBvc2VkIHRvIHJlZ2lzdGVy
IGFjY2Vzc0tleSBjaGFyYWN0ZXIKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LnN0YXJ0c1dp
dGgoIndhbGxjbG9jayIpKSB7Ci0gICAgICAgICAgICBpbnQgZmlyc3RCcmFjZSA9IGN1cnJlbnQu
ZmluZCgnKCcpOwotICAgICAgICAgICAgaW50IHNlY29uZEJyYWNlID0gY3VycmVudC5maW5kKCcp
Jyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyB3YWxsY2xvY2tWYWx1ZSA9IGN1
cnJlbnQuc3Vic3RyaW5nKGZpcnN0QnJhY2UgKyAxLCBzZWNvbmRCcmFjZSAtIGZpcnN0QnJhY2Ug
LSAyKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQhIFN1cHBvc2VkIHRv
IHVzZSB3YWxsQ2xvY2sgdmFsdWUKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmNvbnRhaW5z
KCcuJykpIHsKLSAgICAgICAgICAgIGludCBkb3RQb3NpdGlvbiA9IGN1cnJlbnQuZmluZCgnLicp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IGN1cnJlbnQuc3Vi
c3RyaW5nKDAsIGRvdFBvc2l0aW9uKTsKLSAgICAgICAgICAgIFN0cmluZyBjbG9ja1ZhbHVlOwot
ICAgICAgICAgICAgaWYgKGN1cnJlbnQuY29udGFpbnMoImJlZ2luIikpCi0gICAgICAgICAgICAg
ICAgY2xvY2tWYWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgNik7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjdXJyZW50LmNvbnRhaW5zKCJlbmQiKSkKLSAgICAgICAgICAgICAg
ICBjbG9ja1ZhbHVlID0gY3VycmVudC5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyA0KTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGN1cnJlbnQuY29udGFpbnMoInJlcGVhdCIpKQotICAgICAgICAgICAg
ICAgIGNsb2NrVmFsdWUgPSBjdXJyZW50LnN1YnN0cmluZyhkb3RQb3NpdGlvbiArIDcpOwotICAg
ICAgICAgICAgZWxzZSB7IC8vIERPTTIgRXZlbnQgUmVmZXJlbmNlCi0gICAgICAgICAgICAgICAg
aW50IHBsdXNNaW51c1Bvc2l0aW9uID0gLTE7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQuY29udGFpbnMoJysnKSkKLSAgICAgICAgICAgICAgICAgICAgcGx1
c01pbnVzUG9zaXRpb24gPSBjdXJyZW50LmZpbmQoJysnKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChjdXJyZW50LmNvbnRhaW5zKCctJykpCi0gICAgICAgICAgICAgICAgICAgIHBsdXNNaW51
c1Bvc2l0aW9uID0gY3VycmVudC5maW5kKCctJyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgU3RyaW5nIGV2ZW50ID0gY3VycmVudC5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyAx
LCBwbHVzTWludXNQb3NpdGlvbiAtIGRvdFBvc2l0aW9uIC0gMSk7Ci0gICAgICAgICAgICAgICAg
Y2xvY2tWYWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgZXZlbnQubGVuZ3Ro
KCkgKyAxKTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogc3VwcG9zZWQgdG8gdXNlIERPTSBF
dmVudAotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbnVtYmVy
ID0gcGFyc2VDbG9ja1ZhbHVlKGN1cnJlbnQpOwotICAgICAgICAgICAgaWYgKCFpc0luZGVmaW5p
dGUobnVtYmVyKSkKLSAgICAgICAgICAgICAgICBudW1iZXIgKj0gMTAwMC4wOwotICAgICAgICAg
ICAgLy8gRklYTUU6IHN1cHBvc2VkIHRvIHNldCBiZWdpbi9lbmQgdGltZQorICAgIHJlc3VsdC5j
bGVhcigpOworICAgIFZlY3RvcjxTdHJpbmc+IHBhcnNlTGlzdDsKKyAgICBwYXJzZS5zcGxpdCgn
OycsIHBhcnNlTGlzdCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBhcnNlTGlzdC5z
aXplKCk7ICsrbikgeworICAgICAgICBTdHJpbmcgdGltZVN0cmluZyA9IHBhcnNlTGlzdFtuXTsK
KyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgZmxvYXQgdGltZSA9IHRpbWVTdHJpbmcudG9GbG9h
dCgmb2spOworICAgICAgICBpZiAoIW9rIHx8IHRpbWUgPCAwIHx8IHRpbWUgPiAxLmYpCisgICAg
ICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGlmICghbikgeworICAgICAgICAgICAgaWYgKHRp
bWUgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0gZWxzZSBpZiAo
dGltZSA8PSByZXN1bHQubGFzdCgpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRpbWUpOworICAgIH0KKyAgICByZXR1cm47CitmYWlsOgorICAgIHJlc3Vs
dC5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5n
JiBwYXJzZSwgVmVjdG9yPEN1cnZlRGF0YT4mIHJlc3VsdCkKK3sKKyAgICByZXN1bHQuY2xlYXIo
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXJzZUxpc3Q7CisgICAgcGFyc2Uuc3BsaXQoJzsnLCBw
YXJzZUxpc3QpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwYXJzZUxpc3Quc2l6ZSgp
OyArK24pIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFyc2VTcGxpbmU7CisgICAgICAgIHBh
cnNlTGlzdFtuXS5zcGxpdCgnLCcsIHBhcnNlU3BsaW5lKTsKKyAgICAgICAgLy8gVGhlIHNwZWMg
c2F5cyB0aGUgc2VwYXRvciBpcyBhIHNwYWNlLCBhbGwgdGVzdHMgdXNlIGNvbW1hcy4gV2VpcmQu
CisgICAgICAgIGlmIChwYXJzZVNwbGluZS5zaXplKCkgPT0gMSkgCisgICAgICAgICAgICBwYXJz
ZUxpc3Rbbl0uc3BsaXQoJyAnLCBwYXJzZVNwbGluZSk7CisgICAgICAgIGlmIChwYXJzZVNwbGlu
ZS5zaXplKCkgIT0gNCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgZG91YmxlIGN1
cnZlVmFsdWVzWzRdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7
CisgICAgICAgICAgICBTdHJpbmcgcGFyc2VOdW1iZXIgPSBwYXJzZVNwbGluZVtpXTsgCisgICAg
ICAgICAgICBib29sIG9rOworICAgICAgICAgICAgY3VydmVWYWx1ZXNbaV0gPSBwYXJzZU51bWJl
ci50b0RvdWJsZSgmb2spOworICAgICAgICAgICAgaWYgKCFvayB8fCBjdXJ2ZVZhbHVlc1tpXSA8
IDAuMCB8fCBjdXJ2ZVZhbHVlc1tpXSA+IDEuMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7
CiAgICAgICAgIH0KLSAgICB9ICAgIAorICAgICAgICByZXN1bHQuYXBwZW5kKEN1cnZlRGF0YShj
dXJ2ZVZhbHVlc1swXSwgY3VydmVWYWx1ZXNbMV0sIGN1cnZlVmFsdWVzWzJdLCBjdXJ2ZVZhbHVl
c1szXSkpOworICAgIH0KKyAgICByZXR1cm47CitmYWlsOgorICAgIHJlc3VsdC5jbGVhcigpOwog
fQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMoWExpbmtO
YW1lczo6aHJlZkF0dHIpKQotICAgICAgICBtX2hyZWYgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpCi0gICAg
ICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjphdHRyaWJ1dGVUeXBlQXR0cikgewotICAgICAgICBpZiAoYXR0
ci0+dmFsdWUoKSA9PSAiQ1NTIikKLSAgICAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEFUVFJJ
QlVURVRZUEVfQ1NTOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJYTUwiKQot
ICAgICAgICAgICAgbV9hdHRyaWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9YTUw7Ci0gICAgICAg
IGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gImF1dG8iKQotICAgICAgICAgICAgbV9hdHRyaWJ1
dGVUeXBlID0gQVRUUklCVVRFVFlQRV9BVVRPOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpiZWdpbkF0dHIpCi0gICAgICAgIHBhcnNlQmVnaW5PckVuZFZhbHVlKG1f
YmVnaW4sIGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZW5kQXR0cikKLSAgICAgICAgcGFyc2VCZWdpbk9yRW5kVmFsdWUobV9lbmQsIGF0dHIt
PnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHVyQXR0
cikgewotICAgICAgICBtX3NpbXBsZUR1cmF0aW9uID0gcGFyc2VDbG9ja1ZhbHVlKGF0dHItPnZh
bHVlKCkpOwotICAgICAgICBpZiAoIWlzSW5kZWZpbml0ZShtX3NpbXBsZUR1cmF0aW9uKSkKLSAg
ICAgICAgICAgIG1fc2ltcGxlRHVyYXRpb24gKj0gMTAwMC4wOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjptaW5BdHRyKSB7Ci0gICAgICAgIG1fbWluID0gcGFyc2VD
bG9ja1ZhbHVlKGF0dHItPnZhbHVlKCkpOwotICAgICAgICBpZiAoIWlzSW5kZWZpbml0ZShtX21p
bikpCi0gICAgICAgICAgICBtX21pbiAqPSAxMDAwLjA7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6Om1heEF0dHIpIHsKLSAgICAgICAgbV9tYXggPSBwYXJzZUNsb2Nr
VmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGlmICghaXNJbmRlZmluaXRlKG1fbWF4KSkK
LSAgICAgICAgICAgIG1fbWF4ICo9IDEwMDAuMDsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cmVzdGFydEF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkg
PT0gIndoZW5Ob3RBY3RpdmUiKQotICAgICAgICAgICAgbV9yZXN0YXJ0ID0gUkVTVEFSVF9XSEVO
Tk9UQUNUSVZFOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJuZXZlciIpCi0g
ICAgICAgICAgICBtX3Jlc3RhcnQgPSBSRVNUQVJUX05FVkVSOwotICAgICAgICBlbHNlIGlmIChh
dHRyLT52YWx1ZSgpID09ICJhbHdheXMiKQotICAgICAgICAgICAgbV9yZXN0YXJ0ID0gUkVTVEFS
VF9BTFdBWVM7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlcGVh
dENvdW50QXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaW5kZWZpbml0ZSIp
Ci0gICAgICAgICAgICBtX3JlcGVhdENvdW50ID0gREJMX01BWDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9yZXBlYXRDb3VudCA9IGF0dHItPnZhbHVlKCkudG9Eb3VibGUoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVwZWF0RHVyQXR0cikKLSAgICAg
ICAgbV9yZXBlYXREdXIgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6ZmlsbEF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0g
ImZyZWV6ZSIpCi0gICAgICAgICAgICBtX2ZpbGwgPSBGSUxMX0ZSRUVaRTsKLSAgICAgICAgZWxz
ZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAicmVtb3ZlIikKLSAgICAgICAgICAgIG1fZmlsbCA9IEZJ
TExfUkVNT1ZFOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjYWxj
TW9kZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gImRpc2NyZXRlIikKLSAg
ICAgICAgICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9ESVNDUkVURTsKLSAgICAgICAgZWxzZSBp
ZiAoYXR0ci0+dmFsdWUoKSA9PSAibGluZWFyIikKLSAgICAgICAgICAgIG1fY2FsY01vZGUgPSBD
QUxDTU9ERV9MSU5FQVI7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gInNwbGlu
ZSIpCi0gICAgICAgICAgICBtX2NhbGNNb2RlID0gQ0FMQ01PREVfU1BMSU5FOwotICAgICAgICBl
bHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJwYWNlZCIpCi0gICAgICAgICAgICBtX2NhbGNNb2Rl
ID0gQ0FMQ01PREVfUEFDRUQ7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnZhbHVlc0F0dHIpIHsKLSAgICAgICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV92
YWx1ZXMgPSBwYXJzZURlbGltaXRlZFN0cmluZyhhdHRyLT52YWx1ZSgpLCAnOycpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlUaW1lc0F0dHIpIHsKLSAgICAg
ICAgbV9rZXlUaW1lcy5jbGVhcigpOwotICAgICAgICBwYXJzZUtleU51bWJlcnMobV9rZXlUaW1l
cywgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIG1fa2V5U3BsaW5lcy5jbGVhcigpOwotICAg
ICAgICBwYXJzZUtleVNwbGluZXMobV9rZXlTcGxpbmVzLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZnJvbUF0dHIpCi0gICAgICAgIG1f
ZnJvbSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0b0F0dHIpCi0gICAgICAgIG1fdG8gPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YnlBdHRyKQotICAgICAgICBtX2J5ID0gYXR0ci0+
dmFsdWUoKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmFkZGl0aXZl
QXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAic3VtIikKLSAgICAgICAgICAg
IG1fYWRkaXRpdmUgPSBBRERJVElWRV9TVU07Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVl
KCkgPT0gInJlcGxhY2UiKQotICAgICAgICAgICAgbV9hZGRpdGl2ZSA9IEFERElUSVZFX1JFUExB
Q0U7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmFjY3VtdWxhdGVB
dHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJzdW0iKQotICAgICAgICAgICAg
bV9hY2N1bXVsYXRlID0gQUNDVU1VTEFURV9TVU07Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZh
bHVlKCkgPT0gIm5vbmUiKQotICAgICAgICAgICAgbV9hY2N1bXVsYXRlID0gQUNDVU1VTEFURV9O
T05FOwotICAgIH0gZWxzZSB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFs
dWVzQXR0cikKKyAgICAgICAgYXR0ci0+dmFsdWUoKS5zdHJpbmcoKS5zcGxpdCgnOycsIG1fdmFs
dWVzKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmtleVRpbWVzQXR0
cikKKyAgICAgICAgcGFyc2VLZXlUaW1lcyhhdHRyLT52YWx1ZSgpLCBtX2tleVRpbWVzKTsKKyAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKQorICAg
ICAgICBwYXJzZUtleVNwbGluZXMoYXR0ci0+dmFsdWUoKSwgbV9rZXlTcGxpbmVzKTsKKyAgICBl
bHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
U01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0K
IAotZG91YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJp
bmcmIGRhdGEpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0
cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiB7Ci0gICAgU3RyaW5nIHBhcnNlID0g
ZGF0YS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIGlmIChwYXJzZSA9PSAiaW5kZWZpbml0ZSIp
Ci0gICAgICAgIHJldHVybiBEQkxfTUFYOwotCi0gICAgZG91YmxlIHJlc3VsdDsKLQotICAgIGlu
dCBkb3VibGVQb2ludE9uZSA9IHBhcnNlLmZpbmQoJzonKTsKLSAgICBpbnQgZG91YmxlUG9pbnRU
d28gPSBwYXJzZS5maW5kKCc6JywgZG91YmxlUG9pbnRPbmUgKyAxKTsKLQotICAgIGlmIChkb3Vi
bGVQb2ludE9uZSAhPSAtMSAmJiBkb3VibGVQb2ludFR3byAhPSAtMSkgeyAvLyBTcGVjOiAiRnVs
bCBjbG9jayB2YWx1ZXMiCi0gICAgICAgIHVuc2lnbmVkIGhvdXJzID0gcGFyc2Uuc3Vic3RyaW5n
KDAsIDIpLnRvVUludFN0cmljdCgpOwotICAgICAgICB1bnNpZ25lZCBtaW51dGVzID0gcGFyc2Uu
c3Vic3RyaW5nKDMsIDIpLnRvVUludFN0cmljdCgpOwotICAgICAgICB1bnNpZ25lZCBzZWNvbmRz
ID0gcGFyc2Uuc3Vic3RyaW5nKDYsIDIpLnRvVUludFN0cmljdCgpOwotICAgICAgICB1bnNpZ25l
ZCBtaWxsaXNlY29uZHMgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9ICgzNjAwICogaG91cnMpICsg
KDYwICogbWludXRlcykgKyBzZWNvbmRzOwotCi0gICAgICAgIGlmIChwYXJzZS5maW5kKCcuJykg
IT0gLTEpIHsKLSAgICAgICAgICAgIFN0cmluZyB0ZW1wID0gcGFyc2Uuc3Vic3RyaW5nKDksIDIp
OwotICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGVtcC50b1VJbnRTdHJpY3QoKTsKLSAgICAg
ICAgICAgIHJlc3VsdCArPSAobWlsbGlzZWNvbmRzICogKDEgLyBwb3coMTAuMCwgaW50KHRlbXAu
bGVuZ3RoKCkpKSkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkb3VibGVQb2ludE9uZSAh
PSAtMSAmJiBkb3VibGVQb2ludFR3byA9PSAtMSkgeyAvLyBTcGVjOiAiUGFydGlhbCBjbG9jayB2
YWx1ZXMiCi0gICAgICAgIHVuc2lnbmVkIG1pbnV0ZXMgPSBwYXJzZS5zdWJzdHJpbmcoMCwgMiku
dG9VSW50U3RyaWN0KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNlY29uZHMgPSBwYXJzZS5zdWJzdHJp
bmcoMywgMikudG9VSW50U3RyaWN0KCk7Ci0gICAgICAgIHVuc2lnbmVkIG1pbGxpc2Vjb25kcyA9
IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gKDYwICogbWludXRlcykgKyBzZWNvbmRzOwotCi0gICAg
ICAgIGlmIChwYXJzZS5maW5kKCcuJykgIT0gLTEpIHsKLSAgICAgICAgICAgIFN0cmluZyB0ZW1w
ID0gcGFyc2Uuc3Vic3RyaW5nKDYsIDIpOwotICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGVt
cC50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgICAgIHJlc3VsdCArPSAobWlsbGlzZWNvbmRzICog
KDEgLyBwb3coMTAuMCwgaW50KHRlbXAubGVuZ3RoKCkpKSkpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsgLy8gU3BlYzogIlRpbWVjb3VudCB2YWx1ZXMiCi0gICAgICAgIGludCBkb3RQb3NpdGlv
biA9IHBhcnNlLmZpbmQoJy4nKTsKLQotICAgICAgICBpZiAocGFyc2UuZW5kc1dpdGgoImgiKSkg
ewotICAgICAgICAgICAgaWYgKGRvdFBvc2l0aW9uID09IC0xKQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHBhcnNlLnN1YnN0cmluZygwLCBwYXJzZS5sZW5ndGgoKSAtIDEpLnRvVUludFN0cmlj
dCgpICogMzYwMDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHBhcnNlLnN1YnN0cmluZygwLCBkb3RQb3NpdGlvbikudG9VSW50U3RyaWN0KCkgKiAzNjAwOwot
ICAgICAgICAgICAgICAgIFN0cmluZyB0ZW1wID0gcGFyc2Uuc3Vic3RyaW5nKGRvdFBvc2l0aW9u
ICsgMSwgcGFyc2UubGVuZ3RoKCkgLSBkb3RQb3NpdGlvbiAtIDIpOwotICAgICAgICAgICAgICAg
IHJlc3VsdCArPSAoMzYwMC4wICogdGVtcC50b1VJbnRTdHJpY3QoKSkgKiAoMSAvIHBvdygxMC4w
LCBpbnQodGVtcC5sZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChwYXJzZS5lbmRzV2l0aCgibWluIikpIHsKLSAgICAgICAgICAgIGlmIChkb3RQb3NpdGlvbiA9
PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5zdWJzdHJpbmcoMCwgcGFyc2Uu
bGVuZ3RoKCkgLSAzKS50b1VJbnRTdHJpY3QoKSAqIDYwOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2Uuc3Vic3RyaW5nKDAsIGRvdFBvc2l0aW9uKS50
b1VJbnRTdHJpY3QoKSAqIDYwOwotICAgICAgICAgICAgICAgIFN0cmluZyB0ZW1wID0gcGFyc2Uu
c3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSwgcGFyc2UubGVuZ3RoKCkgLSBkb3RQb3NpdGlvbiAt
IDQpOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoNjAuMCAqIHRlbXAudG9VSW50U3RyaWN0
KCkpICogKDEgLyBwb3coMTAuMCwgaW50KHRlbXAubGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoIm1zIikpIHsKLSAgICAgICAgICAg
IGlmIChkb3RQb3NpdGlvbiA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5z
dWJzdHJpbmcoMCwgcGFyc2UubGVuZ3RoKCkgLSAyKS50b1VJbnRTdHJpY3QoKSAvIDEwMDAuMDsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlLnN1YnN0
cmluZygwLCBkb3RQb3NpdGlvbikudG9VSW50U3RyaWN0KCkgLyAxMDAwLjA7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHRlbXAgPSBwYXJzZS5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyAxLCBwYXJz
ZS5sZW5ndGgoKSAtIGRvdFBvc2l0aW9uIC0gMyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICh0ZW1wLnRvVUludFN0cmljdCgpIC8gMTAwMC4wKSAqICgxIC8gcG93KDEwLjAsIGludCh0ZW1w
Lmxlbmd0aCgpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHBhcnNlLmVu
ZHNXaXRoKCJzIikpIHsKLSAgICAgICAgICAgIGlmIChkb3RQb3NpdGlvbiA9PSAtMSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBwYXJzZS5zdWJzdHJpbmcoMCwgcGFyc2UubGVuZ3RoKCkgLSAx
KS50b1VJbnRTdHJpY3QoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHBhcnNlLnN1YnN0cmluZygwLCBkb3RQb3NpdGlvbikudG9VSW50U3RyaWN0KCk7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSBwYXJzZS5zdWJzdHJpbmcoZG90UG9zaXRpb24g
KyAxLCBwYXJzZS5sZW5ndGgoKSAtIGRvdFBvc2l0aW9uIC0gMik7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ICs9IHRlbXAudG9VSW50U3RyaWN0KCkgKiAoMSAvIHBvdygxMC4wLCBpbnQodGVtcC5s
ZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBy
ZXN1bHQgPSBwYXJzZS50b0RvdWJsZSgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsK
LSAgICBpZiAob3duZXJTVkdFbGVtZW50KCkpCi0gICAgICAgIG93bmVyU1ZHRWxlbWVudCgpLT50
aW1lU2NoZWR1bGVyKCktPmFkZFRpbWVyKHRoaXMsIGxyb3VuZChnZXRTdGFydFRpbWUoKSkpOwot
ICAgIFNWR0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIC8vIEFzc3VtcHRp
b25zIG1heSBub3QgaG9sZCBhZnRlciBhbiBhdHRyaWJ1dGUgY2hhbmdlLgorICAgIG1fYW5pbWF0
aW9uVmFsaWQgPSBmYWxzZTsKKyAgICBTTUlMVGltaW5nRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKIH0KIAotU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoKSBjb25zdAorZmxvYXQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6Z2V0U3RhcnRUaW1lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRo
b2QgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QKLSAgICAvLyBJdCBkb2VzIG5vdCBwcm9wZXJseSBn
cmFiIHRoZSB0cnVlICJhbmltVmFsIiBpbnN0ZWFkIGdyYWJzIHRoZSBiYXNlVmFsIChvciBzb21l
dGhpbmcgdmVyeSBjbG9zZSkKLQotICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxl
bWVudCgpOwotICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZCA9IDA7Ci0gICAgaWYgKHRhcmdl
dCAmJiB0YXJnZXQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpOwotICAgIAotICAgIFN0cmluZyByZXQ7Ci0KLSAgICBF
QXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBlID0gc3RhdGljX2Nhc3Q8RUF0dHJpYnV0ZVR5cGU+
KG1fYXR0cmlidXRlVHlwZSk7Ci0gICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT0gQVRUUklCVVRFVFlQ
RV9BVVRPKSB7Ci0gICAgICAgIGF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX1hNTDsKLQot
ICAgICAgICAvLyBTcGVjOiBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBhdHRy
aWJ1dGVOYW1lIHRvIGFuIGF0dHJpYnV0ZQotICAgICAgICAvLyBmb3IgdGhlIHRhcmdldCBlbGVt
ZW50LiBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBmaXJzdCBzZWFyY2ggdGhyb3VnaCB0aGUKLSAg
ICAgICAgLy8gbGlzdCBvZiBDU1MgcHJvcGVydGllcyBmb3IgYSBtYXRjaGluZyBwcm9wZXJ0eSBu
YW1lLCBhbmQgaWYgbm9uZSBpcyBmb3VuZCwKLSAgICAgICAgLy8gc2VhcmNoIHRoZSBkZWZhdWx0
IFhNTCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50LgotICAgICAgICBpZiAoc3R5bGVkICYmIHN0
eWxlZC0+c3R5bGUoKSkgewotICAgICAgICAgICAgaWYgKHN0eWxlZC0+c3R5bGUoKS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShtX2F0dHJpYnV0ZU5hbWUpKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0NTUzsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAoYXR0cmlidXRlVHlwZSA9PSBBVFRSSUJVVEVUWVBFX0NTUykgewotICAgICAgICBpZiAoc3R5
bGVkICYmIHN0eWxlZC0+c3R5bGUoKSkKLSAgICAgICAgICAgIHJldCA9IHN0eWxlZC0+c3R5bGUo
KS0+Z2V0UHJvcGVydHlWYWx1ZShtX2F0dHJpYnV0ZU5hbWUpOwotICAgIH0KLQotICAgIGlmIChh
dHRyaWJ1dGVUeXBlID09IEFUVFJJQlVURVRZUEVfWE1MIHx8IHJldC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldCA9IHRhcmdldEVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKG1fYXR0cmlidXRlTmFtZSk7
Ci0KLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGlu
dGVydmFsQmVnaW4oKS52YWx1ZSgpKTsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpz
ZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitmbG9h
dCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRDdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0Ci0gICAgLy8gSXQgZG9l
cyBub3QgcHJvcGVybHkgc2V0IHRoZSAiYW5pbVZhbCIsIHJhdGhlciBpdCBzZXRzIHRoZSAiYmFz
ZVZhbCIKLSAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0
RWxlbWVudCgpLCBtX2F0dHJpYnV0ZU5hbWUsIHZhbHVlLCBzdGF0aWNfY2FzdDxFQXR0cmlidXRl
VHlwZT4obV9hdHRyaWJ1dGVUeXBlKSk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoZWxhcHNlZCgpLnZhbHVlKCkpOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNl
dFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgdHlwZSkKK2Zsb2F0IFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmdldFNpbXBsZUR1cmF0aW9uKEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewot
ICAgIGlmICghdGFyZ2V0IHx8IG5hbWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzaW1wbGVEdXJh
dGlvbigpLnZhbHVlKCkpOworfSAgICAKICAgICAKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHls
ZWQgPSAodGFyZ2V0ICYmIHRhcmdldC0+aXNTdHlsZWQoKSkgPyBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50Kj4odGFyZ2V0KSA6IDA7Ci0KLSAgICBFQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVU
eXBlID0gdHlwZTsKLSAgICBpZiAodHlwZSA9PSBBVFRSSUJVVEVUWVBFX0FVVE8pIHsKLSAgICAg
ICAgLy8gU3BlYzogVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBtYXRjaCB0aGUgYXR0cmlidXRl
TmFtZSB0byBhbiBhdHRyaWJ1dGUKLSAgICAgICAgLy8gZm9yIHRoZSB0YXJnZXQgZWxlbWVudC4g
VGhlIGltcGxlbWVudGF0aW9uIG11c3QgZmlyc3Qgc2VhcmNoIHRocm91Z2ggdGhlCi0gICAgICAg
IC8vIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGEgbWF0Y2hpbmcgcHJvcGVydHkgbmFtZSwg
YW5kIGlmIG5vbmUgaXMgZm91bmQsCi0gICAgICAgIC8vIHNlYXJjaCB0aGUgZGVmYXVsdCBYTUwg
bmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudC4KLSAgICAgICAgaWYgKHN0eWxlZCAmJiBzdHlsZWQt
PnN0eWxlKCkgJiYgc3R5bGVkLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG5hbWUpKQot
ICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfQ1NTOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gQVRUUklCVVRFVFlQRV9YTUw7Ci0gICAg
fQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChhdHRyaWJ1dGVUeXBlID09IEFU
VFJJQlVURVRZUEVfQ1NTICYmIHN0eWxlZCAmJiBzdHlsZWQtPnN0eWxlKCkpCi0gICAgICAgIHN0
eWxlZC0+c3R5bGUoKS0+c2V0UHJvcGVydHkobmFtZSwgdmFsdWUsICIiLCBlYyk7Ci0gICAgZWxz
ZSBpZiAoYXR0cmlidXRlVHlwZSA9PSBBVFRSSUJVVEVUWVBFX1hNTCkKLSAgICAgICAgdGFyZ2V0
LT5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsKLX0KLQotU3RyaW5nIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmF0dHJpYnV0ZU5hbWUoKSBjb25zdAorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50
OjpiZWdpbkVsZW1lbnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmV0dXJuIG1fYXR0cmli
dXRlTmFtZTsKKyAgICByZXR1cm4gYmVnaW5FbGVtZW50QXQoMCwgZWMpOwogfQogCi1ib29sIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmNvbm5lY3RlZFRvVGltZXIoKSBjb25zdAorYm9vbCBTVkdBbmlt
YXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIHJldHVybiBtX2Nvbm5lY3RlZFRvVGltZXI7CisgICAgYWRkQmVnaW5UaW1l
KGVsYXBzZWQoKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6aXNGcm96ZW4oKSBjb25zdAorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50
OjplbmRFbGVtZW50KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHJldHVybiAobV9maWxsID09
IEZJTExfRlJFRVpFKTsKKyAgICByZXR1cm4gZW5kRWxlbWVudEF0KDAsIGVjKTsKIH0KIAotYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FkZGl0aXZlKCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6ZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgcmV0dXJuIChtX2FkZGl0aXZlID09IEFERElUSVZFX1NVTSkgfHwgKGRldGVjdEFu
aW1hdGlvbk1vZGUoKSA9PSBCWV9BTklNQVRJT04pOworICAgIGlmIChvZmZzZXQgPCAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYWRkRW5kVGltZShlbGFwc2VkKCkgKyBvZmZz
ZXQpOworICAgIHJldHVybiB0cnVlOwogfQotCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omlz
QWNjdW11bGF0ZWQoKSBjb25zdAorICAgIAorU1ZHQW5pbWF0aW9uRWxlbWVudDo6QW5pbWF0aW9u
TW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gKG1fYWNjdW11bGF0ZSA9PSBBQ0NVTVVMQVRFX1NVTSkgJiYgKGRldGVjdEFuaW1hdGlv
bk1vZGUoKSAhPSBUT19BTklNQVRJT04pOwotfQorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDEvUkVDLXNtaWwtYW5pbWF0aW9uLTIwMDEwOTA0LyNBbmltRnVuY1ZhbHVlcwogCi1FQW5p
bWF0aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29u
c3QKLXsKKyAgICBpZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKKyAgICAgICAgcmV0
dXJuIFRvQW5pbWF0aW9uOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0
dHIpKQotICAgICAgICByZXR1cm4gVkFMVUVTX0FOSU1BVElPTjsKLSAgICBlbHNlIGlmICgoIW1f
ZnJvbS5pc0VtcHR5KCkgJiYgIW1fdG8uaXNFbXB0eSgpKSB8fCAoIW1fdG8uaXNFbXB0eSgpKSkg
eyAvLyB0by9mcm9tLXRvIGFuaW1hdGlvbgotICAgICAgICBpZiAoIW1fZnJvbS5pc0VtcHR5KCkp
IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICByZXR1cm4gRlJPTV9UT19BTklNQVRJ
T047Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBUT19BTklNQVRJT047Ci0gICAg
fSBlbHNlIGlmICgobV9mcm9tLmlzRW1wdHkoKSAmJiBtX3RvLmlzRW1wdHkoKSAmJiAhbV9ieS5p
c0VtcHR5KCkpIHx8Ci0gICAgICAgICAgICAoIW1fZnJvbS5pc0VtcHR5KCkgJiYgIW1fYnkuaXNF
bXB0eSgpKSkgeyAvLyBieS9mcm9tLWJ5IGFuaW1hdGlvbgotICAgICAgICBpZiAoIW1fZnJvbS5p
c0VtcHR5KCkpIC8vIGZyb20tYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICByZXR1cm4gRlJPTV9C
WV9BTklNQVRJT047Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBCWV9BTklNQVRJ
T047Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0FOSU1BVElPTjsKLX0KLQotZG91YmxlIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnJlcGVhdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcGV0
aXRpb25zOworICAgICAgICByZXR1cm4gVmFsdWVzQW5pbWF0aW9uOworICAgIGlmICghdG9WYWx1
ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IFRv
QW5pbWF0aW9uIDogRnJvbVRvQW5pbWF0aW9uOworICAgIGlmICghYnlWYWx1ZSgpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IEJ5QW5pbWF0aW9uIDog
RnJvbUJ5QW5pbWF0aW9uOworICAgIHJldHVybiBOb0FuaW1hdGlvbjsKK30KKworU1ZHQW5pbWF0
aW9uRWxlbWVudDo6Q2FsY01vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY01vZGUoKSBjb25z
dAoreyAgICAKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIGRpc2NyZXRlKCJkaXNjcmV0
ZSIpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbGluZWFyKCJsaW5lYXIiKTsKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIHBhY2VkKCJwYWNlZCIpOworICAgIHN0YXRpYyBj
b25zdCBBdG9taWNTdHJpbmcgc3BsaW5lKCJzcGxpbmUiKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpjYWxjTW9kZUF0dHIpOworICAgIGlm
ICh2YWx1ZSA9PSBkaXNjcmV0ZSkKKyAgICAgICAgcmV0dXJuIENhbGNNb2RlRGlzY3JldGU7Cisg
ICAgaWYgKHZhbHVlID09IGxpbmVhcikKKyAgICAgICAgcmV0dXJuIENhbGNNb2RlTGluZWFyOwor
ICAgIGlmICh2YWx1ZSA9PSBwYWNlZCkKKyAgICAgICAgcmV0dXJuIENhbGNNb2RlUGFjZWQ7Cisg
ICAgaWYgKHZhbHVlID09IHNwbGluZSkKKyAgICAgICAgcmV0dXJuIENhbGNNb2RlU3BsaW5lOwor
ICAgIHJldHVybiBoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSA/IENhbGNN
b2RlUGFjZWQgOiBDYWxjTW9kZUxpbmVhcjsKK30KKworU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXR0
cmlidXRlVHlwZSBTVkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVUeXBlKCkgY29uc3QKK3sg
ICAgCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBjc3MoIkNTUyIpOworICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcgeG1sKCJYTUwiKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVUeXBlQXR0cik7CisgICAg
aWYgKHZhbHVlID09IGNzcykKKyAgICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGVDU1M7CisgICAg
aWYgKHZhbHVlID09IHhtbCkKKyAgICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGVYTUw7CisgICAg
cmV0dXJuIEF0dHJpYnV0ZVR5cGVBdXRvOworfQorCitTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6dG9WYWx1ZSgpIGNvbnN0Cit7ICAgIAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnRvQXR0cik7Cit9CisKK1N0cmluZyBTVkdBbmltYXRpb25FbGVtZW50OjpieVZhbHVlKCkg
Y29uc3QKK3sgICAgCisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YnlBdHRyKTsK
K30KKworU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSgpIGNvbnN0Cit7ICAg
IAorICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZyb21BdHRyKTsKIH0KLQotYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0luZGVmaW5pdGUoZG91YmxlIHZhbHVlKQotewotICAg
IHJldHVybiAodmFsdWUgPT0gREJMX01BWCk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Y29ubmVjdFRpbWVyKCkKLXsKLSAgICBBU1NFUlQoIW1fY29ubmVjdGVkVG9UaW1lcik7Ci0g
ICAgb3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+Y29ubmVjdEludGVydmFsVGlt
ZXIodGhpcyk7Ci0gICAgbV9jb25uZWN0ZWRUb1RpbWVyID0gdHJ1ZTsKLX0KLQotdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpkaXNjb25uZWN0VGltZXIoKQotewotICAgIEFTU0VSVChtX2Nvbm5l
Y3RlZFRvVGltZXIpOwotICAgIG93bmVyU1ZHRWxlbWVudCgpLT50aW1lU2NoZWR1bGVyKCktPmRp
c2Nvbm5lY3RJbnRlcnZhbFRpbWVyKHRoaXMpOwotICAgIG1fY29ubmVjdGVkVG9UaW1lciA9IGZh
bHNlOwotfQotCi1zdGF0aWMgZG91YmxlIGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGRvdWJsZSBl
bGFwc2VkU2Vjb25kcywgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBkb3VibGUgZHVyYXRpb24s
IGRvdWJsZSByZXBldGl0aW9ucykKLXsKLSAgICBkb3VibGUgcGVyY2VudGFnZSA9IDAuMDsKLSAg
ICBkb3VibGUgdXNlRWxhcHNlZCA9IGVsYXBzZWRTZWNvbmRzIC0gKGR1cmF0aW9uICogcmVwZXRp
dGlvbnMpOwogICAgIAotICAgIGlmIChkdXJhdGlvbiA+IDAuMCAmJiBlbmQgPT0gMC4wKQotICAg
ICAgICBwZXJjZW50YWdlID0gMS4wIC0gKCgoc3RhcnQgKyBkdXJhdGlvbikgLSB1c2VFbGFwc2Vk
KSAvIGR1cmF0aW9uKTsKLSAgICBlbHNlIGlmIChkdXJhdGlvbiA+IDAuMCAmJiBlbmQgIT0gMC4w
KSB7Ci0gICAgICAgIGlmIChkdXJhdGlvbiA+IGVuZCkKLSAgICAgICAgICAgIHBlcmNlbnRhZ2Ug
PSAxLjAgLSAoKChzdGFydCArIGVuZCkgLSB1c2VFbGFwc2VkKSAvIGVuZCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGR1cmF0aW9uKSAt
IHVzZUVsYXBzZWQpIC8gZHVyYXRpb24pOwotICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gMC4w
ICYmIGVuZCAhPSAwLjApCi0gICAgICAgIHBlcmNlbnRhZ2UgPSAxLjAgLSAoKChzdGFydCArIGVu
ZCkgLSB1c2VFbGFwc2VkKSAvIGVuZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBlcmNlbnRhZ2U7CitT
dHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlTmFtZSgpIGNvbnN0Cit7ICAgIAor
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKS5zdHJp
bmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdFBl
cmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyhjb25zdCBWZWN0b3I8U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6S2V5U3BsaW5lPiYga2V5U3BsaW5lcywgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQmIHBl
cmNlbnRhZ2VQYXN0KQorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FkZGl0aXZlKCkgY29u
c3QKIHsKLSAgICBpZiAocGVyY2VudGFnZVBhc3QgPT0gMC4wZikgLy8gdmFsdWVzIGF0IGtleSB0
aW1lcyBuZWVkIG5vIHNwbGluZSBhZGp1c3RtZW50Ci0gICAgICAgIHJldHVybjsKLSAgICBjb25z
dCBTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmUmIGtleVNwbGluZSA9IGtleVNwbGluZXNb
dmFsdWVJbmRleF07Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQo
KSk7Ci0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGtleVNwbGluZS5jb250cm9sMSwga2V5U3Bs
aW5lLmNvbnRyb2wyLCBGbG9hdFBvaW50KDEuMGYsIDEuMGYpKTsKLSAgICAvLyBGSVhNRTogVGhp
cyBuZWVkcyB0byB1c2UgYSB5LWF0LXggZnVuY3Rpb24gb24gcGF0aCwgdG8gY29tcHV0ZSB0aGUg
eSB2YWx1ZSB0aGVuIG11bHRpcGx5IHBlcmNlbnRhZ2VQYXN0IGJ5IHRoYXQgdmFsdWUKKyAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIHN1bSgic3VtIik7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YWRkaXRpdmVBdHRyKTsKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gc3VtIHx8IGFuaW1hdGlvbk1vZGUoKSA9PSBCeUFuaW1hdGlvbjsKIH0K
IAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp2YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RG
b3JEaXN0YW5jZShmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4
LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNj
dW11bGF0ZWQoKSBjb25zdAogewotICAgIC8vIFVuc3BlY2lmaWVkOiBhbmltYXRpb24gZWxlbWVu
dHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgQ0FMQ01PREVfUEFDRUQsIHdlIGp1c3QgYWx3YXlzIHNo
b3cgdGhlIGZpcnN0IHZhbHVlCi0gICAgdmFsdWVJbmRleCA9IDA7Ci0gICAgcGVyY2VudGFnZVBh
c3QgPSAwOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgc3VtKCJzdW0iKTsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjphY2N1bXVs
YXRlQXR0cik7CisgICAgcmV0dXJuIHZhbHVlID09IHN1bSAmJiBhbmltYXRpb25Nb2RlKCkgIT0g
VG9BbmltYXRpb247CiB9CiAKLWZsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVRv
dGFsRGlzdGFuY2UoKQorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRhcmdldEVsZW1lbnQoKTsKIH0K
LQotc3RhdGljIGlubGluZSB2b2lkIGNhY3VsYXRlVmFsdWVJbmRleEZvcktleVRpbWVzKGZsb2F0
IHRpbWVQZXJjZW50YWdlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXlUaW1lcywgdW5zaWduZWQm
IHZhbHVlSW5kZXgsIGZsb2F0JiBsYXN0S2V5VGltZSwgZmxvYXQmIG5leHRLZXlUaW1lKQotewot
ICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnRNaW51c09uZSA9IGtleVRpbWVzLnNpemUoKSAtIDE7
Ci0gICAgdmFsdWVJbmRleCA9IDA7Ci0gICAgQVNTRVJUKHRpbWVQZXJjZW50YWdlID49IGtleVRp
bWVzLmZpcnN0KCkpOwotICAgIHdoaWxlICgodmFsdWVJbmRleCA8IGtleVRpbWVzQ291bnRNaW51
c09uZSkgJiYgKHRpbWVQZXJjZW50YWdlID49IGtleVRpbWVzW3ZhbHVlSW5kZXggKyAxXSkpCi0g
ICAgICAgIHZhbHVlSW5kZXgrKzsKICAgICAKLSAgICBsYXN0S2V5VGltZSA9IGtleVRpbWVzW3Zh
bHVlSW5kZXhdOwotICAgIGlmICh2YWx1ZUluZGV4IDwga2V5VGltZXNDb3VudE1pbnVzT25lKQot
ICAgICAgICBuZXh0S2V5VGltZSA9IGtleVRpbWVzW3ZhbHVlSW5kZXggKyAxXTsKLSAgICBlbHNl
Ci0gICAgICAgIG5leHRLZXlUaW1lID0gbGFzdEtleVRpbWU7Citib29sIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUlzQ1NTKCkgY29uc3QKK3sKKyAgICBBdHRyaWJ1dGVUeXBl
IHR5cGUgPSBhdHRyaWJ1dGVUeXBlKCk7CisgICAgaWYgKHR5cGUgPT0gQXR0cmlidXRlVHlwZUNT
UykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUgPT0gQXR0cmlidXRlVHlwZVhN
TCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBh
IG1hcCBvZiBhbGwgU1ZHIHByb3BlcnRpZXMgYW5kIHRoZWlyIGF0dHJpYnV0ZSB0eXBlcyBzbyB3
ZQorICAgIC8vIGNvdWxkIHZhbGlkYXRlIGFuaW1hdGlvbnMgYmV0dGVyLiBUaGUgc3BlYyBpcyB2
ZXJ5IHZhZ3VlIGFib3V0IHRoaXMuCisgICAgdW5zaWduZWQgaWQgPSBjc3NQcm9wZXJ0eUlEKGF0
dHJpYnV0ZU5hbWUoKSk7CisgICAgLy8gU1ZHIHJhbmdlCisgICAgaWYgKGlkID49IENTU1Byb3Bl
cnR5Q2xpcFBhdGggJiYgaWQgPD0gQ1NTUHJvcGVydHlXcml0aW5nTW9kZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgLy8gUmVndWxhciBDU1MgcHJvcGVydGllcyBhbHNvIGluIFNWRworICAg
IHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yIHx8IGlkID09IENTU1Byb3BlcnR5RGlzcGxh
eSB8fCBpZCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkKKyAgICAgICAgfHwgKGlkID49IENTU1Byb3Bl
cnR5Rm9udCAmJiBpZCA8PSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpIAorICAgICAgICB8fCBpZCA9
PSBDU1NQcm9wZXJ0eU92ZXJmbG93IHx8IGlkID09IENTU1Byb3BlcnR5VmlzaWJpbGl0eTsKIH0K
IAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3QKK3Zv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUg
PSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7Ci0gICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpIHx8IChh
bmltYXRpb25Nb2RlID09IE5PX0FOSU1BVElPTikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5JTUFUSU9OKSB7Ci0gICAgICAgIGlmICgh
bV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
bV9rZXlUaW1lcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmICgobV92YWx1ZXMuc2l6ZSgpICE9
IG1fa2V5VGltZXMuc2l6ZSgpKSB8fCAobV9rZXlUaW1lcy5maXJzdCgpICE9IDApKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgoKG1fY2FsY01vZGUgPT0g
Q0FMQ01PREVfU1BMSU5FKSB8fCAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9MSU5FQVIpKSAmJiAo
bV9rZXlUaW1lcy5sYXN0KCkgIT0gMSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgZmxvYXQgbGFzdEtleVRpbWUgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCB4ID0gMDsgeCA8IG1fa2V5VGltZXMuc2l6ZSgpOyB4KyspIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9rZXlUaW1lc1t4XSA8IGxhc3RLZXlUaW1lIHx8IG1fa2V5VGltZXNbeF0gPiAxKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fa2V5U3BsaW5lcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmICgo
bV92YWx1ZXMuc2l6ZSgpIC0gMSkgIT0gbV9rZXlTcGxpbmVzLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwg
bV9rZXlUaW1lcy5zaXplKCk7IHgrKykKLSAgICAgICAgICAgICAgICBpZiAobV9rZXlUaW1lc1t4
XSA8IDAgfHwgbV9rZXlUaW1lc1t4XSA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQorICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQo
KTsKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKKyAg
ICBpZiAoIXRhcmdldCB8fCBhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSB8fCB2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYgKHRhcmdl
dEF0dHJpYnV0ZUlzQ1NTKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0
aGUgb3ZlcnJpZGUgc3R5bGUsIG5vdCB0aGUgaW5saW5lIHN0eWxlLgorICAgICAgICAvLyBTYWRs
eSBvdmVycmlkZSBzdHlsZXMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgICAgIHRhcmdl
dC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgJ3ByZXNl
bnRhdGlvbicgdmFsdWUsIG5vdCB0aGUgYWN0dWFsIAorICAgICAgICAvLyBhdHRyaWJ1dGUgdmFs
dWUuIFdoYXRldmVyIHRoYXQgbWVhbnMgaW4gcHJhY3RpY2UuCisgICAgICAgIHRhcmdldC0+c2V0
QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCBlYyk7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVZhbHVlSW5kZXhB
bmRQZXJjZW50YWdlUGFzdChmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5k
ZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK1N0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0
YXJnZXRBdHRyaWJ1dGVCYXNlVmFsdWUoKSBjb25zdAogewotICAgIEFTU0VSVCh0aW1lUGVyY2Vu
dGFnZSA8PSAxLjBmKTsKLSAgICBBU1NFUlQoaXNWYWxpZEFuaW1hdGlvbigpKTsKLSAgICBFQW5p
bWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOworICAgIFN0
cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOworICAgIGlmICghdGFy
Z2V0RWxlbWVudCgpIHx8IGF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgCi0gICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIHRoZWlyIG93biBzcGVj
aWFsIGhhbmRsaW5nCi0gICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVE9fQU5JTUFUSU9OKQotICAg
ICAgICByZXR1cm47CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudCgpOwor
ICAgIFN0cmluZyByZXN1bHQ7CiAgICAgCi0gICAgLy8gcGFjZWQgaXMgc3BlY2lhbCwgY2FjdWxh
dGVzIHZhbHVlcyBiYXNlZCBvbiBkaXN0YW5jZSBpbnN0ZWFkIG9mIHRpbWUKLSAgICBpZiAobV9j
YWxjTW9kZSA9PSBDQUxDTU9ERV9QQUNFRCkgewotICAgICAgICBmbG9hdCB0b3RhbERpc3RhbmNl
ID0gY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOwotICAgICAgICBmbG9hdCBkaXN0YW5jZVBlcmNl
bnRhZ2UgPSB0b3RhbERpc3RhbmNlICogdGltZVBlcmNlbnRhZ2U7Ci0gICAgICAgIHZhbHVlSW5k
ZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGRpc3RhbmNlUGVyY2VudGFnZSwgdmFsdWVJ
bmRleCwgcGVyY2VudGFnZVBhc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICh0
YXJnZXRBdHRyaWJ1dGVJc0NTUygpKSB7CisgICAgICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbiBjb21wdXRlZFN0eWxlKHRhcmdldCk7CisgICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxl
LmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CisgICAgfSBl
bHNlCisgICAgICAgIHJlc3VsdCA9IHRhcmdldEVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHJp
YnV0ZU5hbWUpOwogICAgIAotICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY3VycmVudCBpbmRl
eCBpcyBiYXNlZCBvbiBvbiB0aW1lCi0gICAgLy8gYWxsIGZ1cnRoZXIgY2FsY3VsYXRpb25zIGFy
ZSBiYXNlZCBvbiB0aW1lIHBlcmNlbnRhZ2VzLCB0byBhbGxvdyB1bmlmeWluZyBrZXlUaW1lcyBo
YW5kbGluZyAmIG5vcm1hbCBhbmltYXRpb24KLSAgICBmbG9hdCBsYXN0S2V5VGltZVBlcmNlbnRh
Z2UgPSAwOwotICAgIGZsb2F0IG5leHRLZXlUaW1lUGVyY2VudGFnZSA9IDA7Ci0gICAgaWYgKG1f
a2V5VGltZXMuc2l6ZSgpICYmIChtX2tleVRpbWVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkp
KQotICAgICAgICBjYWN1bGF0ZVZhbHVlSW5kZXhGb3JLZXlUaW1lcyh0aW1lUGVyY2VudGFnZSwg
bV9rZXlUaW1lcywgdmFsdWVJbmRleCwgbGFzdEtleVRpbWVQZXJjZW50YWdlLCBuZXh0S2V5VGlt
ZVBlcmNlbnRhZ2UpOwotICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZCBsYXN0UG9zc2libGVJ
bmRleCA9IChtX3ZhbHVlcy5zaXplKCkgPyBtX3ZhbHVlcy5zaXplKCkgLSAxOiAxKTsKLSAgICAg
ICAgdW5zaWduZWQgZmxvb3JlZFZhbHVlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGlt
ZVBlcmNlbnRhZ2UgKiBsYXN0UG9zc2libGVJbmRleCk7Ci0gICAgICAgIHZhbHVlSW5kZXggPSBm
bG9vcmVkVmFsdWVJbmRleDsKLSAgICAgICAgbGFzdEtleVRpbWVQZXJjZW50YWdlID0gZmxvb3Jl
ZFZhbHVlSW5kZXggLyAoZmxvYXQpbGFzdFBvc3NpYmxlSW5kZXg7Ci0gICAgICAgIG5leHRLZXlU
aW1lUGVyY2VudGFnZSA9IChmbG9vcmVkVmFsdWVJbmRleCArIDEpIC8gKGZsb2F0KWxhc3RQb3Nz
aWJsZUluZGV4OwotICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQogICAgIAotICAgIC8vIE5v
IGZ1cnRoZXIgY2FjdWxhdGlvbiBpcyBuZWVkZWQgaWYgd2UncmUgZXhhY3RseSBvbiBhbiBpbmRl
eC4KLSAgICBpZiAodGltZVBlcmNlbnRhZ2UgPT0gbGFzdEtleVRpbWVQZXJjZW50YWdlIHx8IGxh
c3RLZXlUaW1lUGVyY2VudGFnZSA9PSBuZXh0S2V5VGltZVBlcmNlbnRhZ2UpIHsKLSAgICAgICAg
cGVyY2VudGFnZVBhc3QgPSAwLjBmOworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9u
KGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQorICAg
IAordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0
aW9uKGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZlY3RpdmVQZXJjZW50LCBTdHJpbmcmIGZyb20s
IFN0cmluZyYgdG8pCit7CisgICAgdW5zaWduZWQga2V5VGltZXNDb3VudCA9IG1fa2V5VGltZXMu
c2l6ZSgpOworICAgIHVuc2lnbmVkIHZhbHVlc0NvdW50ID0gbV92YWx1ZXMuc2l6ZSgpOworICAg
IEFTU0VSVChtX2FuaW1hdGlvblZhbGlkKTsKKyAgICBBU1NFUlQodmFsdWVzQ291bnQgPiAxKTsK
KyAgICBBU1NFUlQoIWtleVRpbWVzQ291bnQgfHwgdmFsdWVzQ291bnQgPT0ga2V5VGltZXNDb3Vu
dCk7CisgICAgQVNTRVJUKCFrZXlUaW1lc0NvdW50IHx8IChrZXlUaW1lc0NvdW50ID4gMSAmJiBt
X2tleVRpbWVzWzBdID09IDApKTsKKworICAgIHVuc2lnbmVkIGluZGV4OworICAgIGZvciAoaW5k
ZXggPSAxOyBpbmRleCA8IGtleVRpbWVzQ291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKG1f
a2V5VGltZXNbaW5kZXhdID49IHBlcmNlbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgLS1pbmRleDsKKyAgICAKKyAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZURpc2NyZXRl
KSB7CisgICAgICAgIGlmICgha2V5VGltZXNDb3VudCkgCisgICAgICAgICAgICBpbmRleCA9IHBl
cmNlbnQgPT0gMS4wZiA/IHZhbHVlc0NvdW50IC0gMSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihw
ZXJjZW50ICogdmFsdWVzQ291bnQpOworICAgICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwor
ICAgICAgICB0byA9IG1fdmFsdWVzW2luZGV4XTsKKyAgICAgICAgZWZmZWN0aXZlUGVyY2VudCA9
IDAuMGY7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgLy8gb3RoZXJ3aXNlIHdl
IGRlY2lkZSB3aGF0IHBlcmNlbnQgYWZ0ZXIgdGhhdCBpbmRleAotICAgIGlmICgobV9jYWxjTW9k
ZSA9PSBDQUxDTU9ERV9TUExJTkUpICYmIChtX2tleVNwbGluZXMuc2l6ZSgpID09IChtX3ZhbHVl
cy5zaXplKCkgLSAxKSkpCi0gICAgICAgIGFkanVzdFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5l
cyhtX2tleVNwbGluZXMsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKLSAgICBlbHNlIGlm
IChtX2NhbGNNb2RlID09IENBTENNT0RFX0RJU0NSRVRFKQotICAgICAgICBwZXJjZW50YWdlUGFz
dCA9IDAuMGY7Ci0gICAgZWxzZSB7IC8vIGRlZmF1bHQgKGFuZCBmYWxsYmFjaykgbW9kZTogbGlu
ZWFyCi0gICAgICAgIGZsb2F0IGtleVRpbWVTcGFuID0gbmV4dEtleVRpbWVQZXJjZW50YWdlIC0g
bGFzdEtleVRpbWVQZXJjZW50YWdlOwotICAgICAgICBmbG9hdCB0aW1lU2luY2VMYXN0S2V5VGlt
ZSA9IHRpbWVQZXJjZW50YWdlIC0gbGFzdEtleVRpbWVQZXJjZW50YWdlOwotICAgICAgICBwZXJj
ZW50YWdlUGFzdCA9ICh0aW1lU2luY2VMYXN0S2V5VGltZSAvIGtleVRpbWVTcGFuKTsKKyAgICBm
bG9hdCBmcm9tUGVyY2VudDsKKyAgICBmbG9hdCB0b1BlcmNlbnQ7CisgICAgaWYgKGtleVRpbWVz
Q291bnQpIHsKKyAgICAgICAgZnJvbVBlcmNlbnQgPSBtX2tleVRpbWVzW2luZGV4XTsKKyAgICAg
ICAgdG9QZXJjZW50ID0gbV9rZXlUaW1lc1tpbmRleCArIDFdOworICAgIH0gZWxzZSB7ICAgICAg
ICAKKyAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGVyY2VudCAqICh2YWx1
ZXNDb3VudCAtIDEpKTsKKyAgICAgICAgZnJvbVBlcmNlbnQgPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGluZGV4KSAvICh2YWx1ZXNDb3VudCAtIDEpOworICAgICAgICB0b1BlcmNlbnQgPSAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGluZGV4ICsgMSkgLyAodmFsdWVzQ291bnQgLSAxKTsKKyAgICB9CisgICAg
CisgICAgaWYgKGluZGV4ID09IHZhbHVlc0NvdW50IC0gMSkKKyAgICAgICAgLS1pbmRleDsKKyAg
ICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOworICAgIHRvID0gbV92YWx1ZXNbaW5kZXggKyAxXTsK
KyAgICBBU1NFUlQodG9QZXJjZW50ID4gZnJvbVBlcmNlbnQpOworICAgIGVmZmVjdGl2ZVBlcmNl
bnQgPSBwZXJjZW50ID09IDEuMGYgPyAxLjBmIDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAo
dG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOworICAgIAorICAgIGlmIChjYWxjTW9kZSgpID09IENh
bGNNb2RlU3BsaW5lKSB7CisgICAgICAgIEFTU0VSVChtX2tleVNwbGluZXMuc2l6ZSgpID09IG1f
dmFsdWVzLnNpemUoKSAtIDEpOworICAgICAgICBDdXJ2ZURhdGEgYmV6aWVyID0gbV9rZXlTcGxp
bmVzW2luZGV4XTsKKyAgICAgICAgU01JTFRpbWUgZHVyYXRpb24gPSBzaW1wbGVEdXJhdGlvbigp
OworICAgICAgICBpZiAoIWR1cmF0aW9uLmlzRmluaXRlKCkpCisgICAgICAgICAgICBkdXJhdGlv
biA9IDEwLjA7CisgICAgICAgIGRvdWJsZSB0ID0gYmV6aWVyLnNvbHZlQ3VydmVYKGVmZmVjdGl2
ZVBlcmNlbnQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbi52YWx1ZSgpKSk7CisgICAgICAgIHQgPSBi
ZXppZXIuc2FtcGxlQ3VydmVZKHQpOworICAgICAgICBlZmZlY3RpdmVQZXJjZW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdCh0KTsKICAgICB9CiB9Ci0KLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQotewotICAgIG1fYmFzZVZh
bHVlID0gdGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVu
dCgpCisgICAgCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZh
bCgpCiB7Ci0gICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkVmFs
dWUpOwotfQorICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBmYWxzZTsKIAotdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSBlbGFwc2VkU2Vjb25kcywgZG91Ymxl
IHRpbWVQZXJjZW50YWdlKQotewotICAgIHRpbWVQZXJjZW50YWdlID0gbWluKHRpbWVQZXJjZW50
YWdlLCAxLjApOwotICAgIGlmICghY29ubmVjdGVkVG9UaW1lcigpKSB7Ci0gICAgICAgIGNvbm5l
Y3RUaW1lcigpOworICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogYWNjdW11bGF0ZT0ic3VtIiB3aWxsIG5vdCB3b3Jr
IHcvbyBjb2RlIHNpbWlsYXIgdG8gdGhpczoKLS8vICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYg
cmVwZWF0aW9ucygpICE9IDAuMCkKLS8vICAgICAgICBhY2N1bXVsYXRlRm9yUmVwZXRpdGlvbnMo
bV9yZXBldGl0aW9ucyk7Ci0gICAgCi0gICAgRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9
IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKLSAgICAKLSAgICB1bnNpZ25lZCB2YWx1ZUluZGV4ID0g
MDsKLSAgICBmbG9hdCBwZXJjZW50YWdlUGFzdCA9IDA7Ci0gICAgY2FsY3VsYXRlVmFsdWVJbmRl
eEFuZFBlcmNlbnRhZ2VQYXN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodGltZVBlcmNlbnRhZ2Up
LCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7Ci0gICAgICAgIAotICAgIGNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhhbmltYXRpb25Nb2RlLCB2YWx1ZUluZGV4KTsKLSAgICAKLSAgICB1cGRh
dGVBbmltYXRlZFZhbHVlKGFuaW1hdGlvbk1vZGUsIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodGlt
ZVBlcmNlbnRhZ2UpLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7Ci0gICAgCi0gICAgaWYg
KHRpbWVQZXJjZW50YWdlID09IDEuMCkgewotICAgICAgICBpZiAoKG1fcmVwZWF0Q291bnQgPiAw
ICYmIG1fcmVwZXRpdGlvbnMgPCBtX3JlcGVhdENvdW50IC0gMSkgfHwgaXNJbmRlZmluaXRlKG1f
cmVwZWF0Q291bnQpKSB7Ci0gICAgICAgICAgICBtX3JlcGV0aXRpb25zKys7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGlzY29ubmVjdFRpbWVyKCk7
Ci0gICAgfQotfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFs
dWVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpCi17Ci0gICAgLy8gRklY
TUU6IGZpbGw9ImZyZWV6ZSIgd2lsbCBub3Qgd29yayB3aXRob3V0IHNhdmluZyBvZmYgdGhlIG1f
c3RvcHBlZFRpbWUgaW4gYSBzdG9wKCkgbWV0aG9kIGFuZCBoYXZpbmcgY29kZSBzaW1pbGFyIHRv
IHRoaXM6Ci0vLyAgICBpZiAoaXNTdG9wcGVkKCkpIHsKLS8vICAgICAgICBpZiAobV9maWxsID09
IEZJTExfRlJFRVpFKQotLy8gICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG1fc3RvcHBlZFRp
bWU7Ci0vLyAgICAgICAgZWxzZQotLy8gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0vLyAgICB9
Ci0gICAgCi0gICAgLy8gVmFsaWRhdGUgYW5pbWF0aW9uIHRpbWluZyBzZXR0aW5nczoKLSAgICAv
LyAjMSAoZHVyYXRpb24gPiAwKSAtPiBmaW5lCi0gICAgLy8gIzIgKGR1cmF0aW9uIDw9IDAuMCAm
JiBlbmQgPiAwKSAtPiBmaW5lCi0gICAgLy8gRklYTUU6IFRoaXMgYWxsb3dzIGluZGVmaW5pdGUg
ZHVyYXRpb24gZm9yIHRoZSA8c2V0PiBlbGVtZW50LCBub3Qgc3VyZSBpZiBpdCBzaG91bGQgYmUg
YWxsb3dlZCBmb3Igb3RoZXJzIHRvby4gCi0gICAgLy8gRklYTUU6IFZhbHVlIHdvbid0IG5hdHVy
YWxseSBhbmltYXRlIGluIHRoaXMgY2FzZSBzbyBrZWVwaW5nIHRoZSB0aW1lciByZXBlYXRpbmcg
aXMgc29ydCBvZiBwb2ludGxlc3MuCi0gICAgaWYgKChtX3NpbXBsZUR1cmF0aW9uIDw9IDAuMCAm
JiBtX2VuZCA8PSAwLjApIHx8IChpc0luZGVmaW5pdGUobV9zaW1wbGVEdXJhdGlvbikgJiYgbV9l
bmQgPD0gMC4wICYmICFoYXNUYWdOYW1lKHNldFRhZykpKQotICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIElnbm9yZSBkdXI9IjAiIG9yIGR1cj0iLW5lZyIKLSAgICAKLSAgICBpZiAoaXNJbmRlZmlu
aXRlKG1fYW5pbWF0aW9uQmVnaW4pKQotICAgICAgICBtX2FuaW1hdGlvbkJlZ2luID0gbV9iZWdp
bjsKLSAgICAKLSAgICBkb3VibGUgcGVyY2VudGFnZSA9IGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdl
KGVsYXBzZWRTZWNvbmRzLCBtX2FuaW1hdGlvbkJlZ2luLCBtX2VuZCwgbV9zaW1wbGVEdXJhdGlv
biwgbV9yZXBldGl0aW9ucyk7Ci0gICAgCi0gICAgaWYgKHBlcmNlbnRhZ2UgPD0gMS4wIHx8IGNv
bm5lY3RlZFRvVGltZXIoKSkKLSAgICAgICAgaGFuZGxlVGltZXJFdmVudChlbGFwc2VkU2Vjb25k
cywgcGVyY2VudGFnZSk7Ci0gICAgCi0gICAgaWYgKGVsYXBzZWRTZWNvbmRzID4gbV9hbmltYXRp
b25FbmQpIHsKLSAgICAgICAgaWYgKGNvbm5lY3RlZFRvVGltZXIoKSkKLSAgICAgICAgICAgIGRp
c2Nvbm5lY3RUaW1lcigpOwotICAgICAgICBtX2FuaW1hdGlvbkVuZCA9IERCTF9NQVg7CisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGFuaW1h
dGlvbnMgb24gdGhlIHNhbWUgdGFyZ2V0IG9yIGlmIAorICAgIC8vIHRoZSB0aW1pbmcgYXR0aWJ1
dGVzIGNoYW5nZSBkdXJpbmcgYW5pbWF0aW9uIGR1ZSB0byBET00gbWFuaXB1bGF0aW9uLgorICAg
IG1fc2F2ZWRCYXNlVmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVCYXNlVmFsdWUoKTsKKworICAgIEFu
aW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IHRoaXMtPmFuaW1hdGlvbk1vZGUoKTsKKyAgICBp
ZiAoYW5pbWF0aW9uTW9kZSA9PSBOb0FuaW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb25W
YWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhmcm9tVmFsdWUoKSwgdG9WYWx1ZSgpKTsK
KyAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uKQorICAgICAgICBtX2Fu
aW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKG1fc2F2ZWRCYXNlVmFsdWUs
IHRvVmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBGcm9tQnlBbmltYXRp
b24pCisgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMo
ZnJvbVZhbHVlKCksIGJ5VmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBC
eUFuaW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRC
eVZhbHVlcyhTdHJpbmcoKSwgYnlWYWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhbmltYXRpb25Nb2Rl
ID09IFZhbHVlc0FuaW1hdGlvbikgeworICAgICAgICBDYWxjTW9kZSBjYWxjTW9kZSA9IHRoaXMt
PmNhbGNNb2RlKCk7CisgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBtX3ZhbHVlcy5zaXplKCkg
PiAxCisgICAgICAgICAgICAmJiAoY2FsY01vZGUgPT0gQ2FsY01vZGVQYWNlZCB8fCAhaGFzQXR0
cmlidXRlKFNWR05hbWVzOjprZXlUaW1lc0F0dHIpIHx8IChtX3ZhbHVlcy5zaXplKCkgPT0gbV9r
ZXlUaW1lcy5zaXplKCkpKQorICAgICAgICAgICAgJiYgKGNhbGNNb2RlID09IENhbGNNb2RlRGlz
Y3JldGUgfHwgIW1fa2V5VGltZXMuc2l6ZSgpIHx8IG1fa2V5VGltZXMubGFzdCgpID09IDEuMCkK
KyAgICAgICAgICAgICYmIChjYWxjTW9kZSAhPSBDYWxjTW9kZVNwbGluZSB8fCAobV9rZXlTcGxp
bmVzLnNpemUoKSAmJiBtX2tleVNwbGluZXMuc2l6ZSgpID09IG1fdmFsdWVzLnNpemUoKSAtIDEp
KTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7IC8vIHZhbHVlIHdhcyB1cGRhdGVkLCBu
ZWVkIHRvIGFwcGx5Ci19Ci0gICAgCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxl
bWVudChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUg
c3luY2hyb25vdXM/Ci0gICAgcmV0dXJuIGJlZ2luRWxlbWVudEF0KDAsIGVjKTsKIH0KLQotYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBIYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyBj
b3JyZWN0bHkuCi0gICAgLy8gSW4gZ2VuZXJhbCB3ZSBuZWVkIHRvIG1ha2UgU01JTCBjb25jZXB0
cyBsaWtlICJhY3RpdmUgZHVyYXRpb24iIGV4cGxpY2l0IGluIHRoZSBjb2RlIAotICAgIGlmIChv
ZmZzZXQgPCAwKQotICAgICAgICBvZmZzZXQgPSAwOwogICAgIAotICAgIGlmIChjb25uZWN0ZWRU
b1RpbWVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6YXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KQoreyAgICAK
KyAgICBpZiAoIW1fYW5pbWF0aW9uVmFsaWQpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBt
X2FuaW1hdGlvbkJlZ2luID0gb2Zmc2V0OwotICAgIGlmIChvd25lclNWR0VsZW1lbnQoKSkgewot
ICAgICAgICBvd25lclNWR0VsZW1lbnQoKS0+dGltZVNjaGVkdWxlcigpLT5hZGRUaW1lcih0aGlz
LCBvZmZzZXQpOwotICAgICAgICBvd25lclNWR0VsZW1lbnQoKS0+dGltZVNjaGVkdWxlcigpLT5z
dGFydEFuaW1hdGlvbnMoKTsKLSAgICAgICAgY29ubmVjdFRpbWVyKCk7CisgICAgaWYgKGFuaW1h
dGlvbk1vZGUoKSA9PSBWYWx1ZXNBbmltYXRpb24pIHsKKyAgICAgICAgU3RyaW5nIGZyb207Cisg
ICAgICAgIFN0cmluZyB0bzsKKyAgICAgICAgZmxvYXQgZWZmZWN0aXZlUGVyY2VudDsKKyAgICAg
ICAgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbihwZXJjZW50LCBlZmZlY3RpdmVQZXJj
ZW50LCBmcm9tLCB0byk7CisgICAgICAgIGlmIChmcm9tICE9IG1fbGFzdFZhbHVlc0FuaW1hdGlv
bkZyb20gfHwgdG8gIT0gbV9sYXN0VmFsdWVzQW5pbWF0aW9uVG8gKSB7CisgICAgICAgICAgICBt
X2FuaW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGZyb20sIHRvKTsKKyAg
ICAgICAgICAgIGlmICghbV9hbmltYXRpb25WYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBtX2xhc3RWYWx1ZXNBbmltYXRpb25Gcm9tID0gZnJvbTsKKyAgICAgICAg
ICAgIG1fbGFzdFZhbHVlc0FuaW1hdGlvblRvID0gdG87CisgICAgICAgIH0KKyAgICAgICAgdXBk
YXRlQW5pbWF0ZWRWYWx1ZShlZmZlY3RpdmVQZXJjZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB1cGRhdGVBbmltYXRlZFZhbHVlKHBlcmNlbnQpOwogCi0g
ICAgcmV0dXJuIGZhbHNlOworICAgIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudChyZXBlYXQp
OwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnQoRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVuYXBwbHlBbmltYXRpb24oKQogewot
ICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBzeW5jaHJvbm91cz8KLSAgICByZXR1cm4gZW5k
RWxlbWVudEF0KDAsIGVjKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdCBpZiB0
aGVyZSBhcmUgbXVsdGlwbGUgYW5pbWF0aW9ucyBvbiB0aGUgc2FtZSB0YXJnZXQgb3IgaWYgCisg
ICAgLy8gdGhlIHRpbWluZyBhdHRpYnV0ZXMgY2hhbmdlIGR1cmluZyBhbmltYXRpb24gZHVlIHRv
IERPTSBtYW5pcHVsYXRpb24uCisgICAgaWYgKG1fc2F2ZWRCYXNlVmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fc2F2
ZWRCYXNlVmFsdWUpOworICAgIG1fc2F2ZWRCYXNlVmFsdWUgPSBTdHJpbmcoKTsKIH0KIAotYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZh
bCgpCiB7Ci0gICAgaWYgKG9mZnNldCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWNvbm5lY3RlZFRvVGltZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYW5p
bWF0aW9uRW5kID0gb3duZXJTVkdFbGVtZW50KCktPnRpbWVTY2hlZHVsZXIoKS0+ZWxhcHNlZCgp
ICsgb2Zmc2V0OwotICAgIHJldHVybiB0cnVlOworICAgIG1fc2F2ZWRCYXNlVmFsdWUgPSBTdHJp
bmcoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24g
MzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNiArMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKIApAQCAtMjUsNTggKzI2LDIwIEBACiAjZGVmaW5lIFNWR0FuaW1hdGlv
bkVsZW1lbnRfaAogI2lmIEVOQUJMRShTVkcpCiAKKyNpbmNsdWRlICJDdXJ2ZURhdGEuaCIKICNp
bmNsdWRlICJFbGVtZW50VGltZUNvbnRyb2wuaCIKKyNpbmNsdWRlICJTTUlMVGltZS5oIgorI2lu
Y2x1ZGUgIlNNSUxUaW1pbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJTVkdU
ZXN0cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ29uZGl0aW9u
RXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBUaW1lQ29udGFpbmVyOwogCi0gICAgZW51bSBFRmls
bE1vZGUgewotICAgICAgICBGSUxMX1JFTU9WRSA9IDAsCi0gICAgICAgIEZJTExfRlJFRVpFCi0g
ICAgfTsKLQotICAgIGVudW0gRUFkZGl0aXZlTW9kZSB7Ci0gICAgICAgIEFERElUSVZFX1JFUExB
Q0UgPSAwLAotICAgICAgICBBRERJVElWRV9TVU0KLSAgICB9OwotCi0gICAgZW51bSBFQWNjdW11
bGF0ZU1vZGUgewotICAgICAgICBBQ0NVTVVMQVRFX05PTkUgPSAwLAotICAgICAgICBBQ0NVTVVM
QVRFX1NVTQotICAgIH07Ci0KLSAgICBlbnVtIEVDYWxjTW9kZSB7Ci0gICAgICAgIENBTENNT0RF
X0RJU0NSRVRFID0gMCwKLSAgICAgICAgQ0FMQ01PREVfTElORUFSLAotICAgICAgICBDQUxDTU9E
RV9QQUNFRCwKLSAgICAgICAgQ0FMQ01PREVfU1BMSU5FCi0gICAgfTsKLQotICAgIGVudW0gRVJl
c3RhcnQgewotICAgICAgICBSRVNUQVJUX0FMV0FZUyA9IDAsCi0gICAgICAgIFJFU1RBUlRfV0hF
Tk5PVEFDVElWRSwKLSAgICAgICAgUkVTVEFSVF9ORVZFUgotICAgIH07Ci0KLSAgICBlbnVtIEVB
dHRyaWJ1dGVUeXBlIHsKLSAgICAgICAgQVRUUklCVVRFVFlQRV9DU1MgPSAwLAotICAgICAgICBB
VFRSSUJVVEVUWVBFX1hNTCwKLSAgICAgICAgQVRUUklCVVRFVFlQRV9BVVRPCi0gICAgfTsKLQot
ICAgIC8vIGludGVybmFsCi0gICAgZW51bSBFQW5pbWF0aW9uTW9kZSB7Ci0gICAgICAgIE5PX0FO
SU1BVElPTiA9IDAsCi0gICAgICAgIFRPX0FOSU1BVElPTiwKLSAgICAgICAgQllfQU5JTUFUSU9O
LAotICAgICAgICBWQUxVRVNfQU5JTUFUSU9OLAotICAgICAgICBGUk9NX1RPX0FOSU1BVElPTiwK
LSAgICAgICAgRlJPTV9CWV9BTklNQVRJT04KLSAgICB9OwotCi0gICAgY2xhc3MgU1ZHQW5pbWF0
aW9uRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50LAorICAgIGNsYXNzIFNWR0FuaW1hdGlvbkVs
ZW1lbnQgOiBwdWJsaWMgU01JTFRpbWluZ0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBFbGVtZW50VGltZUNvbnRyb2wKQEAgLTg0LDEyMyArNDcs
NzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5pbWF0
aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmly
dHVhbCB+U1ZHQW5pbWF0aW9uRWxlbWVudCgpOwotCi0gICAgICAgIC8vICdTVkdBbmltYXRpb25F
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNv
bnN0OwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29u
c3Q7Ci0gICAgICAgIGJvb2wgaXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0OwogICAgICAgICAKLSAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNW
YWxpZCgpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0
cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKIAotICAgICAgICBmbG9hdCBnZXRFbmRUaW1l
KCkgY29uc3Q7CisgICAgICAgIC8vIFNWR0FuaW1hdGlvbkVsZW1lbnQKICAgICAgICAgZmxvYXQg
Z2V0U3RhcnRUaW1lKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IGdldEN1cnJlbnRUaW1lKCkgY29u
c3Q7CiAgICAgICAgIGZsb2F0IGdldFNpbXBsZUR1cmF0aW9uKEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLSAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCgpOwotICAgICAgICBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFw
c2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7Ci0KLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZU5hbWUoKSBjb25zdDsKLQotICAgICAgICBib29sIGNvbm5lY3RlZFRvVGltZXIoKSBjb25zdDsK
LQotICAgICAgICBib29sIGlzRnJvemVuKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNBZGRpdGl2
ZSgpIGNvbnN0OwotICAgICAgICBib29sIGlzQWNjdW11bGF0ZWQoKSBjb25zdDsKLQotICAgICAg
ICBkb3VibGUgcmVwZWF0aW9ucygpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBpc0luZGVm
aW5pdGUoZG91YmxlIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVsZW1lbnRUaW1lQ29u
dHJvbAogICAgICAgICB2aXJ0dWFsIGJvb2wgYmVnaW5FbGVtZW50KEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGJlZ2luRWxlbWVudEF0KGZsb2F0IG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZW5kRWxlbWVudChFeGNlcHRpb25Db2Rl
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBlbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgICAgIAogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxl
IFNWR0VsZW1lbnQqIG1fdGFyZ2V0RWxlbWVudDsKK3Byb3RlY3RlZDoKICAgICAgICAgCi0gICAg
ICAgIEVBbmltYXRpb25Nb2RlIGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25zdDsKKyAgICAgICAg
ZW51bSBDYWxjTW9kZSB7IENhbGNNb2RlRGlzY3JldGUsIENhbGNNb2RlTGluZWFyLCBDYWxjTW9k
ZVBhY2VkLCBDYWxjTW9kZVNwbGluZSB9OworICAgICAgICBDYWxjTW9kZSBjYWxjTW9kZSgpIGNv
bnN0OwogICAgICAgICAKLSAgICAgICAgc3RhdGljIGRvdWJsZSBwYXJzZUNsb2NrVmFsdWUoY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZShTVkdF
bGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
RUF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0FVVE8pOworICAgICAgICBlbnVtIEF0dHJp
YnV0ZVR5cGUgeyBBdHRyaWJ1dGVUeXBlQ1NTLCBBdHRyaWJ1dGVUeXBlWE1MLCBBdHRyaWJ1dGVU
eXBlQXV0byB9OworICAgICAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUoKSBjb25zdDsK
ICAgICAgICAgCi0gICAgICAgIFN0cmluZyB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25z
dCBTdHJpbmcmKTsKKyAgICAgICAgU3RyaW5nIHRvVmFsdWUoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIGJ5VmFsdWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZyb21WYWx1ZSgpIGNvbnN0Owor
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAg
dm9pZCBjb25uZWN0VGltZXIoKTsKLSAgICAgICAgdm9pZCBkaXNjb25uZWN0VGltZXIoKTsKKyAg
ICAgICAgZW51bSBBbmltYXRpb25Nb2RlIHsgTm9BbmltYXRpb24sIFRvQW5pbWF0aW9uLCBCeUFu
aW1hdGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBGcm9tVG9BbmltYXRpb24sIEZyb21CeUFuaW1hdGlv
biB9OworICAgICAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUoKSBjb25zdDsKIAotICAg
ICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRp
c3RhbmNlUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdl
UGFzdCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJj
ZW50YWdlUGFzdChmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZs
b2F0JiBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdl
dCgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJs
ZSBlbGFwc2VkU2Vjb25kcywgZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKKyAgICAgICAgU3RyaW5n
IHRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFRhcmdl
dEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgdGFy
Z2V0QXR0cmlidXRlSXNDU1MoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFn
ZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpID0gMDsKLSAgICAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwg
dW5zaWduZWQgdmFsdWVJbmRleCkgPSAwOworICAgICAgICBib29sIGlzQWRkaXRpdmUoKSBjb25z
dDsKKyAgICAgICAgYm9vbCBpc0FjY3VtdWxhdGVkKCkgY29uc3Q7CisgICAgCisgICAgICAgIC8v
IGZyb20gU01JTFRpbWluZ0VsZW1lbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3Rp
dmVJbnRlcnZhbCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQg
cGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuYXBwbHlB
bmltYXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsK
ICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlS2V5TnVtYmVycyhWZWN0b3I8Zmxv
YXQ+JiBrZXlOdW1iZXJzLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcGFyc2VCZWdpbk9yRW5kVmFsdWUoZG91YmxlJiBudW1iZXIsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0ZPUldBUkRfREVDTEFSQVRJT05TKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGJvb2wsIEV4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCi0KLSAgICAgICAgYm9vbCBtX2Nvbm5lY3Rl
ZFRvVGltZXIgOiAxOworcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9T
dHJpbmcpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpID0gMDsK
KyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFn
ZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50
KHVuc2lnbmVkIHJlcGVhdCkgPSAwOwogICAgICAgICAKLSAgICAgICAgZG91YmxlIG1fY3VycmVu
dFRpbWU7Ci0gICAgICAgIGRvdWJsZSBtX3NpbXBsZUR1cmF0aW9uOwotCi0gICAgICAgIC8vIFNo
YXJlZCBhbmltYXRpb24gcHJvcGVydGllcwotICAgICAgICB1bnNpZ25lZCBtX2ZpbGwgOiAxOyAv
LyBFRmlsbE1vZGUgbV9maWxsCi0gICAgICAgIHVuc2lnbmVkIG1fcmVzdGFydCA6IDI7IC8vIEVS
ZXN0YXJ0Ci0gICAgICAgIHVuc2lnbmVkIG1fY2FsY01vZGUgOiAyOyAvLyBFQ2FsY01vZGUKLSAg
ICAgICAgdW5zaWduZWQgbV9hZGRpdGl2ZSA6IDE7IC8vIEVBZGRpdGl2ZU1vZGUKLSAgICAgICAg
dW5zaWduZWQgbV9hY2N1bXVsYXRlIDogMTsgLy8gRUFjY3VtdWxhdGVNb2RlCi0gICAgICAgIHVu
c2lnbmVkIG1fYXR0cmlidXRlVHlwZSA6IDI7IC8vIEVBdHRyaWJ1dGVUeXBlCi0gICAgICAgIAot
ICAgICAgICBTdHJpbmcgbV90bzsKLSAgICAgICAgU3RyaW5nIG1fYnk7Ci0gICAgICAgIFN0cmlu
ZyBtX2Zyb207Ci0gICAgICAgIFN0cmluZyBtX2hyZWY7Ci0gICAgICAgIFN0cmluZyBtX3JlcGVh
dER1cjsKLSAgICAgICAgU3RyaW5nIG1fYXR0cmlidXRlTmFtZTsKLSAgICAgICAgCi0gICAgICAg
IFN0cmluZyBtX2Jhc2VWYWx1ZTsKLSAgICAgICAgU3RyaW5nIG1fYW5pbWF0ZWRWYWx1ZTsKLQot
ICAgICAgICBkb3VibGUgbV9tYXg7Ci0gICAgICAgIGRvdWJsZSBtX21pbjsKLSAgICAgICAgZG91
YmxlIG1fZW5kOwotICAgICAgICBkb3VibGUgbV9iZWdpbjsKLQotICAgICAgICBkb3VibGUgbV9y
ZXBldGl0aW9uczsKLSAgICAgICAgZG91YmxlIG1fcmVwZWF0Q291bnQ7CisgICAgICAgIHZvaWQg
Y3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZm
ZWN0aXZlUGVyY2VudCwgU3RyaW5nJiBmcm9tLCBTdHJpbmcmIHRvKTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICAgICAgU3RyaW5nIG1fc2F2ZWRCYXNlVmFsdWU7CisgICAgICAgIGJvb2wgbV9hbmlt
YXRpb25WYWxpZDsKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3ZhbHVlczsKICAgICAgICAg
VmVjdG9yPGZsb2F0PiBtX2tleVRpbWVzOwotICAgICAgICAKLSAgICAgICAgc3RydWN0IEtleVNw
bGluZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2wxOwotICAgICAgICAgICAgRmxv
YXRQb2ludCBjb250cm9sMjsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBt
X2FuaW1hdGlvbkJlZ2luOwotICAgICAgICBkb3VibGUgbV9hbmltYXRpb25FbmQ7Ci0gICAgICAg
IAotICAgICAgICBWZWN0b3I8S2V5U3BsaW5lPiBtX2tleVNwbGluZXM7CisgICAgICAgIFZlY3Rv
cjxDdXJ2ZURhdGE+IG1fa2V5U3BsaW5lczsKKyAgICAgICAgU3RyaW5nIG1fbGFzdFZhbHVlc0Fu
aW1hdGlvbkZyb207CisgICAgICAgIFN0cmluZyBtX2xhc3RWYWx1ZXNBbmltYXRpb25UbzsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQog
I2VuZGlmIC8vIFNWR0FuaW1hdGlvbkVsZW1lbnRfaAotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysg
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgi
CisjaW5jbHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIu
aCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKIApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6c3RhcnRBbmltYXRpCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04p
ICAgIAogICAgIEhhc2hTZXQ8U1ZHU1ZHRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVD
b250YWluZXJzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxTVkdTVkdFbGVtZW50Kj46Oml0ZXJh
dG9yIGl0ciA9IG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXRyICE9IGVuZDsgKytpdHIpCi0g
ICAgICAgICgqaXRyKS0+dGltZVNjaGVkdWxlcigpLT5zdGFydEFuaW1hdGlvbnMoKTsKKyAgICAg
ICAgKCppdHIpLT50aW1lQ29udGFpbmVyKCktPmJlZ2luKCk7CiAjZW5kaWYKIH0KICAgICAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxMiArODcsMTIgQEAgdm9pZCBTVkdFbGVtZW50
OjpzZXRYbWxiYXNlKGNvbnN0IFN0cmluZwogCiBTVkdTVkdFbGVtZW50KiBTVkdFbGVtZW50Ojpv
d25lclNWR0VsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7Cisg
ICAgTm9kZSogbiA9IGlzU2hhZG93Tm9kZSgpID8gY29uc3RfY2FzdDxTVkdFbGVtZW50Kj4odGhp
cyktPnNoYWRvd1BhcmVudE5vZGUoKSA6IHBhcmVudE5vZGUoKTsKICAgICB3aGlsZSAobikgewog
ICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obik7CiAKLSAgICAgICAgbiA9IG4t
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgbiA9IG4tPmlzU2hhZG93Tm9kZSgpID8gbi0+c2hhZG93
UGFyZW50Tm9kZSgpIDogbi0+cGFyZW50Tm9kZSgpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNs
dWRlICJTVkdWaWV3U3BlYy5oIgogI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgogI2luY2x1ZGUg
IlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCisjaW5j
bHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
OCwyMCArNjgsMTkgQEAgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaQog
ICAgICwgbV93aWR0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgpCiAgICAgLCBtX2hlaWdodCh0aGlz
LCBMZW5ndGhNb2RlSGVpZ2h0KQogICAgICwgbV91c2VDdXJyZW50VmlldyhmYWxzZSkKLSAgICAs
IG1fdGltZVNjaGVkdWxlcihuZXcgVGltZVNjaGVkdWxlcihkb2MpKQorICAgICwgbV90aW1lQ29u
dGFpbmVyKG5ldyBTTUlMVGltZUNvbnRhaW5lcikKICAgICAsIG1fdmlld1NwZWMoMCkKICAgICAs
IG1fY29udGFpbmVyU2l6ZSgzMDAsIDE1MCkKICAgICAsIG1faGFzU2V0Q29udGFpbmVyU2l6ZShm
YWxzZSkKIHsKICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9k
ZVdpZHRoLCAiMTAwJSIpKTsKICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMs
IExlbmd0aE1vZGVIZWlnaHQsICIxMDAlIikpOworICAgIGRvYy0+cmVnaXN0ZXJGb3JDYWNoZUNh
bGxiYWNrcyh0aGlzKTsKIH0KIAogU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogewot
ICAgIGRlbGV0ZSBtX3RpbWVTY2hlZHVsZXI7Ci0gICAgbV90aW1lU2NoZWR1bGVyID0gMDsKLQor
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JDYWNoZUNhbGxiYWNrcyh0aGlzKTsKICAgICAv
LyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGlzIG5vdCBjYWxs
ZWQuCiAgICAgLy8gc2VlIENvbnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuLCBjYWxsZWQg
YnkgaXQncyBkZXN0cnVjdG9yLgogICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKQEAgLTQ1NCwyNCArNDUzLDI0IEBAIHZvaWQg
U1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgKIAogdm9pZCBTVkdTVkdFbGVtZW50
OjpwYXVzZUFuaW1hdGlvbnMoKQogewotICAgIGlmICghbV90aW1lU2NoZWR1bGVyLT5hbmltYXRp
b25zUGF1c2VkKCkpCi0gICAgICAgIG1fdGltZVNjaGVkdWxlci0+dG9nZ2xlQW5pbWF0aW9ucygp
OworICAgIGlmICghbV90aW1lQ29udGFpbmVyLT5pc1BhdXNlZCgpKQorICAgICAgICBtX3RpbWVD
b250YWluZXItPnBhdXNlKCk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6dW5wYXVzZUFuaW1h
dGlvbnMoKQogewotICAgIGlmIChtX3RpbWVTY2hlZHVsZXItPmFuaW1hdGlvbnNQYXVzZWQoKSkK
LSAgICAgICAgbV90aW1lU2NoZWR1bGVyLT50b2dnbGVBbmltYXRpb25zKCk7CisgICAgaWYgKG1f
dGltZUNvbnRhaW5lci0+aXNQYXVzZWQoKSkKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5yZXN1
bWUoKTsKIH0KIAogYm9vbCBTVkdTVkdFbGVtZW50OjphbmltYXRpb25zUGF1c2VkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV90aW1lU2NoZWR1bGVyLT5hbmltYXRpb25zUGF1c2VkKCk7CisgICAg
cmV0dXJuIG1fdGltZUNvbnRhaW5lci0+aXNQYXVzZWQoKTsKIH0KIAogZmxvYXQgU1ZHU1ZHRWxl
bWVudDo6Z2V0Q3VycmVudFRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KG1fdGltZVNjaGVkdWxlci0+ZWxhcHNlZCgpKTsKKyAgICByZXR1cm4gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChtX3RpbWVDb250YWluZXItPmVsYXBzZWQoKS52YWx1ZSgpKTsKIH0K
IAogdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGltZShmbG9hdCAvKiBzZWNvbmRzICov
KQpAQCAtNTMwLDYgKzUyOSwxNiBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmluaGVyaXRWaWV3QXR0
cmlidXRlCiAgICAgICAgIGN1cnJlbnRWaWV3KCktPnNldFpvb21BbmRQYW4odmlld0VsZW1lbnQt
Pnpvb21BbmRQYW4oKSk7CiAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9
CisgICAgCit2b2lkIFNWR1NWR0VsZW1lbnQ6OndpbGxTYXZlVG9DYWNoZSgpCit7CisgICAgcGF1
c2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6d2lsbFJlc3RvcmVGcm9t
Q2FjaGUoKQoreworICAgIHVucGF1c2VBbmltYXRpb25zKCk7Cit9CiAKIH0KIApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NW
R0VsZW1lbnQuaAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICBjbGFzcyBTVkdUcmFuc2Zvcm07CiAgICAgY2xhc3MgU1ZHVmlld1NwZWM7CiAgICAgY2xhc3Mg
U1ZHVmlld0VsZW1lbnQ7Ci0gICAgY2xhc3MgVGltZVNjaGVkdWxlcjsKKyAgICBjbGFzcyBTTUlM
VGltZUNvbnRhaW5lcjsKICAgICBjbGFzcyBTVkdTVkdFbGVtZW50IDogcHVibGljIFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdU
ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAg
LTg3LDcgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgRmxvYXRQb2ludCBjdXJy
ZW50VHJhbnNsYXRlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFRyYW5zbGF0ZShj
b25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIAotICAgICAgICBUaW1lU2NoZWR1bGVyKiB0aW1l
U2NoZWR1bGVyKCkgeyByZXR1cm4gbV90aW1lU2NoZWR1bGVyOyB9CisgICAgICAgIFNNSUxUaW1l
Q29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29udGFpbmVy
LmdldCgpOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAg
ICAgICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CkBAIC0xNTUsOSArMTU1LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdT
VkdFbGVtZW50LCBTVkdMZW5ndGgsIFNWR0xlbmd0aCwgWSwgeSkKICAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCwgU1ZHTGVuZ3Ro
LCBXaWR0aCwgd2lkdGgpCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdTVkdFbGVtZW50LCBTVkdMZW5ndGgsIFNWR0xlbmd0aCwgSGVpZ2h0LCBoZWlnaHQpCisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNhdmVUb0NhY2hlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB3aWxsUmVzdG9yZUZyb21DYWNoZSgpOwogCiAgICAgICAgIGJvb2wgbV91c2VD
dXJyZW50VmlldzsKLSAgICAgICAgVGltZVNjaGVkdWxlciogbV90aW1lU2NoZWR1bGVyOworICAg
ICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKICAgICAgICAg
RmxvYXRQb2ludCBtX3RyYW5zbGF0aW9uOwogICAgICAgICBtdXRhYmxlIE93blB0cjxTVkdWaWV3
U3BlYz4gbV92aWV3U3BlYzsKICAgICAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJDb3JlL3N2Zy9TVkdT
ZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdTZXRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisvLyBGSVhNRTogVGhpcyBjbGFzcyBuZWVk
cyB0byBkaWUuIFNWR0FuaW1hdGVFbGVtZW50IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW5zdGVh
ZC4KIAogU1ZHU2V0RWxlbWVudDo6U1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1l
LCBkb2MpCkBAIC0zOSwxMyArNDAsMjMgQEAgU1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQo
KQogewogfQogCi1ib29sIFNWR1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1h
dGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9h
dCBwZXJjZW50YWdlUGFzdCkKK3ZvaWQgU1ZHU2V0RWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVl
VG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkKIHsKLSAgICBtX2FuaW1hdGVkVmFsdWUgPSBtX3Rv
OwotICAgIHJldHVybiB0cnVlOworICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUo
dG9WYWx1ZSgpKTsKK30KKyAgICAKK2Jvb2wgU1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIAoreyAKKyAg
ICBtX2FuaW1hdGVkVmFsdWUgPSB0b1N0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK2Jv
b2wgU1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYg
ZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykgCit7IAorICAgIHJldHVybiBmYWxz
ZTsgCiB9CiAKLWJvb2wgU1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVB
bmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KQorYm9vbCBTVkdTZXRFbGVtZW50Ojp1
cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3Zn
L1NWR1NldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAK
LSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUs
IGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50
YWdlUGFzdCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMo
RUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiB0b1N0cmluZyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3Ry
aW5nKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVy
Y2VudGFnZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1l
bnQodW5zaWduZWQgcmVwZWF0KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBtX3Nh
dmVkVG87CisgICAgICAgIFN0cmluZyBtX2FuaW1hdGVkVmFsdWU7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGltZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RpbWVyLmNwcAkocmV2aXNpb24gMzE3NDApCisrKyBXZWJD
b3JlL3N2Zy9TVkdUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcyICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICAg
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHVGltZXIuaCIKLQotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5z
Zm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlQ29sb3JFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1TVkdUaW1lcjo6U1ZHVGltZXIoVGltZVNjaGVkdWxlciogc2NoZWR1bGVyLCBkb3VibGUg
aW50ZXJ2YWwsIGJvb2wgc2luZ2xlU2hvdCkKLSAgICA6IFRpbWVyPFRpbWVTY2hlZHVsZXI+KHNj
aGVkdWxlciwgJlRpbWVTY2hlZHVsZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX3NjaGVkdWxlcihz
Y2hlZHVsZXIpCi0gICAgLCBtX2ludGVydmFsKGludGVydmFsKQotICAgICwgbV9zaW5nbGVTaG90
KHNpbmdsZVNob3QpCi17Ci19Ci0KLXZvaWQgU1ZHVGltZXI6OnN0YXJ0KCkKLXsKLSAgICBpZiAo
bV9zaW5nbGVTaG90KQotICAgICAgICBzdGFydE9uZVNob3QobV9pbnRlcnZhbCk7Ci0gICAgZWxz
ZQotICAgICAgICBzdGFydFJlcGVhdGluZyhtX2ludGVydmFsKTsKLX0KLQotU1ZHVGltZXI6OlRh
cmdldEFuaW1hdGlvbk1hcCBTVkdUaW1lcjo6YW5pbWF0aW9uc0J5RWxlbWVudChkb3VibGUgZWxh
cHNlZFNlY29uZHMpCi17Ci0gICAgLy8gQnVpbGQgYSBsaXN0IG9mIGFsbCBhbmltYXRpb25zIHdo
aWNoIGFwcGx5IHRvIGVhY2ggZWxlbWVudAotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgc2hvdWxk
IGJlIHNvcnRlZCBieSBhbmltYXRpb24gcHJpb3JpdHkKLSAgICBUYXJnZXRBbmltYXRpb25NYXAg
dGFyZ2V0TWFwOwotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFNWR05vdGlmeVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ub3RpZnlT
ZXQuZW5kKCk7Ci0gICAgZm9yIChTVkdOb3RpZnlTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9u
b3RpZnlTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0FuaW1hdGlv
bkVsZW1lbnQqIGFuaW1hdGlvbiA9ICppdDsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3Jl
IGRlYWxpbmcgd2l0aCBhIGRpc2FibGVkIGVsZW1lbnQgd2l0aCBmaWxsPSJmcmVlemUiLAotICAg
ICAgICAvLyB3ZSBoYXZlIHRvIHRha2UgaXQgaW50byBhY2NvdW50IGZvciBmdXJ0aGVyIGNhbGN1
bGF0aW9ucy4KLSAgICAgICAgaWYgKCFtX2VuYWJsZWROb3RpZnlTZXQuY29udGFpbnMoYW5pbWF0
aW9uKSkgewotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmlzRnJvemVuKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZWxhcHNlZFNlY29uZHMgPD0gKGFu
aW1hdGlvbi0+Z2V0U3RhcnRUaW1lKCkgKyBhbmltYXRpb24tPmdldFNpbXBsZUR1cmF0aW9uKGVj
KSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KGFuaW1hdGlv
bi0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjppdGVyYXRv
ciBpID0gdGFyZ2V0TWFwLmZpbmQodGFyZ2V0KTsKLSAgICAgICAgaWYgKGkgIT0gdGFyZ2V0TWFw
LmVuZCgpKQotICAgICAgICAgICAgaS0+c2Vjb25kLmFwcGVuZChhbmltYXRpb24pOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50Kj4gbGlzdDsK
LSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICB0YXJnZXRN
YXAuc2V0KHRhcmdldCwgbGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1
cm4gdGFyZ2V0TWFwOwotfQotCi0vLyBGSVhNRTogVGhpcyBmdW50aW9uIHdpbGwgZXZlbnR1YWxs
eSBiZWNvbWUgcGFydCBvZiB0aGUgQW5pbWF0aW9uQ29tcG9zaXRvcgotdm9pZCBTVkdUaW1lcjo6
YXBwbHlBbmltYXRpb25zKGRvdWJsZSBlbGFwc2VkU2Vjb25kcywgY29uc3QgU1ZHVGltZXI6OlRh
cmdldEFuaW1hdGlvbk1hcCYgdGFyZ2V0TWFwKQoteyAgICAKLSNpZiBFTkFCTEUoU1ZHX0FOSU1B
VElPTikKLSAgICBUYXJnZXRBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEl0ZXJh
dG9yID0gdGFyZ2V0TWFwLmJlZ2luKCk7Ci0gICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjpjb25zdF9p
dGVyYXRvciB0ZW5kID0gdGFyZ2V0TWFwLmVuZCgpOwotICAgIGZvciAoOyB0YXJnZXRJdGVyYXRv
ciAhPSB0ZW5kOyArK3RhcmdldEl0ZXJhdG9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHN0aWxsIG5vdCAxMDAlIGNvcnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgotICAgICAgICAvLyAx
LiBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVudGlsIGEgcmVwbGFj
ZSAoIWlzQWRkaXRpdmUoKSkgaXMgZm91bmQKLSAgICAgICAgLy8gLS0gVGhpcyBvcHRpbWl6YXRp
b24gaXMgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBkZXBl
bmRlbnQgdmFsdWVzIChzdWNoIGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxHcmFkaWVudCkKLSAg
ICAgICAgLy8gMi4gU2V0IHRoZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJlcGxhY2UpIGFzIHRo
ZSBuZXcgYW5pbVZhbAotICAgICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxlZCBhbmltYXRpb24g
aW4gdHVybiwgdG8gaGF2ZSBpdCBhcHBseSBpdHMgY2hhbmdlcwotICAgICAgICAvLyA0LiBBZnRl
ciBidWlsZGluZyBhIG5ldyBhbmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1lbnQuCi0gICAgICAg
IAotICAgICAgICAvLyBDdXJyZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmltVmFsIG9uIHRoZSBl
bGVtZW50IGFzICJ0ZW1wb3Jhcnkgc3RvcmFnZSIKLSAgICAgICAgLy8gYW5kIGFic3RyYWN0IHRo
ZSBnZXR0aW5nL3NldHRpbmcgb2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUgU1ZHQW5pbWF0ZSog
Y2xhc3NlcwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSB0YXJnZXRJdGVyYXRv
ci0+c2Vjb25kLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbiA9IHRh
cmdldEl0ZXJhdG9yLT5zZWNvbmRbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
YW5pbWF0aW9uLT5pc1ZhbGlkQW5pbWF0aW9uKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT51cGRhdGVBbmltYXRp
b25CYXNlVmFsdWVGcm9tRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi0+dXBkYXRlQW5pbWF0ZWRWYWx1
ZUZvckVsYXBzZWRTZWNvbmRzKGVsYXBzZWRTZWNvbmRzKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYW5pbWF0aW9uLT5hcHBseUFuaW1hdGVk
VmFsdWVUb0VsZW1lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEg
c2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbWFwIHRvIGF2b2lkIG11bHRpcGxlIHNldENoYW5nZWQg
Y2FsbHMgb24gdGhlIHNhbWUgZWxlbWVudC4KLSAgICBmb3IgKHRhcmdldEl0ZXJhdG9yID0gdGFy
Z2V0TWFwLmJlZ2luKCk7IHRhcmdldEl0ZXJhdG9yICE9IHRlbmQ7ICsrdGFyZ2V0SXRlcmF0b3Ip
IHsKLSAgICAgICAgU1ZHRWxlbWVudCoga2V5ID0gdGFyZ2V0SXRlcmF0b3ItPmZpcnN0OwotICAg
ICAgICBpZiAoa2V5ICYmIGtleS0+aXNTdHlsZWQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PFNWR1N0eWxlZEVsZW1lbnQqPihrZXkpLT5zZXRDaGFuZ2VkKCk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXZvaWQgU1ZHVGltZXI6Om5vdGlmeUFsbCgpCi17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJ
T04pCi0gICAgaWYgKG1fZW5hYmxlZE5vdGlmeVNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlzdCBvZiBhbmltYXRpb24gZWxlbWVudHMgcGVy
IHRhcmdldCBlbGVtZW50Ci0gICAgZG91YmxlIGVsYXBzZWRTZWNvbmRzID0gbV9zY2hlZHVsZXIt
PmVsYXBzZWQoKSAqIDEwMDAuMDsgLy8gVGFrZSB0aW1lIG5vdy4KLSAgICBUYXJnZXRBbmltYXRp
b25NYXAgdGFyZ2V0TWFwID0gYW5pbWF0aW9uc0J5RWxlbWVudChlbGFwc2VkU2Vjb25kcyk7Ci0g
ICAgCi0gICAgLy8gVGhlbiBjb21wb3NpdGUgdGhvc2UgYW5pbWF0aW9ucyBkb3duIHRvIGZpbmFs
IHZhbHVlcyBhbmQgYXBwbHkKLSAgICBhcHBseUFuaW1hdGlvbnMoZWxhcHNlZFNlY29uZHMsIHRh
cmdldE1hcCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTVkdUaW1lcjo6YWRkTm90aWZ5KFNWR0FuaW1h
dGlvbkVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlZCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FO
SU1BVElPTikKLSAgICBtX25vdGlmeVNldC5hZGQoZWxlbWVudCk7Ci0gICAgaWYgKGVuYWJsZWQp
Ci0gICAgICAgIG1fZW5hYmxlZE5vdGlmeVNldC5hZGQoZWxlbWVudCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2VuYWJsZWROb3RpZnlTZXQucmVtb3ZlKGVsZW1lbnQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU1ZHVGltZXI6OnJlbW92ZU5vdGlmeShTVkdBbmltYXRpb25FbGVtZW50ICplbGVtZW50KQot
ewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Uga2Vl
cCBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgZm9yZXZlciAobWFya2VkIGRpc2FibGVkKT8KLSAg
ICAvLyBUaGF0IGNhbid0IGJlIHJpZ2h0IQotCi0gICAgbV9lbmFibGVkTm90aWZ5U2V0LnJlbW92
ZShlbGVtZW50KTsKLSAgICBpZiAobV9lbmFibGVkTm90aWZ5U2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgc3RvcCgpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLS8vIHZpbTp0cz00Om5v
ZXQKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGltZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUaW1lci5oCShyZXZpc2lvbiAzMTc0MCkKKysr
IFdlYkNvcmUvc3ZnL1NWR1RpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0K
LSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWYgRU5BQkxF
KFNWRykKLQotI2luY2x1ZGUgIlRpbWVTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJUaW1lci5oIgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdFbGVtZW50OwotY2xhc3MgU1ZHQW5pbWF0aW9u
RWxlbWVudDsKLQotdHlwZWRlZiBIYXNoU2V0PFNWR0FuaW1hdGlvbkVsZW1lbnQqPiBTVkdOb3Rp
ZnlTZXQ7Ci0KLWNsYXNzIFNWR1RpbWVyIDogcHJpdmF0ZSBUaW1lcjxUaW1lU2NoZWR1bGVyPgot
ewotcHVibGljOgotICAgIFNWR1RpbWVyKFRpbWVTY2hlZHVsZXIqLCBkb3VibGUgaW50ZXJ2YWws
IGJvb2wgc2luZ2xlU2hvdCk7Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdXNpbmcgVGltZXI8
VGltZVNjaGVkdWxlcj46OnN0b3A7Ci0gICAgdXNpbmcgVGltZXI8VGltZVNjaGVkdWxlcj46Omlz
QWN0aXZlOwotCi0gICAgdm9pZCBub3RpZnlBbGwoKTsKLSAgICB2b2lkIGFkZE5vdGlmeShTVkdB
bmltYXRpb25FbGVtZW50KiwgYm9vbCBlbmFibGVkID0gZmFsc2UpOwotICAgIHZvaWQgcmVtb3Zl
Tm90aWZ5KFNWR0FuaW1hdGlvbkVsZW1lbnQqKTsKLQotICAgIHN0YXRpYyBTVkdUaW1lciogZG93
bmNhc3QoVGltZXI8VGltZVNjaGVkdWxlcj4qIHQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1Rp
bWVyKj4odCk7IH0KLQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U1ZHRWxlbWVudCos
IFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50Kj4gPiBUYXJnZXRBbmltYXRpb25NYXA7Ci0gICAg
VGFyZ2V0QW5pbWF0aW9uTWFwIGFuaW1hdGlvbnNCeUVsZW1lbnQoZG91YmxlIGVsYXBzZWRUaW1l
KTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9ucyhkb3VibGUgZWxhcHNlZFNlY29uZHMsIGNvbnN0
IFNWR1RpbWVyOjpUYXJnZXRBbmltYXRpb25NYXAmIHRhcmdldE1hcCk7Ci0KLSAgICBUaW1lU2No
ZWR1bGVyKiBtX3NjaGVkdWxlcjsKLSAgICBkb3VibGUgbV9pbnRlcnZhbDsKLSAgICBib29sIG1f
c2luZ2xlU2hvdDsKLQotICAgIFNWR05vdGlmeVNldCBtX25vdGlmeVNldDsKLSAgICBTVkdOb3Rp
ZnlTZXQgbV9lbmFibGVkTm90aWZ5U2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlm
IC8vIEVOQUJMRShTVkcpCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzMTc0MCkKKysrIFdlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksMTAgKzExOSw5IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQKIAogdm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KCkKIHsKLSAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KICAgICBt
X3RhcmdldEVsZW1lbnRJbnN0YW5jZSA9IDA7CiAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQg
PSAwOworICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBT
VkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQpJbmRleDogV2ViQ29yZS9zdmcvVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDMxNzQwKQorKysgV2Vi
Q29yZS9zdmcvVGltZVNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUyICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiVGltZVNjaGVkdWxlci5o
IgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5j
bHVkZSAiU1ZHVGltZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUg
c3RhdGljVGltZXJJbnRlcnZhbCA9IDAuMDUwOyAvLyA1MCBtcwotCi1UaW1lU2NoZWR1bGVyOjpU
aW1lU2NoZWR1bGVyKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IG1fY3JlYXRpb25UaW1lKGN1
cnJlbnRUaW1lKCkpCi0gICAgLCBtX3NhdmVkVGltZSgwKQotICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKLXsKLSAgICAvLyBEb24ndCBzdGFydCB0aGlzIHRpbWVyIHlldC4KLSAgICBtX2ludGVy
dmFsVGltZXIgPSBuZXcgU1ZHVGltZXIodGhpcywgc3RhdGljVGltZXJJbnRlcnZhbCwgZmFsc2Up
OwotfQotCi1UaW1lU2NoZWR1bGVyOjp+VGltZVNjaGVkdWxlcigpCi17Ci0gICAgZGVsZXRlQWxs
VmFsdWVzKG1fdGltZXJTZXQpOwotICAgIGRlbGV0ZSBtX2ludGVydmFsVGltZXI7Ci19Ci0KLXZv
aWQgVGltZVNjaGVkdWxlcjo6YWRkVGltZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCogZWxlbWVudCwg
dW5zaWduZWQgbXMpCi17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgU1ZHVGltZXIq
IHN2Z1RpbWVyID0gbmV3IFNWR1RpbWVyKHRoaXMsIG1zICogMC4wMDEsIHRydWUpOwotICAgIHN2
Z1RpbWVyLT5hZGROb3RpZnkoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgbV90aW1lclNldC5hZGQoc3Zn
VGltZXIpOwotICAgIG1faW50ZXJ2YWxUaW1lci0+YWRkTm90aWZ5KGVsZW1lbnQsIGZhbHNlKTsK
LSNlbmRpZgotfQotCi12b2lkIFRpbWVTY2hlZHVsZXI6OmNvbm5lY3RJbnRlcnZhbFRpbWVyKFNW
R0FuaW1hdGlvbkVsZW1lbnQqIGVsZW1lbnQpCi17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJT04p
Ci0gICAgbV9pbnRlcnZhbFRpbWVyLT5hZGROb3RpZnkoZWxlbWVudCwgdHJ1ZSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBUaW1lU2NoZWR1bGVyOjpkaXNjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdBbmlt
YXRpb25FbGVtZW50KiBlbGVtZW50KQotewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAg
IG1faW50ZXJ2YWxUaW1lci0+cmVtb3ZlTm90aWZ5KGVsZW1lbnQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgVGltZVNjaGVkdWxlcjo6c3RhcnRBbmltYXRpb25zKCkKLXsKLSNpZiBFTkFCTEUoU1ZHX0FO
SU1BVElPTikKLSAgICBtX2NyZWF0aW9uVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0KLSAgICBTVkdU
aW1lclNldDo6aXRlcmF0b3IgZW5kID0gbV90aW1lclNldC5lbmQoKTsKLSAgICBmb3IgKFNWR1Rp
bWVyU2V0OjppdGVyYXRvciBpdCA9IG1fdGltZXJTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFNWR1RpbWVyKiBzdmdUaW1lciA9ICppdDsKLSAgICAgICAgaWYgKHN2Z1Rp
bWVyICYmICFzdmdUaW1lci0+aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHN2Z1RpbWVyLT5zdGFy
dCgpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFRpbWVTY2hlZHVsZXI6OnRvZ2dsZUFuaW1h
dGlvbnMoKQotewotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotICAgIGlmIChtX2ludGVydmFs
VGltZXItPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9pbnRlcnZhbFRpbWVyLT5zdG9wKCk7Ci0g
ICAgICAgIG1fc2F2ZWRUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobV9zYXZlZFRpbWUgIT0gMCkgewotICAgICAgICAgICAgbV9jcmVhdGlvblRpbWUgKz0g
Y3VycmVudFRpbWUoKSAtIG1fc2F2ZWRUaW1lOwotICAgICAgICAgICAgbV9zYXZlZFRpbWUgPSAw
OwotICAgICAgICB9Ci0gICAgICAgIG1faW50ZXJ2YWxUaW1lci0+c3RhcnQoKTsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotYm9vbCBUaW1lU2NoZWR1bGVyOjphbmltYXRpb25zUGF1c2VkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIW1faW50ZXJ2YWxUaW1lci0+aXNBY3RpdmUoKTsKLX0KLQotdm9pZCBU
aW1lU2NoZWR1bGVyOjp0aW1lckZpcmVkKFRpbWVyPFRpbWVTY2hlZHVsZXI+KiBiYXNlVGltZXIp
Ci17Ci0jaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCi0gICAgLy8gR2V0IHRoZSBwb2ludGVyIG5v
dywgYmVjYXVzZSBub3RpZnlBbGwgY291bGQgbWFrZSB0aGUgZG9jdW1lbnQsCi0gICAgLy8gaW5j
bHVkaW5nIHRoaXMgVGltZVNjaGVkdWxlciwgZ28gYXdheS4KLSAgICBSZWZQdHI8RG9jdW1lbnQ+
IGRvYyA9IG1fZG9jdW1lbnQ7Ci0KLSAgICBTVkdUaW1lciogdGltZXIgPSBTVkdUaW1lcjo6ZG93
bmNhc3QoYmFzZVRpbWVyKTsKLQotICAgIHRpbWVyLT5ub3RpZnlBbGwoKTsKLQotICAgIC8vIEZJ
WE1FOiBJcyBpdCByZWFsbHkgc2FmZSB0byBsb29rIGF0IG1faW50ZXJ2YWxUaW1lciBub3c/Ci0g
ICAgLy8gSXNuJ3QgaXQgcG9zc2libGUgdGhlIFRpbWVTY2hlZHVsZXIgd2FzIGRlbGV0ZWQgYWxy
ZWFkeT8KLSAgICAvLyBJZiBzbywgdGltZXIsIG1fdGltZXJTZXQsIGFuZCBtX2ludGVydmFsVGlt
ZXIgaGF2ZSBhbGwKLSAgICAvLyBiZWVuIGRlbGV0ZWQuIE1heSBuZWVkIHRvIHJlZmVyZW5jZSBj
b3VudCB0aGUgVGltZVNjaGVkdWxlcgotICAgIC8vIHRvIHdvcmsgYXJvdW5kIHRoaXMsIGFuZCBy
ZWYvZGVyZWYgaXQgaW4gdGhpcyBmdW5jdGlvbi4KLSAgICBpZiAodGltZXIgIT0gbV9pbnRlcnZh
bFRpbWVyKSB7Ci0gICAgICAgIEFTU0VSVCghdGltZXItPmlzQWN0aXZlKCkpOwotICAgICAgICBB
U1NFUlQobV90aW1lclNldC5jb250YWlucyh0aW1lcikpOwotICAgICAgICBtX3RpbWVyU2V0LnJl
bW92ZSh0aW1lcik7Ci0gICAgICAgIGRlbGV0ZSB0aW1lcjsKLQotICAgICAgICAvLyBUaGUgc2lu
Z2xlU2hvdCB0aW1lcnMgb2YgaWUuIDxhbmltYXRlPiB3aXRoIGJlZ2luPSIzcyIgYXJlIG5vdGlm
aWVkCi0gICAgICAgIC8vIGJ5IHRoZSBwcmV2aW91cyBjYWxsLCBhbmQgbm93IGFsbCBjb25uZWN0
aW9ucyB0byB0aGUgaW50ZXJ2YWwgdGltZXIKLSAgICAgICAgLy8gYXJlIGNyZWF0ZWQgYW5kIG5v
dyB3ZSBqdXN0IG5lZWQgdG8gZmlyZSB0aGF0IHRpbWVyIChOaWtvKQotICAgICAgICBpZiAoIW1f
aW50ZXJ2YWxUaW1lci0+aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1faW50ZXJ2YWxUaW1lci0+
c3RhcnQoKTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgYW55ICdkaXJ0eScgc2hhcGVzLgotICAg
IGRvYy0+dXBkYXRlUmVuZGVyaW5nKCk7Ci0jZW5kaWYKLX0KLQotZG91YmxlIFRpbWVTY2hlZHVs
ZXI6OmVsYXBzZWQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50VGltZSgpIC0gbV9jcmVh
dGlvblRpbWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvVGltZVNjaGVkdWxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1RpbWVTY2hlZHVsZXIuaAkocmV2aXNpb24gMzE3NDApCisr
KyBXZWJDb3JlL3N2Zy9UaW1lU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCi0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIFRpbWVTY2hlZHVsZXJfaAotI2RlZmluZSBUaW1lU2NoZWR1bGVyX2gKLSNpZiBFTkFCTEUo
U1ZHKQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7Ci0gICAg
Y2xhc3MgU1ZHVGltZXI7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7
Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8U1ZHVGltZXIqPiBTVkdUaW1lclNldDsKLQotICAgIGNs
YXNzIFRpbWVTY2hlZHVsZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGltZVNjaGVkdWxlcihE
b2N1bWVudCopOwotICAgICAgICB+VGltZVNjaGVkdWxlcigpOwotCi0gICAgICAgIC8vIEFkZHMg
c2luZ2xlU2hvdCBUaW1lcnMKLSAgICAgICAgdm9pZCBhZGRUaW1lcihTVkdBbmltYXRpb25FbGVt
ZW50KiwgdW5zaWduZWQgaW50IG1zKTsKLQotICAgICAgICAvLyAoRGlzLSlDb25uZWN0cyB0byBp
bnRlcnZhbCB0aW1lciB3aXRoICdzdGF0aWNUaW1lckludGVydmFsJwotICAgICAgICB2b2lkIGNv
bm5lY3RJbnRlcnZhbFRpbWVyKFNWR0FuaW1hdGlvbkVsZW1lbnQqKTsKLSAgICAgICAgdm9pZCBk
aXNjb25uZWN0SW50ZXJ2YWxUaW1lcihTVkdBbmltYXRpb25FbGVtZW50Kik7Ci0KLSAgICAgICAg
dm9pZCBzdGFydEFuaW1hdGlvbnMoKTsKLSAgICAgICAgdm9pZCB0b2dnbGVBbmltYXRpb25zKCk7
Ci0gICAgICAgIGJvb2wgYW5pbWF0aW9uc1BhdXNlZCgpIGNvbnN0OwotCi0gICAgICAgIC8vIHRp
bWUgZWxhcHNlZCBpbiBzZWNvbmRzIGFmdGVyIGNyZWF0aW9uIG9mIHRoaXMgb2JqZWN0Ci0gICAg
ICAgIGRvdWJsZSBlbGFwc2VkKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmll
bmQgY2xhc3MgU1ZHVGltZXI7Ci0gICAgICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxUaW1lU2No
ZWR1bGVyPiopOwotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBkb3VibGUgbV9jcmVhdGlvblRp
bWU7Ci0gICAgICAgIGRvdWJsZSBtX3NhdmVkVGltZTsKLSAgICAgICAgCi0gICAgICAgIFNWR1Rp
bWVyU2V0IG1fdGltZXJTZXQ7Ci0gICAgICAgIAotICAgICAgICBTVkdUaW1lciogbV9pbnRlcnZh
bFRpbWVyOwotICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICB9OwotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TTUlMVGltZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNNSUxUaW1lLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitjb25zdCBkb3VibGUgU01JTFRpbWU6OnVucmVzb2x2ZWRWYWx1ZSA9
IERCTF9NQVg7CisvLyBKdXN0IGEgYmlnIHZhbHVlIHNtYWxsZXIgdGhhbiBEQkxfTUFYLiBPdXIg
dGltZXMgYXJlIHJlbGF0aXZlIHRvIDAsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRoZSBmdWxsIHJh
bmdlLgorY29uc3QgZG91YmxlIFNNSUxUaW1lOjppbmRlZmluaXRlVmFsdWUgPSBGTFRfTUFYOyAg
ICAKKworU01JTFRpbWUgV2ViQ29yZTo6b3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiBhLCBjb25z
dCBTTUlMVGltZSYgYikgeyAgICAgCisgICAgaWYgKGEuaXNVbnJlc29sdmVkKCkgfHwgYi5pc1Vu
cmVzb2x2ZWQoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAg
aWYgKGEuaXNJbmRlZmluaXRlKCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKKyAgICAgICAgcmV0dXJu
IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CisgICAgcmV0dXJuIGEudmFsdWUoKSArIGIudmFsdWUo
KTsKK30KKworU01JTFRpbWUgV2ViQ29yZTo6b3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiBhLCBj
b25zdCBTTUlMVGltZSYgYikgeyAgICAgCisgICAgaWYgKGEuaXNVbnJlc29sdmVkKCkgfHwgYi5p
c1VucmVzb2x2ZWQoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cisg
ICAgaWYgKGEuaXNJbmRlZmluaXRlKCkgfHwgYi5pc0luZGVmaW5pdGUoKSkKKyAgICAgICAgcmV0
dXJuIFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CisgICAgcmV0dXJuIGEudmFsdWUoKSAtIGIudmFs
dWUoKTsKK30KKworU01JTFRpbWUgV2ViQ29yZTo6b3BlcmF0b3IqKGNvbnN0IFNNSUxUaW1lJiBh
LCAgY29uc3QgU01JTFRpbWUmIGIpIHsgICAgIAorICAgIGlmIChhLmlzVW5yZXNvbHZlZCgpIHx8
IGIuaXNVbnJlc29sdmVkKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgp
OworICAgIGlmIChhLnZhbHVlKCkgPT0gMCB8fCBiLnZhbHVlKCkgPT0gMCkKKyAgICAgICAgcmV0
dXJuIFNNSUxUaW1lKDApOworICAgIGlmIChhLmlzSW5kZWZpbml0ZSgpIHx8IGIuaXNJbmRlZmlu
aXRlKCkpCisgICAgICAgIHJldHVybiBTTUlMVGltZTo6aW5kZWZpbml0ZSgpOworICAgIHJldHVy
biBhLnZhbHVlKCkgKiBiLnZhbHVlKCk7Cit9CisjZW5kaWYKKwpJbmRleDogV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNNSUxUaW1lX2gKKyNkZWZpbmUgU01J
TFRpbWVfaAorCisjaWYgRU5BQkxFKFNWRykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgU01JTFRpbWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU01JTFRpbWUoKSA6IG1fdGlt
ZSgwKSB7IH0KKyAgICAgICAgU01JTFRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsg
fQorICAgICAgICBTTUlMVGltZShjb25zdCBTTUlMVGltZSYgbykgOiBtX3RpbWUoby5tX3RpbWUp
IHsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFNNSUxUaW1lIHVucmVzb2x2ZWQoKSB7IHJl
dHVybiB1bnJlc29sdmVkVmFsdWU7IH0KKyAgICAgICAgc3RhdGljIFNNSUxUaW1lIGluZGVmaW5p
dGUoKSB7IHJldHVybiBpbmRlZmluaXRlVmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIFNNSUxU
aW1lJiBvcGVyYXRvcj0oY29uc3QgU01JTFRpbWUmIG8pIHsgbV90aW1lID0gby5tX3RpbWU7IHJl
dHVybiAqdGhpczsgfQorICAgICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWU7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiBt
X3RpbWUgPCBpbmRlZmluaXRlVmFsdWU7IH0KKyAgICAgICAgYm9vbCBpc0luZGVmaW5pdGUoKSBj
b25zdCB7IHJldHVybiBtX3RpbWUgPT0gaW5kZWZpbml0ZVZhbHVlOyB9CisgICAgICAgIGJvb2wg
aXNVbnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lID09IHVucmVzb2x2ZWRWYWx1ZTsg
fQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHVu
cmVzb2x2ZWRWYWx1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBpbmRlZmluaXRlVmFs
dWU7CisKKyAgICAgICAgZG91YmxlIG1fdGltZTsKKyAgICB9OworCisgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IGEuaXNGaW5pdGUoKSAmJiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOyB9CisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0
dXJuICFvcGVyYXRvcj09KGEsIGIpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpID4gYi52
YWx1ZSgpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFNNSUxUaW1lJiBhLCBj
b25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpOyB9CisgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUm
IGIpIHsgcmV0dXJuIGEudmFsdWUoKSA+IGIudmFsdWUoKSB8fCBvcGVyYXRvcj09KGEsIGIpOyB9
CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01J
TFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIudmFsdWUoKSB8fCBvcGVyYXRvcj09KGEs
IGIpOyB9CisKKyAgICBpbmxpbmUgU01JTFRpbWUgbWF4KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25z
dCBTTUlMVGltZSYgYikgeyByZXR1cm4gc3RkOjptYXgoYS52YWx1ZSgpLCBiLnZhbHVlKCkpOyB9
CisgICAgaW5saW5lIFNNSUxUaW1lIG1pbihjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRp
bWUmIGIpIHsgcmV0dXJuIHN0ZDo6bWluKGEudmFsdWUoKSwgYi52YWx1ZSgpKTsgfQorICAgIFNN
SUxUaW1lIG9wZXJhdG9yKyhjb25zdCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7CisgICAg
U01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUmKTsKKyAg
ICAvLyBTbyBtdWx0aXBseWluZyB0aW1lcyBkb2VzIG5vdCBtYWtlIHRvbyBtdWNoIHNlbnNlIGJ1
dCBTTUlMIGRlZmluZXMgaXQgZm9yIGR1cmF0aW9uICogcmVwZWF0Q291bnQKKyAgICBTTUlMVGlt
ZSBvcGVyYXRvciooY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOworfQorCisjZW5k
aWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNNSUxUaW1lQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIlNNSUxUaW1pbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdGF0aWMg
Y29uc3QgZG91YmxlIGFuaW1hdGlvbkZyYW1lRGVsYXkgPSAwLjAyNTsKKworU01JTFRpbWVDb250
YWluZXI6OlNNSUxUaW1lQ29udGFpbmVyKCkgCisgICAgOiBtX2JlZ2luVGltZSgwKQorICAgICwg
bV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWUoMCkKKyAgICAsIG1f
dGltZXIodGhpcywgJlNNSUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQoreworfQorCit2b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjpzY2hlZHVsZShTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9u
KQoreworICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAg
ICBTTUlMVGltZSBuZXh0RmlyZVRpbWUgPSBhbmltYXRpb24tPm5leHRQcm9ncmVzc1RpbWUoKTsK
KyAgICBpZiAoIW5leHRGaXJlVGltZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zY2hlZHVsZWRBbmltYXRpb25zLmFkZChhbmltYXRpb24pOworICAgIHN0YXJ0VGltZXIoMCk7
Cit9CisgICAgCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1bnNjaGVkdWxlKFNNSUxUaW1pbmdF
bGVtZW50KiBhbmltYXRpb24pCit7CisgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5l
cigpID09IHRoaXMpOworICAgIG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9u
KTsKK30KKworU01JTFRpbWUgU01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9iZWdpblRpbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjdXJy
ZW50VGltZSgpIC0gbV9iZWdpblRpbWUgLSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOworfQorICAg
IAorYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2JlZ2luVGltZSAmJiAhaXNQYXVzZWQoKTsKK30KKyAgICAKK2Jvb2wgU01JTFRpbWVDb250
YWluZXI6OmlzUGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXVzZVRpbWU7Cit9CisK
K3ZvaWQgU01JTFRpbWVDb250YWluZXI6OmJlZ2luKCkKK3sKKyAgICBBU1NFUlQoIW1fYmVnaW5U
aW1lKTsKKyAgICBtX2JlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgdXBkYXRlQW5pbWF0
aW9ucygwKTsKK30KKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6cGF1c2UoKQoreworICAgIGlm
ICghbV9iZWdpblRpbWUpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIWlzUGF1c2VkKCkp
OworICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3RpbWVyLnN0b3AoKTsK
K30KKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6cmVzdW1lKCkKK3sKKyAgICBpZiAoIW1fYmVn
aW5UaW1lKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlzUGF1c2VkKCkpOworICAgIG1f
YWNjdW11bGF0ZWRQYXVzZVRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAg
IG1fcGF1c2VUaW1lID0gMDsKKyAgICBzdGFydFRpbWVyKDApOworfQorCit2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVt
RGVsYXkpCit7CisgICAgaWYgKCFtX2JlZ2luVGltZSB8fCBpc1BhdXNlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKCFmaXJlVGltZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgU01JTFRpbWUgZGVsYXkgPSBtYXgoZmlyZVRpbWUgLSBlbGFwc2VkKCks
IG1pbmltdW1EZWxheSk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoZGVsYXkudmFsdWUoKSk7
Cit9CisgICAgCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyPFNNSUxU
aW1lQ29udGFpbmVyPiopCit7CisgICAgQVNTRVJUKG1fYmVnaW5UaW1lKTsKKyAgICBBU1NFUlQo
IW1fcGF1c2VUaW1lKTsKKyAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNlZCgpOwor
ICAgIHVwZGF0ZUFuaW1hdGlvbnMoZWxhcHNlZCk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1lQ29u
dGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpCit7CisgICAgLy8gRklY
TUU6IFNvcnQgYnkgcHJpb3JpdHkgKGJlZ2luIHRpbWUgb3JkZXIsIGRvY3VtZW50IG9yZGVyKSBm
b3IgZWFjaCB0YXJnZXQgZWxlbWVudC4KKyAgICAvLyBIaWdoZXN0IHByaW9yaXR5IHJlcGxhY2Ug
YW5pbWF0aW9uIG92ZXJyaWRlcyB0aGUgbG93ZXIgcHJpb3JpdHkgb25lcy4KKworICAgIFNNSUxU
aW1lIGVhcmxpZXJzRmlyZVRpbWUgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIAorICAg
IFZlY3RvcjxTTUlMVGltaW5nRWxlbWVudCo+IHRvQW5pbWF0ZTsKKyAgICBjb3B5VG9WZWN0b3Io
bV9zY2hlZHVsZWRBbmltYXRpb25zLCB0b0FuaW1hdGUpOworICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCB0b0FuaW1hdGUuc2l6ZSgpOyArK24pIHsKKyAgICAgICAgLy8gQSBzY2hlZHVsZWQg
YW5pbWF0aW9uIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGJ5IHByZXZpb3Vz
IGFuaW1hdGlvbi4KKyAgICAgICAgaWYgKCFtX3NjaGVkdWxlZEFuaW1hdGlvbnMuY29udGFpbnMo
dG9BbmltYXRlW25dKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAg
UmVmUHRyPFNNSUxUaW1pbmdFbGVtZW50PiBhbmltYXRpb24gPSB0b0FuaW1hdGVbbl07CisgICAg
ICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKworICAgICAg
ICBpZiAoZWxhcHNlZCA+PSBhbmltYXRpb24tPm5leHRQcm9ncmVzc1RpbWUoKSkKKyAgICAgICAg
ICAgIGFuaW1hdGlvbi0+cHJvZ3Jlc3MoZWxhcHNlZCk7CisKKyAgICAgICAgLy8gUGVyaGFwcyBp
dCBkZWNpZGVkIG5vdCB0byBhbmltYXRlIGFueW1vcmUuCisgICAgICAgIGlmICghbV9zY2hlZHVs
ZWRBbmltYXRpb25zLmNvbnRhaW5zKGFuaW1hdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAKKyAgICAgICAgU01JTFRpbWUgbmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5u
ZXh0UHJvZ3Jlc3NUaW1lKCk7CisgICAgICAgIGlmIChuZXh0RmlyZVRpbWUuaXNGaW5pdGUoKSkK
KyAgICAgICAgICAgIGVhcmxpZXJzRmlyZVRpbWUgPSBtaW4obmV4dEZpcmVUaW1lLCBlYXJsaWVy
c0ZpcmVUaW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zY2hlZHVsZWRBbmltYXRp
b25zLnJlbW92ZShhbmltYXRpb24uZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBzdGFydFRpbWVy
KGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOworICAgIAorICAgIERvY3Vt
ZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKK30KKworCit9CkluZGV4OiBXZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgU01JTFRpbWVDb250YWluZXJfSAorI2RlZmluZSBTTUlMVGltZUNvbnRhaW5lcl9I
CisKKyNpbmNsdWRlICJTTUlMVGltZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxF
KFNWRykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFNNSUxUaW1pbmdF
bGVtZW50OworCisgICAgY2xhc3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKKyAgICBwdWJsaWM6CisgICAgICAgIAorICAgICAgICBT
TUlMVGltZUNvbnRhaW5lcigpOworICAgIAorICAgICAgICB2b2lkIHNjaGVkdWxlKFNNSUxUaW1p
bmdFbGVtZW50Kik7CisgICAgICAgIHZvaWQgdW5zY2hlZHVsZShTTUlMVGltaW5nRWxlbWVudCop
OworICAgICAgICAKKyAgICAgICAgU01JTFRpbWUgZWxhcHNlZCgpIGNvbnN0OworCisgICAgICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0Owor
ICAgICAgICAKKyAgICAgICAgdm9pZCBiZWdpbigpOworICAgICAgICB2b2lkIHBhdXNlKCk7Cisg
ICAgICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHRpbWVy
RmlyZWQoVGltZXI8U01JTFRpbWVDb250YWluZXI+Kik7CisgICAgICAgIHZvaWQgc3RhcnRUaW1l
cihTTUlMVGltZSBmaXJlVGltZSwgU01JTFRpbWUgbWluaW11bURlbGF5ID0gMCk7CisgICAgICAg
IHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAgICAgCisgICAg
ICAgIGRvdWJsZSBtX2JlZ2luVGltZTsKKyAgICAgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAg
ICAgICBkb3VibGUgbV9hY2N1bXVsYXRlZFBhdXNlVGltZTsKKyAgICAgICAgCisgICAgICAgIFRp
bWVyPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVyOworCisgICAgICAgIHR5cGVkZWYgSGFzaFNl
dDxTTUlMVGltaW5nRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7CisgICAgICAgIFRpbWluZ0Vs
ZW1lbnRTZXQgbV9zY2hlZHVsZWRBbmltYXRpb25zOworICAgIH07Cit9CisKKyNlbmRpZgorI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltaW5nRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWluZ0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJTTUlMVGltaW5nRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVk
ZSAiU01JTFRpbWVDb250YWluZXIuaCIKKyNpbmNsdWRlICJYTGlua05hbWVzLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIENvbmRpdGlv
bkV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgQ29u
ZGl0aW9uRXZlbnRMaXN0ZW5lcihTTUlMVGltaW5nRWxlbWVudCogYW5pbWF0aW9uLCBTTUlMVGlt
aW5nRWxlbWVudDo6Q29uZGl0aW9uKiBjb25kaXRpb24pIAorICAgICAgICA6IG1fYW5pbWF0aW9u
KGFuaW1hdGlvbikKKyAgICAgICAgLCBtX2NvbmRpdGlvbihjb25kaXRpb24pIHt9CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KSB7
CisgICAgICAgIG1fYW5pbWF0aW9uLT5oYW5kbGVDb25kaXRpb25FdmVudChldmVudCwgbV9jb25k
aXRpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgU01JTFRpbWluZ0VsZW1lbnQqIG1fYW5pbWF0
aW9uOworICAgIFNNSUxUaW1pbmdFbGVtZW50OjpDb25kaXRpb24qIG1fY29uZGl0aW9uOworfTsK
KyAgICAKK1NNSUxUaW1pbmdFbGVtZW50OjpDb25kaXRpb246OkNvbmRpdGlvbihUeXBlIHR5cGUs
IEJlZ2luT3JFbmQgYmVnaW5PckVuZCwgU3RyaW5nIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBTTUlMVGltZSBvZmZzZXQsIGludCByZXBlYXRzKQorICAgIDogbV90eXBlKHR5cGUpCisgICAg
LCBtX2JlZ2luT3JFbmQoYmVnaW5PckVuZCkKKyAgICAsIG1fYmFzZUlEKGJhc2VJRCkKKyAgICAs
IG1fbmFtZShuYW1lKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9yZXBlYXRzKHJl
cGVhdHMpIAoreworfQorICAgIAorU01JTFRpbWluZ0VsZW1lbnQ6OlNNSUxUaW1pbmdFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdF
bGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fY29uZGl0aW9uc0Nvbm5lY3RlZChmYWxzZSkK
KyAgICAsIG1faGFzRW5kRXZlbnRDb25kaXRpb25zKGZhbHNlKQorICAgICwgbV9pbnRlcnZhbEJl
Z2luKFNNSUxUaW1lOjp1bnJlc29sdmVkKCkpCisgICAgLCBtX2ludGVydmFsRW5kKFNNSUxUaW1l
Ojp1bnJlc29sdmVkKCkpCisgICAgLCBtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwodHJ1ZSkK
KyAgICAsIG1fYWN0aXZlU3RhdGUoSW5hY3RpdmUpCisgICAgLCBtX25leHRQcm9ncmVzc1RpbWUo
MCkKKyAgICAsIG1fY2FjaGVkRHVyKC0xLikKKyAgICAsIG1fY2FjaGVkUmVwZWF0RHVyKC0xLikK
KyAgICAsIG1fY2FjaGVkUmVwZWF0Q291bnQoLTEuKQorICAgICwgbV9jYWNoZWRNaW4oLTEuKQor
ICAgICwgbV9jYWNoZWRNYXgoLTEuKQoreworfQorCitTTUlMVGltaW5nRWxlbWVudDo6flNNSUxU
aW1pbmdFbGVtZW50KCkKK3sKKyAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOworICAgIGlmICht
X3RpbWVDb250YWluZXIpCisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlz
KTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKK3sKKyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIFNWR1NW
R0VsZW1lbnQqIG93bmVyID0gb3duZXJTVkdFbGVtZW50KCk7CisgICAgaWYgKCFvd25lcikKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdGltZUNvbnRhaW5lciA9IG93bmVyLT50aW1lQ29udGFpbmVy
KCk7CisgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7CisgICAgcmVzY2hlZHVsZSgpOworfQor
Cit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKK3sKKyAgICBp
ZiAobV90aW1lQ29udGFpbmVyKSB7CisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVs
ZSh0aGlzKTsKKyAgICAgICAgbV90aW1lQ29udGFpbmVyID0gMDsKKyAgICB9CisgICAgLy8gQ2Fs
bGluZyBkaXNjb25uZWN0Q29uZGl0aW9ucygpIG1heSBraWxsIHVzIGlmIHRoZXJlIGFyZSBzeW5j
YmFzZSBjb25kaXRpb25zLgorICAgIC8vIE9LLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBkaWUgaW5z
aWRlIHRoZSBjYWxsLgorICAgIFJlZlB0cjxTTUlMVGltaW5nRWxlbWVudD4ga2VlcEFsaXZlKHRo
aXMpOworICAgIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgbV90YXJnZXRFbGVtZW50ID0g
MDsKKyAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Cit9CisgICAKK3ZvaWQg
U01JTFRpbWluZ0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCit7CisgICAgU1ZHRWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICAvLyAiSWYgbm8gYXR0cmlidXRl
IGlzIHByZXNlbnQsIHRoZSBkZWZhdWx0IGJlZ2luIHZhbHVlIChhbiBvZmZzZXQtdmFsdWUgb2Yg
MCkgbXVzdCBiZSBldmFsdWF0ZWQuIgorICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpi
ZWdpbkF0dHIpKQorICAgICAgICBtX2JlZ2luVGltZXMuYXBwZW5kKDApOworCisgICAgaWYgKG1f
aXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCkgeworICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZh
bCgpOworICAgICAgICByZXNjaGVkdWxlKCk7CisgICAgfQorfQorCitTTUlMVGltZSBTTUlMVGlt
aW5nRWxlbWVudDo6cGFyc2VPZmZzZXRWYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAg
Ym9vbCBvazsKKyAgICBkb3VibGUgcmVzdWx0ID0gMDsKKyAgICBTdHJpbmcgcGFyc2UgPSBkYXRh
LnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGlmIChwYXJzZS5lbmRzV2l0aCgiaCIpKQorICAgICAg
ICByZXN1bHQgPSBwYXJzZS5sZWZ0KHBhcnNlLmxlbmd0aCgpIC0gMSkudG9Eb3VibGUoJm9rKSAq
IDYwICogNjA7CisgICAgZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoIm1pbiIpKQorICAgICAgICBy
ZXN1bHQgPSBwYXJzZS5sZWZ0KHBhcnNlLmxlbmd0aCgpIC0gMykudG9Eb3VibGUoJm9rKSAqIDYw
OworICAgIGVsc2UgaWYgKHBhcnNlLmVuZHNXaXRoKCJtcyIpKQorICAgICAgICByZXN1bHQgPSBw
YXJzZS5sZWZ0KHBhcnNlLmxlbmd0aCgpIC0gMikudG9Eb3VibGUoJm9rKSAvIDEwMDA7CisgICAg
ZWxzZSBpZiAocGFyc2UuZW5kc1dpdGgoInMiKSkKKyAgICAgICAgcmVzdWx0ID0gcGFyc2UubGVm
dChwYXJzZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCZvayk7CisgICAgZWxzZQorICAgICAgICBy
ZXN1bHQgPSBwYXJzZS50b0RvdWJsZSgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVy
biBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCitT
TUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmluZyYg
ZGF0YSkKK3sKKyAgICBpZiAoZGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1l
Ojp1bnJlc29sdmVkKCk7CisgICAgCisgICAgU3RyaW5nIHBhcnNlID0gZGF0YS5zdHJpcFdoaXRl
U3BhY2UoKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgaW5kZWZpbml0ZVZhbHVl
KCJpbmRlZmluaXRlIik7CisgICAgaWYgKHBhcnNlID09IGluZGVmaW5pdGVWYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CisKKyAgICBkb3VibGUgcmVzdWx0ID0g
MDsKKyAgICBib29sIG9rOworICAgIGludCBkb3VibGVQb2ludE9uZSA9IHBhcnNlLmZpbmQoJzon
KTsKKyAgICBpbnQgZG91YmxlUG9pbnRUd28gPSBwYXJzZS5maW5kKCc6JywgZG91YmxlUG9pbnRP
bmUgKyAxKTsKKyAgICBpZiAoZG91YmxlUG9pbnRPbmUgPT0gMiAmJiBkb3VibGVQb2ludFR3byA9
PSA1ICYmIHBhcnNlLmxlbmd0aCgpID49IDgpIHsgCisgICAgICAgIHJlc3VsdCArPSBwYXJzZS5z
dWJzdHJpbmcoMCwgMikudG9VSW50U3RyaWN0KCZvaykgKiA2MCAqIDYwOworICAgICAgICBpZiAo
IW9rKQorICAgICAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgICAg
IHJlc3VsdCArPSBwYXJzZS5zdWJzdHJpbmcoMywgMikudG9VSW50U3RyaWN0KCZvaykgKiA2MDsK
KyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZl
ZCgpOworICAgICAgICByZXN1bHQgKz0gcGFyc2Uuc3Vic3RyaW5nKDYpLnRvRG91YmxlKCZvayk7
CisgICAgfSBlbHNlIGlmIChkb3VibGVQb2ludE9uZSA9PSAyICYmIGRvdWJsZVBvaW50VHdvID09
IC0xICYmIHBhcnNlLmxlbmd0aCgpID49IDUpIHsgCisgICAgICAgIHJlc3VsdCArPSBwYXJzZS5z
dWJzdHJpbmcoMCwgMikudG9VSW50U3RyaWN0KCZvaykgKiA2MDsKKyAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgICAgICByZXN1
bHQgKz0gcGFyc2Uuc3Vic3RyaW5nKDMpLnRvRG91YmxlKCZvayk7CisgICAgfSBlbHNlCisgICAg
ICAgIHJldHVybiBwYXJzZU9mZnNldFZhbHVlKHBhcnNlKTsKKworICAgIGlmICghb2spCisgICAg
ICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisgICAgCitzdGF0aWMgaW50IHNtaWxUaW1lU29ydEZ1bmN0aW9uKGNvbnN0IHZvaWQqIGEsIGNv
bnN0IHZvaWQqIGIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oKCpzdGF0aWNfY2Fz
dDxjb25zdCBTTUlMVGltZSo+KGEpIC0gKnN0YXRpY19jYXN0PGNvbnN0IFNNSUxUaW1lKj4oYikp
LnZhbHVlKCkpOworfQorICAgIAorc3RhdGljIHZvaWQgc29ydFRpbWVMaXN0KFZlY3RvcjxTTUlM
VGltZT4mIHRpbWVMaXN0KQoreworICAgIG1lcmdlc29ydCh0aW1lTGlzdC5kYXRhKCksIHRpbWVM
aXN0LnNpemUoKSwgc2l6ZW9mKFNNSUxUaW1lKSwgc21pbFRpbWVTb3J0RnVuY3Rpb24pOworfQor
ICAgIAorYm9vbCBTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VDb25kaXRpb24oY29uc3QgU3RyaW5n
JiB2YWx1ZSwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKQoreworICAgIFN0cmluZyBwYXJzZVN0cmlu
ZyA9IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIAorICAgIGRvdWJsZSBzaWduID0gMS47
CisgICAgYm9vbCBvazsKKyAgICBpbnQgcG9zID0gcGFyc2VTdHJpbmcuZmluZCgnKycpOworICAg
IGlmIChwb3MgPT0gLTEpIHsKKyAgICAgICAgcG9zID0gcGFyc2VTdHJpbmcuZmluZCgnLScpOwor
ICAgICAgICBpZiAocG9zICE9IC0xKQorICAgICAgICAgICAgc2lnbiA9IC0xLjsKKyAgICB9Cisg
ICAgU3RyaW5nIGNvbmRpdGlvblN0cmluZzsKKyAgICBTTUlMVGltZSBvZmZzZXQgPSAwOworICAg
IGlmIChwb3MgPT0gLTEpCisgICAgICAgIGNvbmRpdGlvblN0cmluZyA9IHBhcnNlU3RyaW5nOwor
ICAgIGVsc2UgeworICAgICAgICBjb25kaXRpb25TdHJpbmcgPSBwYXJzZVN0cmluZy5sZWZ0KHBv
cykuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIFN0cmluZyBvZmZzZXRTdHJpbmcgPSBwYXJz
ZVN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIG9m
ZnNldCA9IHBhcnNlT2Zmc2V0VmFsdWUob2Zmc2V0U3RyaW5nKTsKKyAgICAgICAgaWYgKG9mZnNl
dC5pc1VucmVzb2x2ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zm
c2V0ID0gb2Zmc2V0ICogc2lnbjsKKyAgICB9CisgICAgaWYgKGNvbmRpdGlvblN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwb3MgPSBjb25kaXRpb25TdHJpbmcu
ZmluZCgnLicpOworICAgIAorICAgIFN0cmluZyBiYXNlSUQ7CisgICAgU3RyaW5nIG5hbWVTdHJp
bmc7CisgICAgaWYgKHBvcyA9PSAtMSkKKyAgICAgICAgbmFtZVN0cmluZyA9IGNvbmRpdGlvblN0
cmluZzsKKyAgICBlbHNlIHsKKyAgICAgICAgYmFzZUlEID0gY29uZGl0aW9uU3RyaW5nLmxlZnQo
cG9zKTsKKyAgICAgICAgbmFtZVN0cmluZyA9IGNvbmRpdGlvblN0cmluZy5zdWJzdHJpbmcocG9z
ICsgMSk7CisgICAgfQorICAgIGlmIChuYW1lU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQ29uZGl0aW9uOjpUeXBlIHR5cGU7CisgICAgaW50IHJlcGVhdHMg
PSAtMTsKKyAgICBpZiAobmFtZVN0cmluZy5zdGFydHNXaXRoKCJyZXBlYXQoIikgJiYgbmFtZVN0
cmluZy5lbmRzV2l0aCgiKSIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgcmVwZWF0IGV2ZW50
cyB3ZSBqdXN0IG5lZWQgdG8gYWRkIHRoZSBkYXRhIGNhcnJ5aW5nIFRpbWVFdmVudCBjbGFzcyBh
bmQgCisgICAgICAgIC8vIGZpcmUgdGhlIGV2ZW50cyBhdCBhcHByb3BpYXRlIHRpbWVzLgorICAg
ICAgICByZXBlYXRzID0gbmFtZVN0cmluZy5zdWJzdHJpbmcoNywgbmFtZVN0cmluZy5sZW5ndGgo
KSAtIDgpLnRvVUludFN0cmljdCgmb2spOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBuYW1lU3RyaW5nID0gInJlcGVhdCI7CisgICAgICAgIHR5
cGUgPSBDb25kaXRpb246OkV2ZW50QmFzZTsKKyAgICB9IGVsc2UgaWYgKG5hbWVTdHJpbmcgPT0g
ImJlZ2luIiB8fCBuYW1lU3RyaW5nID09ICJlbmQiKSB7CisgICAgICAgIGlmIChiYXNlSUQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0eXBlID0gQ29uZGl0
aW9uOjpTeW5jYmFzZTsKKyAgICB9IGVsc2UgaWYgKG5hbWVTdHJpbmcuc3RhcnRzV2l0aCgiYWNj
ZXNza2V5KCIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBhY2Nlc3NrZXkoKSBzdXBwb3J0LgorICAg
ICAgICB0eXBlID0gQ29uZGl0aW9uOjpBY2Nlc3NLZXk7CisgICAgfSBlbHNlCisgICAgICAgIHR5
cGUgPSBDb25kaXRpb246OkV2ZW50QmFzZTsKKyAgICAKKyAgICBtX2NvbmRpdGlvbnMuYXBwZW5k
KENvbmRpdGlvbih0eXBlLCBiZWdpbk9yRW5kLCBiYXNlSUQsIG5hbWVTdHJpbmcsIG9mZnNldCwg
cmVwZWF0cykpOworICAgIGlmIChiZWdpbk9yRW5kID09IEVuZCkKKyAgICAgICAgbV9oYXNFbmRF
dmVudENvbmRpdGlvbnMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNNSUxU
aW1pbmdFbGVtZW50Ojppc1RpbWluZ0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBp
ZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZWxlbWVudC0+
aGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05h
bWVzOjphbmltYXRlVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRl
TW90aW9uVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
YW5pbWF0ZVRyYW5zZm9ybVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5p
bWF0ZUNvbG9yVGFnKTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OnBhcnNlQmVn
aW5PckVuZChjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQp
Cit7CisgICAgVmVjdG9yPFNNSUxUaW1lPiYgdGltZUxpc3QgPSBiZWdpbk9yRW5kID09IEJlZ2lu
ID8gbV9iZWdpblRpbWVzIDogbV9lbmRUaW1lczsKKyAgICBpZiAoYmVnaW5PckVuZCA9PSBFbmQp
CisgICAgICAgIG1faGFzRW5kRXZlbnRDb25kaXRpb25zID0gZmFsc2U7CisgICAgSGFzaFNldDxk
b3VibGU+IGV4aXN0aW5nOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aW1lTGlzdC5z
aXplKCk7ICsrbikKKyAgICAgICAgZXhpc3RpbmcuYWRkKHRpbWVMaXN0W25dLnZhbHVlKCkpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nOworICAgIHBhcnNlU3RyaW5nLnNwbGl0KCc7
Jywgc3BsaXRTdHJpbmcpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzcGxpdFN0cmlu
Zy5zaXplKCk7ICsrbikgeworICAgICAgICBTTUlMVGltZSB2YWx1ZSA9IHBhcnNlQ2xvY2tWYWx1
ZShzcGxpdFN0cmluZ1tuXSk7CisgICAgICAgIGlmICh2YWx1ZS5pc1VucmVzb2x2ZWQoKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29uZGl0aW9uKHNwbGl0U3RyaW5nW25dLCBiZWdpbk9yRW5kKTsKKyAg
ICAgICAgZWxzZSBpZiAoIWV4aXN0aW5nLmNvbnRhaW5zKHZhbHVlLnZhbHVlKCkpKQorICAgICAg
ICAgICAgdGltZUxpc3QuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisgICAgc29ydFRpbWVMaXN0KHRp
bWVMaXN0KTsKK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmJlZ2luQXR0cikgeworICAgICAgICBpZiAoIW1fY29uZGl0aW9ucy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgICAgICAgICBtX2Nv
bmRpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHBhcnNlQmVnaW5PckVuZChnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmVuZEF0dHIpLCBFbmQpOworICAgICAgICB9CisgICAgICAgIHBhcnNlQmVn
aW5PckVuZChhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBCZWdpbik7CisgICAgICAgIGlmIChpbkRv
Y3VtZW50KCkpCisgICAgICAgICAgICBjb25uZWN0Q29uZGl0aW9ucygpOworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbmRBdHRyKSB7CisgICAgICAgIGlmICghbV9j
b25kaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMo
KTsKKyAgICAgICAgICAgIG1fY29uZGl0aW9ucy5jbGVhcigpOworICAgICAgICAgICAgcGFyc2VC
ZWdpbk9yRW5kKGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YmVnaW5BdHRyKSwgQmVnaW4pOworICAg
ICAgICB9CisgICAgICAgIHBhcnNlQmVnaW5PckVuZChhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBF
bmQpOworICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgY29ubmVjdENvbmRp
dGlvbnMoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7Cit9CisKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgU1ZHRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKKyAgICAKKyAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKKyAgICBpZiAoYXR0ck5h
bWUgPT0gWExpbmtOYW1lczo6aHJlZkF0dHIpCisgICAgICAgIG1fdGFyZ2V0RWxlbWVudCA9IDA7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR1ckF0dHIpCisgICAgICAgIG1f
Y2FjaGVkRHVyID0gLTEuOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyZXBl
YXREdXJBdHRyKQorICAgICAgICBtX2NhY2hlZFJlcGVhdER1ciA9IC0xLjsKKyAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmVwZWF0Q291bnRBdHRyKQorICAgICAgICBtX2NhY2hl
ZFJlcGVhdENvdW50ID0gLTEuOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpt
aW5BdHRyKQorICAgICAgICBtX2NhY2hlZE1pbiA9IC0xLjsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bWF4QXR0cikKKyAgICAgICAgbV9jYWNoZWRNYXggPSAtMS47CisgICAg
CisgICAgaWYgKGluRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmJlZ2luQXR0cikKKyAgICAgICAgICAgIGJlZ2luTGlzdENoYW5nZWQoKTsKKyAgICAgICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVuZEF0dHIpCisgICAgICAgICAgICBlbmRM
aXN0Q2hhbmdlZCgpOworICAgIH0KK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6Y29ubmVj
dENvbmRpdGlvbnMoKQoreworICAgIGlmIChtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCisgICAgICAg
IGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgbV9jb25kaXRpb25zQ29ubmVjdGVkID0gdHJ1
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgbV9jb25kaXRpb25zLnNpemUoKTsgKytu
KSB7CisgICAgICAgIENvbmRpdGlvbiYgY29uZGl0aW9uID0gbV9jb25kaXRpb25zW25dOworICAg
ICAgICBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OkV2ZW50QmFzZSkgeworICAg
ICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9iYXNlKTsKKyAgICAgICAgICAgIGlmIChjb25k
aXRpb24ubV9iYXNlSUQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jh
c2UgPSB0YXJnZXRFbGVtZW50KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Y29uZGl0aW9uLm1fYmFzZSA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGNvbmRpdGlvbi5t
X2Jhc2VJRCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5tX2Jhc2UpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoIWNvbmRpdGlvbi5tX2V2ZW50TGlz
dGVuZXIpOworICAgICAgICAgICAgY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lciA9IG5ldyBDb25k
aXRpb25FdmVudExpc3RlbmVyKHRoaXMsICZjb25kaXRpb24pOworICAgICAgICAgICAgY29uZGl0
aW9uLm1fYmFzZS0+YWRkRXZlbnRMaXN0ZW5lcihjb25kaXRpb24ubV9uYW1lLCBjb25kaXRpb24u
bV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uLm1f
dHlwZSA9PSBDb25kaXRpb246OlN5bmNiYXNlKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNvbmRp
dGlvbi5tX2Jhc2VJRC5pc0VtcHR5KCkpOworICAgICAgICAgICAgY29uZGl0aW9uLm1fYmFzZSA9
IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGNvbmRpdGlvbi5tX2Jhc2VJRCk7CisgICAgICAg
ICAgICBpZiAoIWlzVGltaW5nRWxlbWVudChjb25kaXRpb24ubV9iYXNlLmdldCgpKSkgeworICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbi5tX2Jhc2UgPSAwOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU01JTFRpbWluZ0VsZW1lbnQqIHN5bmNi
YXNlID0gc3RhdGljX2Nhc3Q8U01JTFRpbWluZ0VsZW1lbnQqPihjb25kaXRpb24ubV9iYXNlLmdl
dCgpKTsKKyAgICAgICAgICAgIHN5bmNiYXNlLT5hZGRUaW1lRGVwZW5kZW50KHRoaXMpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpkaXNjb25uZWN0Q29u
ZGl0aW9ucygpCit7CisgICAgaWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbmRpdGlvbnNDb25uZWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgbV9jb25kaXRpb25zLnNpemUoKTsgKytuKSB7CisgICAgICAgIENvbmRp
dGlvbiYgY29uZGl0aW9uID0gbV9jb25kaXRpb25zW25dOworICAgICAgICBpZiAoY29uZGl0aW9u
Lm1fdHlwZSA9PSBDb25kaXRpb246OkV2ZW50QmFzZSkgeworICAgICAgICAgICAgaWYgKGNvbmRp
dGlvbi5tX2Jhc2UpCisgICAgICAgICAgICAgICAgY29uZGl0aW9uLm1fYmFzZS0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25kaXRpb24ubV9uYW1lLCBjb25kaXRpb24ubV9ldmVudExpc3RlbmVyLmdl
dCgpLCBmYWxzZSk7CisgICAgICAgICAgICBjb25kaXRpb24ubV9ldmVudExpc3RlbmVyID0gMDsK
KyAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb24ubV90eXBlID09IENvbmRpdGlvbjo6U3luY2Jh
c2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kaXRpb24ubV9iYXNlKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzVGltaW5nRWxlbWVudChjb25kaXRpb24ubV9iYXNlLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U01JTFRpbWluZ0VsZW1lbnQqPihjb25kaXRpb24ubV9i
YXNlLmdldCgpKS0+cmVtb3ZlVGltZURlcGVuZGVudCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBjb25kaXRpb24ubV9iYXNlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQg
U01JTFRpbWluZ0VsZW1lbnQ6OnJlc2NoZWR1bGUoKQoreworICAgIGlmIChtX3RpbWVDb250YWlu
ZXIpCisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcyk7Cit9CisKK1NWR0Vs
ZW1lbnQqIFNNSUxUaW1pbmdFbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fdGFyZ2V0RWxlbWVudCkgeworICAgICAgICBTdHJpbmcgaHJlZiA9IHhsaW5rSHJlZigp
OworICAgICAgICBOb2RlICp0YXJnZXQgPSBocmVmLmlzRW1wdHkoKSA/IHBhcmVudE5vZGUoKSA6
IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KGhy
ZWYpKTsKKyAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzU1ZHRWxlbWVudCgpKQorICAg
ICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdl
dCk7CisgICAgfQorICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQuZ2V0KCk7Cit9CisgICAgCitT
TUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6ZWxhcHNlZCgpIGNvbnN0IAoreworICAgIHJldHVy
biBtX3RpbWVDb250YWluZXIgPyBtX3RpbWVDb250YWluZXItPmVsYXBzZWQoKSA6IDA7Cit9IAor
CitTTUlMVGltaW5nRWxlbWVudDo6UmVzdGFydCBTTUlMVGltaW5nRWxlbWVudDo6cmVzdGFydCgp
IGNvbnN0Cit7ICAgIAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbmV2ZXIoIm5ldmVy
Iik7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyB3aGVuTm90QWN0aXZlKCJ3aGVuTm90
QWN0aXZlIik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShT
VkdOYW1lczo6cmVzdGFydEF0dHIpOworICAgIGlmICh2YWx1ZSA9PSBuZXZlcikKKyAgICAgICAg
cmV0dXJuIFJlc3RhcnROZXZlcjsKKyAgICBpZiAodmFsdWUgPT0gd2hlbk5vdEFjdGl2ZSkKKyAg
ICAgICAgcmV0dXJuIFJlc3RhcnRXaGVuTm90QWN0aXZlOworICAgIHJldHVybiBSZXN0YXJ0QWx3
YXlzOworfQorICAgIAorU01JTFRpbWluZ0VsZW1lbnQ6OkZpbGxNb2RlIFNNSUxUaW1pbmdFbGVt
ZW50OjpmaWxsKCkgY29uc3QKK3sgICAKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIGZy
ZWV6ZSgiZnJlZXplIik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJp
YnV0ZShTVkdOYW1lczo6ZmlsbEF0dHIpOworICAgIHJldHVybiB2YWx1ZSA9PSBmcmVlemUgPyBG
aWxsRnJlZXplIDogRmlsbFJlbW92ZTsKK30KKyAgICAKK1N0cmluZyBTTUlMVGltaW5nRWxlbWVu
dDo6eGxpbmtIcmVmKCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShYTGlu
a05hbWVzOjpocmVmQXR0cik7Cit9CisgICAgCitTTUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6
ZHVyKCkgY29uc3QKK3sgICAKKyAgICBpZiAobV9jYWNoZWREdXIgPj0gMCkKKyAgICAgICAgcmV0
dXJuIG1fY2FjaGVkRHVyOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmR1ckF0dHIpOworICAgIFNNSUxUaW1lIGNsb2NrVmFsdWUgPSBwYXJz
ZUNsb2NrVmFsdWUodmFsdWUpOworICAgIHJldHVybiBtX2NhY2hlZER1ciA9IGNsb2NrVmFsdWUg
PD0gMCA/IFNNSUxUaW1lOjp1bnJlc29sdmVkKCkgOiBjbG9ja1ZhbHVlOworfQorCitTTUlMVGlt
ZSBTTUlMVGltaW5nRWxlbWVudDo6cmVwZWF0RHVyKCkgY29uc3QKK3sgICAgCisgICAgaWYgKG1f
Y2FjaGVkUmVwZWF0RHVyID49IDApCisgICAgICAgIHJldHVybiBtX2NhY2hlZFJlcGVhdER1cjsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpy
ZXBlYXREdXJBdHRyKTsKKyAgICBTTUlMVGltZSBjbG9ja1ZhbHVlID0gcGFyc2VDbG9ja1ZhbHVl
KHZhbHVlKTsKKyAgICByZXR1cm4gbV9jYWNoZWRSZXBlYXREdXIgPSBjbG9ja1ZhbHVlIDwgMCA/
IFNNSUxUaW1lOjp1bnJlc29sdmVkKCkgOiBjbG9ja1ZhbHVlOworfQorICAgIAorLy8gU28gYSBj
b3VudCBpcyBub3QgcmVhbGx5IGEgdGltZSBidXQgbGV0IGp1c3QgYWxsIHByZXRlbmQgd2UgZGlk
IG5vdCBub3RpY2UuCitTTUlMVGltZSBTTUlMVGltaW5nRWxlbWVudDo6cmVwZWF0Q291bnQoKSBj
b25zdAoreyAgICAKKyAgICBpZiAobV9jYWNoZWRSZXBlYXRDb3VudCA+PSAwKQorICAgICAgICBy
ZXR1cm4gbV9jYWNoZWRSZXBlYXRDb3VudDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpyZXBlYXRDb3VudEF0dHIpOworICAgIGlmICh2YWx1
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIGluZGVmaW5pdGVWYWx1ZSgiaW5kZWZpbml0ZSIp
OworICAgIGlmICh2YWx1ZSA9PSBpbmRlZmluaXRlVmFsdWUpCisgICAgICAgIHJldHVybiBTTUlM
VGltZTo6aW5kZWZpbml0ZSgpOworICAgIGJvb2wgb2s7CisgICAgZG91YmxlIHJlc3VsdCA9IHZh
bHVlLnN0cmluZygpLnRvRG91YmxlKCZvayk7CisgICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0Q291
bnQgPSBvayAmJiByZXN1bHQgPiAwID8gcmVzdWx0IDogU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsK
K30KKworU01JTFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6Om1heFZhbHVlKCkgY29uc3QKK3sgICAg
CisgICAgaWYgKG1fY2FjaGVkTWF4ID49IDApCisgICAgICAgIHJldHVybiBtX2NhY2hlZE1heDsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpt
YXhBdHRyKTsKKyAgICBTTUlMVGltZSByZXN1bHQgPSBwYXJzZUNsb2NrVmFsdWUodmFsdWUpOwor
ICAgIHJldHVybiBtX2NhY2hlZE1heCA9IChyZXN1bHQuaXNVbnJlc29sdmVkKCkgfHwgcmVzdWx0
IDwgMCkgPyBTTUlMVGltZTo6aW5kZWZpbml0ZSgpIDogcmVzdWx0OworfQorICAgIAorU01JTFRp
bWUgU01JTFRpbWluZ0VsZW1lbnQ6Om1pblZhbHVlKCkgY29uc3QKK3sgICAgCisgICAgaWYgKG1f
Y2FjaGVkTWluID49IDApCisgICAgICAgIHJldHVybiBtX2NhY2hlZE1pbjsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjptaW5BdHRyKTsKKyAg
ICBTTUlMVGltZSByZXN1bHQgPSBwYXJzZUNsb2NrVmFsdWUodmFsdWUpOworICAgIHJldHVybiBt
X2NhY2hlZE1pbiA9IChyZXN1bHQuaXNVbnJlc29sdmVkKCkgfHwgcmVzdWx0IDwgMCkgPyAwIDog
cmVzdWx0OworfQorICAgICAgICAgICAgICAgICAKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50
OjpzaW1wbGVEdXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1pbihkdXIoKSwgU01JTFRp
bWU6OmluZGVmaW5pdGUoKSk7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjphZGRC
ZWdpblRpbWUoU01JTFRpbWUgdGltZSkKK3sKKyAgICBtX2JlZ2luVGltZXMuYXBwZW5kKHRpbWUp
OworICAgIHNvcnRUaW1lTGlzdChtX2JlZ2luVGltZXMpOworICAgIGJlZ2luTGlzdENoYW5nZWQo
KTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OmFkZEVuZFRpbWUoU01JTFRpbWUg
dGltZSkKK3sKKyAgICBtX2VuZFRpbWVzLmFwcGVuZCh0aW1lKTsKKyAgICBzb3J0VGltZUxpc3Qo
bV9lbmRUaW1lcyk7CisgICAgZW5kTGlzdENoYW5nZWQoKTsKK30KKyAgICAKK1NNSUxUaW1lIFNN
SUxUaW1pbmdFbGVtZW50OjpmaW5kSW5zdGFuY2VUaW1lKEJlZ2luT3JFbmQgYmVnaW5PckVuZCwg
U01JTFRpbWUgbWluaW11bVRpbWUsIGJvb2wgZXF1YWxzTWluaW11bU9LKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNlYXJjaGVzIGZyb20gdGhlIGJlZ2lubmluZyB3aGljaCBpcyBpbmVm
ZmljaWVudC4gVGhlIGxpc3QgaXMgdXN1YWxseSBub3QgbG9uZworICAgIC8vIChvbmUgZW50cnkg
aW4gY29tbW9uIGNhc2VzKSBidXQgeW91IGNhbiBjb25zdHJ1Y3QgYSBjYXNlIHdoZXJlIGl0IGRv
ZXMgZ3Jvdy4KKyAgICBjb25zdCBWZWN0b3I8U01JTFRpbWU+JiBsaXN0ID0gYmVnaW5PckVuZCA9
PSBCZWdpbiA/IG1fYmVnaW5UaW1lcyA6IG1fZW5kVGltZXM7CisgICAgZm9yICh1bnNpZ25lZCBu
ID0gMDsgbiA8IGxpc3Quc2l6ZSgpOyArK24pIHsKKyAgICAgICAgU01JTFRpbWUgdGltZSA9IGxp
c3Rbbl07CisgICAgICAgIEFTU0VSVCghdGltZS5pc1VucmVzb2x2ZWQoKSk7CisgICAgICAgIGlm
ICh0aW1lLmlzSW5kZWZpbml0ZSgpICYmIGJlZ2luT3JFbmQgPT0gQmVnaW4pIHsKKyAgICAgICAg
ICAgIC8vICJUaGUgc3BlY2lhbCB2YWx1ZSAiaW5kZWZpbml0ZSIgZG9lcyBub3QgeWllbGQgYW4g
aW5zdGFuY2UgdGltZSBpbiB0aGUgYmVnaW4gbGlzdC4iCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxzTWluaW11bU9LKSB7CisgICAgICAgICAgICBp
ZiAodGltZSA+PSBtaW5pbXVtVGltZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGltZTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aW1lID4gbWluaW11bVRpbWUpCisgICAgICAgICAgICByZXR1cm4g
dGltZTsKKyAgICB9CisgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisKK1NN
SUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpyZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0Cit7Cisg
ICAgLy8gQ29tcHV0aW5nIHRoZSBhY3RpdmUgZHVyYXRpb24KKyAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9TTUlMMi9zbWlsLXRpbWluZy5odG1sI1RpbWluZy1Db21wdXRpbmdBY3RpdmVEdXIK
KyAgICBTTUlMVGltZSByZXBlYXRDb3VudCA9IHRoaXMtPnJlcGVhdENvdW50KCk7CisgICAgU01J
TFRpbWUgcmVwZWF0RHVyID0gdGhpcy0+cmVwZWF0RHVyKCk7CisgICAgU01JTFRpbWUgc2ltcGxl
RHVyYXRpb24gPSB0aGlzLT5zaW1wbGVEdXJhdGlvbigpOworICAgIGlmIChzaW1wbGVEdXJhdGlv
biA9PSAwIHx8IChyZXBlYXREdXIuaXNVbnJlc29sdmVkKCkgJiYgcmVwZWF0Q291bnQuaXNVbnJl
c29sdmVkKCkpKQorICAgICAgICByZXR1cm4gc2ltcGxlRHVyYXRpb247CisgICAgU01JTFRpbWUg
cmVwZWF0Q291bnREdXJhdGlvbiA9IHNpbXBsZUR1cmF0aW9uICogcmVwZWF0Q291bnQ7CisgICAg
cmV0dXJuIG1pbihyZXBlYXRDb3VudER1cmF0aW9uLCBtaW4ocmVwZWF0RHVyLCBTTUlMVGltZTo6
aW5kZWZpbml0ZSgpKSk7Cit9CisKK1NNSUxUaW1lIFNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZl
QWN0aXZlRW5kKFNNSUxUaW1lIHJlc29sdmVkQmVnaW4sIFNNSUxUaW1lIHJlc29sdmVkRW5kKSBj
b25zdAoreworICAgIC8vIENvbXB1dGluZyB0aGUgYWN0aXZlIGR1cmF0aW9uCisgICAgLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvU01JTDIvc21pbC10aW1pbmcuaHRtbCNUaW1pbmctQ29tcHV0aW5n
QWN0aXZlRHVyCisgICAgU01JTFRpbWUgcHJlbGltaW5hcnlBY3RpdmVEdXJhdGlvbjsKKyAgICBp
ZiAoIXJlc29sdmVkRW5kLmlzVW5yZXNvbHZlZCgpICYmIGR1cigpLmlzVW5yZXNvbHZlZCgpICYm
IHJlcGVhdER1cigpLmlzVW5yZXNvbHZlZCgpICYmIHJlcGVhdENvdW50KCkuaXNVbnJlc29sdmVk
KCkpCisgICAgICAgIHByZWxpbWluYXJ5QWN0aXZlRHVyYXRpb24gPSByZXNvbHZlZEVuZCAtIHJl
c29sdmVkQmVnaW47CisgICAgZWxzZSBpZiAoIXJlc29sdmVkRW5kLmlzRmluaXRlKCkpCisgICAg
ICAgIHByZWxpbWluYXJ5QWN0aXZlRHVyYXRpb24gPSByZXBlYXRpbmdEdXJhdGlvbigpOworICAg
IGVsc2UKKyAgICAgICAgcHJlbGltaW5hcnlBY3RpdmVEdXJhdGlvbiA9IG1pbihyZXBlYXRpbmdE
dXJhdGlvbigpLCByZXNvbHZlZEVuZCAtIHJlc29sdmVkQmVnaW4pOworICAgIAorICAgIFNNSUxU
aW1lIG1pblZhbHVlID0gdGhpcy0+bWluVmFsdWUoKTsKKyAgICBTTUlMVGltZSBtYXhWYWx1ZSA9
IHRoaXMtPm1heFZhbHVlKCk7CisgICAgaWYgKG1pblZhbHVlID4gbWF4VmFsdWUpIHsKKyAgICAg
ICAgLy8gSWdub3JlIGJvdGguCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEv
UkVDLXNtaWwtYW5pbWF0aW9uLTIwMDEwOTA0LyNNaW5NYXgKKyAgICAgICAgbWluVmFsdWUgPSAw
OworICAgICAgICBtYXhWYWx1ZSA9IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CisgICAgfQorICAg
IHJldHVybiByZXNvbHZlZEJlZ2luICsgbWluKG1heFZhbHVlLCBtYXgobWluVmFsdWUsIHByZWxp
bWluYXJ5QWN0aXZlRHVyYXRpb24pKTsKK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVz
b2x2ZUludGVydmFsKGJvb2wgZmlyc3QsIFNNSUxUaW1lJiBiZWdpblJlc3VsdCwgU01JTFRpbWUm
IGVuZFJlc3VsdCkgY29uc3QKK3sKKyAgICAvLyBTZWUgdGhlIHBzZXVkb2NvZGUgaW4KKyAgICAv
LyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1zbWlsLWFuaW1hdGlvbi0yMDAxMDkwNC8j
VGltaW5nLUJlZ2luRW5kLUxpZmVDeWNsZQorICAgIFNNSUxUaW1lIGJlZ2luQWZ0ZXIgPSBmaXJz
dCA/IC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpIDogbV9pbnRlcnZhbEVuZDsK
KyAgICBTTUlMVGltZSBsYXN0SW50ZXJ2YWxUZW1wRW5kID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBTTUlMVGltZSB0ZW1w
QmVnaW4gPSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luLCBiZWdpbkFmdGVyLCB0cnVlKTsKKyAgICAg
ICAgaWYgKHRlbXBCZWdpbi5pc1VucmVzb2x2ZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBTTUlMVGltZSB0ZW1wRW5kOworICAgICAgICBpZiAobV9lbmRUaW1lcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICB0ZW1wRW5kID0gcmVzb2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIFNNSUxU
aW1lOjppbmRlZmluaXRlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRlbXBFbmQg
PSBmaW5kSW5zdGFuY2VUaW1lKEVuZCwgdGVtcEJlZ2luLCB0cnVlKTsKKyAgICAgICAgICAgIGlm
ICgoZmlyc3QgJiYgdGVtcEJlZ2luID09IHRlbXBFbmQgJiYgdGVtcEVuZCA9PSBsYXN0SW50ZXJ2
YWxUZW1wRW5kKSB8fCAoIWZpcnN0ICYmIHRlbXBFbmQgPT0gbV9pbnRlcnZhbEVuZCkpIAorICAg
ICAgICAgICAgICAgIHRlbXBFbmQgPSBmaW5kSW5zdGFuY2VUaW1lKEVuZCwgdGVtcEJlZ2luLCBm
YWxzZSk7ICAgIAorICAgICAgICAgICAgaWYgKHRlbXBFbmQuaXNVbnJlc29sdmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZW5kVGltZXMuaXNFbXB0eSgpICYmICFtX2hhc0VuZEV2ZW50
Q29uZGl0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0ZW1wRW5kID0gcmVzb2x2ZUFjdGl2ZUVuZCh0ZW1wQmVnaW4sIHRlbXBFbmQp
OworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wRW5kID4gMCB8fCAhZmlyc3QpIHsKKyAgICAg
ICAgICAgIGJlZ2luUmVzdWx0ID0gdGVtcEJlZ2luOworICAgICAgICAgICAgZW5kUmVzdWx0ID0g
dGVtcEVuZDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN0YXJ0
KCkgPT0gUmVzdGFydE5ldmVyKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGJlZ2luQWZ0ZXIgPSB0ZW1wRW5kOworICAgICAgICBsYXN0SW50ZXJ2YWxUZW1w
RW5kID0gdGVtcEVuZDsKKyAgICB9CisgICAgYmVnaW5SZXN1bHQgPSBTTUlMVGltZTo6dW5yZXNv
bHZlZCgpOworICAgIGVuZFJlc3VsdCA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisgICAg
Cit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpyZXNvbHZlRmlyc3RJbnRlcnZhbCgpCit7CisgICAg
U01JTFRpbWUgYmVnaW47CisgICAgU01JTFRpbWUgZW5kOworICAgIHJlc29sdmVJbnRlcnZhbCh0
cnVlLCBiZWdpbiwgZW5kKTsKKyAgICBBU1NFUlQoIWJlZ2luLmlzSW5kZWZpbml0ZSgpKTsKKwor
ICAgIGlmICghYmVnaW4uaXNVbnJlc29sdmVkKCkgJiYgKGJlZ2luICE9IG1faW50ZXJ2YWxCZWdp
biB8fCBlbmQgIT0gbV9pbnRlcnZhbEVuZCkpIHsgICAKKyAgICAgICAgYm9vbCB3YXNVbnJlc29s
dmVkID0gbV9pbnRlcnZhbEJlZ2luLmlzVW5yZXNvbHZlZCgpOworICAgICAgICBtX2ludGVydmFs
QmVnaW4gPSBiZWdpbjsKKyAgICAgICAgbV9pbnRlcnZhbEVuZCA9IGVuZDsKKyAgICAgICAgbm90
aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZCh3YXNVbnJlc29sdmVkID8gTmV3SW50ZXJ2YWwg
OiBFeGlzdGluZ0ludGVydmFsKTsKKyAgICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbWluKG1f
bmV4dFByb2dyZXNzVGltZSwgbV9pbnRlcnZhbEJlZ2luKTsKKyAgICAgICAgcmVzY2hlZHVsZSgp
OworICAgIH0KK30KKwordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVzb2x2ZU5leHRJbnRlcnZh
bCgpCit7CisgICAgU01JTFRpbWUgYmVnaW47CisgICAgU01JTFRpbWUgZW5kOworICAgIHJlc29s
dmVJbnRlcnZhbChmYWxzZSwgYmVnaW4sIGVuZCk7CisgICAgQVNTRVJUKCFiZWdpbi5pc0luZGVm
aW5pdGUoKSk7CisgICAgCisgICAgaWYgKCFiZWdpbi5pc1VucmVzb2x2ZWQoKSAmJiBiZWdpbiAh
PSBtX2ludGVydmFsQmVnaW4pIHsKKyAgICAgICAgbV9pbnRlcnZhbEJlZ2luID0gYmVnaW47Cisg
ICAgICAgIG1faW50ZXJ2YWxFbmQgPSBlbmQ7CisgICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRl
cnZhbENoYW5nZWQoTmV3SW50ZXJ2YWwpOworICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBt
aW4obV9uZXh0UHJvZ3Jlc3NUaW1lLCBtX2ludGVydmFsQmVnaW4pOworICAgIH0KK30KKworU01J
TFRpbWUgU01JTFRpbWluZ0VsZW1lbnQ6Om5leHRQcm9ncmVzc1RpbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX25leHRQcm9ncmVzc1RpbWU7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVt
ZW50OjpiZWdpbkxpc3RDaGFuZ2VkKCkKK3sKKyAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+
ZWxhcHNlZCgpOworICAgIGlmIChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwpCisgICAgICAg
IHJlc29sdmVGaXJzdEludGVydmFsKCk7CisgICAgZWxzZSBpZiAoZWxhcHNlZCA8IG1faW50ZXJ2
YWxCZWdpbikgeworICAgICAgICBTTUlMVGltZSBuZXdCZWdpbiA9IGZpbmRJbnN0YW5jZVRpbWUo
QmVnaW4sIGVsYXBzZWQsIGZhbHNlKTsKKyAgICAgICAgaWYgKG5ld0JlZ2luIDwgbV9pbnRlcnZh
bEJlZ2luKSB7CisgICAgICAgICAgICAvLyBCZWdpbiB0aW1lIGNoYW5nZWQsIHJlLXJlc29sdmUg
dGhlIGludGVydmFsLgorICAgICAgICAgICAgU01JTFRpbWUgb2xkQmVnaW4gPSBtX2ludGVydmFs
QmVnaW47CisgICAgICAgICAgICBtX2ludGVydmFsQmVnaW4gPSBlbGFwc2VkOworICAgICAgICAg
ICAgcmVzb2x2ZUludGVydmFsKGZhbHNlLCBtX2ludGVydmFsQmVnaW4sIG1faW50ZXJ2YWxFbmQp
OyAgCisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJ2YWxCZWdpbi5pc1VucmVzb2x2ZWQoKSk7
CisgICAgICAgICAgICBpZiAobV9pbnRlcnZhbEJlZ2luICE9IG9sZEJlZ2luKQorICAgICAgICAg
ICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQoRXhpc3RpbmdJbnRlcnZhbCk7
CisgICAgICAgIH0KKyAgICB9ICAgIAorICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7
CisgICAgcmVzY2hlZHVsZSgpOworfQorCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjplbmRMaXN0
Q2hhbmdlZCgpCit7CisgICAgU01JTFRpbWUgZWxhcHNlZCA9IHRoaXMtPmVsYXBzZWQoKTsKKyAg
ICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsKQorICAgICAgICByZXNvbHZlRmlyc3RJ
bnRlcnZhbCgpOworICAgIGVsc2UgaWYgKGVsYXBzZWQgPCBtX2ludGVydmFsRW5kICYmIG1faW50
ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKSB7CisgICAgICAgIFNNSUxUaW1lIG5ld0VuZCA9IGZpbmRJ
bnN0YW5jZVRpbWUoRW5kLCBtX2ludGVydmFsQmVnaW4sIGZhbHNlKTsKKyAgICAgICAgaWYgKG5l
d0VuZCA8IG1faW50ZXJ2YWxFbmQpIHsKKyAgICAgICAgICAgIG5ld0VuZCA9IHJlc29sdmVBY3Rp
dmVFbmQobV9pbnRlcnZhbEJlZ2luLCBuZXdFbmQpOworICAgICAgICAgICAgaWYgKG5ld0VuZCAh
PSBtX2ludGVydmFsRW5kKSB7CisgICAgICAgICAgICAgICAgbV9pbnRlcnZhbEVuZCA9IG5ld0Vu
ZDsKKyAgICAgICAgICAgICAgICBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKEV4aXN0
aW5nSW50ZXJ2YWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1fbmV4
dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7CisgICAgcmVzY2hlZHVsZSgpOworfQorICAgIAordm9p
ZCBTTUlMVGltaW5nRWxlbWVudDo6Y2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpCit7Cisg
ICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwpOworICAgIEFTU0VSVChlbGFw
c2VkID49IG1faW50ZXJ2YWxCZWdpbik7CisgICAgCisgICAgUmVzdGFydCByZXN0YXJ0ID0gdGhp
cy0+cmVzdGFydCgpOworICAgIGlmIChyZXN0YXJ0ID09IFJlc3RhcnROZXZlcikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChlbGFwc2VkIDwgbV9pbnRlcnZhbEVuZCkgeworICAgICAg
ICBpZiAocmVzdGFydCAhPSBSZXN0YXJ0QWx3YXlzKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBTTUlMVGltZSBuZXh0QmVnaW4gPSBmaW5kSW5zdGFuY2VUaW1lKEJlZ2luLCBtX2ludGVy
dmFsQmVnaW4sIGZhbHNlKTsKKyAgICAgICAgaWYgKG5leHRCZWdpbiA8IG1faW50ZXJ2YWxFbmQp
IHsgCisgICAgICAgICAgICBtX2ludGVydmFsRW5kID0gbmV4dEJlZ2luOworICAgICAgICAgICAg
bm90aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZChFeGlzdGluZ0ludGVydmFsKTsKKyAgICAg
ICAgfQorICAgIH0gCisgICAgaWYgKGVsYXBzZWQgPj0gbV9pbnRlcnZhbEVuZCkKKyAgICAgICAg
cmVzb2x2ZU5leHRJbnRlcnZhbCgpOworfQorICAgIAorZmxvYXQgU01JTFRpbWluZ0VsZW1lbnQ6
OmNhbGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5z
aWduZWQmIHJlcGVhdCkgY29uc3QKK3sKKyAgICBTTUlMVGltZSBzaW1wbGVEdXJhdGlvbiA9IHRo
aXMtPnNpbXBsZUR1cmF0aW9uKCk7CisgICAgcmVwZWF0ID0gMDsKKyAgICBpZiAoc2ltcGxlRHVy
YXRpb24uaXNJbmRlZmluaXRlKCkpIHsKKyAgICAgICAgcmVwZWF0ID0gMDsKKyAgICAgICAgcmV0
dXJuIDAuZjsKKyAgICB9CisgICAgaWYgKHNpbXBsZUR1cmF0aW9uID09IDApIHsKKyAgICAgICAg
cmVwZWF0ID0gMDsKKyAgICAgICAgcmV0dXJuIDEuZjsKKyAgICB9CisgICAgQVNTRVJUKG1faW50
ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsKKyAgICBBU1NFUlQoc2ltcGxlRHVyYXRpb24uaXNGaW5p
dGUoKSk7CisgICAgU01JTFRpbWUgYWN0aXZlVGltZSA9IGVsYXBzZWQgLSBtX2ludGVydmFsQmVn
aW47CisgICAgU01JTFRpbWUgcmVwZWF0aW5nRHVyYXRpb24gPSB0aGlzLT5yZXBlYXRpbmdEdXJh
dGlvbigpOworICAgIGlmIChlbGFwc2VkID49IG1faW50ZXJ2YWxFbmQgfHwgYWN0aXZlVGltZSA+
IHJlcGVhdGluZ0R1cmF0aW9uKSB7CisgICAgICAgIHJlcGVhdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZXBlYXRpbmdEdXJhdGlvbi52YWx1ZSgpIC8gc2ltcGxlRHVyYXRpb24udmFsdWUoKSk7
CisgICAgICAgIGlmIChmbW9kKHJlcGVhdGluZ0R1cmF0aW9uLnZhbHVlKCksIHNpbXBsZUR1cmF0
aW9uLnZhbHVlKCkgPT0gMC4pKQorICAgICAgICAgICAgcmVwZWF0LS07CisgICAgICAgIHJldHVy
biAxLmY7CisgICAgfQorICAgIHJlcGVhdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3RpdmVU
aW1lLnZhbHVlKCkgLyBzaW1wbGVEdXJhdGlvbi52YWx1ZSgpKTsKKyAgICBTTUlMVGltZSBzaW1w
bGVUaW1lID0gZm1vZChhY3RpdmVUaW1lLnZhbHVlKCksIHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkp
OworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNpbXBsZVRpbWUudmFsdWUoKSAv
IHNpbXBsZUR1cmF0aW9uLnZhbHVlKCkpOworfQorICAgIAorU01JTFRpbWUgU01JTFRpbWluZ0Vs
ZW1lbnQ6OmNhbGN1bGF0ZU5leHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3QK
K3sKKyAgICBpZiAobV9hY3RpdmVTdGF0ZSA9PSBBY3RpdmUpIHsKKyAgICAgICAgLy8gSWYgZHVy
YXRpb24gaXMgaW5kZWZpbml0ZSB0aGUgdmFsdWUgZG9lcyBub3QgYWN0dWFsbHkgY2hhbmdlIG92
ZXIgdGltZS4gU2FtZSBpcyB0cnVlIGZvciA8c2V0Pi4KKyAgICAgICAgU01JTFRpbWUgc2ltcGxl
RHVyYXRpb24gPSB0aGlzLT5zaW1wbGVEdXJhdGlvbigpOworICAgICAgICBpZiAoc2ltcGxlRHVy
YXRpb24uaXNJbmRlZmluaXRlKCkgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkgewor
ICAgICAgICAgICAgU01JTFRpbWUgcmVwZWF0Q291bnQgPSB0aGlzLT5yZXBlYXRDb3VudCgpOwor
ICAgICAgICAgICAgU01JTFRpbWUgcmVwZWF0aW5nRHVyYXRpb25FbmQgPSBtX2ludGVydmFsQmVn
aW4gKyByZXBlYXRpbmdEdXJhdGlvbigpOworICAgICAgICAgICAgLy8gV2UgYXJlIHN1cHBvc2Vk
IHRvIGRvIGZyZWV6ZSBzZW1hbnRpY3Mgd2hlbiByZXBlYXRpbmcgZW5kcywgZXZlbiBpZiB0aGUg
ZWxlbWVudCBpcyBzdGlsbCBhY3RpdmUuIAorICAgICAgICAgICAgLy8gVGFrZSBjYXJlIHRoYXQg
d2UgZ2V0IGEgdGltZXIgY2FsbGJhY2sgYXQgdGhhdCBwb2ludC4KKyAgICAgICAgICAgIGlmIChl
bGFwc2VkIDwgcmVwZWF0aW5nRHVyYXRpb25FbmQgJiYgcmVwZWF0aW5nRHVyYXRpb25FbmQgPCBt
X2ludGVydmFsRW5kICYmIHJlcGVhdGluZ0R1cmF0aW9uRW5kLmlzRmluaXRlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlcGVhdGluZ0R1cmF0aW9uRW5kOworICAgICAgICAgICAgcmV0dXJu
IG1faW50ZXJ2YWxFbmQ7CisgICAgICAgIH0gCisgICAgICAgIHJldHVybiBlbGFwc2VkICsgMC4w
MjU7CisgICAgfQorICAgIHJldHVybiBtX2ludGVydmFsQmVnaW4gPj0gZWxhcHNlZCA/IG1faW50
ZXJ2YWxCZWdpbiA6IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7Cit9CisgICAgCitTTUlMVGltaW5n
RWxlbWVudDo6QWN0aXZlU3RhdGUgU01JTFRpbWluZ0VsZW1lbnQ6OmRldGVybWluZUFjdGl2ZVN0
YXRlKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0Cit7CisgICAgaWYgKGVsYXBzZWQgPj0gbV9pbnRl
cnZhbEJlZ2luICYmIGVsYXBzZWQgPCBtX2ludGVydmFsRW5kKQorICAgICAgICAgICAgcmV0dXJu
IEFjdGl2ZTsKKworICAgIGlmIChtX2FjdGl2ZVN0YXRlID09IEFjdGl2ZSkKKyAgICAgICAgcmV0
dXJuIGZpbGwoKSA9PSBGaWxsRnJlZXplID8gRnJvemVuIDogSW5hY3RpdmU7CisKKyAgICByZXR1
cm4gbV9hY3RpdmVTdGF0ZTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6OnByb2dy
ZXNzKFNNSUxUaW1lIGVsYXBzZWQpCit7CisgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7Cisg
ICAgQVNTRVJUKG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCB8fCBtX2ludGVydmFsQmVnaW4u
aXNGaW5pdGUoKSk7CisgICAgCisgICAgaWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCisgICAg
ICAgIGNvbm5lY3RDb25kaXRpb25zKCk7CisgICAgCisgICAgaWYgKCFtX2ludGVydmFsQmVnaW4u
aXNGaW5pdGUoKSkgeworICAgICAgICBBU1NFUlQobV9hY3RpdmVTdGF0ZSA9PSBJbmFjdGl2ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGVsYXBzZWQgPCBtX2ludGVy
dmFsQmVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fYWN0aXZlU3RhdGUgIT0gQWN0aXZlKTsKKyAg
ICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbV9pbnRlcnZhbEJlZ2luOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmIChtX2FjdGl2ZVN0YXRlID09IEluYWN0aXZlKSB7Cisg
ICAgICAgIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCA9IGZhbHNlOworICAgICAgICBtX2Fj
dGl2ZVN0YXRlID0gQWN0aXZlOworICAgICAgICBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgcmVwZWF0OworICAgIGZsb2F0IHBlcmNlbnQgPSBjYWxj
dWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KGVsYXBzZWQsIHJlcGVhdCk7CisgICAgYXBw
bHlBbmltYXRpb24ocGVyY2VudCwgcmVwZWF0KTsKKworICAgIGNoZWNrUmVzdGFydChlbGFwc2Vk
KTsKKworICAgIEFjdGl2ZVN0YXRlIG5ld1N0YXRlID0gZGV0ZXJtaW5lQWN0aXZlU3RhdGUoZWxh
cHNlZCk7CisKKyAgICBpZiAobmV3U3RhdGUgPT0gQWN0aXZlICYmIGZpbGwoKSA9PSBGaWxsUmVt
b3ZlICYmIGVsYXBzZWQgPiBtX2ludGVydmFsQmVnaW4gKyByZXBlYXRpbmdEdXJhdGlvbigpKQor
ICAgICAgICB1bmFwcGx5QW5pbWF0aW9uKCk7CisgICAgICAgIAorICAgIGlmIChtX2FjdGl2ZVN0
YXRlID09IEFjdGl2ZSAmJiBuZXdTdGF0ZSAhPSBBY3RpdmUpIHsKKyAgICAgICAgaWYgKG5ld1N0
YXRlICE9IEZyb3plbikKKyAgICAgICAgICAgIHVuYXBwbHlBbmltYXRpb24oKTsKKyAgICAgICAg
ZW5kZWRBY3RpdmVJbnRlcnZhbCgpOworICAgIH0KKyAgICBtX2FjdGl2ZVN0YXRlID0gbmV3U3Rh
dGU7CisgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShl
bGFwc2VkKTsKK30KKyAgICAKK3ZvaWQgU01JTFRpbWluZ0VsZW1lbnQ6Om5vdGlmeURlcGVuZGVu
dHNJbnRlcnZhbENoYW5nZWQoTmV3T3JFeGlzdGluZ0ludGVydmFsIG5ld09yRXhpc3RpbmcpCit7
CisgICAgQVNTRVJUKG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsKKyAgICBzdGF0aWMgSGFz
aFNldDxTTUlMVGltaW5nRWxlbWVudCo+IGxvb3BCcmVha2VyOworICAgIGlmIChsb29wQnJlYWtl
ci5jb250YWlucyh0aGlzKSkKKyAgICAgICAgcmV0dXJuOworICAgIGxvb3BCcmVha2VyLmFkZCh0
aGlzKTsKKyAgICAKKyAgICBUaW1lRGVwZW5kZW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3RpbWVE
ZXBlbmRlbnRzLmVuZCgpOworICAgIGZvciAoVGltZURlcGVuZGVudFNldDo6aXRlcmF0b3IgaXQg
PSBtX3RpbWVEZXBlbmRlbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBT
TUlMVGltaW5nRWxlbWVudCogZGVwZW5kZW50ID0gKml0OworICAgICAgICBkZXBlbmRlbnQtPmNy
ZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UodGhpcywgbmV3T3JFeGlzdGluZyk7CisgICAg
fQorCisgICAgbG9vcEJyZWFrZXIucmVtb3ZlKHRoaXMpOworfQorICAgIAordm9pZCBTTUlMVGlt
aW5nRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZShTTUlMVGltaW5nRWxl
bWVudCogc3luY2Jhc2UsIE5ld09yRXhpc3RpbmdJbnRlcnZhbCBuZXdPckV4aXN0aW5nKQorewor
ICAgIC8vIEZJWE1FOiBUbyBiZSByZWFsbHkgY29ycmVjdCwgdGhpcyBzaG91bGQgaGFuZGxlIHVw
ZGF0aW5nIGV4aXNpbmcgaW50ZXJ2YWwgYnkgY2hhbmdpbmcgCisgICAgLy8gdGhlIGFzc29jaWF0
ZWQgdGltZXMgaW5zdGVhZCBvZiBjcmVhdGluZyBuZXcgb25lcy4KKyAgICBmb3IgKHVuc2lnbmVk
IG4gPSAwOyBuIDwgbV9jb25kaXRpb25zLnNpemUoKTsgKytuKSB7CisgICAgICAgIENvbmRpdGlv
biYgY29uZGl0aW9uID0gbV9jb25kaXRpb25zW25dOworICAgICAgICBpZiAoY29uZGl0aW9uLm1f
dHlwZSA9PSBDb25kaXRpb246OlN5bmNiYXNlICYmIGNvbmRpdGlvbi5tX2Jhc2UgPT0gc3luY2Jh
c2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChjb25kaXRpb24ubV9uYW1lID09ICJiZWdpbiIgfHwg
Y29uZGl0aW9uLm1fbmFtZSA9PSAiZW5kIik7CisgICAgICAgICAgICAvLyBObyBuZXN0ZWQgdGlt
ZSBjb250YWluZXJzIGluIFNWRywgbm8gbmVlZCBmb3IgY3JhenkgdGltZSBzcGFjZSBjb252ZXJz
aW9ucy4gUGhldyEKKyAgICAgICAgICAgIFNNSUxUaW1lIHRpbWUgPSAwOworICAgICAgICAgICAg
aWYgKGNvbmRpdGlvbi5tX25hbWUgPT0gImJlZ2luIikKKyAgICAgICAgICAgICAgICB0aW1lID0g
c3luY2Jhc2UtPm1faW50ZXJ2YWxCZWdpbiArIGNvbmRpdGlvbi5tX29mZnNldDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lID0gc3luY2Jhc2UtPm1faW50ZXJ2YWxFbmQg
KyBjb25kaXRpb24ubV9vZmZzZXQ7CisgICAgICAgICAgICBBU1NFUlQodGltZS5pc0Zpbml0ZSgp
KTsKKyAgICAgICAgICAgIGlmIChjb25kaXRpb24ubV9iZWdpbk9yRW5kID09IEJlZ2luKQorICAg
ICAgICAgICAgICAgIGFkZEJlZ2luVGltZSh0aW1lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhZGRFbmRUaW1lKHRpbWUpOworICAgICAgICB9CisgICAgfQorfQorICAgIAor
dm9pZCBTTUlMVGltaW5nRWxlbWVudDo6YWRkVGltZURlcGVuZGVudChTTUlMVGltaW5nRWxlbWVu
dCogYW5pbWF0aW9uKQoreworICAgIG1fdGltZURlcGVuZGVudHMuYWRkKGFuaW1hdGlvbik7Cisg
ICAgaWYgKG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKQorICAgICAgICBhbmltYXRpb24tPmNy
ZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UodGhpcywgTmV3SW50ZXJ2YWwpOworfQorICAg
IAordm9pZCBTTUlMVGltaW5nRWxlbWVudDo6cmVtb3ZlVGltZURlcGVuZGVudChTTUlMVGltaW5n
RWxlbWVudCogYW5pbWF0aW9uKQoreworICAgIG1fdGltZURlcGVuZGVudHMucmVtb3ZlKGFuaW1h
dGlvbik7Cit9CisgICAgCit2b2lkIFNNSUxUaW1pbmdFbGVtZW50OjpoYW5kbGVDb25kaXRpb25F
dmVudChFdmVudCogZXZlbnQsIENvbmRpdGlvbiogY29uZGl0aW9uKQoreworICAgIGlmIChjb25k
aXRpb24tPm1fYmVnaW5PckVuZCA9PSBCZWdpbikKKyAgICAgICAgYWRkQmVnaW5UaW1lKGVsYXBz
ZWQoKSArIGNvbmRpdGlvbi0+bV9vZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAgYWRkRW5kVGlt
ZShlbGFwc2VkKCkgKyBjb25kaXRpb24tPm1fb2Zmc2V0KTsKK30KKwordm9pZCBTTUlMVGltaW5n
RWxlbWVudDo6YmVnaW5CeUxpbmtBY3RpdmF0aW9uKCkKK3sKKyAgICBhZGRCZWdpblRpbWUoZWxh
cHNlZCgpKTsKK30KKyAgICAKK30KKworI2VuZGlmCisKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltaW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltaW5nRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1pbmdFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworI2lmbmRl
ZiBTTUlMVGltaW5nRWxlbWVudF9oCisjZGVmaW5lIFNNSUxUaW1pbmdFbGVtZW50X2gKKyNpZiBF
TkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNNSUxUaW1l
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorICAgIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgU01JTFRpbWVD
b250YWluZXI7CisKKyAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgU01JTCBpbnRlcnZhbCB0
aW1pbmcgbW9kZWwgYXMgbmVlZGVkIGZvciBTVkcgYW5pbWF0aW9uLgorICAgIGNsYXNzIFNNSUxU
aW1pbmdFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQKKyAgICB7CisgICAgcHVibGljOgorICAg
ICAgICBTTUlMVGltaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KyAgICAgICAgdmlydHVhbCB+U01JTFRpbWluZ0VsZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBib29sIGlzVGltaW5nRWxlbWVudChFbGVtZW50KiBlbGVtZW50KTsKKyAgICAgICAg
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwg
Ym9vbCBwcmVzZXJ2ZURlY2xzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25zdCB7
IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KKworICAgICAgICBTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2b2lkIGJlZ2luQnlMaW5r
QWN0aXZhdGlvbigpOworCisgICAgICAgIGVudW0gUmVzdGFydCB7IFJlc3RhcnRBbHdheXMsIFJl
c3RhcnRXaGVuTm90QWN0aXZlLCBSZXN0YXJ0TmV2ZXIgfTsKKyAgICAgICAgUmVzdGFydCByZXN0
YXJ0KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBlbnVtIEZpbGxNb2RlIHsgRmlsbFJlbW92
ZSwgRmlsbEZyZWV6ZSB9OworICAgICAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7CisgICAgICAg
IAorICAgICAgICBTdHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBT
TUlMVGltZSBkdXIoKSBjb25zdDsKKyAgICAgICAgU01JTFRpbWUgcmVwZWF0RHVyKCkgY29uc3Q7
CisgICAgICAgIFNNSUxUaW1lIHJlcGVhdENvdW50KCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1l
IG1heFZhbHVlKCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1lIG1pblZhbHVlKCkgY29uc3Q7Cisg
ICAgICAgIAorICAgICAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7IAorICAgICAgICAKKyAg
ICAgICAgU01JTFRpbWUgaW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxC
ZWdpbjsgfQorICAgICAgICBTTUlMVGltZSBpbnRlcnZhbEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJ2YWxFbmQ7IH0KKyAgICAgICAgU01JTFRpbWUgc2ltcGxlRHVyYXRpb24oKSBjb25zdDsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgcHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCk7CisgICAg
ICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAg
IHN0YXRpYyBTTUlMVGltZSBwYXJzZU9mZnNldFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAg
ICAKK3Byb3RlY3RlZDoKKyAgICAgICAgdm9pZCBhZGRCZWdpblRpbWUoU01JTFRpbWUgdGltZSk7
CisgICAgICAgIHZvaWQgYWRkRW5kVGltZShTTUlMVGltZSB0aW1lKTsKKyAgICAgICAgCitwcml2
YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWdu
ZWQgcmVwZWF0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmFwcGx5QW5pbWF0aW9uKCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGVudW0gQmVnaW5PckVuZCB7IEJlZ2luLCBFbmQgfTsKKyAgICAgICAg
U01JTFRpbWUgZmluZEluc3RhbmNlVGltZShCZWdpbk9yRW5kIGJlZ2luT3JFbmQsIFNNSUxUaW1l
IG1pbmltdW1UaW1lLCBib29sIGVxdWFsc01pbmltdW1PSykgY29uc3Q7CisgICAgICAgIHZvaWQg
cmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKKyAgICAgICAgdm9pZCByZXNvbHZlTmV4dEludGVydmFs
KCk7CisgICAgICAgIHZvaWQgcmVzb2x2ZUludGVydmFsKGJvb2wgZmlyc3QsIFNNSUxUaW1lJiBi
ZWdpblJlc3VsdCwgU01JTFRpbWUmIGVuZFJlc3VsdCkgY29uc3Q7CisgICAgICAgIFNNSUxUaW1l
IHJlc29sdmVBY3RpdmVFbmQoU01JTFRpbWUgcmVzb2x2ZWRCZWdpbiwgU01JTFRpbWUgcmVzb2x2
ZWRFbmQpIGNvbnN0OworICAgICAgICBTTUlMVGltZSByZXBlYXRpbmdEdXJhdGlvbigpIGNvbnN0
OworICAgICAgICB2b2lkIGNoZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2VkKTsKKyAgICAgICAg
dm9pZCBiZWdpbkxpc3RDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgZW5kTGlzdENoYW5nZWQoKTsK
KyAgICAgICAgdm9pZCByZXNjaGVkdWxlKCk7CisKKyAgICAgICAgLy8gVGhpcyByZXByZXNlbnRz
IGNvbmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4gb3IgZW5kIGxpc3QgdGhhdCBuZWVkIHRvIGJl
IHJlc29sdmVkIG9uIHJ1bnRpbWUKKyAgICAgICAgLy8gZm9yIGV4YW1wbGUgPGFuaW1hdGUgYmVn
aW49Im90aGVyRWxlbWVudC5iZWdpbiArIDhzOyBidXR0b24uY2xpY2siIC4uLiAvPgorICAgICAg
ICBzdHJ1Y3QgQ29uZGl0aW9uIHsKKyAgICAgICAgICAgIGVudW0gVHlwZSB7IEV2ZW50QmFzZSwg
U3luY2Jhc2UsIEFjY2Vzc0tleSB9OworICAgICAgICAgICAgQ29uZGl0aW9uKFR5cGUsIEJlZ2lu
T3JFbmQgYmVnaW5PckVuZCwgU3RyaW5nIGJhc2VJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTTUlM
VGltZSBvZmZzZXQsIGludCByZXBlYXRzID0gLTEpOworICAgICAgICAgICAgVHlwZSBtX3R5cGU7
CisgICAgICAgICAgICBCZWdpbk9yRW5kIG1fYmVnaW5PckVuZDsKKyAgICAgICAgICAgIFN0cmlu
ZyBtX2Jhc2VJRDsKKyAgICAgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgICAgICBTTUlM
VGltZSBtX29mZnNldDsKKyAgICAgICAgICAgIGludCBtX3JlcGVhdHM7CisgICAgICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9iYXNlOworICAgICAgICAgICAgUmVmUHRyPENvbmRpdGlvbkV2ZW50
TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsKKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBwYXJz
ZUNvbmRpdGlvbihjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOworICAgICAg
ICB2b2lkIHBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JF
bmQpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjb25uZWN0Q29uZGl0aW9ucygpOworICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CisgICAgICAgIAorICAgICAgICAvLyBFdmVu
dCBiYXNlIHRpbWluZworICAgICAgICB2b2lkIGhhbmRsZUNvbmRpdGlvbkV2ZW50KEV2ZW50Kiwg
Q29uZGl0aW9uKik7CisgICAgICAgIAorICAgICAgICAvLyBTeW5jYmFzZSB0aW1pbmcKKyAgICAg
ICAgZW51bSBOZXdPckV4aXN0aW5nSW50ZXJ2YWwgeyBOZXdJbnRlcnZhbCwgRXhpc3RpbmdJbnRl
cnZhbCB9OyAKKyAgICAgICAgdm9pZCBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKE5l
d09yRXhpc3RpbmdJbnRlcnZhbCk7CisgICAgICAgIHZvaWQgY3JlYXRlSW5zdGFuY2VUaW1lc0Zy
b21TeW5jYmFzZShTTUlMVGltaW5nRWxlbWVudCogc3luY2Jhc2UsIE5ld09yRXhpc3RpbmdJbnRl
cnZhbCk7CisgICAgICAgIHZvaWQgYWRkVGltZURlcGVuZGVudChTTUlMVGltaW5nRWxlbWVudCop
OworICAgICAgICB2b2lkIHJlbW92ZVRpbWVEZXBlbmRlbnQoU01JTFRpbWluZ0VsZW1lbnQqKTsK
KyAgICAgICAgCisgICAgICAgIGVudW0gQWN0aXZlU3RhdGUgeyBJbmFjdGl2ZSwgQWN0aXZlLCBG
cm96ZW4gfTsKKyAgICAgICAgQWN0aXZlU3RhdGUgZGV0ZXJtaW5lQWN0aXZlU3RhdGUoU01JTFRp
bWUgZWxhcHNlZCkgY29uc3Q7CisgICAgICAgIGZsb2F0IGNhbGN1bGF0ZUFuaW1hdGlvblBlcmNl
bnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5zaWduZWQmIHJlcGVhdCkgY29uc3Q7Cisg
ICAgICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5leHRQcm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNl
ZCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8Q29uZGl0aW9uPiBtX2NvbmRpdGlv
bnM7CisgICAgICAgIGJvb2wgbV9jb25kaXRpb25zQ29ubmVjdGVkOworICAgICAgICBib29sIG1f
aGFzRW5kRXZlbnRDb25kaXRpb25zOyAgICAgCisgICAgICAgIAorICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8U01JTFRpbWluZ0VsZW1lbnQqPiBUaW1lRGVwZW5kZW50U2V0OworICAgICAgICBUaW1l
RGVwZW5kZW50U2V0IG1fdGltZURlcGVuZGVudHM7CisgICAgICAgIAorICAgICAgICAvLyBJbnN0
YW5jZSB0aW1lIGxpc3RzCisgICAgICAgIFZlY3RvcjxTTUlMVGltZT4gbV9iZWdpblRpbWVzOwor
ICAgICAgICBWZWN0b3I8U01JTFRpbWU+IG1fZW5kVGltZXM7CisgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGlzIHRoZSB1cGNvbWluZyBvciBjdXJyZW50IGludGVydmFsCisgICAgICAgIFNNSUxU
aW1lIG1faW50ZXJ2YWxCZWdpbjsKKyAgICAgICAgU01JTFRpbWUgbV9pbnRlcnZhbEVuZDsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsOworICAgIAor
ICAgICAgICBBY3RpdmVTdGF0ZSBtX2FjdGl2ZVN0YXRlOworICAgICAgICAKKyAgICAgICAgU01J
TFRpbWUgbV9uZXh0UHJvZ3Jlc3NUaW1lOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFNNSUxU
aW1lQ29udGFpbmVyPiBtX3RpbWVDb250YWluZXI7CisKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHRWxlbWVudD4gbV90YXJnZXRFbGVtZW50OworICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1f
Y2FjaGVkRHVyOworICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0RHVyOwor
ICAgICAgICBtdXRhYmxlIFNNSUxUaW1lIG1fY2FjaGVkUmVwZWF0Q291bnQ7CisgICAgICAgIG11
dGFibGUgU01JTFRpbWUgbV9jYWNoZWRNaW47CisgICAgICAgIG11dGFibGUgU01JTFRpbWUgbV9j
YWNoZWRNYXg7CisgICAgICAgIAorICAgICAgICBmcmllbmQgY2xhc3MgQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lcjsKKyAgICB9OworCit9CisKKyNlbmRpZgorI2VuZGlmCisK
</data>
<flag name="review"
          id="8911"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>