<?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>230295</bug_id>
          
          <creation_ts>2021-09-14 21:31:32 -0700</creation_ts>
          <short_desc>Move scrollbar-related code out of ScrollAnimator and into ScrollbarsController</short_desc>
          <delta_ts>2021-09-17 21:26:18 -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>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230371</dependson>
    
    <dependson>230372</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793588</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-14 21:31:32 -0700</bug_when>
    <thetext>Move scrollbar-related code out of ScrollAnimator and into ScrollbarsController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793589</commentid>
    <comment_count>1</comment_count>
      <attachid>438210</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-14 21:34:35 -0700</bug_when>
    <thetext>Created attachment 438210
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793597</commentid>
    <comment_count>2</comment_count>
      <attachid>438215</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-14 22:55:21 -0700</bug_when>
    <thetext>Created attachment 438215
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793606</commentid>
    <comment_count>3</comment_count>
      <attachid>438215</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-09-15 00:09:06 -0700</bug_when>
    <thetext>Comment on attachment 438215
Patch

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

Best make it build.

&gt; Source/WebCore/Sources.txt:1821
&gt; +platform/ScrollbarsController.cpp

I am vaguely surprised about the plural.

&gt; Source/WebCore/platform/mac/ScrollbarsControllerMac.mm:197
&gt; +    RetainPtr&lt;NSTimer&gt; _timer;

Cocoa timer instead of ours is kind of surprising, though I suppose not a problem and not new?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793750</commentid>
    <comment_count>4</comment_count>
      <attachid>438258</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 10:36:57 -0700</bug_when>
    <thetext>Created attachment 438258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793755</commentid>
    <comment_count>5</comment_count>
      <attachid>438259</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 10:56:06 -0700</bug_when>
    <thetext>Created attachment 438259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793960</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 22:55:17 -0700</bug_when>
    <thetext>The WK1 test failure are about the timing of the call to intgernals.setUsesMockScrollAnimator() vs creation of ScrollAnimator. The test has different results on first and second runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794729</commentid>
    <comment_count>7</comment_count>
      <attachid>438542</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-17 19:28:53 -0700</bug_when>
    <thetext>Created attachment 438542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794732</commentid>
    <comment_count>8</comment_count>
      <attachid>438543</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-17 19:37:20 -0700</bug_when>
    <thetext>Created attachment 438543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794735</commentid>
    <comment_count>9</comment_count>
      <attachid>438545</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-17 20:15:22 -0700</bug_when>
    <thetext>Created attachment 438545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794740</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-17 21:25:01 -0700</bug_when>
    <thetext>Committed r282720 (241857@main): &lt;https://commits.webkit.org/241857@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438545.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794741</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-17 21:26:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/83265293&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438210</attachid>
            <date>2021-09-14 21:34:35 -0700</date>
            <delta_ts>2021-09-14 22:55:19 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-230295-20210914213434.patch</filename>
            <type>text/plain</type>
            <size>177002</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc2NGE4OWQ1ZjVhNjQ5
ZWQ1NTIyOGY2YzkxZWEyMWMyM2ZmY2M1ZS4uYTI5OGYxNzUyNTVjNTUxNzc2MzYxYmRjNDAxMGFh
NTdkMzFkZDcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBcyB0aGUgZmlyc3Qgc3RlcCB0byBjbGVhbmluZyB1cCBTY3JvbGxBbmltYXRvci9TY3Jv
bGxDb250cm9sbGVyLCBtb3ZlIHNjcm9sbGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mCisgICAgICAg
IFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIGEgbmV3IFNjcm9sbGJhcnNDb250cm9sbGVyIGNsYXNz
LCB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIHN1YmNsYXNzZXMuCisgICAgICAgIFRoaXMgbWFrZXMg
aXQgbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBTY3Jv
bGxBbmltYXRvci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQ
RS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1Jlc2l6ZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxFbmRMaXZlUmVzaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6ZGlkQWRk
SG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYXZlU2Nyb2xs
ZWRTaW5jZVBhZ2VMb2FkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
OjpzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp3aGVlbEV2ZW50VGVzdE1vbml0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJl
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0
ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlSXNE
b3duSW5TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OndpbGxTdGFydExpdmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRBcmVhRGlkU2hvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRIaWRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0
YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aW52
YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Omhvcml6b250YWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Omhvcml6b250YWxT
Y3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhcnNDb250cm9sbGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OndpbGxTdGFydExpdmVSZXNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OndpbGxFbmRMaXZlUmVzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYVdpbGxQYWlu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFbnRlcmVk
Q29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYURpZFNo
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVh
RGlkSGlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpyZXNuYXBBZnRlckxheW91dCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0
b3JJT1MuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9sbGJhcnNDb250
cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpzY3JvbGxhYmxlQXJl
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bm90aWZ5
UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9s
bGVyOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OmRpZEVuZFNjcm9sbEdlc3R1cmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFX
aWxsUGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUV4aXRlZFNj
cm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6
bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudHNTaXplQ2hhbmdlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNvbnRlbnRBcmVhRGlkU2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRI
aWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0Nv
bnRyb2xsZXI6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
cjo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpob3Jp
em9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmlt
YXRvckdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
ZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJz
T3BhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplYXNlT3V0Q3ViaWMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvckdlbmVyaWM6OnNob3dPdmVybGF5U2Nyb2xsYmFycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmhpZGVPdmVybGF5U2Nyb2xs
YmFycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJp
Yzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Omxv
Y2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xs
QW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcklPUzo6U2Ny
b2xsQW5pbWF0b3JJT1MpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3Jv
bGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpT
Y3JvbGxBbmltYXRvck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNl
bEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRs
ZVdoZWVsRXZlbnRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxiYXJUaGVtZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Ny
b2xsYWJsZUFyZWE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRl
bGVnYXRlIGludmFsaWRhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQ
YWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbkxpdmVSZXNpemVGb3JT
Y3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxl
ckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0
Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0
eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOl0pOiBEZWxldGVkLgorICAgICAgICAo
b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5pbWF0ZTphbmltYXRlRnJvbTphbmltYXRl
VG86ZHVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmlt
YXRpb24gc3RhcnRBbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gc3RvcEFu
aW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGlu
aXRXaXRoU2Nyb2xsYmFyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgbGF5ZXJdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5T
Y3JvbGxlckZvclNjcm9sbGVySW1wOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3Rp
dmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFy
dDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJ
bXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlTdGF0ZVRyYW5zaXRp
b25XaXRoRHVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVs
ZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJ
bXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6On5TY3JvbGxBbmltYXRvck1hYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVz
dGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNj
cm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExp
dmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNj
cm9sbEdlc3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bG9ja092ZXJs
YXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpp
bnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVu
dEFyZWFTY3JvbGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNB
Y3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFy
ZWFTY3JvbGxlZFNvb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhcnNDb250cm9sbGVyTWFjLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6bWFjU2Ny
b2xsYmFyVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIp
OgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbGFi
bGVBcmVhOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbnZhbGlk
YXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGNvbnRlbnRBcmVh
UmVjdEZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWly
RGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNj
cm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUg
c2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRDb250ZW50UG9pbnQ6dG9TY3JvbGxlckltcDpdKToKKyAg
ICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENv
bnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAgICAgICAgKG9wZXJhdG9yPDwpOgorICAgICAg
ICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGluaXRXaXRoU2Nyb2xsYmFyOmZlYXR1cmVU
b0FuaW1hdGU6YW5pbWF0ZUZyb206YW5pbWF0ZVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2Vi
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXRFbmRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6XSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW52YWxpZGF0ZV0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldER1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbGJhcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdEZyb21CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDpdKToKKyAgICAgICAg
KC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvTGF5ZXI6XSk6CisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xs
ZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgZWZmZWN0aXZlQXBw
ZWFyYW5jZUZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVn
YXRlIHNldFVwQWxwaGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6YW5pbWF0ZUFscGhh
VG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xs
ZXJJbXA6YW5pbWF0ZUtub2JBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVUcmFja0FscGhhVG86ZHVyYXRpb246
XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0
ZVVJU3RhdGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1
cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1w
Om92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIGludmFsaWRhdGVdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y2FuY2VsQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2V0Vmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFbnRl
cmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsRW5kTGl2
ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29u
dGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bWF5QmVnaW5TY3Jv
bGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp1cGRhdGVTY3JvbGxl
clN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdGFy
dFNjcm9sbGJhclBhaW50VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmluaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRT
b29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29u
dGVudEFyZWFTY3JvbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndoZWVsRXZlbnRUZXN0
TW9uaXRvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1v
Y2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Nj
cm9sbEFuaW1hdG9yTW9jay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jayk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Ondp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2s6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrOjpzY3JvbGxiYXJQcmVmaXggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4
aXRlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmg6IEFkZGVkLgorCiAyMDIxLTA5LTEz
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBj
b21wdXRlZCBzdHlsZSBmb3IgdHJhbnNmb3JtLW9yaWdpbiBvbiBTVkcgYm94ZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMzhhN2QzNDc1MDVkOTQwYzNmMGUzNGQzZDY5NzMzODM0Mzc5Y2EyMi4uZGQ5MzRi
MDcyOWE4MjdlYzRjZjM5YjhiYjU5YTI2ZmM4YjE3ZWY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4
MTgsNiArMTgxOCw3IEBAIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAogcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAKIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFy
LmNwcAorcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZS5jcHAKIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogcGxhdGZv
cm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZS5jcHAKQEAgLTIwODYsNyArMjA4Nyw3IEBAIHBs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCiBwbGF0Zm9ybS9tb2NrL1Bs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENEYXRhQ2hh
bm5lbEhhbmRsZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENOb3RpZmllcnNNb2NrLmNwcAot
cGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suY3BwCitwbGF0Zm9ybS9tb2NrL1Njcm9s
bGJhcnNDb250cm9sbGVyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVNb2Nr
LmNwcAogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAogcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDJhZmQ0YzIzMjAxODUxY2NiY2YwZjczMzQ0MTY5ZmNjY2I4ZTA4Yjgu
LmRmMWVjZmEyNmEyYzA3YTZlNjJiNWE3NWI3YTVhZDIxOThiNWE4YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dApAQCAtNDkxLDYgKzQ5MSw3IEBAIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0
b3JNYWMubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01h
Yy5tbQorcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIEBuby11bmlmeQog
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWFj
L1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0KIHBsYXRmb3JtL21hYy9TdHJpbmdVdGls
aXRpZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggZTIyMmY2NmIxNTZhOGI3ZjI2YjVmOThk
NjZlOWQ3YWNjYTNkNGQwNi4uZGNkY2VlZjA4MTc4MjQzMDVkZjRlMGVlMGQ0YmNlMjc4ODkzMGI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTcyLDYgKzcyLDcgQEAgcGxhdGZvcm0vZ2FtZXBh
ZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcAogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01h
bmV0dGVHYW1lcGFkUHJvdmlkZXIuY3BwCiAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmNwcAorcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKaW5k
ZXggYjEwYzFlY2U1MjA3NWI3NTM1ZGE1MWMyY2MzMTZkYzkzNDNmZDA4MS4uYjRhZTVjOWIxZDcx
Y2UwMGNmYTIwNGE3M2Q2YmRmNjI1ZWI1NjAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKQEAgLTY1
LDYgKzY1LDcgQEAgcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCiBw
bGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKIAogcGxhdGZvcm0vZ2VuZXJpYy9TY3Jv
bGxBbmltYXRvckdlbmVyaWMuY3BwCitwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9s
bGVyR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDIxMzQ0ZWM4MjMwY2MzYjMz
ODE1MGQ3MzRkMDlhNGZhNzVjZjUxOS4uYmY0MzhlMGFjNjJlYjhkY2QyYTFlOWRiYWRkNTNmOGMw
NWY2Zjk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzgyLDYgKzM4Miw3IEBACiAJCTBGRUEzRTg4MTkxQjNCRDcwMDBGMUI1
NSAvKiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U4NjE5MUIzQkQ3MDAwRjFCNTUgLyog
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUFGNjZCMjNCRkMzOUUwMDQwMzBEQSAvKiBD
b2xvclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzEyMEMyMkJG
MkNEMjAwNEU5RDM1IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDMTIwOTIyQkYyQ0M3MDA0RTlE
MzUgLyogTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkVFMzcxMTI2RjE5NTI5MDAxQjUxODQgLyog
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjAyMjQ1MzI2RjE1RDc1MDAwMjY1QzMgLyogU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTBGRjNCOTI5MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RP
TVF1YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjNCOTI1MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RPTVF1YWQuaCAqLzsgfTsKIAkJMEZGM0I5MkIx
RUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZEluaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjNCOTI3MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RP
TVF1YWRJbml0LmggKi87IH07CiAJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxl
TWVkaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjUwMjY4MTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEuaCAqLzsgfTsKQEAgLTIwMTYs
NyArMjAxNyw3IEBACiAJCTVDOUMyREI1MjI0MUE2N0IwMDk5NkIwQiAvKiBDb250ZW50UnVsZUxp
c3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzlDMkRCMzIyNDFBNjczMDA5OTZCMEIgLyogQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDOUVGMkYz
MjFGMDYxOTAwMDNCREM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjJGMjIxRjA2MTcxMDAzQkRD
NTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQTFERUM2MUY3MUYxQzcwMEU3MUJEMyAvKiBIVFRQ
SGVhZGVyRmllbGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDQTFERUM0MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1Q0IzN0ZGRjFDNjJE
MkExMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Ny
b2xsQW5pbWF0b3JNb2NrLmggKi87IH07CisJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBT
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2suaCAqLzsgfTsKIAkJNUNCQzhEQUQxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlh
QWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmls
aXR5U29mdExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0JENTk1OTIyODBFOTI2MDAyQjIyQUEgLyogQ3VzdG9tSGVhZGVyRmllbGRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNUQyMzg2
MjI3QTA3N0MwMDBCOUJEQSAvKiBDdXN0b21IZWFkZXJGaWVsZHMuY3BwICovOyB9OwogCQk1Q0M3
OTAwRTI2NkFGQTg5MDA2OTI0RkUgLyogVGltaW5nQWxsb3dPcmlnaW4uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzc5MDBCMjY2QUZBODgwMDY5MjRG
RSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC02MTU0LDYgKzYxNTUsMTAgQEAKIAkJMEM0NTM0MjYxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQ
b3B1cE1lbnVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMx
QkM1Q0NENzAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlYXJjaFBvcHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MDIyNDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMDIyNDUyMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjAyMjQ1MzI2RjE1RDc1MDAwMjY1QzMgLyogU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0NTQyNkYxNUQ3
NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
OTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NzMsOCArOTc3OCw4IEBACiAJ
CTVDOUVGMkYyMjFGMDYxNzEwMDNCREM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURFQzIxRjcxRTY4NjAwRTcxQkQzIC8q
IEhUVFBIZWFkZXJGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVFRQSGVhZGVyRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0Ex
REVDNDFGNzFFNjg3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUVFBIZWFkZXJGaWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9y
TW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQjM3RkZEMUM2MkQyNzgw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDQjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNCMzdGRkQxQzYy
RDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNj
ZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNv
ZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJp
bGl0eVNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQzc5MDBCMjY2
QUZBODgwMDY5MjRGRSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaW1pbmdBbGxvd09yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjE2NjgsOCArMjE2NzMsOCBAQAogCQkJCTA3Mzc5NEY0MTlGNTg2NEUwMEU1QTA0
NSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJNb2NrLmggKi8sCiAJCQkJMDczNzk0RjcxOUY1ODY0
RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suY3BwICovLAogCQkJCTA3Mzc5NEY4MTlGNTg2
NEUwMEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmggKi8sCi0JCQkJNUNCMzdGRkMxQzYyRDI3
ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5jcHAgKi8sCi0JCQkJNUNCMzdGRkQxQzYy
RDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oICovLAorCQkJCTVDQjM3RkZDMUM2
MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suY3BwICovLAorCQkJCTVD
QjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCAqLywK
IAkJCQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAq
LywKIAkJCQkwRkU3MTQwNDE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmgg
Ki8sCiAJCQkJMkQ3RUQwQTkxQkFFOTkxNzAwNDNCM0U1IC8qIFRpbWVyRXZlbnRCYXNlZE1vY2su
aCAqLywKQEAgLTIyMDI3LDYgKzIyMDMyLDggQEAKIAkJCQkwMDgxRkVGRTE2QjBBMkI2MDA4QUFB
N0EgLyogUHVibGljU3VmZml4TWFjLm1tICovLAogCQkJCUJDQUUxRkE1MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovLAogCQkJCUJDNTExNTZEMTJCMTc0OUMwMEM5Njc1
NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAqLywKKwkJCQkwRjAyMjQ1NDI2RjE1RDc1MDAwMjY1
QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaCAqLywKKwkJCQkwRjAyMjQ1MzI2RjE1RDc1
MDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJQkM4Qjg1M0Mw
RTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8sCiAJCQkJQkNFRjg2OUUw
RTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovLAogCQkJCTVCMUUwRTQz
MjVEMTYyOUIwMDI3MjI4MSAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovLApAQCAtMjc5ODQsNiAr
Mjc5OTEsOCBAQAogCQkJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRv
ci5oICovLAogCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICov
LAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKKwkJCQkw
RjAyMjQ1MDI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwICovLAor
CQkJCTBGMDIyNDUyMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5oICov
LAogCQkJCTBGRTcxNDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8s
CiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJ
CQkJQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNw
cCAqLywKQEAgLTM0NzQxLDggKzM0NzUwLDggQEAKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNF
NTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc3NDgwMTM3OEI3
NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNB
RTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3RjU2
MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTQwMjhC
MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDRDOTkxODYwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2MzI4LDYgKzM2MzM3LDcgQEAKIAkJCQk0MTkyNDI0OTIxMjdC
OTNFMDA2MzRGQ0YgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1QzJCMUFFQzIyMzk3RUJDMDBCOTFDRjcgLyogUmVzb3VyY2VSZXNwb25z
ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1MTE1NkUxMkIxNzQ5QzAwQzk2NzU0IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFRTM3MTEyNkYxOTUy
OTAwMUI1MTg0IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNFRjg2OUYwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDNCODVFRDQxOENCRUM1MjAwRTMxQUY0IC8qIFNlbGVjdG9yUHNldWRv
Q2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
NkFBMEY5RTE4RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcAppbmRleCA5YWM0MTlmMzAxMTBjZTVjYjEwZjNhYjQyZWIzYjBlMzFmMjJjYmNjLi44MGUw
MTE5OTc0MmRmNGRkZDE3YzBlMTI5NzI5Mzc1ZDRmZDE0YjNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNzMsMjIgKzM3Myw3IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3I6OmNhbmNlbEFuaW1hdGlvbnMoKQogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgbV9zY3JvbGxBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3I6Ondp
bGxFbmRMaXZlUmVzaXplKCkKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKQordm9pZCBTY3JvbGxBbmltYXRvcjo6Y29udGVudHNTaXplQ2hh
bmdlZCgpIGNvbnN0CiB7CiAgICAgbV9zY3JvbGxBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCBh
NGYzOWQ1NjFjNjM5NTFmNTMxMjllZmNlZjU0MjUwZTE1OWEyYmFmLi5jMmRmN2Q4YTk2MTFlZjhm
OTFlZjc0MzZhOGI2Y2M1YThkMTIyN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKQEAgLTU2LDcgKzU2LDYgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgOiBwcml2
YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOwogCi0gICAg
ZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpOwogCiAgICAgZW51bSBTY3JvbGxCZWhhdmlvciB7CkBAIC03OSw2ICs3
OCwxMSBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CiAKKyAgICB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoKSBjb25zdDsKKworICAgIGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsgfQorICAgIHZvaWQg
c2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChib29sIGhhdmVTY3JvbGxlZCkgeyBtX2hhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBoYXZlU2Nyb2xsZWQ7IH0KKwogICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCiAgICAgS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQpA
QCAtOTYsNDQgKzEwMCwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5p
bWF0aW9ucygpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91
c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExp
dmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsgfQotCi0gICAgdmlydHVhbCB2
b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSB7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5
ZXJzKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEpOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5nIGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBl
bXB0eVN0cmluZygpOyB9Ci0KICAgICB2b2lkIHNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihSZWZQ
dHI8V2hlZWxFdmVudFRlc3RNb25pdG9yPiYmIHRlc3RNb25pdG9yKSB7IG1fd2hlZWxFdmVudFRl
c3RNb25pdG9yID0gdGVzdE1vbml0b3I7IH0KKyAgICBXaGVlbEV2ZW50VGVzdE1vbml0b3IqIHdo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RNb25p
dG9yLmdldCgpOyB9CiAKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBw
aW5nSWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxl
Y3Rpb25NZXRob2QpOwogICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZO
ZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQsIFNjcm9s
bFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CkBAIC0xNjYsNiArMTM4LDggQEAgcHVibGljOgog
I2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxh
YmxlQXJlYSYpOworCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvck9mZnNldCgpOwogCkBAIC0xNzgsNiArMTUyLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9s
bENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJv
bGxlckFuaW1hdGlvblRpbWVyOwogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247Cisg
ICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgeyBmYWxzZSB9OwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zY3JvbGxBbmltYXRpb247CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApp
bmRleCA5NjdlMTMyNmFiZTViMzAwYTcyNzZiNDRlYjk4NGIxNzlhYjQzNTViLi4wZTEwYWI2MjNl
MTc1MGU0YjIwMDM3ZWZhOGU5YjIwYmIwNDY4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUwLDcgKzUwLDcgQEAgc3RydWN0IFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICBib29sIHdlYWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRo
cmVhZDsKICNlbmRpZgotICAgIHZvaWQqIHBvaW50ZXJbMl07CisgICAgdm9pZCogcG9pbnRlclsz
XTsKICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CiB9
OwpAQCAtNzQsMTcgKzc0LDI1IEBAIFNjcm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKSA9
IGRlZmF1bHQ7CiAKIFNjcm9sbEFuaW1hdG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0
b3IoKSBjb25zdAogewotICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikgeworICAgIGlmICghbV9z
Y3JvbGxBbmltYXRvcikKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSk7CisKKyAgICByZXR1
cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyJiBT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIGlmICgh
bV9zY3JvbGxiYXJzQ29udHJvbGxlcikgeworICAgICAgICAvLyBOb3RlIHRoYXQgdXNlc01vY2tT
Y3JvbGxBbmltYXRvciBpcyBhIG1pc25vbWVyLgogICAgICAgICBpZiAodXNlc01vY2tTY3JvbGxB
bmltYXRvcigpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gbWFrZVVuaXF1ZTxT
Y3JvbGxBbmltYXRvck1vY2s+KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyksIFt0
aGlzXShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIgPSBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTW9jaz4oY29uc3RfY2Fz
dDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
ewogICAgICAgICAgICAgICAgIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UobWVzc2FnZSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Njcm9sbEFu
aW1hdG9yID0gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVh
Jj4oKnRoaXMpKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBTY3JvbGxi
YXJzQ29udHJvbGxlcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykp
OwogICAgIH0KIAotICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKLSAgICByZXR1cm4gKm1f
c2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgcmV0dXJuICptX3Njcm9sbGJhcnNDb250cm9sbGVy
LmdldCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3Qg
SW50UG9pbnQmIG9yaWdpbikKQEAgLTIwMSw3ICsyMDksNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQog
ICAgIH0KIAogICAgIGlmIChzY3JvbGxQb3NpdGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRp
b24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Ny
b2xsR2VzdHVyZVN0YXRlPikKQEAgLTI0Myw4OSArMjUxLDgzIEBAIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OndpbGxTdGFydExpdmVSZXNpemUoKQogICAgIGlmIChtX2luTGl2ZVJlc2l6ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1faW5MaXZlUmVzaXplID0gdHJ1ZTsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOworICAgIHNjcm9sbGJhcnND
b250cm9sbGVyKCkud2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFtX2luTGl2ZVJlc2l6ZSkKICAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9pbkxpdmVSZXNpemUgPSBmYWxzZTsKLSAgICBpZiAoU2Ny
b2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQot
ICAgICAgICBzY3JvbGxBbmltYXRvci0+d2lsbEVuZExpdmVSZXNpemUoKTsKLX0gICAgCisKKyAg
ICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7Cit9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0
b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBz
Y3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewotICAgIGlmIChT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAg
ICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJl
ZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIHNj
cm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3Io
KS5tb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgbW91c2VJc0Rvd24pOworICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIG1v
dXNlSXNEb3duKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFy
ZWFEaWRTaG93KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZFNo
b3coKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFEaWRI
aWRlKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZEhpZGUoKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlk
ZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9j
a1N0YXRlKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihzaG91bGRMb2NrU3RhdGUpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkuZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudHNTaXplQ2hhbmdlZCgpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMzQsMjEgKzMzNiwyMSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkud2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCkKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29u
dGVudHNSZXNpemVkKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT5jb250ZW50c1Jlc2l6ZWQoKTsgLy8gVGhpcyBmbGFzaGVzIG92ZXJsYXkgc2Nyb2xsYmFy
cy4KKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsgLy8gVGhpcyBmbGFzaGVz
IG92ZXJsYXkgc2Nyb2xsYmFycy4KIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMzc0LDE0ICszNzYsMTIgQEAgdm9pZCBTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMoKQogewogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZhbGlkYXRlU2Nyb2xsYmFy
UGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZh
bGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJz
Q29udHJvbGxlcigpLmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAg
ICAgfQogfQogCkBAIC00MjIsMTIgKzQyMiwxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQog
ewotICAgIHNjcm9sbEFuaW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKQEAgLTQ1OSwxMiArNDU5LDEyIEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKIAogU3RyaW5nIFNjcm9sbGFi
bGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCk7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVy
biBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCk7CiB9CiAKIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFy
ZWE6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CkBAIC01MTcsNyArNTE3LDcgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGU6IGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgPDwgIiBp
c1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKTsKIAot
ICAgIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KTsKICAgICBpZiAoIXNjcm9sbEFuaW1hdG9yIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggZmQzOTYzMzM4MGI5NDdhMjA1MGE3
Yjg2ODBjNTc5OTBmNmQ3NWNiNi4uOGY5ZWU4YmUwOTY3MGRhOWNmOTA0YWZlZjFjMzE4NjVhM2Y1
ZDBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC00NSw2
ICs0NSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKK2NsYXNzIFNj
cm9sbGJhcnNDb250cm9sbGVyOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFj
a2luZzsKIApAQCAtMTcyLDEyICsxNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9s
bEFuaW1hdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxs
IGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3Jv
bGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQW5pbWF0b3IuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbGJhcnNDb250
cm9sbGVyJiBzY3JvbGxiYXJzQ29udHJvbGxlcigpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwpAQCAtMzc4LDYgKzM3
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSA9IDA7CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gbV9zY3JvbGxiYXJzQ29udHJvbGxlcjsKIAogICAgIC8vIFRo
ZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVj
dGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwog
ICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2Rl
LiBUaGUgY29tYmluYXRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CmluZGV4IDk2NjU3NzA3ZGNlZjgwZWRiMTJmOTcwZGJjYWVlZWYxZTU0ODczMWYuLmYwYWQyMmE5
MGQ5NjJhNTYzNTA2MGVlNDUwYTRmOTZlMTA0YjBiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBz
aG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyh0aGlzKTsK
IH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
Mzk1ZDYxMDM3MTQwMmIzOWJkNzdlNDZiODdkYmNjYjY0ZmIxMzg0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShX
UEUpCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IFNjcm9sbGJhcnNDb250
cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyPihzY3JvbGxhYmxlQXJlYSk7Cit9
CisjZW5kaWYKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9sbGJhcnNDb250cm9sbGVyKFNj
cm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Ny
b2xsYWJsZUFyZWEpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MTZk
NGRkYjVkZjhjNGJmOWIxOTFhNDVlZmZiNTY4MDUwODUyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oCkBAIC0wLDAgKzEs
OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxi
YXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXIpOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IGNyZWF0ZShTY3JvbGxhYmxl
QXJlYSYpOworCisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXIoU2Nyb2xsYWJsZUFy
ZWEmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKyAg
ICAKKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbGFibGVBcmVhOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkKGNvbnN0IEZsb2F0U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRp
b25zKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29u
c3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdCB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgbWF5QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVk
SW5Db250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxi
YXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Ny
b2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93
bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGxv
Y2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5
ZXJzKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEpOyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBo
b3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlT
dHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCitwcml2YXRlOgorICAg
IFNjcm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3Jv
bGxBbmltYXRvckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9T
Y3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCmluZGV4IDg5MDg0MmRjNjYzZjYzOTk1NzJmODkzMTQ1
ODljYjI3MjczZDliODIuLjY3NzM5YzhhMjVlZmE3N2ZiZjQ3MjQ2ZjRkYWZjZGE5YWQ4ZTQ4ZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bEFuaW1hdG9yR2VuZXJpYy5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmwKIAogU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmltYXRvckdlbmVyaWMoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xs
YWJsZUFyZWEpCi0gICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywg
JlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmly
ZWQpCiB7CiAgICAgbV9raW5ldGljQW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRp
b25LaW5ldGljPigKICAgICAgICAgW3RoaXNdKCkgLT4gU2Nyb2xsRXh0ZW50cyB7CkBAIC05Nywx
OTYgKzk2LDUgQEAgdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZVBvc2l0aW9uKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JP
ZmZzZXQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1hdG9yOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotCi0gICAgaWYgKCFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MTsKLSAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9s
bGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7Ci0g
ICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXIgPSBudWxscHRyOwotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9s
bGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9ob3Jpem9udGFsT3Zlcmxh
eVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MDsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxi
YXJzT3BhY2l0eSgpCi17Ci0gICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYmIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXItPm9wYWNpdHkoKSkgewotICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAg
aWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkK
LSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
LT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0
T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAgaWYg
KG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQot
ICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwot
ICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQot
ewotICAgIGRvdWJsZSBwID0gdCAtIDE7Ci0gICAgcmV0dXJuIHAgKiBwICogcCArIDE7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNb25vdG9uaWNU
aW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgZG91YmxlIHByb2dy
ZXNzID0gMTsKLSAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25FbmRUaW1lKQotICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52
YWx1ZSgpOwotICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNl
ICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7Ci0gICAgaWYgKHBy
b2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKLSAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOwotICAgICAgICB1
cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
LSAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9t
czsKLSAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUg
LSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVy
dmFsKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KGRlbHRhVG9OZXh0RnJhbWUpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlT3ZlcmxheVNj
cm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNob3dPdmVybGF5
U2Nyb2xsYmFycygpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5p
c0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgp
OwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsK
LSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwotICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92
ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5l
cmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIg
JiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9IDA7
Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyBvdmVy
Zmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSAr
IG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dTY3JvbGxiYXJz
QW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQot
ewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
R2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgaGlkZU92ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpCi17Ci0gICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQotewotICAgIHNob3dP
dmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6Y29u
dGVudEFyZWFEaWRIaWRlKCkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0
b3AoKTsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgewotICAg
ICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKLSAgICAgICAgdXBk
YXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
KQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxk
TG9ja1N0YXRlKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3Vs
ZExvY2tTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2Nr
ZWQgPSBzaG91bGRMb2NrU3RhdGU7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3Jv
bGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgewotICAgICAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJh
ci0+c2V0T3BhY2l0eSgwKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
KQotICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPT0gMSkKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAg
ICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKaW5kZXggZTA0
NmM1MzFiYjg0YzJhY2ZmNWU4OTQ2NTU2ZGRjMTEyNWM5OGFmMy4uMmQ2YWQ5OWM2MTMxNTFjZDU1
YWVlOTkyNGJkN2JiYTZmMWVlMDNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC00NCw0MCArNDQsMTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR2VuZXJpYygpOwogCiBwcml2
YXRlOgotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYsIFNjcm9sbENsYW1waW5nKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQg
d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZv
aWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIGZpbmFsOwogCisgICAgYm9vbCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRl
UG9zaXRpb24oRmxvYXRQb2ludCYmKTsKIAotICAgIHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotICAg
IHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVPdmVybGF5U2Ny
b2xsYmFyc09wYWNpdHkoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25L
aW5ldGljPiBtX2tpbmV0aWNBbmltYXRpb247Ci0gICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJz
TG9ja2VkIHsgZmFsc2UgfTsKLSAgICBUaW1lciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25U
aW1lcjsKLSAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9
OwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07Ci0g
ICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07Ci0gICAg
TW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWU7Ci0gICAg
TW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
U2Nyb2xsQW5pbWF0b3JJT1MuaAppbmRleCBmMGY4ODMzNmZiYmQ3ZGZjNGI1ZDE5YmI0NGI3OWY1
NzMwZGE3NTAxLi44YjgxZjkwNGY2ZTI1ZmZhMWEwZGYyMjZlMWZhZTRmYTUxYTMxZGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaApAQCAt
NTUsMTYgKzU1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIEF4aXNMYXRjaEhvcml6b250YWwsCiAg
ICAgICAgIEF4aXNMYXRjaFZlcnRpY2FsCiAgICAgfTsKLSAgICBBeGlzTGF0Y2ggbV90b3VjaFNj
cm9sbEF4aXNMYXRjaDsKLSAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlOwotICAgIGJvb2wgbV9j
b21taXR0ZWRUb1Njcm9sbEF4aXM7Ci0gICAgYm9vbCBtX3N0YXJ0ZWRTY3JvbGw7CisgICAgQXhp
c0xhdGNoIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggeyBBeGlzTGF0Y2hOb3RDb21wdXRlZCB9Owor
ICAgIGJvb2wgbV9pblRvdWNoU2VxdWVuY2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jb21taXR0
ZWRUb1Njcm9sbEF4aXMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdGFydGVkU2Nyb2xsIHsgZmFs
c2UgfTsKICAgICBJbnRQb2ludCBtX2ZpcnN0VG91Y2hQb2ludDsKICAgICBJbnRQb2ludCBtX2xh
c3RUb3VjaFBvaW50OwogCiAgICAgLy8gV2hlbiB3ZSdyZSBpbiBhIHRvdWNoIHNlcXVlbmNlLCB0
aGlzIHdpbGwgcG9pbnQgdG8gdGhlIHNjcm9sbGFibGUgYXJlYSB0aGF0CiAgICAgLy8gc2hvdWxk
IGFjdHVhbGx5IGJlIHNjcm9sbGVkIGR1cmluZyB0aGUgc2VxdWVuY2UuCi0gICAgU2Nyb2xsYWJs
ZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlOworICAgIFNjcm9sbGFibGVB
cmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSB7IG51bGxwdHIgfTsKICNlbmRp
ZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFu
aW1hdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9y
SU9TLm1tCmluZGV4IGNiNGZiNzg4NGM4NDA2MzUzN2U3NTAyYzYyM2M0NGJlYjM2Y2E3ZjcuLmQ5
NzZlNGVhNGNmOWYwZDA4NmJlOWFlMzBhNzZlNTU4YThhOWM2MzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KQEAgLTQ1LDEzICs0NSw2
IEBAIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsCiAKIFNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxB
bmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwg
bV90b3VjaFNjcm9sbEF4aXNMYXRjaChBeGlzTGF0Y2hOb3RDb21wdXRlZCkKLSAgICAsIG1faW5U
b3VjaFNlcXVlbmNlKGZhbHNlKQotICAgICwgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMoZmFsc2Up
Ci0gICAgLCBtX3N0YXJ0ZWRTY3JvbGwoZmFsc2UpCi0gICAgLCBtX3Njcm9sbGFibGVBcmVhRm9y
VG91Y2hTZXF1ZW5jZSgwKQotI2VuZGlmCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggNGE1ZTNmMmUyZjk2ZDZlNTU4Y2Zh
M2ZkYjFhNzI5ZWNlY2I1YjQ0Yy4uNWI1YmE1M2FkYjQ4MmUxYWY1MzJjYzZlMDlkYWUxYzM4ZDUy
YTJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmgKQEAgLTI4LDExOSArMjgsNDcgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5H
KQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiBPQkpDX0NMQVNTIFdlYlNj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwotT0JKQ19DTEFTUyBXZWJTY3JvbGxlckltcFBh
aXJEZWxlZ2F0ZTsKLU9CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKLQotdHlwZWRl
ZiBpZCBTY3JvbGxlckltcFBhaXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Ny
b2xsYmFyOwogCi1jbGFzcyBTY3JvbGxBbmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRv
ciB7CitjbGFzcyBTY3JvbGxBbmltYXRvck1hYyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRv
ciB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmKTsKICAg
ICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1hYygpOwogCiAgICAgdm9pZCBpbW1lZGlhdGVTY3Jv
bGxUb1Bvc2l0aW9uRm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0
aW9uKTsKLSAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVy
biBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xs
ZXJTdHlsZSgpOwotCi0gICAgYm9vbCBzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25z
dDsKLSAgICB2b2lkIHN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFNj
cm9sbGJhclBhaW50VGltZXIoKTsKLQotICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkg
Y29uc3QgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlcjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7Ci0KLSAgICBSZXRhaW5QdHI8U2Ny
b2xsZXJJbXBQYWlyPiBtX3Njcm9sbGVySW1wUGFpcjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xs
ZXJJbXBQYWlyRGVsZWdhdGU+IG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7Ci0gICAgUmV0YWlu
UHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdh
dGU7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1fdmVydGljYWxTY3Jv
bGxlckltcERlbGVnYXRlOwotCi0gICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZp
cmVkKCk7Ci0gICAgVGltZXIgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLQotICAgIHZv
aWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKCk7Ci0gICAgVGltZXIgbV9zZW5k
Q29udGVudEFyZWFTY3JvbGxlZFRpbWVyOwotICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRBcmVhU2Ny
b2xsZWRUaW1lclNjcm9sbERlbHRhOwotCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBP
cHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+KSBvdmVycmlkZTsKLSAgICBib29sIHNjcm9sbFRvUG9z
aXRpb25XaXRoQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICBib29s
IHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBvdmVycmlkZTsK
KyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4p
IGZpbmFsOworICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYpIGZpbmFsOworICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpIGZpbmFsOwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAg
IGJvb2wgc2hvdWxkRm9yd2FyZFdoZWVsRXZlbnRzVG9QYXJlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JikgY29uc3Q7Ci0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UpIG92ZXJyaWRlOworICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBmaW5hbDsKIAot
ICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsQW5p
bWF0aW9ucygpIGZpbmFsOwogICAgIAotICAgIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNv
bnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFXaWxs
UGFpbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVh
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29udGVudHNSZXNpemVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRW5kTGl2ZVJl
c2l6ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEJl
Z2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgp
IGNvbnN0OwotICAgIHZvaWQgbWF5QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0
ZSkgZmluYWw7Ci0KLSAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJh
ciopIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNj
cm9sbGJhciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExh
eWVycyhTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdmVydGljYWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHNob3VsZFNjcm9sbGJhclBhcnRp
Y2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwot
Ci0gICAgLy8gc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKCkgd2lsbCBkbyB0aGUgc2FtZSB3
b3JrIHRoYXQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoKSBkb2VzIGV4Y2VwdAotICAgIC8vIGl0
IGRvZXMgaXQgYWZ0ZXIgYSB6ZXJvLWRlbGF5IHRpbWVyIGZpcmVzLiBUaGlzIHdpbGwgcHJldmVu
dCB1cyBmcm9tIHVwZGF0aW5nIG92ZXJsYXkgc2Nyb2xsYmFyIAotICAgIC8vIGluZm9ybWF0aW9u
IGR1cmluZyBsYXlvdXQuCi0gICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBG
bG9hdFNpemUmIHNjcm9sbERlbHRhKTsKLSAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVk
U29vbihjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsKKyAgICB2b2lkIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBmaW5hbDsKIAogICAgIEZsb2F0UG9p
bnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CiAKLSAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlz
VXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdCBmaW5hbDsKIAotICAgIFN0cmluZyBob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVG
b3JUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0gICAgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3Rh
dGVGb3JUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50
Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBi
b29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKSBmaW5hbDsKIAogICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGllbnQuCiAjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQpAQCAtMTU3LDkgKzg1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
anVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpIGZpbmFsOwogI2VuZGlmCiAK
LSAgICBib29sIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKLSAgICBib29sIG1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlOwotICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3Q7CisgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKKyAgICBSZXRh
aW5QdHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggMTdhOTFi
NTNmOTU2MzFhZTAxOGFjMWJhYTYxMWY3ZDY3MmJmMjJjYi4uOTZmOGI0NDgwMjAwODcyNTE5M2U4
NWI2NjA5YzJhNjhmZWZlMTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtMzEsNDYgKzMxLDIwIEBACiAjaW1wb3J0ICJHcmFk
aWVudC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiTlNTY3JvbGxlckltcERldGFpbHMuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgogI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEu
aCIKLSNpbXBvcnQgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW1wb3J0ICJTY3JvbGxiYXJUaGVtZU1h
Yy5oIgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTY3JvbGxlckltcFNQSS5oPgorI2ltcG9ydCAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25z
Lmg+CiAjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2Nyb2xsYmFyVGhlbWVNYWMq
IG1hY1Njcm9sbGJhclRoZW1lKCkKLXsKLSAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhl
bWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICByZXR1cm4gIXNjcm9sbGJhclRoZW1l
LmlzTW9ja1RoZW1lKCkgPyBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxi
YXJUaGVtZSkgOiBudWxscHRyOwotfQotCi1zdGF0aWMgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIFNjcm9s
bGJhclRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE7CiB1c2lu
ZyBXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzsKIHVzaW5nIFdlYkNvcmU6OlNjcm9sbGJhcjsK
LXVzaW5nIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOwogdXNpbmcgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjsKIHVzaW5nIFdlYkNvcmU6OlZlcnRpY2FsU2Nyb2xsYmFyOwotdXNpbmcgV2ViQ29y
ZTo6bWFjU2Nyb2xsYmFyVGhlbWU7CiB1c2luZyBXZWJDb3JlOjpJbnRSZWN0OwotdXNpbmcgV2Vi
Q29yZTo6VGh1bWJQYXJ0OwotdXNpbmcgV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjsKLQotI2lmICFMT0dfRElTQUJMRUQKLXVzaW5nIFdlYkNvcmU6OkxvZ092ZXJsYXlTY3JvbGxi
YXJzOwotI2VuZGlmCiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBl
ckRldGFpbHMpCiAtIChpZClpbml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKQEAgLTE3Niw1
MjIgKzE1MCw2IEBAIC0gKHZvaWQpX3JlY3Vyc2l2ZVJlY29tcHV0ZVRvb2xUaXBzCiAKIEBlbmQK
IAotQGludGVyZmFjZSBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1Nj
cm9sbGVySW1wUGFpckRlbGVnYXRlPgotewotICAgIFNjcm9sbGFibGVBcmVhKiBfc2Nyb2xsYWJs
ZUFyZWE7Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihTY3JvbGxhYmxlQXJlYSop
c2Nyb2xsYWJsZUFyZWE7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlckltcFBh
aXJEZWxlZ2F0ZQotCi0tIChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihTY3JvbGxhYmxlQXJl
YSopc2Nyb2xsYWJsZUFyZWEKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfc2Nyb2xsYWJsZUFyZWEgPSBz
Y3JvbGxhYmxlQXJlYTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRl
Ci17Ci0gICAgX3Njcm9sbGFibGVBcmVhID0gMDsKLX0KLQotLSAoTlNSZWN0KWNvbnRlbnRBcmVh
UmVjdEZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBh
aXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3Jv
bGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0KLSAgICBXZWJDb3JlOjpJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCk7Ci0g
ICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRz
U2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLS0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQ
YWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNFRF9Q
QVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAgICAg
ICByZXR1cm4gTk87Ci0KLSAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5pbkxpdmVSZXNpemUo
KTsKLX0KLQotLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVy
SW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAg
ICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgLy8gSXQncyBPSyB0aGF0IHRoaXMgcG9z
aXRpb24gaXNuJ3QgcmVsYXRpdmUgdG8gdGhpcyBzY3JvbGxlciAod2hpY2ggbWlnaHQgYmUgYW4g
b3ZlcmZsb3cgc2Nyb2xsZXIpLgotICAgIC8vIEFwcEtpdCBqdXN0IHRha2VzIHRoZSByZXN1bHQg
YW5kIHBhc3NlcyBpdCBiYWNrIHRvIC1zY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2lu
dDp0b1Njcm9sbGVySW1wOi4KLSAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5sYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCk7Ci19Ci0KLS0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihO
U1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihO
U1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICop
c2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLQotICAg
IGlmICghX3Njcm9sbGFibGVBcmVhIHx8ICFzY3JvbGxlckltcCkKLSAgICAgICAgcmV0dXJuIE5T
WmVyb1BvaW50OwotCi0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOwotICAg
IGlmIChbc2Nyb2xsZXJJbXAgaXNIb3Jpem9udGFsXSkKLSAgICAgICAgc2Nyb2xsYmFyID0gX3Nj
cm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
c2Nyb2xsYmFyID0gX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAg
Ly8gSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQg
aXMgcG9zc2libGUgZm9yIHRoaXMgZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVk
IGJldHdlZW4gdGhlIG1vbWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFu
ZCB0aGUKLSAgICAvLyBtb21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQu
IFdlIHNob3VsZCBwcm9iYWJseSBkZS1jb3VwbGUgc29tZQotICAgIC8vIG9mIHRoZSBjbGVhbi11
cCB3b3JrIGluIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZv
aWQgdGhpcwotICAgIC8vIGlzc3VlLgotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1
cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpOwotCi0gICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVy
dEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9pbnRJbkNvbnRl
bnRBcmVhKSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFp
ciAqKXNjcm9sbGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNS
ZWN0KXJlY3QKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBVTlVT
RURfUEFSQU0ocmVjdCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKFtzY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5p
bWF0b3IoKS5jb250ZW50QXJlYVdpbGxQYWludCgpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1w
UGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJT
dHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZQotewotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3
UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlXTsKLQotICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1h
dG9yTWFjJj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpKS51cGRhdGVTY3JvbGxl
clN0eWxlKCk7Ci19Ci0KLUBlbmQKLQotZW51bSBGZWF0dXJlVG9BbmltYXRlIHsKLSAgICBUaHVt
YkFscGhhLAotICAgIFRyYWNrQWxwaGEsCi0gICAgVUlTdGF0ZVRyYW5zaXRpb24sCi0gICAgRXhw
YW5zaW9uVHJhbnNpdGlvbgotfTsKLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBGZWF0dXJlVG9BbmltYXRlIGZlYXR1cmUp
Ci17Ci0gICAgc3dpdGNoIChmZWF0dXJlKSB7Ci0gICAgY2FzZSBUaHVtYkFscGhhOiB0cyA8PCAi
VGh1bWJBbHBoYSIgOyBicmVhazsKLSAgICBjYXNlIFRyYWNrQWxwaGE6IHRzIDw8ICJUcmFja0Fs
cGhhIiA7IGJyZWFrOwotICAgIGNhc2UgVUlTdGF0ZVRyYW5zaXRpb246IHRzIDw8ICJVSVN0YXRl
VHJhbnNpdGlvbiIgOyBicmVhazsKLSAgICBjYXNlIEV4cGFuc2lvblRyYW5zaXRpb246IHRzIDw8
ICJFeHBhbnNpb25UcmFuc2l0aW9uIiA7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19
Ci0jZW5kaWYKLQotQGludGVyZmFjZSBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIDogTlNPYmpl
Y3QKLXsKLSAgICBTY3JvbGxiYXIqIF9zY3JvbGxiYXI7Ci0gICAgUmV0YWluUHRyPE5TU2Nyb2xs
ZXJJbXA+IF9zY3JvbGxlckltcDsKLSAgICBGZWF0dXJlVG9BbmltYXRlIF9mZWF0dXJlVG9Bbmlt
YXRlOwotICAgIENHRmxvYXQgX3N0YXJ0VmFsdWU7Ci0gICAgQ0dGbG9hdCBfZW5kVmFsdWU7Ci0g
ICAgTlNUaW1lSW50ZXJ2YWwgX2R1cmF0aW9uOwotICAgIFJldGFpblB0cjxOU1RpbWVyPiBfdGlt
ZXI7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZT4gX3N0YXJ0RGF0ZTsKLSAgICBSZWZQdHI8Q3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbj4gX3RpbWluZ0Z1bmN0aW9uOwotfQotLSAoaWQpaW5pdFdpdGhT
Y3JvbGxiYXI6KFNjcm9sbGJhciopc2Nyb2xsYmFyIGZlYXR1cmVUb0FuaW1hdGU6KEZlYXR1cmVU
b0FuaW1hdGUpZmVhdHVyZVRvQW5pbWF0ZSBhbmltYXRlRnJvbTooQ0dGbG9hdClzdGFydFZhbHVl
IGFuaW1hdGVUbzooQ0dGbG9hdCllbmRWYWx1ZSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVy
YXRpb247Ci0tICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyOwotLSAo
dm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247Ci0tICh2b2lkKXN0b3BB
bmltYXRpb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0
dXJlVG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZy
b206KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBjb25zdCBOU1RpbWVJ
bnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSAwLjAxOwotICAgIF90aW1lciA9IGFkb3B0TlMoW1tOU1Rp
bWVyIGFsbG9jXSBpbml0V2l0aEZpcmVEYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxT
aW5jZU5vdzowXSBpbnRlcnZhbDp0aW1lSW50ZXJ2YWwgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHNldEN1cnJlbnRQcm9ncmVzczopIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10pOwot
ICAgIF9kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIF90aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNl
SW5PdXQpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0g
PDwgIkNyZWF0aW5nIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gZm9yICIgPDwgZmVhdHVyZVRv
QW5pbWF0ZSA8PCAiIGZyb20gIiA8PCBzdGFydFZhbHVlIDw8ICIgdG8gIiA8PCBlbmRWYWx1ZSk7
Ci0KLSAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIF9mZWF0dXJlVG9BbmltYXRlID0g
ZmVhdHVyZVRvQW5pbWF0ZTsKLSAgICBfc3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7Ci0gICAgX2Vu
ZFZhbHVlID0gZW5kVmFsdWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzdGFy
dEFuaW1hdGlvbgotewotICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKLQotICAgIF9zY3JvbGxlcklt
cCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRB
bmltYXRpb24gIiA8PCBzZWxmIDw8ICJzdGFydEFuaW1hdGlvbl0gZm9yICIgPDwgX2ZlYXR1cmVU
b0FuaW1hdGUpOwotCi0gICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGFkZFRpbWVyOl90aW1l
ci5nZXQoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAgICBfc3RhcnREYXRlID0g
YWRvcHROUyhbW05TRGF0ZSBhbGxvY10gaW5pdFdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXSk7
Ci19Ci0KLS0gKHZvaWQpc2V0U3RhcnRWYWx1ZTooQ0dGbG9hdClzdGFydFZhbHVlCi17Ci0gICAg
X3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOwotfQotCi0tICh2b2lkKXNldEVuZFZhbHVlOihDR0Zs
b2F0KWVuZFZhbHVlCi17Ci0gICAgX2VuZFZhbHVlID0gZW5kVmFsdWU7Ci19Ci0KLS0gKHZvaWQp
c2V0Q3VycmVudFByb2dyZXNzOihOU1RpbWVyICopdGltZXIKLXsKLSAgICBDR0Zsb2F0IHByb2dy
ZXNzID0gMDsKLSAgICBOU0RhdGUgKm5vdyA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxT
aW5jZU5vdzowXTsKLSAgICBOU1RpbWVJbnRlcnZhbCBlbGFwc2VkID0gW25vdyB0aW1lSW50ZXJ2
YWxTaW5jZURhdGU6X3N0YXJ0RGF0ZS5nZXQoKV07Ci0gICAgaWYgKGVsYXBzZWQgPiBfZHVyYXRp
b24pIHsKLSAgICAgICAgcHJvZ3Jlc3MgPSAxOwotICAgICAgICBbdGltZXIgaW52YWxpZGF0ZV07
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNUaW1lSW50ZXJ2YWwgdCA9IDE7Ci0gICAgICAgIGlm
IChfZHVyYXRpb24pCi0gICAgICAgICAgICB0ID0gZWxhcHNlZCAvIF9kdXJhdGlvbjsKLSAgICAg
ICAgcHJvZ3Jlc3MgPSBfdGltaW5nRnVuY3Rpb24tPnRyYW5zZm9ybVRpbWUodCwgX2R1cmF0aW9u
KTsKLSAgICB9Ci0gICAgQVNTRVJUKF9zY3JvbGxiYXIpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIi1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biAiIDw8IHNlbGYgPDwgInNldEN1cnJlbnRQcm9ncmVzczoiIDw8IHByb2dyZXNzIDw8Il0gZm9y
ICIgPDwgX2ZlYXR1cmVUb0FuaW1hdGUpOwotCi0gICAgQ0dGbG9hdCBjdXJyZW50VmFsdWU7Ci0g
ICAgaWYgKF9zdGFydFZhbHVlID4gX2VuZFZhbHVlKQotICAgICAgICBjdXJyZW50VmFsdWUgPSAx
IC0gcHJvZ3Jlc3M7Ci0gICAgZWxzZQotICAgICAgICBjdXJyZW50VmFsdWUgPSBwcm9ncmVzczsK
LQotICAgIHN3aXRjaCAoX2ZlYXR1cmVUb0FuaW1hdGUpIHsKLSAgICBjYXNlIFRodW1iQWxwaGE6
Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOmN1cnJlbnRWYWx1ZV07Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tBbHBoYToKLSAgICAgICAgW19zY3JvbGxlckltcCBz
ZXRUcmFja0FscGhhOmN1cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVUlT
dGF0ZVRyYW5zaXRpb246Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VWlTdGF0ZVRyYW5zaXRp
b25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cGFu
c2lvblRyYW5zaXRpb246Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNp
dGlvblByb2dyZXNzOmN1cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmICghX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQotICAg
ICAgICBfc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQot
ewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFtzZWxmIHN0b3BBbmltYXRp
b25dOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBfc2Nyb2xsYmFyID0gMDsK
LX0KLQotLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAg
ICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKLX0KLQotLSAodm9pZClzdG9wQW5pbWF0aW9uCi17Ci0g
ICAgW190aW1lciBpbnZhbGlkYXRlXTsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlNjcm9s
bGVySW1wRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRlbGVnYXRlLCBOU1Njcm9sbGVy
SW1wRGVsZWdhdGU+Ci17Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwotCi0g
ICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9rbm9iQWxwaGFBbmltYXRp
b247Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF90cmFja0FscGhh
QW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdWlT
dGF0ZVRyYW5zaXRpb25BbmltYXRpb247Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRB
bmltYXRpb24+IF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uOwotfQotLSAoaWQpaW5pdFdp
dGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyOwotLSAodm9pZCljYW5j
ZWxBbmltYXRpb25zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZQotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3Jv
bGxiYXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXTsKLSAgICBbX3RyYWNrQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW191
aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2V4cGFuc2lv
blRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwotfQotCi0tIChOYWtlZFB0cjxTY3JvbGxBbmltYXRvck1hYz4pc2Nyb2xsQW5p
bWF0b3IKLXsKLSAgICByZXR1cm4gJnN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Nj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigpKTsKLX0KLQotLSAoTlNS
ZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJl
Y3Q7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QK
LXsKLSAgICByZXR1cm4gYVJlY3Q7Ci19Ci0KLS0gKENBTGF5ZXIgKilsYXllcgotewotICAgIGlm
ICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlmICghU2Nyb2xsYmFy
VGhlbWVNYWM6OmlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcigpKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXI7Ci0gICAgaWYgKF9zY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIGxheWVyID0gX3Njcm9s
bGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAg
ZWxzZQotICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0KLSAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXll
ciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlv
bkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17
Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAg
ICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZv
clNjcm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0gICAgYXV0byBwb3NpdGlvbkluVmlldyA9IF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygp
OwotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBvc2l0
aW9uSW5WaWV3KTsKLX0KLQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJl
Y3QKLXsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAoQk9PTClzaG91bGRVc2VMYXllclBlclBh
cnRGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKLQotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25T
ZWNvbmRhcnlUaHJlYWQoKTsKLX0KLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0t
IChOU0FwcGVhcmFuY2UgKillZmZlY3RpdmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6KE5TU2Ny
b2xsZXJJbXAgKilzY3JvbGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7
Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0JFR0lOCi0gICAgICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1cnJlbnRBcHBlYXJh
bmNlXTsKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAv
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIuCi0g
ICAgLy8gVGhlIGJhc2Ugc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZGFyayBBcXVhLCBzbyB3ZSBt
aWdodCBnZXQgYSBudWxsIHJlc3VsdC4KLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlID0gX3Nj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS51c2VEYXJrQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMo
KTsKLSAgICBpZiAoYXV0byAqYXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5h
bWVkOnVzZURhcmtBcHBlYXJhbmNlID8gTlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhIDogTlNBcHBl
YXJhbmNlTmFtZUFxdWFdKQotICAgICAgICByZXR1cm4gYXBwZWFyYW5jZTsKLSAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1
cnJlbnRBcHBlYXJhbmNlXTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
LX0KLSNlbmRpZgotCi0tICh2b2lkKXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXZWJT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBh
aW50ZXI6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Ny
b2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3Jv
bGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUu
Ci0gICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCi0gICAgYm9vbCBtdXN0
QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9h
ZCgpOwotCi0gICAgaWYgKFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xsYmFyUGFpbnRUaW1l
cklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
X3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpICYmICFtdXN0QW5pbWF0ZSkgewotICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnN0
YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5pbWF0ZSBub3cs
IHNvIHN0b3AgdGhlIHRpbWVyLgotICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c3RvcFNjcm9s
bGJhclBhaW50VGltZXIoKTsKLQotICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5n
LCBzdG9wCi0gICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKLSAgICAgICAgW3Njcm9s
bGJhclBhcnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIHNjcm9sbGJhclBhcnRB
bmltYXRpb24gPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiBtYWNU
aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpCi0gICAgICAgIG1hY1RoZW1lLT5zZXRQYWludENo
YXJhY3RlcmlzdGljc0ZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7Ci0KLSAgICBpZiAocGFydCA9
PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewotICAgICAgICAg
ICAgSW50UmVjdCB0aHVtYlJlY3QgPSBJbnRSZWN0KFtzY3JvbGxlclBhaW50ZXIgcmVjdEZvclBh
cnQ6TlNTY3JvbGxlcktub2JdKTsKLSAgICAgICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+
c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHRodW1iUmVjdCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3QoSW50UmVjdCgpKTsKLSAgICB9Ci0KLSAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0g
YWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xs
YmFyOl9zY3JvbGxiYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpwYXJ0ID09IFRo
dW1iUGFydCA/IFRodW1iQWxwaGEgOiBUcmFja0FscGhhCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5p
bWF0ZUZyb206cGFydCA9PSBUaHVtYlBhcnQgPyBbc2Nyb2xsZXJQYWludGVyIGtub2JBbHBoYV0g
OiBbc2Nyb2xsZXJQYWludGVyIHRyYWNrQWxwaGFdCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRlVG86bmV3QWxwaGEgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25d
KTsKLSAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0g
KHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlS25v
YkFscGhhVG86KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFy
KSk7Ci0KLSAgICBOU1Njcm9sbGVySW1wICpzY3JvbGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlcklt
cCAqKXNjcm9sbGVySW1wOwotICAgIGlmICghW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zY3JvbGxi
YXJzQ2FuQmVBY3RpdmUoKSkgewotICAgICAgICBbc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOjBd
OwotICAgICAgICBfc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgZmFkaW5nIHRoZSBzY3JvbGxiYXIgYXdheSwgdGhhdCBp
cyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8KLSAgICAv
LyBiZSBtb3ZpbmcgaXQgYXJvdW5kIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBDYWxsaW5nIFtz
Y3JvbGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dCi0gICAgLy8gd2lsbCBw
YXNzIHRoYXQgaW5mb3JtYXRpb24gb24gdG8gdGhlIE5TU2Nyb2xsZXJJbXAgQVBJLgotICAgIGlm
IChuZXdLbm9iQWxwaGEgPT0gMCAmJiBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25k
YXJ5VGhyZWFkKCkpCi0gICAgICAgIFtzY3JvbGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9u
VmFsdWU6Tk9dOwotCi0gICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfa25vYkFscGhhQW5p
bWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVt
YlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0K
LQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1h
dGVUcmFja0FscGhhVG86KENHRmxvYXQpbmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Nj
cm9sbGJhcikpOwotCi0gICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Ny
b2xsZXJJbXAgKilzY3JvbGxlckltcDsKLSAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl90
cmFja0FscGhhQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpX
ZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRp
b246ZHVyYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICop
c2Nyb2xsZXJJbXAgYW5pbWF0ZVVJU3RhdGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpf
c2Nyb2xsYmFyKSk7Ci0KLSAgICAvLyBVSVN0YXRlVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMg
dG8gMS4gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBo
YXJkIHRyYW5zaXRpb24uCi0gICAgW3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJv
Z3Jlc3M6MSAtIFtzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07Ci0KLSAg
ICAvLyBJZiB0aGUgVUkgc3RhdGUgdHJhbnNpdGlvbiBpcyBoYXBwZW5pbmcsIHRoZW4gd2UgYXJl
IG5vIGxvbmdlciBtb3ZpbmcgdGhlIHNjcm9sbGJhciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4K
LSAgICBpZiAoX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQot
ICAgICAgICBbc2Nyb2xsZXJJbXAgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOwotCi0gICAg
aWYgKCFfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24pCi0gICAgICAgIF91aVN0YXRlVHJhbnNp
dGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9j
XSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCi0gICAgICAgICAgICBmZWF0dXJlVG9Bbmlt
YXRlOlVJU3RhdGVUcmFuc2l0aW9uCi0gICAgICAgICAgICBhbmltYXRlRnJvbTpbc2Nyb2xsZXJJ
bXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc10KLSAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAK
LSAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IElmIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0
IHRoZSB2YWx1ZXMgaW4gY2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4KLSAgICAgICAgW191aVN0YXRl
VHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOltzY3JvbGxlckltcCB1aVN0YXRlVHJh
bnNpdGlvblByb2dyZXNzXV07Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
c2V0RW5kVmFsdWU6MS4wXTsKLSAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBz
ZXREdXJhdGlvbjpkdXJhdGlvbl07Ci0gICAgfQotICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25Bbmlt
YXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9s
bGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JT
Y3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIC8vIEV4cGFuc2lvblRyYW5zaXRpb24gYWx3
YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRo
aXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgotICAgIFtzY3JvbGxlckltcCBzZXRFeHBhbnNp
b25UcmFuc2l0aW9uUHJvZ3Jlc3M6MSAtIFtzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9u
UHJvZ3Jlc3NdXTsKLQotICAgIGlmICghX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24pIHsK
LSAgICAgICAgX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgot
ICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpFeHBhbnNpb25UcmFuc2l0aW9uCi0gICAgICAg
ICAgICBhbmltYXRlRnJvbTpbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNz
XQotICAgICAgICAgICAgYW5pbWF0ZVRvOjEuMAotICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRp
b25dKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRp
YWxpemUgdGhlIGFuaW1hdGlvbiwganVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBo
YXZlIGNoYW5nZWQuCi0gICAgICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRT
dGFydFZhbHVlOltzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07Ci0gICAg
ICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOwotICAg
ICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25d
OwotICAgIH0KLSAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc3RhcnRBbmltYXRp
b25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJ
bXAgb3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86KE5TT3ZlcmxheVNjcm9sbGVyU3RhdGUp
bmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXAp
OwotICAgIFVOVVNFRF9QQVJBTShuZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Ci19Ci0KLS0gKHZv
aWQpaW52YWxpZGF0ZQotewotICAgIF9zY3JvbGxiYXIgPSAwOwotICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwotICAgIFtfa25vYkFscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOwotICAg
IFtfdHJhY2tBbHBoYUFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX3VpU3RhdGVUcmFuc2l0
aW9uQW5pbWF0aW9uIGludmFsaWRhdGVdOwotICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1h
dGlvbiBpbnZhbGlkYXRlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLUBl
bmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0
b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
KQpAQCAtNzAxLDMwICsxNTksMTMgQEAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBT
Y3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmwKIAogU2Nyb2xs
QW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotICAgICwgbV9pbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQotICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxl
ZFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVk
VGltZXJGaXJlZCkKLSAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkKLSAg
ICAsIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKGZhbHNlKQogewogICAgIG1fc2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwogICAgIG1fc2Ny
b2xsQW5pbWF0aW9uSGVscGVyID0gYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3Jv
bGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CiAKLSAgICBtX3Njcm9sbGVySW1wUGFpckRlbGVn
YXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxlQXJlYV0pOwotICAgIG1fc2Nyb2xsZXJJbXBQYWly
ID0gYWRvcHROUyhbW05TU2Nyb2xsZXJJbXBQYWlyIGFsbG9jXSBpbml0XSk7Ci0gICAgW21fc2Ny
b2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUuZ2V0KCld
OwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOlNjcm9sbGVyU3R5bGU6
OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JNYWM6On5T
Y3JvbGxBbmltYXRvck1hYygpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgW21fc2Nyb2xs
ZXJJbXBQYWlyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRl
IGludmFsaWRhdGVdOwotICAgIFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGludmFs
aWRhdGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KK1Njcm9sbEFuaW1hdG9y
TWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMoKSA9IGRlZmF1bHQ7CiAKIHN0YXRpYyBib29sIHNjcm9s
bEFuaW1hdGlvbkVuYWJsZWRGb3JTeXN0ZW0oKQogewpAQCAtNzUzLDcgKzE5NCw3IEBAIHN0YXRp
YyBib29sIHJ1YmJlckJhbmRpbmdFbmFibGVkRm9yU3lzdGVtKCkKIAogYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgT3B0
aW9uU2V0PFNjcm9sbEJlaGF2aW9yPiBiZWhhdmlvcikKIHsKLSAgICBtX2hhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgPSB0cnVlOworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQodHJ1
ZSk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBkb2Vzbid0IGRvIGRpcmVjdGlvbmFsIHNuYXBwaW5n
LCBidXQgb3VyIGJhc2UgY2xhc3MgZG9lcy4gSXQgd2lsbCBjYWxsIGludG8KICAgICAvLyBTY3Jv
bGxBbmltYXRvck1hYzo6c2Nyb2xsIGFnYWluIHdpdGggdGhlIHNuYXBwZWQgcG9zaXRpb25zIGFu
ZCBTY3JvbGxCZWhhdmlvcjo6RGVmYXVsdC4KQEAgLTg0MCw0MyArMjgxLDYgQEAgYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fc2Nyb2xsQ29udHJvbGxlci5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CiB9CiAKLXN0YXRp
YyBTdHJpbmcgc2Nyb2xsYmFyU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYg
KCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiAibm9uZSJfczsKLQotICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmQoc2Nyb2xsYmFyLT5lbmFibGVkKCkgPyAiZW5h
YmxlZCJfcyA6ICJkaXNhYmxlZCJfcyk7Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQotICAgIE5T
U2Nyb2xsZXJJbXAgKnNjcm9sbGVySW1wID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9s
bGJhcik7Ci0gICAgaWYgKCFzY3JvbGxlckltcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwotCi0gICAgaWYgKHNjcm9sbGVySW1wLmV4cGFuZGVkKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCIsZXhwYW5kZWQiX3MpOwotCi0gICAgaWYgKHNjcm9sbGVySW1wLnRyYWNrQWxwaGEg
PiAwKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90cmFjayJfcyk7Ci0KLSAgICBp
ZiAoc2Nyb2xsZXJJbXAua25vYkFscGhhID4gMCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZp
c2libGVfdGh1bWIiX3MpOwotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1T
dHJpbmcgU2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3Rp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShtX3Njcm9sbGFibGVBcmVh
Lmhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLVN0cmluZyBTY3JvbGxBbmltYXRvck1hYzo6
dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBz
Y3JvbGxiYXJTdGF0ZShtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQot
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUb1Bvc2l0aW9uRm9yU2Ny
b2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIEFTU0VS
VChtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcik7CkBAIC04ODUsMzE3ICsyODksMTUgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1h
dGlvbihjb25zdCBGbG9hdFAKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9zaXRp
b25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiB7Ci0gICAgbm90aWZ5Q29udGVudEFy
ZWFTY3JvbGxlZChkZWx0YSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJv
bGxlcigpLm5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CiAgICAgU2Nyb2xsQW5pbWF0b3I6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFttX3Njcm9sbGVy
SW1wUGFpciBjb250ZW50QXJlYVdpbGxEcmF3XTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKQotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3Ry
ZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAi
XSBtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIg
b3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtt
X3Njcm9sbGVySW1wUGFpciBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQotewotICAgIExPR19XSVRI
X1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBm
b3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhIik7
Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2Vk
XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRXhpdGVk
Q29udGVudEFyZWFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBz
dHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8
ICJdIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIik7Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFp
ciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
W21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAotewotICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFy
cyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KLSAgICBpZiAoU2Nyb2xsZXJTdHls
ZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3Jv
bGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoTlNTY3JvbGxl
ckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQotICAg
ICAgICBbcGFpbnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25z
dAotewotICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFycyBuZWVkcyB0
byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KLSAgICBpZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoTlNTY3JvbGxlckltcCAqcGFp
bnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQotICAgICAgICBbcGFp
bnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBtb3VzZUlz
RG93bikgY29uc3QKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoTlNTY3JvbGxlcklt
cCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKSB7Ci0gICAg
ICAgIFtwYWludGVyIHNldFRyYWNraW5nOm1vdXNlSXNEb3duXTsKLSAgICAgICAgaWYgKG1vdXNl
SXNEb3duKQotICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVy
ZV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRTY3Jv
bGxHZXN0dXJlXTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFy
dExpdmVSZXNpemUoKQotewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1w
UGFpciBzdGFydExpdmVSZXNpemVdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250
ZW50c1Jlc2l6ZWQoKSBjb25zdAotewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9s
bGVySW1wUGFpciBjb250ZW50QXJlYURpZFJlc2l6ZV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWly
IG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBb
bV9zY3JvbGxlckltcFBhaXIgZW5kTGl2ZVJlc2l6ZV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpCi17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFp
ciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
W21fc2Nyb2xsZXJJbXBQYWlyIHdpbmRvd09yZGVyZWRJbl07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCi17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIHdpbmRvd09yZGVyZWRPdXRdOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAotewotICAgIExPR19X
SVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1h
YyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRCZWdpblNjcm9sbEdlc3R1cmUi
KTsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNj
cm9sbEdlc3R1cmVdOwotCi0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAgICAg
ICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2Fz
dDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyks
IFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKLXsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5p
bWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gZGlkRW5kU2Nyb2xsR2Vz
dHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVu
ZFNjcm9sbEdlc3R1cmVdOwotCi0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAg
ICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+cmVtb3ZlRGVmZXJyYWxGb3JSZWFzb24ocmVp
bnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRp
Zmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jl
c3MpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptYXlCZWdpblNjcm9sbEdlc3R1cmUo
KSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFt
IDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBt
YXlCZWdpblNjcm9sbEdlc3R1cmUiKTsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zl
cmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Nj
cm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVdOwotICAgIFttX3Njcm9sbGVySW1wUGFp
ciBjb250ZW50QXJlYVNjcm9sbGVkXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bG9j
a092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKQotewot
ICAgIGlmIChzaG91bGRMb2NrU3RhdGUpCi0gICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBsb2Nr
T3ZlcmxheVNjcm9sbGVyU3RhdGU6TlNPdmVybGF5U2Nyb2xsZXJTdGF0ZUhpZGRlbl07Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIFttX3Njcm9sbGVySW1wUGFpciB1bmxvY2tPdmVybGF5U2Nyb2xsZXJT
dGF0ZV07Ci0KLSAgICAgICAgLy8gV2UgbmV2ZXIgdXBkYXRlIHNjcm9sbGVyIHN0eWxlIGZvciBQ
YWludGVyQ29udHJvbGxlcnMgdGhhdCBhcmUgbG9ja2VkLiBJZiB3ZSBoYXZlIGEgcGVuZGluZwot
ICAgICAgICAvLyBuZWVkIHRvIHVwZGF0ZSB0aGUgc3R5bGUsIGRvIGl0IG9uY2Ugd2UndmUgdW5s
b2NrZWQgdGhlIHNjcm9sbGVyIHN0YXRlLgotICAgICAgICBpZiAobV9uZWVkc1Njcm9sbGVyU3R5
bGVVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0gICAgfQotfQot
Ci1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiAhW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVy
ID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1fdmVydGljYWxTY3JvbGxlckltcERl
bGVnYXRlKTsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJd
KTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxlckltcERlbGVn
YXRlLmdldCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBbcGFp
bnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKLQotICAgIFttX3Njcm9sbGVy
SW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxh
YmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6
MV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVy
ID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVs
ZWdhdGUpOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsK
LSAgICBtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFp
bnRlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNh
bFNjcm9sbGVySW1wOm5pbF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3JvbGxl
ckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAg
IGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2hvcml6b250
YWxTY3JvbGxlckltcERlbGVnYXRlKTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVn
YXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Ny
b2xsYmFyOnNjcm9sbGJhcl0pOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9ob3Jpem9u
dGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKQotICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigp
XTsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFp
bnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCi0gICAgICAg
IFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIFttX2hvcml6b250YWxTY3Jv
bGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1w
RGVsZWdhdGUgPSBudWxscHRyOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAg
ICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3Jv
bGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBbcGFpbnRlciBzZXROZWVkc0Rp
c3BsYXk6WUVTXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxi
YXJMYXllckRpZENoYW5nZSgpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9s
bGFibGVBcmVhLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBpZiAo
IXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRl
ciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXll
ci0+cGxhdGZvcm1MYXllcigpIDogbmlsXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKLXsKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7
Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxi
YXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3BhaW50ZXIg
c2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsXTsKLX0KLQotYm9v
bCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgotICAgIGlmIChTY3Jv
bGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVP
dmVybGF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgcGFydGljaXBhdGUgaW4gaGl0IHRlc3Rpbmcgd2hlbmV2ZXIgdGhleSBhcmUgYXQg
YWxsIHZpc2libGUuCi0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9y
U2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBbcGFpbnRlciBrbm9iQWxwaGFdID4gMDsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNp
emUmIGRlbHRhKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWdl
IGlzIGdvaW5nIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgYnV0IHRoZSBwYWdlCi0gICAg
Ly8gaXNuJ3QgcmVhbGx5IHNjcm9sbGluZyBpbiB0aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBh
c3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlCi0gICAgLy8gU2Nyb2xsZXJJbXBQYWlyIHdoZW4gd2Un
cmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBhY3RpdmUgcGFnZS4KLSAgICBpZiAoW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpKQotICAg
ICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChkZWx0YSk7Ci0gICAgZWxzZQotICAgICAgICBz
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oZGVsdGEpOwotfQotCiB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKIHsKICAgICBTY3JvbGxBbmltYXRvcjo6Y2FuY2Vs
QW5pbWF0aW9ucygpOwotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IGZhbHNlOwot
Ci0gICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICBzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpOwotICAgIFttX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRl
IGNhbmNlbEFuaW1hdGlvbnNdOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBj
YW5jZWxBbmltYXRpb25zXTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKGZhbHNl
KTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkuY2FuY2VsQW5p
bWF0aW9ucygpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50
UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCkBAIC0xMjA0LDE1ICszMDYsMTUg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlIHBoYXNlKQogCiAgICAgLy8gVGhpcyBtYXkgbm90IGhhdmUgYmVlbiBz
ZXQgdG8gdHJ1ZSB5ZXQgaWYgdGhlIHdoZWVsIGV2ZW50IHdhcyBoYW5kbGVkIGJ5IHRoZSBTY3Jv
bGxpbmdUcmVlLAogICAgIC8vIFNvIHNldCBpdCB0byB0cnVlIGhlcmUuCi0gICAgbV9oYXZlU2Ny
b2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKHRydWUpOwogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZW5zdXJlIHdlIGdldCBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQuCiAgICAgaWYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlOjpCZWdhbikKLSAgICAgICAgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5kaWRCZWdpblNjcm9s
bEdlc3R1cmUoKTsKICAgICBlbHNlIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6RW5kZWQgfHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkK
LSAgICAgICAgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbGJhcnNDb250cm9sbGVyKCkuZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOwogICAgIGVsc2Ug
aWYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbikKLSAgICAgICAg
bWF5QmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
YmFyc0NvbnRyb2xsZXIoKS5tYXlCZWdpblNjcm9sbEdlc3R1cmUoKTsKIH0KIAogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKQEAgLTEyMjcsNyArMzI5LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
ck1hYzo6c2hvdWxkRm9yd2FyZFdoZWVsRXZlbnRzVG9QYXJlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW4KICAgICAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotICAgIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCA9IHRydWU7CisgICAgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCh0
cnVlKTsKIAogICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkg
fHwgIXJ1YmJlckJhbmRpbmdFbmFibGVkRm9yU3lzdGVtKCkpCiAgICAgICAgIHJldHVybiBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKQEAgLTEzNjgsMTI1ICs0
NzAsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmIGRlbHRhKQogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVw
ZGF0ZVNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pIHsKLSAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2Nyb2xsYmFyVGhl
bWVNYWMqIG1hY1RoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKTsKLSAgICBpZiAoIW1hY1RoZW1l
KSB7Ci0gICAgICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFsc2U7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbWFjVGhlbWUtPnVzZXNPdmVybGF5U2Nyb2xsYmFy
c0NoYW5nZWQoKTsKLQotICAgIE5TU2Nyb2xsZXJTdHlsZSBuZXdTdHlsZSA9IFttX3Njcm9sbGVy
SW1wUGFpciBzY3JvbGxlclN0eWxlXTsKLQotICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgTlNTY3JvbGxlcklt
cCAqb2xkVmVydGljYWxQYWludGVyID0gW21fc2Nyb2xsZXJJbXBQYWlyIHZlcnRpY2FsU2Nyb2xs
ZXJJbXBdOwotICAgICAgICBhdXRvIG5ld1ZlcnRpY2FsUGFpbnRlciA9IHJldGFpblB0cihbTlNT
Y3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZTooTlND
b250cm9sU2l6ZSl2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOk5P
IHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZFZlcnRpY2FsUGFpbnRlcl0pOwotCi0gICAgICAgIFtt
X3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5ld1ZlcnRpY2FsUGFpbnRl
ci5nZXQoKV07Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCp2
ZXJ0aWNhbFNjcm9sbGJhciwgV1RGTW92ZShuZXdWZXJ0aWNhbFBhaW50ZXIpKTsKLSAgICAgICAg
bWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9sbGVySW1wKCp2ZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAg
ICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRo
aWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNldCB0aGUgCi0gICAgICAgIC8vIGZyYW1lUmVjdCB0
byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRoZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUg
dGhlIHBvc2l0aW9uCi0gICAgICAgIC8vIGFuZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQu
Ci0gICAgICAgIGludCB0aGlja25lc3MgPSBtYWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZl
cnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgdmVydGljYWxTY3JvbGxi
YXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0g
ICAgfQotCi0gICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFi
bGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIGhvcml6b250YWxTY3Jv
bGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRIb3Jpem9u
dGFsUGFpbnRlciA9IFttX3Njcm9sbGVySW1wUGFpciBob3Jpem9udGFsU2Nyb2xsZXJJbXBdOwot
ICAgICAgICBhdXRvIG5ld0hvcml6b250YWxQYWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVy
SW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5ld1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xT
aXplKWhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDpZRVMgcmVw
bGFjaW5nU2Nyb2xsZXJJbXA6b2xkSG9yaXpvbnRhbFBhaW50ZXJdKTsKLQotICAgICAgICBbbV9z
Y3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5ld0hvcml6b250YWxQYWlu
dGVyLmdldCgpXTsKLSAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIo
Kmhvcml6b250YWxTY3JvbGxiYXIsIFdURk1vdmUobmV3SG9yaXpvbnRhbFBhaW50ZXIpKTsKLSAg
ICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9sbGVySW1wKCpob3Jpem9udGFsU2Nyb2xsYmFy
KTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZm
ZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKLSAgICAgICAgLy8gZnJh
bWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxs
IGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkg
dXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlj
a25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgICAgIGhvcml6
b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhp
Y2tuZXNzKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUg
aXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlLCBhbmQKLSAgICAvLyBhIHJlbGF5b3V0IHdpbGwgaGFwcGVuIG9uIGl0cyBvd24uIE90
aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxheW91dCBvdXJzZWx2ZXMuCi0gICAgc2Ny
b2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUgPT0gTlNTY3JvbGxl
clN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxlOjpPdmVybGF5IDogU2Nyb2xsYmFyU3R5bGU6
OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7Ci0KLSAgICBtX25l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKQotewotICAgIG1faW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXIuc3RhcnRPbmVTaG90KDEwMF9tcyk7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0
b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUoKTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQotewotICAgIG1faW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKCkKLXsKLSAgICAvLyBUbyBmb3JjZSB0
aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVy
d2lzZSwgdGhlIFNjcm9sbGVySW1wUGFpcgotICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNj
cm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOwotICAgIFttX3Njcm9sbGVySW1wUGFp
ciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250
ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQotewotICAgIG1fY29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSBkZWx0YTsKLQotICAgIGlmICghbV9z
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fc2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLQotICAgIGlmIChtX3do
ZWVsRXZlbnRUZXN0TW9uaXRvcikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPmRl
ZmVyRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3Jv
bGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRl
bnRTY3JvbGxJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZEluRGlyZWN0aW9uOk5TTWFrZVBvaW50KGRl
bHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpKV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgpCi17Ci0gICAgc2VuZENvbnRl
bnRBcmVhU2Nyb2xsZWQobV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7Ci0g
ICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwot
Ci0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAgICAgICBtX3doZWVsRXZlbnRU
ZXN0TW9uaXRvci0+cmVtb3ZlRGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVj
dCYgc2Nyb2xsZXJUaHVtYikKLXsKLSAgICBJbnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9
IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBt
X3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJlY3RJblZpZXdD
b29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhz
Y3JvbGxlclRodW1iKTsKLQotICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNp
YmxlU2Nyb2xsZXJUaHVtYlJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsYWJs
ZUFyZWEuc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7
Ci0gICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QgPSByZWN0SW5WaWV3Q29vcmRpbmF0ZXM7
Ci19Ci0KIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
U25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CiAgICAgcmV0dXJu
IG1fc2Nyb2xsQ29udHJvbGxlci5wcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAod2hlZWxF
dmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJz
Q29udHJvbGxlck1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZTVkMmY3MmExZTMyOWM0YWNlNDE1NzM0OTQ5
Njg1YjA4MTllZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBXZWJTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGU7CitPQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1wRGVsZWdhdGU7CisKK3R5cGVkZWYgaWQg
U2Nyb2xsZXJJbXBQYWlyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdoZWVsRXZl
bnRUZXN0TW9uaXRvcjsKKworY2xhc3MgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgOiBwdWJsaWMg
U2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJhcnNDb250cm9sbGVyTWFjKTsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYyhTY3JvbGxhYmxlQXJlYSYpOwor
ICAgIH5TY3JvbGxiYXJzQ29udHJvbGxlck1hYygpOworCisgICAgdm9pZCBub3RpZnlQb3NpdGlv
bkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmluYWw7IC8vIEZJWE1FOiBVc2Ugbm90
aWZ5Q29udGVudEFyZWFTY3JvbGxlZAorICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIGZpbmFs
OworCisgICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1heUJlZ2lu
U2Nyb2xsR2VzdHVyZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjb250ZW50QXJlYVdpbGxQ
YWludCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBm
aW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lk
IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlSXNEb3duSW5T
Y3JvbGxiYXIoU2Nyb2xsYmFyKiwgYm9vbCkgY29uc3QgZmluYWw7CisgICAgdm9pZCB3aWxsU3Rh
cnRMaXZlUmVzaXplKCkgZmluYWw7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIGZpbmFsOworICAgIHZvaWQg
Y29udGVudEFyZWFEaWRTaG93KCkgZmluYWw7CisgICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUo
KSBmaW5hbDsKKworICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJv
b2wgc2hvdWxkTG9ja1N0YXRlKSBmaW5hbDsKKyAgICBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2
ZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgZmluYWw7CisgICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqKSBmaW5hbDsKKworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMo
U2Nyb2xsYmFyKikgZmluYWw7CisKKyAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZSgpIGZpbmFsOworCisgICAgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZyhTY3JvbGxiYXIqKSBmaW5hbDsKKworICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3Jv
bGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBmaW5hbDsKKworICAgIFN0cmluZyBob3Jpem9u
dGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIHZl
cnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgZmluYWw7CisKKworICAgIC8v
IFB1YmxpYyB0byBiZSBjYWxsYWJsZSBmcm9tIE9iai1DLgorICAgIHZvaWQgdXBkYXRlU2Nyb2xs
ZXJTdHlsZSgpOworICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7
CisgICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICB2b2lkIHN0b3BTY3Jv
bGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
Y29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNv
bnN0OworCitwcml2YXRlOgorCisgICAgLy8gc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKCkg
d2lsbCBkbyB0aGUgc2FtZSB3b3JrIHRoYXQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoKSBkb2Vz
IGV4Y2VwdAorICAgIC8vIGl0IGRvZXMgaXQgYWZ0ZXIgYSB6ZXJvLWRlbGF5IHRpbWVyIGZpcmVz
LiBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHVwZGF0aW5nIG92ZXJsYXkgc2Nyb2xsYmFyCisg
ICAgLy8gaW5mb3JtYXRpb24gZHVyaW5nIGxheW91dC4KKyAgICB2b2lkIHNlbmRDb250ZW50QXJl
YVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpOworICAgIHZvaWQgc2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpOworCisg
ICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKCk7CisgICAgdm9pZCBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQoKTsKKworICAgIFdoZWVsRXZlbnRUZXN0TW9u
aXRvciogd2hlZWxFdmVudFRlc3RNb25pdG9yKCkgY29uc3Q7CisKKyAgICBUaW1lciBtX2luaXRp
YWxTY3JvbGxiYXJQYWludFRpbWVyOworICAgIFRpbWVyIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lcjsKKworICAgIFJldGFpblB0cjxTY3JvbGxlckltcFBhaXI+IG1fc2Nyb2xsZXJJbXBQ
YWlyOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4gbV9zY3JvbGxl
ckltcFBhaXJEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZT4g
bV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZT4gbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGU7CisKKyAgICBGbG9h
dFNpemUgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YTsKKyAgICBJbnRSZWN0
IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OworCisgICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJT
dHlsZVVwZGF0ZSB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJmYTg0NDgwNzMx
ODFhMDg1NWE5MTg1MjAxN2UyZDc0OWY3ZWEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbQpAQCAtMCwwICsx
LDEwOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAi
R3JhcGhpY3NMYXllci5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTlNTY3JvbGxl
ckltcERldGFpbHMuaCIKKyNpbXBvcnQgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW1wb3J0ICJTY3Jv
bGxhYmxlQXJlYS5oIgorI2ltcG9ydCAiU2Nyb2xsYmFyLmgiCisjaW1wb3J0ICJTY3JvbGxiYXJU
aGVtZU1hYy5oIgorI2ltcG9ydCAiVGltaW5nRnVuY3Rpb24uaCIKKyNpbXBvcnQgIldoZWVsRXZl
bnRUZXN0TW9uaXRvci5oIiAvLyBGSVhNRTogVGhpcyBpcyAgbGF5ZXJpbmcgdmlvbGF0aW9uLgor
CisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CisjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CisjaW1wb3J0
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFNjcm9sbGJhclRoZW1lTWFjKiBtYWNTY3JvbGxiYXJUaGVtZSgpCit7CisgICAgU2Nyb2xsYmFy
VGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgcmV0
dXJuICFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
VGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpIDogbnVsbHB0cjsKK30KKworc3RhdGljIE5TU2Ny
b2xsZXJJbXAgKnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQor
eworICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0BpbnRlcmZhY2UgV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgOiBOU09iamVjdCA8TlNTY3JvbGxlckltcFBhaXJEZWxlZ2F0
ZT4geworICAgIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBfc2Nyb2xsYWJsZUFyZWE7Cit9Cist
IChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopc2Ny
b2xsYWJsZUFyZWE7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6KFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhKilzY3JvbGxhYmxlQXJlYQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxhYmxl
QXJlYSA9IHNjcm9sbGFibGVBcmVhOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWlu
dmFsaWRhdGUKK3sKKyAgICBfc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworfQorCistIChOU1Jl
Y3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAq
KXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwor
ICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKwor
ICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplID0gX3Njcm9sbGFibGVBcmVhLT5jb250
ZW50c1NpemUoKTsKKyAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lk
dGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKTsKK30KKworLSAoQk9PTClpbkxpdmVSZXNpemVG
b3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCit7
CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBfc2Nyb2xsYWJsZUFyZWEt
PmluTGl2ZVJlc2l6ZSgpOworfQorCistIChOU1BvaW50KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRB
cmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFp
cgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICAvLyBJdCdzIE9L
IHRoYXQgdGhpcyBwb3NpdGlvbiBpc24ndCByZWxhdGl2ZSB0byB0aGlzIHNjcm9sbGVyICh3aGlj
aCBtaWdodCBiZSBhbiBvdmVyZmxvdyBzY3JvbGxlcikuCisgICAgLy8gQXBwS2l0IGp1c3QgdGFr
ZXMgdGhlIHJlc3VsdCBhbmQgcGFzc2VzIGl0IGJhY2sgdG8gLXNjcm9sbGVySW1wUGFpcjpjb252
ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6LgorICAgIHJldHVybiBfc2Nyb2xsYWJsZUFy
ZWEtPmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworLSAoTlNQb2ludClzY3Jv
bGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRD
b250ZW50UG9pbnQ6KE5TUG9pbnQpcG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KE5T
U2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlcklt
cFBhaXIpOworCisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEgfHwgIXNjcm9sbGVySW1wKQorICAg
ICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9s
bGJhciA9IDA7CisgICAgaWYgKFtzY3JvbGxlckltcCBpc0hvcml6b250YWxdKQorICAgICAgICBz
Y3JvbGxiYXIgPSBfc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBl
bHNlCisgICAgICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKTsKKworICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBo
ZXJlIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCisgICAgLy8gbWV0aG9k
IHRvIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVl
biBzZXQgdG8gMCBhbmQgdGhlCisgICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFz
IGJlZW4gY2FsbGVkLiBXZSBzaG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKKyAgICAvLyBv
ZiB0aGUgY2xlYW4tdXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9s
bGJhcigpIHRvIGF2b2lkIHRoaXMKKyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgQVNTRVJUKHNjcm9sbGVySW1wID09
IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKTsKKworICAgIHJldHVybiBzY3Jv
bGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6cm91bmRlZEludFBvaW50
KHBvaW50SW5Db250ZW50QXJlYSkpOworfQorCistICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNT
Y3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3Bs
YXlJblJlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFp
cik7CisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOworCisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3Jv
bGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBfc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbGJhcnNDb250cm9sbGVyKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKK30KKwor
LSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQ
YWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5T
U2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKK3sKKyAgICBpZiAoIV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3Njcm9sbGVySW1wUGFpciBz
ZXRTY3JvbGxlclN0eWxlOm5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07CisKKyAgICBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYyY+KF9zY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworfQorCitA
ZW5kCisKK2VudW0gRmVhdHVyZVRvQW5pbWF0ZSB7CisgICAgVGh1bWJBbHBoYSwKKyAgICBUcmFj
a0FscGhhLAorICAgIFVJU3RhdGVUcmFuc2l0aW9uLAorICAgIEV4cGFuc2lvblRyYW5zaXRpb24K
K307CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgRmVhdHVyZVRvQW5pbWF0ZSBmZWF0dXJlKQoreworICAgIHN3aXRjaCAo
ZmVhdHVyZSkgeworICAgIGNhc2UgVGh1bWJBbHBoYTogdHMgPDwgIlRodW1iQWxwaGEiIDsgYnJl
YWs7CisgICAgY2FzZSBUcmFja0FscGhhOiB0cyA8PCAiVHJhY2tBbHBoYSIgOyBicmVhazsKKyAg
ICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOiB0cyA8PCAiVUlTdGF0ZVRyYW5zaXRpb24iIDsgYnJl
YWs7CisgICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOiB0cyA8PCAiRXhwYW5zaW9uVHJhbnNp
dGlvbiIgOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCit1c2luZyBXZWJDb3Jl
OjpMb2dPdmVybGF5U2Nyb2xsYmFyczsKKworI2VuZGlmCisKK0BpbnRlcmZhY2UgV2ViU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiA6IE5TT2JqZWN0IHsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIF9z
Y3JvbGxiYXI7CisgICAgUmV0YWluUHRyPE5TU2Nyb2xsZXJJbXA+IF9zY3JvbGxlckltcDsKKyAg
ICBGZWF0dXJlVG9BbmltYXRlIF9mZWF0dXJlVG9BbmltYXRlOworICAgIENHRmxvYXQgX3N0YXJ0
VmFsdWU7CisgICAgQ0dGbG9hdCBfZW5kVmFsdWU7CisgICAgTlNUaW1lSW50ZXJ2YWwgX2R1cmF0
aW9uOworICAgIFJldGFpblB0cjxOU1RpbWVyPiBfdGltZXI7CisgICAgUmV0YWluUHRyPE5TRGF0
ZT4gX3N0YXJ0RGF0ZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbj4gX3RpbWluZ0Z1bmN0aW9uOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNv
cmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyIGZlYXR1cmVUb0FuaW1hdGU6KEZlYXR1cmVUb0FuaW1h
dGUpZmVhdHVyZVRvQW5pbWF0ZSBhbmltYXRlRnJvbTooQ0dGbG9hdClzdGFydFZhbHVlIGFuaW1h
dGVUbzooQ0dGbG9hdCllbmRWYWx1ZSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247
CistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyOworLSAodm9pZClz
ZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CistICh2b2lkKXN0b3BBbmltYXRp
b247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uCisK
Ky0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhciBm
ZWF0dXJlVG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0
ZUZyb206KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVy
YXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBjb25zdCBOU1Rp
bWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWwgPSAwLjAxOworICAgIF90aW1lciA9IGFkb3B0TlMoW1tO
U1RpbWVyIGFsbG9jXSBpbml0V2l0aEZpcmVEYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2
YWxTaW5jZU5vdzowXSBpbnRlcnZhbDp0aW1lSW50ZXJ2YWwgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKHNldEN1cnJlbnRQcm9ncmVzczopIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10p
OworICAgIF9kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIF90aW1pbmdGdW5jdGlvbiA9IFdlYkNv
cmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShXZWJDb3JlOjpDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uOjpFYXNlSW5PdXQpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJs
YXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIkNyZWF0aW5nIFdlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gZm9yICIgPDwgZmVhdHVyZVRvQW5pbWF0ZSA8PCAiIGZyb20gIiA8PCBzdGFydFZhbHVlIDw8
ICIgdG8gIiA8PCBlbmRWYWx1ZSk7CisKKyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAg
IF9mZWF0dXJlVG9BbmltYXRlID0gZmVhdHVyZVRvQW5pbWF0ZTsKKyAgICBfc3RhcnRWYWx1ZSA9
IHN0YXJ0VmFsdWU7CisgICAgX2VuZFZhbHVlID0gZW5kVmFsdWU7CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClzdGFydEFuaW1hdGlvbgoreworICAgIEFTU0VSVChfc2Nyb2xsYmFy
KTsKKworICAgIF9zY3JvbGxlckltcCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xs
YmFyKTsKKworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8
ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBzZWxmIDw8ICJzdGFydEFuaW1hdGlv
bl0gZm9yICIgPDwgX2ZlYXR1cmVUb0FuaW1hdGUpOworCisgICAgW1tOU1J1bkxvb3AgbWFpblJ1
bkxvb3BdIGFkZFRpbWVyOl90aW1lci5nZXQoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2Rl
XTsKKyAgICBfc3RhcnREYXRlID0gYWRvcHROUyhbW05TRGF0ZSBhbGxvY10gaW5pdFdpdGhUaW1l
SW50ZXJ2YWxTaW5jZU5vdzowXSk7Cit9CisKKy0gKHZvaWQpc2V0U3RhcnRWYWx1ZTooQ0dGbG9h
dClzdGFydFZhbHVlCit7CisgICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworfQorCistICh2
b2lkKXNldEVuZFZhbHVlOihDR0Zsb2F0KWVuZFZhbHVlCit7CisgICAgX2VuZFZhbHVlID0gZW5k
VmFsdWU7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU1RpbWVyICopdGltZXIK
K3sKKyAgICBDR0Zsb2F0IHByb2dyZXNzID0gMDsKKyAgICBOU0RhdGUgKm5vdyA9IFtOU0RhdGUg
ZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXTsKKyAgICBOU1RpbWVJbnRlcnZhbCBlbGFw
c2VkID0gW25vdyB0aW1lSW50ZXJ2YWxTaW5jZURhdGU6X3N0YXJ0RGF0ZS5nZXQoKV07CisgICAg
aWYgKGVsYXBzZWQgPiBfZHVyYXRpb24pIHsKKyAgICAgICAgcHJvZ3Jlc3MgPSAxOworICAgICAg
ICBbdGltZXIgaW52YWxpZGF0ZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNUaW1lSW50ZXJ2
YWwgdCA9IDE7CisgICAgICAgIGlmIChfZHVyYXRpb24pCisgICAgICAgICAgICB0ID0gZWxhcHNl
ZCAvIF9kdXJhdGlvbjsKKyAgICAgICAgcHJvZ3Jlc3MgPSBfdGltaW5nRnVuY3Rpb24tPnRyYW5z
Zm9ybVRpbWUodCwgX2R1cmF0aW9uKTsKKyAgICB9CisgICAgQVNTRVJUKF9zY3JvbGxiYXIpOwor
CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIi1bV2Vi
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbiAiIDw8IHNlbGYgPDwgInNldEN1cnJlbnRQcm9ncmVzczoi
IDw8IHByb2dyZXNzIDw8Il0gZm9yICIgPDwgX2ZlYXR1cmVUb0FuaW1hdGUpOworCisgICAgQ0dG
bG9hdCBjdXJyZW50VmFsdWU7CisgICAgaWYgKF9zdGFydFZhbHVlID4gX2VuZFZhbHVlKQorICAg
ICAgICBjdXJyZW50VmFsdWUgPSAxIC0gcHJvZ3Jlc3M7CisgICAgZWxzZQorICAgICAgICBjdXJy
ZW50VmFsdWUgPSBwcm9ncmVzczsKKworICAgIHN3aXRjaCAoX2ZlYXR1cmVUb0FuaW1hdGUpIHsK
KyAgICBjYXNlIFRodW1iQWxwaGE6CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhh
OmN1cnJlbnRWYWx1ZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tBbHBoYToKKyAg
ICAgICAgW19zY3JvbGxlckltcCBzZXRUcmFja0FscGhhOmN1cnJlbnRWYWx1ZV07CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVUlTdGF0ZVRyYW5zaXRpb246CisgICAgICAgIFtfc2Nyb2xsZXJJ
bXAgc2V0VWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV4cGFuc2lvblRyYW5zaXRpb246CisgICAgICAgIFtfc2Nyb2xsZXJJ
bXAgc2V0RXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzOmN1cnJlbnRWYWx1ZV07CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmICghX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNl
Y29uZGFyeVRocmVhZCgpKQorICAgICAgICBfc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9CisK
Ky0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
ICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICBfc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKK30KKwor
LSAodm9pZClzdG9wQW5pbWF0aW9uCit7CisgICAgW190aW1lciBpbnZhbGlkYXRlXTsKK30KKwor
QGVuZAorCitAaW50ZXJmYWNlIFdlYlNjcm9sbGVySW1wRGVsZWdhdGUgOiBOU09iamVjdDxOU0Fu
aW1hdGlvbkRlbGVnYXRlLCBOU1Njcm9sbGVySW1wRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpT
Y3JvbGxiYXIqIF9zY3JvbGxiYXI7CisKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbj4gX2tub2JBbHBoYUFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4gX3RyYWNrQWxwaGFBbmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24+IF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbjsKKyAgICBS
ZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2V4cGFuc2lvblRyYW5zaXRpb25B
bmltYXRpb247Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFy
KilzY3JvbGxiYXI7CistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnM7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXZWJTY3JvbGxlckltcERlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFy
OihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3Jv
bGxiYXIgPSBzY3JvbGxiYXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY2FuY2Vs
QW5pbWF0aW9ucworeworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtfa25v
YkFscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgIFtfdHJhY2tBbHBoYUFuaW1hdGlv
biBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dOworICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKKy0gKE5ha2VkUHRyPFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjPilzY3JvbGxiYXJzQ29udHJvbGxlcgorewor
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMm
Pihfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhcnNDb250cm9sbGVyKCkpOwor
fQorCistIChOU1JlY3QpY29udmVydFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdAoreworICAg
IHJldHVybiBhUmVjdDsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6KE5T
UmVjdClhUmVjdAoreworICAgIHJldHVybiBhUmVjdDsKK30KKworLSAoQ0FMYXllciAqKWxheWVy
Cit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYg
KCFXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVy
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBs
YXllcjsKKyAgICBpZiAoX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpWZXJ0
aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVy
ID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKTsKKworICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9j
XSBpbml0XTsKKyAgICByZXR1cm4gbGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogZHVt
bXlMYXllcjsKK30KKworLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9s
bGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKK3sKKyAgICBpZiAoIV9zY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIEFTU0VSVF9VTlVTRUQoc2Ny
b2xsZXJJbXAsIHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xs
YmFyKSk7CisKKyAgICBhdXRvIHBvc2l0aW9uSW5WaWV3ID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7CisgICAgcmV0dXJuIF9zY3Jv
bGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocG9zaXRpb25JblZpZXcpOworfQorCist
IChOU1JlY3QpY29udmVydFJlY3RUb0xheWVyOihOU1JlY3QpcmVjdAoreworICAgIHJldHVybiBy
ZWN0OworfQorCistIChCT09MKXNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOihO
U1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJ
bXApOworCisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpOwor
fQorCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKy0gKE5TQXBwZWFyYW5jZSAqKWVm
ZmVjdGl2ZUFwcGVhcmFuY2VGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
SW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKKworICAgIGlmICghX3Njcm9s
bGJhcikgeworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAg
ICAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5jZV07CisgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0KKworICAgIC8vIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggRnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lci4KKyAgICAvLyBUaGUg
YmFzZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBkYXJrIEFxdWEsIHNvIHdlIG1pZ2h0IGdldCBh
IG51bGwgcmVzdWx0LgorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBfc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLnVzZURhcmtBcHBlYXJhbmNlRm9yU2Nyb2xsYmFycygpOworICAgIGlm
IChhdXRvICphcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6dXNlRGFy
a0FwcGVhcmFuY2UgPyBOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWEgOiBOU0FwcGVhcmFuY2VOYW1l
QXF1YV0pCisgICAgICAgIHJldHVybiBhcHBlYXJhbmNlOworICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCisgICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFwcGVh
cmFuY2VdOworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorfQorI2VuZGlm
CisKKy0gKHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWluUHRyPFdlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooTlNT
Y3JvbGxlckltcCAqKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0
KXBhcnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uCit7CisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBw
YWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4KKyAgICAvLyBU
aGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAgICBib29sIG11c3RBbmltYXRlID0g
W3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7
CisKKyAgICBpZiAoW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zY3JvbGxiYXJQYWludFRp
bWVySXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKCkgJiYgIW11c3RBbmltYXRlKSB7CisgICAgICAgIFtzZWxmIHNjcm9sbGJhcnNDb250cm9s
bGVyXS0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmlt
YXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xs
ZXJdLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJl
bnRseSBhbmltYXRpbmcsIHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgewor
ICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAg
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAoYXV0byogbWFj
VGhlbWUgPSBXZWJDb3JlOjptYWNTY3JvbGxiYXJUaGVtZSgpKQorICAgICAgICBtYWNUaGVtZS0+
c2V0UGFpbnRDaGFyYWN0ZXJpc3RpY3NGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOworCisgICAg
aWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gV2ViQ29yZTo6VmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG5ld0FscGhh
ID09IDEpIHsKKyAgICAgICAgICAgIGF1dG8gdGh1bWJSZWN0ID0gV2ViQ29yZTo6SW50UmVjdChb
c2Nyb2xsZXJQYWludGVyIHJlY3RGb3JQYXJ0Ok5TU2Nyb2xsZXJLbm9iXSk7CisgICAgICAgICAg
ICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVj
dCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFtzZWxmIHNjcm9sbGJh
cnNDb250cm9sbGVyXS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHsgfSk7CisgICAgfQor
CisgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZlYXR1cmVUb0FuaW1hdGU6cGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyBUaHVtYkFs
cGhhIDogVHJhY2tBbHBoYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVGcm9tOnBhcnQgPT0g
V2ViQ29yZTo6VGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRlciBrbm9iQWxwaGFdIDogW3Njcm9s
bGVyUGFpbnRlciB0cmFja0FscGhhXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZVRvOm5l
d0FscGhhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKKyAgICBb
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Ny
b2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhhVG86
KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgor
eworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHNj
cm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAg
ICBOU1Njcm9sbGVySW1wICpzY3JvbGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlckltcCAqKXNjcm9s
bGVySW1wOworICAgIGlmICghW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zY3JvbGxiYXJz
Q2FuQmVBY3RpdmUoKSkgeworICAgICAgICBbc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOjBdOwor
ICAgICAgICBfc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBJZiB3ZSBhcmUgZmFkaW5nIHRoZSBzY3JvbGxiYXIgYXdheSwgdGhhdCBpcyBh
IGdvb2QgaW5kaWNhdGlvbiB0aGF0IHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8KKyAgICAvLyBi
ZSBtb3ZpbmcgaXQgYXJvdW5kIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBDYWxsaW5nIFtzY3Jv
bGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dCisgICAgLy8gd2lsbCBwYXNz
IHRoYXQgaW5mb3JtYXRpb24gb24gdG8gdGhlIE5TU2Nyb2xsZXJJbXAgQVBJLgorICAgIGlmIChu
ZXdLbm9iQWxwaGEgPT0gMCAmJiBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5
VGhyZWFkKCkpCisgICAgICAgIFtzY3JvbGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFs
dWU6Tk9dOworCisgICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfa25vYkFscGhhQW5pbWF0
aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBh
cnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKwor
LSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVU
cmFja0FscGhhVG86KENHRmxvYXQpbmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2
YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9s
bGJhcikpOworCisgICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xs
ZXJJbXAgKilzY3JvbGxlckltcDsKKyAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl90cmFj
a0FscGhhQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJD
b3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246
ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Ny
b2xsZXJJbXAgYW5pbWF0ZVVJU3RhdGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbgoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Ny
b2xsYmFyKSk7CisKKyAgICAvLyBVSVN0YXRlVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8g
MS4gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJk
IHRyYW5zaXRpb24uCisgICAgW3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jl
c3M6MSAtIFtzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07CisKKyAgICAv
LyBJZiB0aGUgVUkgc3RhdGUgdHJhbnNpdGlvbiBpcyBoYXBwZW5pbmcsIHRoZW4gd2UgYXJlIG5v
IGxvbmdlciBtb3ZpbmcgdGhlIHNjcm9sbGJhciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICBpZiAoX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAg
ICAgICBbc2Nyb2xsZXJJbXAgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOworCisgICAgaWYg
KCFfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24pIHsKKyAgICAgICAgX3VpU3RhdGVUcmFuc2l0
aW9uQW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2Nd
IGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIKKyAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1h
dGU6VUlTdGF0ZVRyYW5zaXRpb24KKyAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3JvbGxlcklt
cCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXQorICAgICAgICAgICAgYW5pbWF0ZVRvOjEuMAor
ICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwganVzdCByZXNl
dCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCisgICAgICAgIFtfdWlTdGF0
ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRy
YW5zaXRpb25Qcm9ncmVzc11dOworICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9u
IHNldEVuZFZhbHVlOjEuMF07CisgICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
c2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIH0KKyAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5p
bWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9y
U2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAgICAvLyBFeHBhbnNpb25UcmFuc2l0aW9uIGFs
d2F5cyBhbmltYXRlcyB0byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBwcm9ncmVzcyB0
aGlzIGF2b2lkcyBhIGhhcmQgdHJhbnNpdGlvbi4KKyAgICBbc2Nyb2xsZXJJbXAgc2V0RXhwYW5z
aW9uVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlv
blByb2dyZXNzXV07CisKKyAgICBpZiAoIV9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uKSB7
CisgICAgICAgIF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIK
KyAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6RXhwYW5zaW9uVHJhbnNpdGlvbgorICAgICAg
ICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVz
c10KKyAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKKyAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0
aW9uXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0
aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkg
aGF2ZSBjaGFuZ2VkLgorICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0
U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOworICAg
ICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4wXTsKKyAg
ICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9u
XTsKKyAgICB9CisgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0
aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
SW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU092ZXJsYXlTY3JvbGxlclN0YXRl
KW5ld092ZXJsYXlTY3JvbGxlclN0YXRlCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1w
KTsKKyAgICBVTlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOworfQorCistICh2
b2lkKWludmFsaWRhdGUKK3sKKyAgICBfc2Nyb2xsYmFyID0gMDsKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKKyAg
ICBbX3RyYWNrQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07CisgICAgW191aVN0YXRlVHJhbnNp
dGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKKyAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25Bbmlt
YXRpb24gaW52YWxpZGF0ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitA
ZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJhcnND
b250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJv
bGxlck1hYz4oc2Nyb2xsYWJsZUFyZWEpOworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQor
ICAgIDogU2Nyb2xsYmFyc0NvbnRyb2xsZXIoc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX2luaXRp
YWxTY3JvbGxiYXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omlu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCisgICAgLCBtX3NlbmRDb250ZW50QXJlYVNj
cm9sbGVkVGltZXIoKnRoaXMsICZTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lckZpcmVkKQoreworICAgIG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUg
PSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Ny
b2xsYWJsZUFyZWE6JnNjcm9sbGFibGVBcmVhXSk7CisgICAgbV9zY3JvbGxlckltcFBhaXIgPSBh
ZG9wdE5TKFtbTlNTY3JvbGxlckltcFBhaXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9zY3JvbGxl
ckltcFBhaXIgc2V0RGVsZWdhdGU6bV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZS5nZXQoKV07Cisg
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6U2Nyb2xsZXJTdHlsZTo6cmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlKCldOworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
flNjcm9sbGJhcnNDb250cm9sbGVyTWFjKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKKyAgICBbbV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBb
bV9zY3JvbGxlckltcFBhaXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQor
CisvLyBGSVhNRTogUmVtb3ZlCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlQ
b3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKK3sKKyAgICBub3RpZnlDb250
ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0Fj
dGl2ZSgpKQorICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIFttX2hvcml6
b250YWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIFttX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IElu
dFJlY3QmIHNjcm9sbGVyVGh1bWIpCit7CisgICAgYXV0byByZWN0SW5WaWV3Q29vcmRpbmF0ZXMg
PSBzY3JvbGxlclRodW1iOworICAgIGlmIChhdXRvKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9s
bGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmVjdEluVmlld0Nvb3Jk
aW5hdGVzID0gdmVydGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9s
bGVyVGh1bWIpOworCisgICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVT
Y3JvbGxlclRodW1iUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsYWJsZUFyZWEo
KS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAg
ICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30K
KworCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRv
cigpLmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworICAgIGlmIChbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJl
dHVybjsKKworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgW21f
c2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOworICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0VORAorfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpt
b3VzZUVudGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlT
Y3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBz
Y3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7CisgICAgaWYg
KFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50ZXJlZENvbnRlbnRB
cmVhXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJl
YW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgp
IDw8ICJdIG1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKK3sKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VNb3Zl
ZEluQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3Jv
bGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlcklt
cFBhaXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRz
IHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3Rh
dGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1wICpw
YWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAgICAgIFtw
YWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0
Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRv
IHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAgICAgIFtwYWlu
dGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1v
dXNlSXNEb3duKSBjb25zdAoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNj
cm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9s
bGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpIHsK
KyAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rvd25dOworICAgICAgICBpZiAo
bW91c2VJc0Rvd24pCisgICAgICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxH
ZXN0dXJlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVu
ZFNjcm9sbEdlc3R1cmVdOworICAgIH0KK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21f
c2Nyb2xsZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGlmIChbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJl
dHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYURpZFJlc2l6ZV07Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sK
KyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNpemUoKTsKKworICAgIGlm
IChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAg
ICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZlUmVzaXplXTsKK30K
Kwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkKK3sK
KyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJl
ZEluXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFEaWRI
aWRlKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgd2lu
ZG93T3JkZXJlZE91dF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEJl
Z2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlT
Y3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBz
Y3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYg
KFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07
CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAg
ICAgICBtb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRl
c3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19X
SVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJv
bGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRFbmRTY3JvbGxHZXN0
dXJlIik7CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5k
U2Nyb2xsR2VzdHVyZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0
TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNvbihyZWlu
dGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlm
aWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVz
cyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1heUJlZ2luU2Nyb2xsR2Vz
dHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBz
dHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJl
YSgpIDw8ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVy
SW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91
bGRMb2NrU3RhdGUpCit7CisgICAgaWYgKHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092ZXJsYXlTY3JvbGxlclN0
YXRlSGlkZGVuXTsKKyAgICBlbHNlIHsKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHVubG9j
a092ZXJsYXlTY3JvbGxlclN0YXRlXTsKKworICAgICAgICAvLyBXZSBuZXZlciB1cGRhdGUgc2Ny
b2xsZXIgc3R5bGUgZm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFyZSBsb2NrZWQuIElmIHdl
IGhhdmUgYSBwZW5kaW5nCisgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdHlsZSwgZG8g
aXQgb25jZSB3ZSd2ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUuCisgICAgICAgIGlmICht
X25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSkKKyAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5
bGUoKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJh
cnNDYW5CZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFbbV9zY3JvbGxlckltcFBhaXIg
b3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
eworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigq
c2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVCghbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIG1fdmVydGljYWxTY3Jv
bGxlckltcERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2Nd
IGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdh
dGU6bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChHcmFwaGlj
c0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9y
bUxheWVyKCldOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJ
bXA6cGFpbnRlcl07CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCisg
ICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21fdmVydGlj
YWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1fdmVydGljYWxTY3JvbGxl
ckltcERlbGVnYXRlID0gbnVsbHB0cjsKKworICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKK30K
Kwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0g
c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVs
ZWdhdGUpOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtb
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFy
XSk7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxlckltcERl
bGVnYXRlLmdldCgpXTsKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXIt
PnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
IFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOworCisgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgW3BhaW50ZXIgc2V0S25v
YkFscGhhOjFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9s
bGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Cisg
ICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9ob3Jpem9u
dGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVs
ZWdhdGUgaW52YWxpZGF0ZV07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9
IG51bGxwdHI7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3Njcm9s
bGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVy
SW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIFtwYWludGVyIHNldE5lZWRzRGlzcGxh
eTpZRVNdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9s
bGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciog
c2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGlm
ICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWlu
dGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxh
eWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9s
bGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9y
aXpvbnRhbFNjcm9sbGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
KnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBb
cGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOwor
fQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBOb24tb3Zl
cmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRlc3Rpbmcu
CisgICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5T
U2Nyb2xsZXJTdHlsZU92ZXJsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gT3Zl
cmxheSBzY3JvbGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZyB3aGVuZXZl
ciB0aGV5IGFyZSBhdCBhbGwgdmlzaWJsZS4KKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0g
c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFtwYWludGVyIGtub2JBbHBoYV0gPiAw
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlDb250ZW50QXJlYVNj
cm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LCBidXQgdGhlIHBhZ2UKKyAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQgY2Fz
ZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKKyAgICAvLyBTY3Jv
bGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdl
LgorICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmlzSGFuZGxp
bmdXaGVlbEV2ZW50KCkpCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsK
KyAgICBlbHNlCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQor
eworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSB0cnVlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVt
ZSgpOworICAgIGlmICghbWFjVGhlbWUpIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtYWNUaGVt
ZS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzQ2hhbmdlZCgpOworCisgICAgTlNTY3JvbGxlclN0eWxl
IG5ld1N0eWxlID0gW21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOworCisgICAgaWYg
KFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
KworICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9zY3JvbGxl
ckltcFBhaXIgdmVydGljYWxTY3JvbGxlckltcF07CisgICAgICAgIGF1dG8gbmV3VmVydGljYWxQ
YWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5l
d1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkVmVydGljYWxQ
YWludGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xs
ZXJJbXA6bmV3VmVydGljYWxQYWludGVyLmdldCgpXTsKKyAgICAgICAgbWFjVGhlbWUtPnNldE5l
d1BhaW50ZXJGb3JTY3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld1ZlcnRp
Y2FsUGFpbnRlcikpOworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJbXAoKnZl
cnRpY2FsU2Nyb2xsYmFyKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBz
dHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZQor
ICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5
b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3Ro
IGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUt
PnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Cisg
ICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlj
a25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250
YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAgICAgTlNT
Y3JvbGxlckltcCAqb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgaG9y
aXpvbnRhbFNjcm9sbGVySW1wXTsKKyAgICAgICAgYXV0byBuZXdIb3Jpem9udGFsUGFpbnRlciA9
IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZSBj
b250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpIGhvcml6b250YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZEhvcml6b250YWxQYWlu
dGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxl
ckltcDpuZXdIb3Jpem9udGFsUGFpbnRlci5nZXQoKV07CisgICAgICAgIG1hY1RoZW1lLT5zZXRO
ZXdQYWludGVyRm9yU2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld0hv
cml6b250YWxQYWludGVyKSk7CisgICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxlcklt
cCgqaG9yaXpvbnRhbFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3Jv
bGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNl
dCB0aGUKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhl
IHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5k
IGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1h
Y1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNp
emUoKSk7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0
KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgLy8gSWYgbV9uZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3Jpbmcg
ZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQKKyAgICAvLyBhIHJlbGF5b3V0IHdpbGwg
aGFwcGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxheW91
dCBvdXJzZWx2ZXMuCisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5nZWQo
bmV3U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxlOjpPdmVy
bGF5IDogU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSk7CisKKyAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOworfQor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIo
KQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RhcnRPbmVTaG90KDEwMF9t
cyk7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhclBhaW50VGlt
ZXJJc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXIuaXNBY3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3Rv
cFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGlt
ZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbml0aWFsU2Ny
b2xsYmFyUGFpbnRUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFy
cyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNj
cm9sbGVySW1wUGFpcgorICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJl
IGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICBbbV9zY3JvbGxlckltcFBhaXIg
aGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBmbGFzaFNjcm9s
bGVyc107Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50QXJl
YVNjcm9sbGVkVGltZXJGaXJlZCgpCit7CisgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQobV9j
b250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7CisgICAgbV9jb250ZW50QXJlYVNj
cm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IHsgfTsKKworICAgIGlmIChhdXRvKiBtb25pdG9yID0g
d2hlZWxFdmVudFRlc3RNb25pdG9yKCkpCisgICAgICAgIG1vbml0b3ItPnJlbW92ZURlZmVycmFs
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRT
Y3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Vu
ZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAg
bV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IGRlbHRhOworCisgICAgaWYg
KCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9z
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworCisgICAgaWYg
KGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAgbW9uaXRv
ci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6
OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQorewor
ICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkSW5EaXJlY3Rpb246TlNN
YWtlUG9pbnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsKK30KKworc3RhdGljIFN0
cmluZyBzY3JvbGxiYXJTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAoIXNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuICJub25lIl9zOworCisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChzY3JvbGxiYXItPmVuYWJsZWQoKSA/ICJlbmFibGVk
Il9zIDogImRpc2FibGVkIl9zKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCisgICAgTlNTY3Jv
bGxlckltcCAqc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFy
KTsKKyAgICBpZiAoIXNjcm9sbGVySW1wKQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAuZXhwYW5kZWQpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIixleHBhbmRlZCJfcyk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAudHJhY2tBbHBoYSA+IDAp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RyYWNrIl9zKTsKKworICAgIGlmIChz
Y3JvbGxlckltcC5rbm9iQWxwaGEgPiAwKQorICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJs
ZV90aHVtYiJfcyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVz
dGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFibGVBcmVh
KCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworU3RyaW5nIFNjcm9sbGJhcnNDb250cm9s
bGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIo
KSk7Cit9CisKK1doZWVsRXZlbnRUZXN0TW9uaXRvciogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OndoZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVB
cmVhKCkuc2Nyb2xsQW5pbWF0b3IoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKTsKK30KKworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjE1OGNmY2Q0OWM1OWIwZjhiZDA3MDQ1YmU1
OWI0ODU5YmZiZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2Nr
LmgiCi0KLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVNjcm9sbEFuaW1hdG9yTW9jazo6U2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGxv
Z2dlcikKLSAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotICAgICwgbV9sb2dn
ZXIoV1RGTW92ZShsb2dnZXIpKQotewotfQotCi1TY3JvbGxBbmltYXRvck1vY2s6On5TY3JvbGxB
bmltYXRvck1vY2soKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjpkaWRB
ZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBt
X2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRp
ZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZUhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBudWxs
cHRyOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFy
ZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwotICAgIFNj
cm9sbEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yTW9jazo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIG1fbG9nZ2Vy
KCJtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVudEFy
ZWEiKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotfQot
Ci1jb25zdCBjaGFyKiBTY3JvbGxBbmltYXRvck1vY2s6OnNjcm9sbGJhclByZWZpeChTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1fdmVydGlj
YWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRhbFNjcm9s
bGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QK
LXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBzY3JvbGxiYXJQcmVm
aXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2Nr
Ojptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAg
ICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNjcm9sbGJhclByZWZpeChzY3Jv
bGxiYXIpLCAiU2Nyb2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNj
cm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VJ
c0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBpc1ByZXNzZWQpIGNv
bnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNzZWQgPyAibW91c2VJc0Rvd25J
biIgOiAibW91c2VJc1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJh
ciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxi
YXIsIGlzUHJlc3NlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmOTcyMWE4ZjYyMmM4OWU1NDZkOWViYmFjZDk4MjEwZjgzMTFi
OTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLS8vIEEgTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBTY3JvbGxBbmltYXRvciB1c2Vk
IHRvIHRlc3QgdGhlIHNjcm9sbCBldmVudHMKLS8vIHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGwgYW5p
bWF0b3IuIFRlc3RzIGNhbiBlbmFibGUgdGhpcyBzY3JvbGwgYW5pbWF0b3IgdXNpbmcKLS8vIHRo
ZSBpbnRlcm5hbCBzZXR0aW5nIGVuYWJsZU1vY2tTY3JvbGxBbmltYXRvci4KLWNsYXNzIFNjcm9s
bEFuaW1hdG9yTW9jayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgU2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFibGVBcmVhJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1vY2soKTsK
LQotcHJpdmF0ZToKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBib29sIGFsbG93
c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBJbnRTaXplKCk7IH0KLSAgICBib29sIGlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoY29uc3QgRmxv
YXRTaXplJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBSZWN0RWRnZXM8
Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyB9OyB9Ci0g
ICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVj
dGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZSB7IH0K
LSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMo
Y29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxQb3Np
dGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KLSNlbmRpZgotCi0gICAgdm9p
ZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsK
LSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRD
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNj
cm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIo
U2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xs
YmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIHNj
cm9sbGJhclByZWZpeChTY3JvbGxiYXIqKSBjb25zdDsKLQotICAgIFdURjo6RnVuY3Rpb248dm9p
ZChjb25zdCBTdHJpbmcmKT4gbV9sb2dnZXI7Ci0gICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFy
IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9j
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDZjZjAyODJiYmFiZTg5MmE3YzQwMGI3NGRkOGRhMTVlMGZmMTNm
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cm9sbGJhcnNDb250cm9sbGVyTW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmIGxvZ2dlcikKKyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNjcm9sbGFibGVBcmVhKQor
ICAgICwgbV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQoreworfQorCitTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6On5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKSA9IGRlZmF1bHQ7CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwor
ICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxi
YXIpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkSG9yaXpvbnRh
bFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXIgPSBzY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZEhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6
bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRD
b250ZW50QXJlYSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VNb3Zl
ZEluQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgp
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpCit7CisgICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworfQorCitjb25z
dCBjaGFyKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeChTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1fdmVydGlj
YWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRhbFNjcm9s
bGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikg
Y29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBzY3JvbGxi
YXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJzQ29udHJv
bGxlcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNj
cm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOworICAgIFNjcm9sbGJhcnND
b250cm9sbGVyOjptb3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2b2lkIFNj
cm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhciwgYm9vbCBpc1ByZXNzZWQpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0
cmluZyhpc1ByZXNzZWQgPyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJc1VwSW4iLCBzY3JvbGxi
YXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJzQ29udHJv
bGxlcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIGlzUHJlc3NlZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0NzMzOTMx
MTJkODRhYTUzZWQyYjY3OWVmZjA4NDY3MzNiODgyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTY3JvbGxi
YXJzQ29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTW9jayBpbXBs
ZW1lbnRhdGlvbiBvZiBTY3JvbGxiYXJzQ29udHJvbGxlciB1c2VkIHRvIHRlc3QgdGhlIHNjcm9s
bCBldmVudHMKKy8vIHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGxiYXIgY29udHJvbGxlci4gVGVzdHMg
Y2FuIGVuYWJsZSB0aGlzIG1vY2sgb2JqZWN0IHVzaW5nCisvLyB0aGUgaW50ZXJuYWwgc2V0dGlu
ZyBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkuCisvLyBGSVhNRTogc2V0VXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpIG5lZWRzIHJlbmFtaW5nLgorCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2sgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJhcnNDb250
cm9sbGVyTW9jayk7CitwdWJsaWM6CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKFNjcm9s
bGFibGVBcmVhJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKKyAgICB2
aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKTsKKworcHJpdmF0ZToKKworICAgIHZv
aWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBt
b3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VNb3ZlZEluQ29u
dGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBmaW5h
bDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IGZpbmFs
OworICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25z
dCBmaW5hbDsKKyAgICBjb25zdCBjaGFyKiBzY3JvbGxiYXJQcmVmaXgoU2Nyb2xsYmFyKikgY29u
c3Q7CisKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fbG9nZ2VyOwor
ICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICBTY3Jv
bGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438215</attachid>
            <date>2021-09-14 22:55:21 -0700</date>
            <delta_ts>2021-09-15 00:09:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210914225520.patch</filename>
            <type>text/plain</type>
            <size>190350</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc2NGE4OWQ1ZjVhNjQ5
ZWQ1NTIyOGY2YzkxZWEyMWMyM2ZmY2M1ZS4uYTI5OGYxNzUyNTVjNTUxNzc2MzYxYmRjNDAxMGFh
NTdkMzFkZDcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBcyB0aGUgZmlyc3Qgc3RlcCB0byBjbGVhbmluZyB1cCBTY3JvbGxBbmltYXRvci9TY3Jv
bGxDb250cm9sbGVyLCBtb3ZlIHNjcm9sbGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mCisgICAgICAg
IFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIGEgbmV3IFNjcm9sbGJhcnNDb250cm9sbGVyIGNsYXNz
LCB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIHN1YmNsYXNzZXMuCisgICAgICAgIFRoaXMgbWFrZXMg
aXQgbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBTY3Jv
bGxBbmltYXRvci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQ
RS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1Jlc2l6ZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxFbmRMaXZlUmVzaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6ZGlkQWRk
SG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYXZlU2Nyb2xs
ZWRTaW5jZVBhZ2VMb2FkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
OjpzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp3aGVlbEV2ZW50VGVzdE1vbml0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJl
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0
ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlSXNE
b3duSW5TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OndpbGxTdGFydExpdmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRBcmVhRGlkU2hvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRIaWRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0
YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aW52
YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Omhvcml6b250YWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Omhvcml6b250YWxT
Y3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhcnNDb250cm9sbGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OndpbGxTdGFydExpdmVSZXNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OndpbGxFbmRMaXZlUmVzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYVdpbGxQYWlu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFbnRlcmVk
Q29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYURpZFNo
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVh
RGlkSGlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpyZXNuYXBBZnRlckxheW91dCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0
b3JJT1MuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9sbGJhcnNDb250
cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpzY3JvbGxhYmxlQXJl
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bm90aWZ5
UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9s
bGVyOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OmRpZEVuZFNjcm9sbEdlc3R1cmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFX
aWxsUGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUV4aXRlZFNj
cm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6
bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudHNTaXplQ2hhbmdlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNvbnRlbnRBcmVhRGlkU2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRI
aWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0Nv
bnRyb2xsZXI6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
cjo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpob3Jp
em9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmlt
YXRvckdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
ZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJz
T3BhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplYXNlT3V0Q3ViaWMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvckdlbmVyaWM6OnNob3dPdmVybGF5U2Nyb2xsYmFycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmhpZGVPdmVybGF5U2Nyb2xs
YmFycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6
Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJp
Yzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Omxv
Y2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xs
QW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcklPUzo6U2Ny
b2xsQW5pbWF0b3JJT1MpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3Jv
bGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpT
Y3JvbGxBbmltYXRvck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNl
bEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRs
ZVdoZWVsRXZlbnRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxiYXJUaGVtZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Ny
b2xsYWJsZUFyZWE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRl
bGVnYXRlIGludmFsaWRhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQ
YWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbkxpdmVSZXNpemVGb3JT
Y3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxl
ckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0
Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0
eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOl0pOiBEZWxldGVkLgorICAgICAgICAo
b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5pbWF0ZTphbmltYXRlRnJvbTphbmltYXRl
VG86ZHVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmlt
YXRpb24gc3RhcnRBbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gc3RvcEFu
aW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGlu
aXRXaXRoU2Nyb2xsYmFyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgbGF5ZXJdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5T
Y3JvbGxlckZvclNjcm9sbGVySW1wOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3Rp
dmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFy
dDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJ
bXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlTdGF0ZVRyYW5zaXRp
b25XaXRoRHVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVs
ZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJ
bXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6On5TY3JvbGxBbmltYXRvck1hYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVz
dGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNj
cm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExp
dmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNj
cm9sbEdlc3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bG9ja092ZXJs
YXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpp
bnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVu
dEFyZWFTY3JvbGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNB
Y3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFy
ZWFTY3JvbGxlZFNvb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhcnNDb250cm9sbGVyTWFjLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6bWFjU2Ny
b2xsYmFyVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIp
OgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbGFi
bGVBcmVhOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbnZhbGlk
YXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGNvbnRlbnRBcmVh
UmVjdEZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWly
RGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNj
cm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUg
c2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRDb250ZW50UG9pbnQ6dG9TY3JvbGxlckltcDpdKToKKyAg
ICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENv
bnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAgICAgICAgKG9wZXJhdG9yPDwpOgorICAgICAg
ICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGluaXRXaXRoU2Nyb2xsYmFyOmZlYXR1cmVU
b0FuaW1hdGU6YW5pbWF0ZUZyb206YW5pbWF0ZVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2Vi
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXRFbmRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6XSk6CisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW52YWxpZGF0ZV0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldER1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbGJhcjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdEZyb21CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDpdKToKKyAgICAgICAg
KC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvTGF5ZXI6XSk6CisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xs
ZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgZWZmZWN0aXZlQXBw
ZWFyYW5jZUZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVn
YXRlIHNldFVwQWxwaGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6YW5pbWF0ZUFscGhh
VG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xs
ZXJJbXA6YW5pbWF0ZUtub2JBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVUcmFja0FscGhhVG86ZHVyYXRpb246
XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0
ZVVJU3RhdGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1
cmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1w
Om92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIGludmFsaWRhdGVdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y2FuY2VsQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2V0Vmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFbnRl
cmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsRW5kTGl2
ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29u
dGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bWF5QmVnaW5TY3Jv
bGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp1cGRhdGVTY3JvbGxl
clN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdGFy
dFNjcm9sbGJhclBhaW50VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmluaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRT
b29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29u
dGVudEFyZWFTY3JvbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndoZWVsRXZlbnRUZXN0
TW9uaXRvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1v
Y2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Nj
cm9sbEFuaW1hdG9yTW9jay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jayk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Ondp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2s6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrOjpzY3JvbGxiYXJQcmVmaXggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4
aXRlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmg6IEFkZGVkLgorCiAyMDIxLTA5LTEz
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBj
b21wdXRlZCBzdHlsZSBmb3IgdHJhbnNmb3JtLW9yaWdpbiBvbiBTVkcgYm94ZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMzhhN2QzNDc1MDVkOTQwYzNmMGUzNGQzZDY5NzMzODM0Mzc5Y2EyMi4uZGQ5MzRi
MDcyOWE4MjdlYzRjZjM5YjhiYjU5YTI2ZmM4YjE3ZWY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4
MTgsNiArMTgxOCw3IEBAIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAogcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAKIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFy
LmNwcAorcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZS5jcHAKIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogcGxhdGZv
cm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZS5jcHAKQEAgLTIwODYsNyArMjA4Nyw3IEBAIHBs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCiBwbGF0Zm9ybS9tb2NrL1Bs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENEYXRhQ2hh
bm5lbEhhbmRsZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENOb3RpZmllcnNNb2NrLmNwcAot
cGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suY3BwCitwbGF0Zm9ybS9tb2NrL1Njcm9s
bGJhcnNDb250cm9sbGVyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVNb2Nr
LmNwcAogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAogcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDJhZmQ0YzIzMjAxODUxY2NiY2YwZjczMzQ0MTY5ZmNjY2I4ZTA4Yjgu
LmRmMWVjZmEyNmEyYzA3YTZlNjJiNWE3NWI3YTVhZDIxOThiNWE4YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dApAQCAtNDkxLDYgKzQ5MSw3IEBAIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0
b3JNYWMubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01h
Yy5tbQorcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIEBuby11bmlmeQog
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWFj
L1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0KIHBsYXRmb3JtL21hYy9TdHJpbmdVdGls
aXRpZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggZTIyMmY2NmIxNTZhOGI3ZjI2YjVmOThk
NjZlOWQ3YWNjYTNkNGQwNi4uZGNkY2VlZjA4MTc4MjQzMDVkZjRlMGVlMGQ0YmNlMjc4ODkzMGI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTcyLDYgKzcyLDcgQEAgcGxhdGZvcm0vZ2FtZXBh
ZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcAogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01h
bmV0dGVHYW1lcGFkUHJvdmlkZXIuY3BwCiAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmNwcAorcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKaW5k
ZXggYjEwYzFlY2U1MjA3NWI3NTM1ZGE1MWMyY2MzMTZkYzkzNDNmZDA4MS4uYjRhZTVjOWIxZDcx
Y2UwMGNmYTIwNGE3M2Q2YmRmNjI1ZWI1NjAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKQEAgLTY1
LDYgKzY1LDcgQEAgcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCiBw
bGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKIAogcGxhdGZvcm0vZ2VuZXJpYy9TY3Jv
bGxBbmltYXRvckdlbmVyaWMuY3BwCitwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9s
bGVyR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDIxMzQ0ZWM4MjMwY2MzYjMz
ODE1MGQ3MzRkMDlhNGZhNzVjZjUxOS4uYmY0MzhlMGFjNjJlYjhkY2QyYTFlOWRiYWRkNTNmOGMw
NWY2Zjk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzgyLDYgKzM4Miw3IEBACiAJCTBGRUEzRTg4MTkxQjNCRDcwMDBGMUI1
NSAvKiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U4NjE5MUIzQkQ3MDAwRjFCNTUgLyog
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUFGNjZCMjNCRkMzOUUwMDQwMzBEQSAvKiBD
b2xvclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzEyMEMyMkJG
MkNEMjAwNEU5RDM1IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDMTIwOTIyQkYyQ0M3MDA0RTlE
MzUgLyogTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkVFMzcxMTI2RjE5NTI5MDAxQjUxODQgLyog
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjAyMjQ1MzI2RjE1RDc1MDAwMjY1QzMgLyogU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTBGRjNCOTI5MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RP
TVF1YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjNCOTI1MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RPTVF1YWQuaCAqLzsgfTsKIAkJMEZGM0I5MkIx
RUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZEluaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjNCOTI3MUVFM0I2REUwMEI4NDE0NCAvKiBKU0RP
TVF1YWRJbml0LmggKi87IH07CiAJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxl
TWVkaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjUwMjY4MTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEuaCAqLzsgfTsKQEAgLTIwMTYs
NyArMjAxNyw3IEBACiAJCTVDOUMyREI1MjI0MUE2N0IwMDk5NkIwQiAvKiBDb250ZW50UnVsZUxp
c3RSZXN1bHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzlDMkRCMzIyNDFBNjczMDA5OTZCMEIgLyogQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDOUVGMkYz
MjFGMDYxOTAwMDNCREM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjJGMjIxRjA2MTcxMDAzQkRD
NTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQTFERUM2MUY3MUYxQzcwMEU3MUJEMyAvKiBIVFRQ
SGVhZGVyRmllbGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDQTFERUM0MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1Q0IzN0ZGRjFDNjJE
MkExMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Ny
b2xsQW5pbWF0b3JNb2NrLmggKi87IH07CisJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBT
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2suaCAqLzsgfTsKIAkJNUNCQzhEQUQxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlh
QWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmls
aXR5U29mdExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0JENTk1OTIyODBFOTI2MDAyQjIyQUEgLyogQ3VzdG9tSGVhZGVyRmllbGRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNUQyMzg2
MjI3QTA3N0MwMDBCOUJEQSAvKiBDdXN0b21IZWFkZXJGaWVsZHMuY3BwICovOyB9OwogCQk1Q0M3
OTAwRTI2NkFGQTg5MDA2OTI0RkUgLyogVGltaW5nQWxsb3dPcmlnaW4uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzc5MDBCMjY2QUZBODgwMDY5MjRG
RSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC02MTU0LDYgKzYxNTUsMTAgQEAKIAkJMEM0NTM0MjYxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQ
b3B1cE1lbnVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMx
QkM1Q0NENzAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlYXJjaFBvcHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MDIyNDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMDIyNDUyMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjAyMjQ1MzI2RjE1RDc1MDAwMjY1QzMgLyogU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0NTQyNkYxNUQ3
NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
OTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NzMsOCArOTc3OCw4IEBACiAJ
CTVDOUVGMkYyMjFGMDYxNzEwMDNCREM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURFQzIxRjcxRTY4NjAwRTcxQkQzIC8q
IEhUVFBIZWFkZXJGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVFRQSGVhZGVyRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0Ex
REVDNDFGNzFFNjg3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUVFBIZWFkZXJGaWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9y
TW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQjM3RkZEMUM2MkQyNzgw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDQjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNCMzdGRkQxQzYy
RDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNj
ZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNv
ZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJp
bGl0eVNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQzc5MDBCMjY2
QUZBODgwMDY5MjRGRSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaW1pbmdBbGxvd09yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjE2NjgsOCArMjE2NzMsOCBAQAogCQkJCTA3Mzc5NEY0MTlGNTg2NEUwMEU1QTA0
NSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJNb2NrLmggKi8sCiAJCQkJMDczNzk0RjcxOUY1ODY0
RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suY3BwICovLAogCQkJCTA3Mzc5NEY4MTlGNTg2
NEUwMEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmggKi8sCi0JCQkJNUNCMzdGRkMxQzYyRDI3
ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5jcHAgKi8sCi0JCQkJNUNCMzdGRkQxQzYy
RDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oICovLAorCQkJCTVDQjM3RkZDMUM2
MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suY3BwICovLAorCQkJCTVD
QjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCAqLywK
IAkJCQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAq
LywKIAkJCQkwRkU3MTQwNDE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmgg
Ki8sCiAJCQkJMkQ3RUQwQTkxQkFFOTkxNzAwNDNCM0U1IC8qIFRpbWVyRXZlbnRCYXNlZE1vY2su
aCAqLywKQEAgLTIyMDI3LDYgKzIyMDMyLDggQEAKIAkJCQkwMDgxRkVGRTE2QjBBMkI2MDA4QUFB
N0EgLyogUHVibGljU3VmZml4TWFjLm1tICovLAogCQkJCUJDQUUxRkE1MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovLAogCQkJCUJDNTExNTZEMTJCMTc0OUMwMEM5Njc1
NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAqLywKKwkJCQkwRjAyMjQ1NDI2RjE1RDc1MDAwMjY1
QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaCAqLywKKwkJCQkwRjAyMjQ1MzI2RjE1RDc1
MDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJQkM4Qjg1M0Mw
RTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8sCiAJCQkJQkNFRjg2OUUw
RTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovLAogCQkJCTVCMUUwRTQz
MjVEMTYyOUIwMDI3MjI4MSAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovLApAQCAtMjc5ODQsNiAr
Mjc5OTEsOCBAQAogCQkJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRv
ci5oICovLAogCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICov
LAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKKwkJCQkw
RjAyMjQ1MDI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwICovLAor
CQkJCTBGMDIyNDUyMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5oICov
LAogCQkJCTBGRTcxNDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8s
CiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJ
CQkJQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNw
cCAqLywKQEAgLTM0NzQxLDggKzM0NzUwLDggQEAKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNF
NTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc3NDgwMTM3OEI3
NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNB
RTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3RjU2
MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTQwMjhC
MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDRDOTkxODYwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2MzI4LDYgKzM2MzM3LDcgQEAKIAkJCQk0MTkyNDI0OTIxMjdC
OTNFMDA2MzRGQ0YgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1QzJCMUFFQzIyMzk3RUJDMDBCOTFDRjcgLyogUmVzb3VyY2VSZXNwb25z
ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1MTE1NkUxMkIxNzQ5QzAwQzk2NzU0IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFRTM3MTEyNkYxOTUy
OTAwMUI1MTg0IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNFRjg2OUYwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDNCODVFRDQxOENCRUM1MjAwRTMxQUY0IC8qIFNlbGVjdG9yUHNldWRv
Q2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
NkFBMEY5RTE4RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcAppbmRleCA5YWM0MTlmMzAxMTBjZTVjYjEwZjNhYjQyZWIzYjBlMzFmMjJjYmNjLi44MGUw
MTE5OTc0MmRmNGRkZDE3YzBlMTI5NzI5Mzc1ZDRmZDE0YjNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNzMsMjIgKzM3Myw3IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3I6OmNhbmNlbEFuaW1hdGlvbnMoKQogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgbV9zY3JvbGxBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3I6Ondp
bGxFbmRMaXZlUmVzaXplKCkKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKQordm9pZCBTY3JvbGxBbmltYXRvcjo6Y29udGVudHNTaXplQ2hh
bmdlZCgpIGNvbnN0CiB7CiAgICAgbV9zY3JvbGxBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCBh
NGYzOWQ1NjFjNjM5NTFmNTMxMjllZmNlZjU0MjUwZTE1OWEyYmFmLi5jMmRmN2Q4YTk2MTFlZjhm
OTFlZjc0MzZhOGI2Y2M1YThkMTIyN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKQEAgLTU2LDcgKzU2LDYgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgOiBwcml2
YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOwogCi0gICAg
ZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpOwogCiAgICAgZW51bSBTY3JvbGxCZWhhdmlvciB7CkBAIC03OSw2ICs3
OCwxMSBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CiAKKyAgICB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoKSBjb25zdDsKKworICAgIGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsgfQorICAgIHZvaWQg
c2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChib29sIGhhdmVTY3JvbGxlZCkgeyBtX2hhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBoYXZlU2Nyb2xsZWQ7IH0KKwogICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCiAgICAgS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQpA
QCAtOTYsNDQgKzEwMCwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5p
bWF0aW9ucygpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91
c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExp
dmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsgfQotCi0gICAgdmlydHVhbCB2
b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSB7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5
ZXJzKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEpOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5nIGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBl
bXB0eVN0cmluZygpOyB9Ci0KICAgICB2b2lkIHNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihSZWZQ
dHI8V2hlZWxFdmVudFRlc3RNb25pdG9yPiYmIHRlc3RNb25pdG9yKSB7IG1fd2hlZWxFdmVudFRl
c3RNb25pdG9yID0gdGVzdE1vbml0b3I7IH0KKyAgICBXaGVlbEV2ZW50VGVzdE1vbml0b3IqIHdo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxFdmVudFRlc3RNb25p
dG9yLmdldCgpOyB9CiAKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBw
aW5nSWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxl
Y3Rpb25NZXRob2QpOwogICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZO
ZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQsIFNjcm9s
bFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CkBAIC0xNjYsNiArMTM4LDggQEAgcHVibGljOgog
I2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxh
YmxlQXJlYSYpOworCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvck9mZnNldCgpOwogCkBAIC0xNzgsNiArMTUyLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9s
bENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJv
bGxlckFuaW1hdGlvblRpbWVyOwogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247Cisg
ICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgeyBmYWxzZSB9OwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zY3JvbGxBbmltYXRpb247CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApp
bmRleCA5NjdlMTMyNmFiZTViMzAwYTcyNzZiNDRlYjk4NGIxNzlhYjQzNTViLi4wZTEwYWI2MjNl
MTc1MGU0YjIwMDM3ZWZhOGU5YjIwYmIwNDY4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUwLDcgKzUwLDcgQEAgc3RydWN0IFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICBib29sIHdlYWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRo
cmVhZDsKICNlbmRpZgotICAgIHZvaWQqIHBvaW50ZXJbMl07CisgICAgdm9pZCogcG9pbnRlclsz
XTsKICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CiB9
OwpAQCAtNzQsMTcgKzc0LDI1IEBAIFNjcm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKSA9
IGRlZmF1bHQ7CiAKIFNjcm9sbEFuaW1hdG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0
b3IoKSBjb25zdAogewotICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikgeworICAgIGlmICghbV9z
Y3JvbGxBbmltYXRvcikKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSk7CisKKyAgICByZXR1
cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyJiBT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIGlmICgh
bV9zY3JvbGxiYXJzQ29udHJvbGxlcikgeworICAgICAgICAvLyBOb3RlIHRoYXQgdXNlc01vY2tT
Y3JvbGxBbmltYXRvciBpcyBhIG1pc25vbWVyLgogICAgICAgICBpZiAodXNlc01vY2tTY3JvbGxB
bmltYXRvcigpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gbWFrZVVuaXF1ZTxT
Y3JvbGxBbmltYXRvck1vY2s+KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyksIFt0
aGlzXShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIgPSBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTW9jaz4oY29uc3RfY2Fz
dDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
ewogICAgICAgICAgICAgICAgIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UobWVzc2FnZSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Njcm9sbEFu
aW1hdG9yID0gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVh
Jj4oKnRoaXMpKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBTY3JvbGxi
YXJzQ29udHJvbGxlcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykp
OwogICAgIH0KIAotICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKLSAgICByZXR1cm4gKm1f
c2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgcmV0dXJuICptX3Njcm9sbGJhcnNDb250cm9sbGVy
LmdldCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3Qg
SW50UG9pbnQmIG9yaWdpbikKQEAgLTIwMSw3ICsyMDksNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQog
ICAgIH0KIAogICAgIGlmIChzY3JvbGxQb3NpdGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRp
b24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Ny
b2xsR2VzdHVyZVN0YXRlPikKQEAgLTI0Myw4OSArMjUxLDgzIEBAIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OndpbGxTdGFydExpdmVSZXNpemUoKQogICAgIGlmIChtX2luTGl2ZVJlc2l6ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1faW5MaXZlUmVzaXplID0gdHJ1ZTsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOworICAgIHNjcm9sbGJhcnND
b250cm9sbGVyKCkud2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFtX2luTGl2ZVJlc2l6ZSkKICAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9pbkxpdmVSZXNpemUgPSBmYWxzZTsKLSAgICBpZiAoU2Ny
b2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQot
ICAgICAgICBzY3JvbGxBbmltYXRvci0+d2lsbEVuZExpdmVSZXNpemUoKTsKLX0gICAgCisKKyAg
ICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7Cit9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0
b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBz
Y3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewotICAgIGlmIChT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAg
ICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJl
ZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIHNj
cm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3Io
KS5tb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgbW91c2VJc0Rvd24pOworICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIG1v
dXNlSXNEb3duKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFy
ZWFEaWRTaG93KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZFNo
b3coKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFEaWRI
aWRlKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZEhpZGUoKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlk
ZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9j
a1N0YXRlKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihzaG91bGRMb2NrU3RhdGUpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkuZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudHNTaXplQ2hhbmdlZCgpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMzQsMjEgKzMzNiwyMSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkud2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCkKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29u
dGVudHNSZXNpemVkKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT5jb250ZW50c1Jlc2l6ZWQoKTsgLy8gVGhpcyBmbGFzaGVzIG92ZXJsYXkgc2Nyb2xsYmFy
cy4KKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsgLy8gVGhpcyBmbGFzaGVz
IG92ZXJsYXkgc2Nyb2xsYmFycy4KIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMzc0LDE0ICszNzYsMTIgQEAgdm9pZCBTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMoKQogewogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZhbGlkYXRlU2Nyb2xsYmFy
UGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZh
bGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJz
Q29udHJvbGxlcigpLmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAg
ICAgfQogfQogCkBAIC00MjIsMTIgKzQyMiwxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQog
ewotICAgIHNjcm9sbEFuaW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKQEAgLTQ1OSwxMiArNDU5LDEyIEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKIAogU3RyaW5nIFNjcm9sbGFi
bGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCk7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVy
biBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCk7CiB9CiAKIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFy
ZWE6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CkBAIC01MTcsNyArNTE3LDcgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGU6IGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgPDwgIiBp
c1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKTsKIAot
ICAgIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KTsKICAgICBpZiAoIXNjcm9sbEFuaW1hdG9yIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggZmQzOTYzMzM4MGI5NDdhMjA1MGE3
Yjg2ODBjNTc5OTBmNmQ3NWNiNi4uOGY5ZWU4YmUwOTY3MGRhOWNmOTA0YWZlZjFjMzE4NjVhM2Y1
ZDBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC00NSw2
ICs0NSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKK2NsYXNzIFNj
cm9sbGJhcnNDb250cm9sbGVyOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFj
a2luZzsKIApAQCAtMTcyLDEyICsxNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9s
bEFuaW1hdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxs
IGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3Jv
bGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQW5pbWF0b3IuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbGJhcnNDb250
cm9sbGVyJiBzY3JvbGxiYXJzQ29udHJvbGxlcigpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwpAQCAtMzc4LDYgKzM3
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSA9IDA7CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gbV9zY3JvbGxiYXJzQ29udHJvbGxlcjsKIAogICAgIC8vIFRo
ZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVj
dGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwog
ICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2Rl
LiBUaGUgY29tYmluYXRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CmluZGV4IDk2NjU3NzA3ZGNlZjgwZWRiMTJmOTcwZGJjYWVlZWYxZTU0ODczMWYuLmYwYWQyMmE5
MGQ5NjJhNTYzNTA2MGVlNDUwYTRmOTZlMTA0YjBiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBz
aG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyh0aGlzKTsK
IH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
Mzk1ZDYxMDM3MTQwMmIzOWJkNzdlNDZiODdkYmNjYjY0ZmIxMzg0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShX
UEUpCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IFNjcm9sbGJhcnNDb250
cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyPihzY3JvbGxhYmxlQXJlYSk7Cit9
CisjZW5kaWYKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9sbGJhcnNDb250cm9sbGVyKFNj
cm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Ny
b2xsYWJsZUFyZWEpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MTZk
NGRkYjVkZjhjNGJmOWIxOTFhNDVlZmZiNTY4MDUwODUyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oCkBAIC0wLDAgKzEs
OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxi
YXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXIpOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IGNyZWF0ZShTY3JvbGxhYmxl
QXJlYSYpOworCisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXIoU2Nyb2xsYWJsZUFy
ZWEmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKyAg
ICAKKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbGFibGVBcmVhOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkKGNvbnN0IEZsb2F0U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRp
b25zKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29u
c3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdCB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgbWF5QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVk
SW5Db250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxi
YXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Ny
b2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93
bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGxv
Y2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5
ZXJzKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEpOyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBo
b3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlT
dHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCitwcml2YXRlOgorICAg
IFNjcm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3Jv
bGxBbmltYXRvckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9T
Y3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCmluZGV4IDg5MDg0MmRjNjYzZjYzOTk1NzJmODkzMTQ1
ODljYjI3MjczZDliODIuLjY3NzM5YzhhMjVlZmE3N2ZiZjQ3MjQ2ZjRkYWZjZGE5YWQ4ZTQ4ZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bEFuaW1hdG9yR2VuZXJpYy5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmwKIAogU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmltYXRvckdlbmVyaWMoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xs
YWJsZUFyZWEpCi0gICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywg
JlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmly
ZWQpCiB7CiAgICAgbV9raW5ldGljQW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRp
b25LaW5ldGljPigKICAgICAgICAgW3RoaXNdKCkgLT4gU2Nyb2xsRXh0ZW50cyB7CkBAIC05Nywx
OTYgKzk2LDUgQEAgdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZVBvc2l0aW9uKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JP
ZmZzZXQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1hdG9yOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotCi0gICAgaWYgKCFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MTsKLSAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9s
bGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7Ci0g
ICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXIgPSBudWxscHRyOwotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9s
bGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9ob3Jpem9udGFsT3Zlcmxh
eVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MDsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxi
YXJzT3BhY2l0eSgpCi17Ci0gICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYmIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXItPm9wYWNpdHkoKSkgewotICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAg
aWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkK
LSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
LT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0
T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAgaWYg
KG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQot
ICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwot
ICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQot
ewotICAgIGRvdWJsZSBwID0gdCAtIDE7Ci0gICAgcmV0dXJuIHAgKiBwICogcCArIDE7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNb25vdG9uaWNU
aW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgZG91YmxlIHByb2dy
ZXNzID0gMTsKLSAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25FbmRUaW1lKQotICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52
YWx1ZSgpOwotICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNl
ICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7Ci0gICAgaWYgKHBy
b2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKLSAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOwotICAgICAgICB1
cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
LSAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9t
czsKLSAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUg
LSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVy
dmFsKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KGRlbHRhVG9OZXh0RnJhbWUpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlT3ZlcmxheVNj
cm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNob3dPdmVybGF5
U2Nyb2xsYmFycygpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5p
c0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgp
OwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsK
LSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwotICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92
ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5l
cmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIg
JiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9IDA7
Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyBvdmVy
Zmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSAr
IG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dTY3JvbGxiYXJz
QW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQot
ewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
R2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgaGlkZU92ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpCi17Ci0gICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQotewotICAgIHNob3dP
dmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6Y29u
dGVudEFyZWFEaWRIaWRlKCkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0
b3AoKTsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgewotICAg
ICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKLSAgICAgICAgdXBk
YXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
KQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxk
TG9ja1N0YXRlKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3Vs
ZExvY2tTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2Nr
ZWQgPSBzaG91bGRMb2NrU3RhdGU7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3Jv
bGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgewotICAgICAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJh
ci0+c2V0T3BhY2l0eSgwKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
KQotICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPT0gMSkKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAg
ICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKaW5kZXggZTA0
NmM1MzFiYjg0YzJhY2ZmNWU4OTQ2NTU2ZGRjMTEyNWM5OGFmMy4uMmQ2YWQ5OWM2MTMxNTFjZDU1
YWVlOTkyNGJkN2JiYTZmMWVlMDNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC00NCw0MCArNDQsMTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR2VuZXJpYygpOwogCiBwcml2
YXRlOgotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYsIFNjcm9sbENsYW1waW5nKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQg
d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZv
aWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIGZpbmFsOwogCisgICAgYm9vbCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRl
UG9zaXRpb24oRmxvYXRQb2ludCYmKTsKIAotICAgIHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotICAg
IHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVPdmVybGF5U2Ny
b2xsYmFyc09wYWNpdHkoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25L
aW5ldGljPiBtX2tpbmV0aWNBbmltYXRpb247Ci0gICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJz
TG9ja2VkIHsgZmFsc2UgfTsKLSAgICBUaW1lciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25U
aW1lcjsKLSAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9
OwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07Ci0g
ICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07Ci0gICAg
TW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWU7Ci0gICAg
TW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgxYTc1MjdhNTRlNzMxNWNlMTA0ZTliNDViNzZhYzUzMjhmNGQ5ZjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250
cm9sbGVyR2VuZXJpYy5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljLmgiCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1
cmF0aW9uIHsgMV9zIH07CitzdGF0aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNB
bmltYXRpb25IaWRlRGVsYXkgeyAyX3MgfTsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJhcnND
b250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJv
bGxlckdlbmVyaWM+KHNjcm9sbGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljOjpTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9s
bGFibGVBcmVhKQorICAgIDogU2Nyb2xsYmFyc0NvbnRyb2xsZXIoc2Nyb2xsYWJsZUFyZWEpCisg
ICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbGJhcnND
b250cm9sbGVyR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCit7
Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6flNjcm9sbGJhcnNDb250cm9sbGVy
R2VuZXJpYygpID0gZGVmYXVsdDsKKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6
OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIFNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwor
CisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1
cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgaWYg
KCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBoaWRl
T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7Cisg
ICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xs
YmFyKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7
CisgICAgaWYgKCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7CisgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsK
KyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3sKKyAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxs
cHRyOworICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAh
PSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hvcml6b250YWxPdmVybGF5U2Ny
b2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQor
ICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3Bh
Y2l0eSgpCit7CisgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIt
Pm9wYWNpdHkoKSkgeworICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3Bh
Y2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAg
ICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgfQor
CisgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFj
aXR5KCkpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0
eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1faG9y
aXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAg
ICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIH0K
K30KKworc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQoreworICAg
IGRvdWJsZSBwID0gdCAtIDE7CisgICAgcmV0dXJuIHAgKiBwICogcCArIDE7Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXJGaXJlZCgpCit7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBNb25vdG9uaWNU
aW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgZG91YmxlIHByb2dy
ZXNzID0gMTsKKyAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25FbmRUaW1lKQorICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52
YWx1ZSgpOworICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNl
ICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7CisgICAgaWYgKHBy
b2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKKyAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOworICAgICAgICB1
cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICB9CisKKyAgICBpZiAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7
CisgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9t
czsKKyAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUg
LSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVy
dmFsKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KGRlbHRhVG9OZXh0RnJhbWUpOworICAgIH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNj
cm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OnNob3dP
dmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25U
aW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAx
KQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIu
c3RvcCgpOworCisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3Zl
cnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudDsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOworICAgIGlm
IChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25T
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGlt
ZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOworICAgICAgICBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRhcmdldCA9IDA7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9
PSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7CisgICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZs
b3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRl
RGVsYXkpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
Cit7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7CisgICAgc2hvd092
ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
Ojpjb250ZW50QXJlYURpZFNob3coKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRl
KCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICBpZiAo
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKKyAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9s
bGJhcnNPcGFjaXR5KCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2Vu
ZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKQoreworICAg
IHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
R2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9j
a1N0YXRlKQoreworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3VsZExv
Y2tTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQg
PSBzaG91bGRMb2NrU3RhdGU7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxi
YXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgeworICAgICAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxPdmVy
bGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eSgwKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQor
ICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJl
bnQgPT0gMSkKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzcyYzUxYTcwZTViMjZjNjY0NzgxNjRmOGRkYzNlMWQ4N2M2MWJmNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFy
c0NvbnRyb2xsZXJHZW5lcmljLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJz
Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljKFNjcm9sbGFibGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRh
bFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgbW91c2VFbnRlcmVk
Q29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEo
KSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbnRl
bnRBcmVhRGlkSGlkZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3Jv
bGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvY2tPdmVy
bGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNob3dPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgdm9p
ZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKworICAgIFNjcm9sbGJhciogbV9o
b3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICBTY3JvbGxiYXIqIG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9vdmVybGF5
U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGltZXI7CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNv
dXJjZSB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0
IHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50IHsg
MCB9OworICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRU
aW1lOworICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGlt
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKaW5kZXggZjBmODgzMzZmYmJkN2RmYzRiNWQx
OWJiNDRiNzlmNTczMGRhNzUwMS4uOGI4MWY5MDRmNmUyNWZmYTFhMGRmMjI2ZTFmYWU0ZmE1MWEz
MWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1h
dG9ySU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9y
SU9TLmgKQEAgLTU1LDE2ICs1NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBBeGlzTGF0Y2hIb3Jp
em9udGFsLAogICAgICAgICBBeGlzTGF0Y2hWZXJ0aWNhbAogICAgIH07Ci0gICAgQXhpc0xhdGNo
IG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2g7Ci0gICAgYm9vbCBtX2luVG91Y2hTZXF1ZW5jZTsKLSAg
ICBib29sIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzOwotICAgIGJvb2wgbV9zdGFydGVkU2Nyb2xs
OworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoIHsgQXhpc0xhdGNoTm90Q29t
cHV0ZWQgfTsKKyAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZFNj
cm9sbCB7IGZhbHNlIH07CiAgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9pbnQ7CiAgICAgSW50
UG9pbnQgbV9sYXN0VG91Y2hQb2ludDsKIAogICAgIC8vIFdoZW4gd2UncmUgaW4gYSB0b3VjaCBz
ZXF1ZW5jZSwgdGhpcyB3aWxsIHBvaW50IHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEgdGhhdAogICAg
IC8vIHNob3VsZCBhY3R1YWxseSBiZSBzY3JvbGxlZCBkdXJpbmcgdGhlIHNlcXVlbmNlLgotICAg
IFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZTsKKyAgICBT
Y3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgeyBudWxscHRy
IH07CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3Jv
bGxBbmltYXRvcklPUy5tbQppbmRleCBjYjRmYjc4ODRjODQwNjM1MzdlNzUwMmM2MjNjNDRiZWIz
NmNhN2Y3Li5kOTc2ZTRlYTRjZjlmMGQwODZiZTlhZTMwYTc2ZTU1OGE4YTljNjM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCkBAIC00
NSwxMyArNDUsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1h
dG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogCiBTY3JvbGxBbmltYXRvcklP
Uzo6U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAg
IDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKLSAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhpc0xhdGNoTm90Q29tcHV0ZWQpCi0g
ICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKLSAgICAsIG1fY29tbWl0dGVkVG9TY3JvbGxB
eGlzKGZhbHNlKQotICAgICwgbV9zdGFydGVkU2Nyb2xsKGZhbHNlKQotICAgICwgbV9zY3JvbGxh
YmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKLSNlbmRpZgogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDRhNWUzZjJlMmY5
NmQ2ZTU1OGNmYTNmZGIxYTcyOWVjZWNiNWI0NGMuLjViNWJhNTNhZGI0ODJlMWFmNTMyY2M2ZTA5
ZGFlMWMzOGQ1MmEyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxBbmltYXRvck1hYy5oCkBAIC0yOCwxMTkgKzI4LDQ3IEBACiAKICNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIK
LSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19D
TEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLU9CSkNfQ0xBU1MgV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGU7Ci1PQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1wRGVsZWdhdGU7
Ci0KLXR5cGVkZWYgaWQgU2Nyb2xsZXJJbXBQYWlyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFNjcm9sbGJhcjsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgOiBwdWJsaWMgU2Ny
b2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgZmluYWwgOiBwdWJsaWMgU2Ny
b2xsQW5pbWF0b3IgewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVB
cmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiBuZXdQb3NpdGlvbik7Ci0gICAgYm9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29u
c3QgeyByZXR1cm4gbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOyB9Ci0KLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0
aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICB2
b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICB2b2lkIHNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBib29sIHNjcm9sbGJhcnNDYW5C
ZUFjdGl2ZSgpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIFJldGFpblB0cjxpZD4gbV9z
Y3JvbGxBbmltYXRpb25IZWxwZXI7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwotCi0gICAgUmV0
YWluUHRyPFNjcm9sbGVySW1wUGFpcj4gbV9zY3JvbGxlckltcFBhaXI7Ci0gICAgUmV0YWluUHRy
PFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlPiBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlOwot
ICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX2hvcml6b250YWxTY3JvbGxl
ckltcERlbGVnYXRlOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX3Zl
cnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKLQotICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXJGaXJlZCgpOwotICAgIFRpbWVyIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7
Ci0KLSAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgpOwotICAgIFRp
bWVyIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcjsKLSAgICBGbG9hdFNpemUgbV9jb250
ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllciwgT3B0aW9uU2V0PFNjcm9sbEJlaGF2aW9yPikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBz
Y3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8U2Nyb2xs
QmVoYXZpb3I+KSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKICAgICBib29sIHNob3VsZEZvcndhcmRXaGVlbEV2ZW50c1RvUGFyZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkg
ZmluYWw7CiAKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsKICAgICAKLSAgICB2b2lkIG5vdGlmeVBvc2l0aW9u
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRl
bnRBcmVhV2lsbFBhaW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsK
LSAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgd2ls
bEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygp
IG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNjcm9s
bEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0
OwotCi0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91
bGRMb2NrU3RhdGUpIGZpbmFsOwotCi0gICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhvcml6b250YWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzaG91bGRTY3Jv
bGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBv
dmVycmlkZTsKLQotICAgIC8vIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbigpIHdpbGwgZG8g
dGhlIHNhbWUgd29yayB0aGF0IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKCkgZG9lcyBleGNlcHQK
LSAgICAvLyBpdCBkb2VzIGl0IGFmdGVyIGEgemVyby1kZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3
aWxsIHByZXZlbnQgdXMgZnJvbSB1cGRhdGluZyBvdmVybGF5IHNjcm9sbGJhciAKLSAgICAvLyBp
bmZvcm1hdGlvbiBkdXJpbmcgbGF5b3V0LgotICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWQoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7Ci0gICAgdm9pZCBzZW5kQ29udGVudEFy
ZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7CisgICAgdm9pZCBu
b3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmluYWw7CiAKICAg
ICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwogCi0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbFNu
YXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CiAKLSAgICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotICAgIFN0cmluZyB2ZXJ0aWNhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBwcm9jZXNz
V2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JikgZmluYWw7CiAKICAgICAvLyBTY3JvbGxDb250cm9sbGVyQ2xpZW50Lgog
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKQEAgLTE1Nyw5ICs4NSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBmaW5hbDsK
ICNlbmRpZgogCi0gICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7Ci0gICAgYm9v
bCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0OworICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7
CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmlu
ZGV4IDE3YTkxYjUzZjk1NjMxYWUwMThhYzFiYWE2MTFmN2Q2NzJiZjIyY2IuLjk2ZjhiNDQ4MDIw
MDg3MjUxOTNlODViNjYwOWMyYTY4ZmVmZTE2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KQEAgLTMxLDQ2ICszMSwyMCBAQAogI2lt
cG9ydCAiR3JhZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKLSNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKICNpbXBvcnQgIlNjcm9s
bGFibGVBcmVhLmgiCi0jaW1wb3J0ICJTY3JvbGxiYXJUaGVtZS5oIgotI2ltcG9ydCAiU2Nyb2xs
YmFyVGhlbWVNYWMuaCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsZXJJbXBTUEkuaD4K
KyNpbXBvcnQgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNjcm9sbGJh
clRoZW1lTWFjKiBtYWNTY3JvbGxiYXJUaGVtZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUmIHNj
cm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3Jv
bGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMq
Pigmc2Nyb2xsYmFyVGhlbWUpIDogbnVsbHB0cjsKLX0KLQotc3RhdGljIE5TU2Nyb2xsZXJJbXAg
KnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQotewotICAgIHJl
dHVybiBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KIHVzaW5nIFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOwogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM7CiB1c2luZyBXZWJDb3JlOjpT
Y3JvbGxiYXI7Ci11c2luZyBXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzsKIHVzaW5nIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI7CiB1c2luZyBXZWJDb3JlOjpWZXJ0aWNhbFNjcm9sbGJhcjsKLXVz
aW5nIFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lOwogdXNpbmcgV2ViQ29yZTo6SW50UmVjdDsK
LXVzaW5nIFdlYkNvcmU6OlRodW1iUGFydDsKLXVzaW5nIFdlYkNvcmU6OkN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb247Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi11c2luZyBXZWJDb3JlOjpMb2dPdmVy
bGF5U2Nyb2xsYmFyczsKLSNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7
CkBAIC0xNzYsNTIyICsxNTAsNiBAQCAtICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlw
cwogCiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgOiBOU09i
amVjdCA8TlNTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4KLXsKLSAgICBTY3JvbGxhYmxlQXJlYSog
X3Njcm9sbGFibGVBcmVhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Nyb2xs
YWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Ny
b2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGFi
bGVBcmVhID0gc2Nyb2xsYWJsZUFyZWE7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
aW52YWxpZGF0ZQotewotICAgIF9zY3JvbGxhYmxlQXJlYSA9IDA7Ci19Ci0KLS0gKE5TUmVjdClj
b250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Ny
b2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAg
aWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBOU1plcm9SZWN0OwotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUgPSBfc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRz
U2l6ZSgpOwotICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgp
LCBjb250ZW50c1NpemUuaGVpZ2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNj
cm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJl
YSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+aW5M
aXZlUmVzaXplKCk7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFG
b3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJs
ZUFyZWEpCi0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIC8vIEl0J3MgT0sgdGhh
dCB0aGlzIHBvc2l0aW9uIGlzbid0IHJlbGF0aXZlIHRvIHRoaXMgc2Nyb2xsZXIgKHdoaWNoIG1p
Z2h0IGJlIGFuIG92ZXJmbG93IHNjcm9sbGVyKS4KLSAgICAvLyBBcHBLaXQganVzdCB0YWtlcyB0
aGUgcmVzdWx0IGFuZCBwYXNzZXMgaXQgYmFjayB0byAtc2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRD
b250ZW50UG9pbnQ6dG9TY3JvbGxlckltcDouCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi0tIChOU1BvaW50KXNjcm9sbGVy
SW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgY29udmVydENvbnRl
bnRQb2ludDooTlNQb2ludClwb2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFp
cik7Ci0KLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSB8fCAhc2Nyb2xsZXJJbXApCi0gICAgICAg
IHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gMDsKLSAgICBpZiAoW3Njcm9sbGVySW1wIGlzSG9yaXpvbnRhbF0pCi0gICAgICAgIHNjcm9s
bGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGVsc2Ug
Ci0gICAgICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIo
KTsKLQotICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBoZXJl
IHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCi0gICAgLy8gbWV0aG9kIHRv
IGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVlbiBz
ZXQgdG8gMCBhbmQgdGhlCi0gICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFzIGJl
ZW4gY2FsbGVkLiBXZSBzaG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKLSAgICAvLyBvZiB0
aGUgY2xlYW4tdXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJh
cigpIHRvIGF2b2lkIHRoaXMKLSAgICAvLyBpc3N1ZS4KLSAgICBpZiAoIXNjcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNj
cm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiBzY3JvbGxi
YXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBv
aW50SW5Db250ZW50QXJlYSkpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNTY3Jv
bGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJ
blJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotCi0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKLX0KLQotLSAodm9pZClz
Y3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHVwZGF0
ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJT
dHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9zY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxl
clN0eWxlOm5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07Ci0KLSAgICBzdGF0aWNfY2FzdDxT
Y3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSkudXBk
YXRlU2Nyb2xsZXJTdHlsZSgpOwotfQotCi1AZW5kCi0KLWVudW0gRmVhdHVyZVRvQW5pbWF0ZSB7
Ci0gICAgVGh1bWJBbHBoYSwKLSAgICBUcmFja0FscGhhLAotICAgIFVJU3RhdGVUcmFuc2l0aW9u
LAotICAgIEV4cGFuc2lvblRyYW5zaXRpb24KLX07Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRmVhdHVyZVRvQW5pbWF0
ZSBmZWF0dXJlKQotewotICAgIHN3aXRjaCAoZmVhdHVyZSkgewotICAgIGNhc2UgVGh1bWJBbHBo
YTogdHMgPDwgIlRodW1iQWxwaGEiIDsgYnJlYWs7Ci0gICAgY2FzZSBUcmFja0FscGhhOiB0cyA8
PCAiVHJhY2tBbHBoYSIgOyBicmVhazsKLSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOiB0cyA8
PCAiVUlTdGF0ZVRyYW5zaXRpb24iIDsgYnJlYWs7Ci0gICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0
aW9uOiB0cyA8PCAiRXhwYW5zaW9uVHJhbnNpdGlvbiIgOyBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIHRzOwotfQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biA6IE5TT2JqZWN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwotICAgIFJldGFpblB0
cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xsZXJJbXA7Ci0gICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVh
dHVyZVRvQW5pbWF0ZTsKLSAgICBDR0Zsb2F0IF9zdGFydFZhbHVlOwotICAgIENHRmxvYXQgX2Vu
ZFZhbHVlOwotICAgIE5TVGltZUludGVydmFsIF9kdXJhdGlvbjsKLSAgICBSZXRhaW5QdHI8TlNU
aW1lcj4gX3RpbWVyOwotICAgIFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7Ci0gICAgUmVm
UHRyPEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsKLX0KLS0gKGlk
KWluaXRXaXRoU2Nyb2xsYmFyOihTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRl
OihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQp
c3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uOwotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0
aW1lcjsKLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotLSAo
dm9pZClzdG9wQW5pbWF0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhcjooU2Nyb2xsYmFyKilzY3Jv
bGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRl
IGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZh
bHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgY29u
c3QgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gMC4wMTsKLSAgICBfdGltZXIgPSBhZG9w
dE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGlt
ZUludGVydmFsU2luY2VOb3c6MF0gaW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdldDpzZWxmIHNl
bGVjdG9yOkBzZWxlY3RvcihzZXRDdXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVwZWF0
czpZRVNdKTsKLSAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBfdGltaW5nRnVuY3Rpb24g
PSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbjo6RWFzZUluT3V0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFy
cywgc3RyZWFtIDw8ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8
IGZlYXR1cmVUb0FuaW1hdGUgPDwgIiBmcm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwg
ZW5kVmFsdWUpOwotCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBfZmVhdHVyZVRv
QW5pbWF0ZSA9IGZlYXR1cmVUb0FuaW1hdGU7Ci0gICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVl
OwotICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc3RhcnRBbmltYXRpb24KLXsKLSAgICBBU1NFUlQoX3Njcm9sbGJhcik7Ci0KLSAgICBf
c2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7Ci0KLSAg
ICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwgc2VsZiA8PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8
IF9mZWF0dXJlVG9BbmltYXRlKTsKLQotICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRU
aW1lcjpfdGltZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgX3N0
YXJ0RGF0ZSA9IGFkb3B0TlMoW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2lu
Y2VOb3c6MF0pOwotfQotCi0tICh2b2lkKXNldFN0YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1
ZQotewotICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKLX0KLQotLSAodm9pZClzZXRFbmRW
YWx1ZTooQ0dGbG9hdCllbmRWYWx1ZQotewotICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwotfQot
Ci0tICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyCi17Ci0gICAgQ0dG
bG9hdCBwcm9ncmVzcyA9IDA7Ci0gICAgTlNEYXRlICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGlt
ZUludGVydmFsU2luY2VOb3c6MF07Ci0gICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cg
dGltZUludGVydmFsU2luY2VEYXRlOl9zdGFydERhdGUuZ2V0KCldOwotICAgIGlmIChlbGFwc2Vk
ID4gX2R1cmF0aW9uKSB7Ci0gICAgICAgIHByb2dyZXNzID0gMTsKLSAgICAgICAgW3RpbWVyIGlu
dmFsaWRhdGVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHQgPSAxOwot
ICAgICAgICBpZiAoX2R1cmF0aW9uKQotICAgICAgICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRp
b247Ci0gICAgICAgIHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQs
IF9kdXJhdGlvbik7Ci0gICAgfQotICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gIiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVz
cyA8PCJdIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKLQotICAgIENHRmxvYXQgY3VycmVu
dFZhbHVlOwotICAgIGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRWYWx1ZSkKLSAgICAgICAgY3VycmVu
dFZhbHVlID0gMSAtIHByb2dyZXNzOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVudFZhbHVlID0g
cHJvZ3Jlc3M7Ci0KLSAgICBzd2l0Y2ggKF9mZWF0dXJlVG9BbmltYXRlKSB7Ci0gICAgY2FzZSBU
aHVtYkFscGhhOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFs
dWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYWNrQWxwaGE6Ci0gICAgICAgIFtfc2Ny
b2xsZXJJbXAgc2V0VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3Rh
dGVUcmFuc2l0aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFu
c2lvblRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJl
YWQoKSkKLSAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotfQotCi0tICh2b2lkKWlu
dmFsaWRhdGUKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbc2VsZiBz
dG9wQW5pbWF0aW9uXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgX3Njcm9s
bGJhciA9IDA7Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uCi17Ci0gICAgX2R1cmF0aW9uID0gZHVyYXRpb247Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1h
dGlvbgotewotICAgIFtfdGltZXIgaW52YWxpZGF0ZV07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFj
ZSBXZWJTY3JvbGxlckltcERlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwg
TlNTY3JvbGxlckltcERlbGVnYXRlPgotewotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogX3Njcm9s
bGJhcjsKLQotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfa25vYkFs
cGhhQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBf
dHJhY2tBbHBoYUFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1h
dGlvbj4gX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPiBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbjsKLX0KLS0g
KGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcjsKLS0g
KHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlNjcm9s
bGVySW1wRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9s
bGJhciopc2Nyb2xsYmFyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJh
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxBbmltYXRpb25zCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW19rbm9iQWxwaGFBbmltYXRpb24g
c3RvcEFuaW1hdGlvbl07Ci0gICAgW190cmFja0FscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25d
OwotICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAg
W19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotLSAoTmFrZWRQdHI8U2Nyb2xsQW5pbWF0b3JNYWM+
KXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgcmV0dXJuICZzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRv
ck1hYyY+KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKSk7Ci19
Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAg
cmV0dXJuIGFSZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNS
ZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0tIChDQUxheWVyICopbGF5ZXIK
LXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAo
IVNjcm9sbGJhclRoZW1lTWFjOjppc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyOwotICAgIGlmIChfc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBsYXll
ciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwotCi0gICAgc3RhdGljIENBTGF5ZXIg
KmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBsYXllciA/
IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOwotfQotCi0tIChOU1BvaW50KW1v
dXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcAotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1Bv
aW50OwotCi0gICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xsZXJJbXAgPT0gc2Ny
b2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIGF1dG8gcG9zaXRpb25J
blZpZXcgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNlUG9zaXRp
b25JblZpZXcoKTsKLSAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5n
Vmlldyhwb3NpdGlvbkluVmlldyk7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6
KE5TUmVjdClyZWN0Ci17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0gKEJPT0wpc2hvdWxkVXNl
TGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAot
ewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5zdXBwb3J0
c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCk7Ci19Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9T
VVBQT1JUKQotLSAoTlNBcHBlYXJhbmNlICopZWZmZWN0aXZlQXBwZWFyYW5jZUZvclNjcm9sbGVy
SW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Ny
b2xsZXJJbXApOwotCi0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJy
ZW50QXBwZWFyYW5jZV07Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAotCi0gICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBGcmFtZVZpZXc6OnBhaW50U2Nyb2xs
Q29ybmVyLgotICAgIC8vIFRoZSBiYXNlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGRhcmsgQXF1
YSwgc28gd2UgbWlnaHQgZ2V0IGEgbnVsbCByZXN1bHQuCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkudXNlRGFya0FwcGVhcmFuY2VGb3JT
Y3JvbGxiYXJzKCk7Ci0gICAgaWYgKGF1dG8gKmFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFw
cGVhcmFuY2VOYW1lZDp1c2VEYXJrQXBwZWFyYW5jZSA/IE5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1
YSA6IE5TQXBwZWFyYW5jZU5hbWVBcXVhXSkKLSAgICAgICAgcmV0dXJuIGFwcGVhcmFuY2U7Ci0g
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICByZXR1cm4gW05TQXBw
ZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5jZV07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi19Ci0jZW5kaWYKLQotLSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRh
aW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24g
c2Nyb2xsZXJQYWludGVyOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdl
YkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBo
YSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICAvLyBJZiB0aGUgdXNl
ciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmlt
YXRlZCBoZXJlLgotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1cm5zLgotICAg
IGJvb2wgbXVzdEFuaW1hdGUgPSBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQoKTsKLQotICAgIGlmIChbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNjcm9sbGJh
clBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0QW5pbWF0ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKLSAgICAgICAgW3NlbGYgc2Nyb2xsQW5p
bWF0b3JdLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFu
aW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0aW1lci4KLSAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0t
PnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5
IGFuaW1hdGluZywgc3RvcAotICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7Ci0gICAg
ICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgICAgICBzY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uID0gbmlsOwotICAgIH0KLQotICAgIGlmIChTY3JvbGxiYXJUaGVt
ZU1hYyogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKQotICAgICAgICBtYWNUaGVtZS0+
c2V0UGFpbnRDaGFyYWN0ZXJpc3RpY3NGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOwotCi0gICAg
aWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsK
LSAgICAgICAgICAgIEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xsZXJQYWludGVy
IHJlY3RGb3JQYXJ0Ok5TU2Nyb2xsZXJLbm9iXSk7Ci0gICAgICAgICAgICBbc2VsZiBzY3JvbGxB
bmltYXRvcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgc2Nyb2xsYmFyUGFydEFu
aW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6
cGFydCA9PSBUaHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuaW1hdGVGcm9tOnBhcnQgPT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRlciBr
bm9iQWxwaGFdIDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhhXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYW5pbWF0ZVRvOm5ld0FscGhhIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9u
OmR1cmF0aW9uXSk7Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25d
OwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAg
YW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigq
X3Njcm9sbGJhcikpOwotCi0gICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5T
U2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcDsKLSAgICBpZiAoIVtzZWxmIHNjcm9sbEFuaW1hdG9y
XS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkpIHsKLSAgICAgICAgW3Njcm9sbGVySW1wIHNldEtu
b2JBbHBoYTowXTsKLSAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFyIGF3
YXksIHRoYXQgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdvaW5n
IHRvCi0gICAgLy8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4g
Q2FsbGluZyBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQotICAg
IC8vIHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1wIEFQ
SS4KLSAgICBpZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRh
dGVPblNlY29uZGFyeVRocmVhZCgpKQotICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVBy
ZXNlbnRhdGlvblZhbHVlOk5PXTsKLQotICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tu
b2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2Vi
Q29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxl
ckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRl
ciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7Ci0gICAgW3NlbGYgc2V0VXBBbHBoYUFu
aW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWlu
dGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0Fs
cGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0gICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3YXlz
IGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMg
YXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgotICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRlVHJh
bnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVz
c11dOwotCi0gICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLCB0
aGVuIHdlIGFyZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9sbGlu
ZyB0aHJlYWQuCi0gICAgaWYgKF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlU
aHJlYWQoKSkKLSAgICAgICAgW3Njcm9sbGVySW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5P
XTsKLQotICAgIGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uKQotICAgICAgICBfdWlT
dGF0ZVRyYW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1h
dGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgotICAgICAgICAgICAgZmVh
dHVyZVRvQW5pbWF0ZTpVSVN0YXRlVHJhbnNpdGlvbgotICAgICAgICAgICAgYW5pbWF0ZUZyb206
W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdCi0gICAgICAgICAgICBhbmlt
YXRlVG86MS4wCi0gICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwg
anVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCi0gICAgICAg
IFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAg
dWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9u
QW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25B
bmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIH0KLSAgICBbX3VpU3RhdGVUcmFu
c2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlcklt
cDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9u
V2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIGlmICghX3Njcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9s
bGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7Ci0KLSAgICAvLyBFeHBhbnNpb25UcmFu
c2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBw
cm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhhcmQgdHJhbnNpdGlvbi4KLSAgICBbc2Nyb2xsZXJJbXAg
c2V0RXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgZXhwYW5zaW9u
VHJhbnNpdGlvblByb2dyZXNzXV07Ci0KLSAgICBpZiAoIV9leHBhbnNpb25UcmFuc2l0aW9uQW5p
bWF0aW9uKSB7Ci0gICAgICAgIF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHRO
UyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9z
Y3JvbGxiYXIKLSAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6RXhwYW5zaW9uVHJhbnNpdGlv
bgotICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRp
b25Qcm9ncmVzc10KLSAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKLSAgICAgICAgICAgIGR1cmF0
aW9uOmR1cmF0aW9uXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVl
ZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBj
YXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25Bbmlt
YXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVz
c11dOwotICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6
MS4wXTsKLSAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9u
OmR1cmF0aW9uXTsKLSAgICB9Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0
YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAq
KXNjcm9sbGVySW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU092ZXJsYXlTY3Jv
bGxlclN0YXRlKW5ld092ZXJsYXlTY3JvbGxlclN0YXRlCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGVySW1wKTsKLSAgICBVTlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOwot
fQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBfc2Nyb2xsYmFyID0gMDsKLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBpbnZhbGlk
YXRlXTsKLSAgICBbX3RyYWNrQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgW191aVN0
YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX2V4cGFuc2lvblRyYW5z
aXRpb25BbmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwotfQotCi1AZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKQEAgLTcwMSwzMCArMTU5LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
CiAKIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAg
ICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1h
Yzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFy
ZWFTY3JvbGxlZFRpbWVyRmlyZWQpCi0gICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQo
ZmFsc2UpCi0gICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSkKIHsKICAgICBt
X3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsK
ICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmlu
ZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9z
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAgbV9zY3JvbGxlcklt
cFBhaXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJsZUFyZWFdKTsKLSAgICBtX3Njcm9s
bGVySW1wUGFpciA9IGFkb3B0TlMoW1tOU1Njcm9sbGVySW1wUGFpciBhbGxvY10gaW5pdF0pOwot
ICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTptX3Njcm9sbGVySW1wUGFpckRlbGVn
YXRlLmdldCgpXTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpTY3Jv
bGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CiB9CiAKLVNjcm9sbEFuaW1h
dG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIFttX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVdOwotICAg
IFttX3Njcm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX2hvcml6b250YWxT
Y3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxl
Z2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19CitTY3Jv
bGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkgPSBkZWZhdWx0OwogCiBzdGF0aWMg
Ym9vbCBzY3JvbGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkKIHsKQEAgLTc1Myw3ICsxOTQs
NyBAQCBzdGF0aWMgYm9vbCBydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3RlbSgpCiAKIGJvb2wg
U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IpCiB7Ci0gICAgbV9oYXZl
U2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBh
Z2VMb2FkKHRydWUpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBkbyBkaXJlY3Rpb25h
bCBzbmFwcGluZywgYnV0IG91ciBiYXNlIGNsYXNzIGRvZXMuIEl0IHdpbGwgY2FsbCBpbnRvCiAg
ICAgLy8gU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbCBhZ2FpbiB3aXRoIHRoZSBzbmFwcGVkIHBv
c2l0aW9ucyBhbmQgU2Nyb2xsQmVoYXZpb3I6OkRlZmF1bHQuCkBAIC04NDAsNDMgKzI4MSw2IEBA
IGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAog
ICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOwog
fQogCi1zdGF0aWMgU3RyaW5nIHNjcm9sbGJhclN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gIm5vbmUiX3M7Ci0KLSAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKHNjcm9sbGJhci0+ZW5hYmxl
ZCgpID8gImVuYWJsZWQiX3MgOiAiZGlzYWJsZWQiX3MpOwotCi0gICAgaWYgKCFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Ci0KLSAgICBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xs
YmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghc2Nyb2xsZXJJbXApCi0gICAgICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKLQotICAgIGlmIChzY3JvbGxlckltcC5leHBhbmRlZCkKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiLGV4cGFuZGVkIl9zKTsKLQotICAgIGlmIChzY3JvbGxlckltcC50
cmFja0FscGhhID4gMCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZpc2libGVfdHJhY2siX3Mp
OwotCi0gICAgaWYgKHNjcm9sbGVySW1wLmtub2JBbHBoYSA+IDApCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIix2aXNpYmxlX3RodW1iIl9zKTsKLQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKLX0KLQotU3RyaW5nIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3Rh
dGVGb3JUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUobV9zY3Jv
bGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1TdHJpbmcgU2Nyb2xsQW5p
bWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUobV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJh
cigpKTsKLX0KLQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3Np
dGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKIHsK
ICAgICBBU1NFUlQobV9zY3JvbGxBbmltYXRpb25IZWxwZXIpOwpAQCAtODg1LDMxNyArMjg5LDE1
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb25Gb3JT
Y3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5v
dGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogewotICAgIG5vdGlm
eUNvbnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
YmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOwogICAgIFNjcm9s
bEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOwogfQogCi12b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Ci17Ci0gICAgaWYgKFtt
X3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBb
bV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFXaWxsRHJhd107Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9s
bGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVB
cmVhKCkgPDwgIl0gbW91c2VFbnRlcmVkQ29udGVudEFyZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkKLXsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5p
bWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VFeGl0ZWRDb250
ZW50QXJlYSIpOwotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3Rh
dGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Ny
b2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJs
ZUFyZWEoKSA8PCAiXSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOwotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICAvLyBBdCB0aGlzIHRpbWUsIG9ubHkgbGVnYWN5
IHNjcm9sbGJhcnMgbmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhlcmUuCi0gICAgaWYgKFNj
cm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHls
ZUxlZ2FjeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKSkKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKLXsKLSAgICAvLyBBdCB0aGlzIHRpbWUsIG9ubHkgbGVnYWN5IHNjcm9sbGJh
cnMgbmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhlcmUuCi0gICAgaWYgKFNjcm9sbGVyU3R5
bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKE5TU2Nyb2xs
ZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKSkKLSAg
ICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJv
b2wgbW91c2VJc0Rvd24pIGNvbnN0Ci17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKE5T
U2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFy
KSkgewotICAgICAgICBbcGFpbnRlciBzZXRUcmFja2luZzptb3VzZUlzRG93bl07Ci0gICAgICAg
IGlmIChtb3VzZUlzRG93bikKLSAgICAgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNj
cm9sbEdlc3R1cmVdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbbV9zY3JvbGxlckltcFBh
aXIgZW5kU2Nyb2xsR2VzdHVyZV07Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojp3aWxsU3RhcnRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92
ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9z
Y3JvbGxlckltcFBhaXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFEaWRSZXNpemVdOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKFttX3Njcm9s
bGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZExpdmVSZXNpemVdOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZFNob3coKQotewotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciB3aW5kb3dPcmRlcmVkSW5dOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKQotewotICAgIGlmIChbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciB3aW5kb3dPcmRlcmVkT3V0XTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QKLXsK
LSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xs
QW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gZGlkQmVnaW5TY3Jv
bGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBh
aXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLQotICAgIGlmIChtX3doZWVsRXZlbnRUZXN0TW9uaXRv
cikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPmRlZmVyRm9yUmVhc29uKHJlaW50
ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZp
ZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNz
KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNv
bnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwg
IlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEVu
ZFNjcm9sbEdlc3R1cmUiKTsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNj
cm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVy
SW1wUGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKLQotICAgIGlmIChtX3doZWVsRXZlbnRUZXN0TW9u
aXRvcikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPnJlbW92ZURlZmVycmFsRm9y
UmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxl
QXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3Jv
bGxJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3Jv
bGxHZXN0dXJlKCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJh
cnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVh
KCkgPDwgIl0gbWF5QmVnaW5TY3JvbGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tT
dGF0ZSkKLXsKLSAgICBpZiAoc2hvdWxkTG9ja1N0YXRlKQotICAgICAgICBbbV9zY3JvbGxlcklt
cFBhaXIgbG9ja092ZXJsYXlTY3JvbGxlclN0YXRlOk5TT3ZlcmxheVNjcm9sbGVyU3RhdGVIaWRk
ZW5dOwotICAgIGVsc2UgewotICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgdW5sb2NrT3Zlcmxh
eVNjcm9sbGVyU3RhdGVdOwotCi0gICAgICAgIC8vIFdlIG5ldmVyIHVwZGF0ZSBzY3JvbGxlciBz
dHlsZSBmb3IgUGFpbnRlckNvbnRyb2xsZXJzIHRoYXQgYXJlIGxvY2tlZC4gSWYgd2UgaGF2ZSBh
IHBlbmRpbmcKLSAgICAgICAgLy8gbmVlZCB0byB1cGRhdGUgdGhlIHN0eWxlLCBkbyBpdCBvbmNl
IHdlJ3ZlIHVubG9ja2VkIHRoZSBzY3JvbGxlciBzdGF0ZS4KLSAgICAgICAgaWYgKG1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlKQotICAgICAgICAgICAgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwot
ICAgIH0KLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIVttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xs
ZXJTdGF0ZUlzTG9ja2VkXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3JvbGxlcklt
cCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlm
ICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Ny
b2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBh
ZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6
c2Nyb2xsYmFyXSk7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX3ZlcnRpY2FsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAg
ICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07Ci0KLSAgICBb
bV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBp
ZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0
S25vYkFscGhhOjFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3JvbGxlcklt
cCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlm
ICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fdmVydGljYWxTY3Jv
bGxlckltcERlbGVnYXRlKTsKLSAgICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52
YWxpZGF0ZV07Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBudWxscHRyOwot
Ci0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIg
c2V0VmVydGljYWxTY3JvbGxlckltcDpuaWxdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCgh
bV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcERlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRl
Om1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFwaGlj
c0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKV07Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9s
bGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgp
KQotICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlKTsKLSAgICBbbV9ob3Jp
em9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBtX2hvcml6b250YWxT
Y3JvbGxlckltcERlbGVnYXRlID0gbnVsbHB0cjsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRl
Om5pbF07Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpu
aWxdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbnZhbGlkYXRlU2Nyb2xsYmFyUGFy
dExheWVycyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgW3BhaW50ZXIg
c2V0TmVlZHNEaXNwbGF5OllFU107Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7
Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU2Nyb2xsZXJJ
bXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBp
ZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtwYWludGVyIHNldExheWVyOmxh
eWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCi17Ci0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFtwYWludGVyIHNldExheWVyOmxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbF07
Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIC8vIE5vbi1vdmVybGF5
IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZy4KLSAg
ICBpZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3Jv
bGxlclN0eWxlT3ZlcmxheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBPdmVybGF5
IHNjcm9sbGJhcnMgc2hvdWxkIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nIHdoZW5ldmVyIHRo
ZXkgYXJlIGF0IGFsbCB2aXNpYmxlLgotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3Jv
bGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYkFscGhhXSA+IDA7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3
aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGJ1dCB0aGUg
cGFnZQotICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhhdCBjYXNlLiBXZSBzaG91
bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQotICAgIC8vIFNjcm9sbGVySW1wUGFp
ciB3aGVuIHdlJ3JlIHJlYWxseSBzY3JvbGxpbmcgb24gYW4gYWN0aXZlIHBhZ2UuCi0gICAgaWYg
KFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuaXNIYW5kbGluZ1doZWVsRXZl
bnQoKSkKLSAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOwotICAgIGVsc2UK
LSAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGRlbHRhKTsKLX0KLQogdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCiB7CiAgICAgU2Nyb2xsQW5pbWF0
b3I6OmNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQg
PSBmYWxzZTsKLQotICAgIGlmIChzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSkKLSAgICAg
ICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICBbbV9ob3Jpem9udGFsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1w
RGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107CisgICAgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZChmYWxzZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigp
LmNhbmNlbEFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxl
V2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQpAQCAtMTIwNCwx
NSArMzA2LDE1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnRQaGFz
ZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKIAogICAgIC8vIFRoaXMgbWF5IG5vdCBo
YXZlIGJlZW4gc2V0IHRvIHRydWUgeWV0IGlmIHRoZSB3aGVlbCBldmVudCB3YXMgaGFuZGxlZCBi
eSB0aGUgU2Nyb2xsaW5nVHJlZSwKICAgICAvLyBTbyBzZXQgaXQgdG8gdHJ1ZSBoZXJlLgotICAg
IG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisgICAgc2V0SGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGVuc3VyZSB3ZSBn
ZXQgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkLgogICAgIGlmIChwaGFzZSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pCi0gICAgICAgIGRpZEJlZ2luU2Nyb2xsR2VzdHVy
ZSgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkuZGlk
QmVnaW5TY3JvbGxHZXN0dXJlKCk7CiAgICAgZWxzZSBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OkVuZGVkIHx8IHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpD
YW5jZWxsZWQpCi0gICAgICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsKKyAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEVuZFNjcm9sbEdlc3R1cmUoKTsK
ICAgICBlbHNlIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW4p
Ci0gICAgICAgIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkubWF5QmVnaW5TY3JvbGxHZXN0dXJlKCk7CiB9CiAK
ICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC0xMjI3LDcgKzMyOSw3IEBAIGJvb2wgU2Ny
b2xsQW5pbWF0b3JNYWM6OnNob3VsZEZvcndhcmRXaGVlbEV2ZW50c1RvUGFyZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVuCiAgICAgCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKLSAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNl
UGFnZUxvYWQodHJ1ZSk7CiAKICAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9sbGlu
Z0RlbHRhcygpIHx8ICFydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3RlbSgpKQogICAgICAgICBy
ZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CkBAIC0x
MzY4LDEyNSArNDcwLDYgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xs
QnkoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIH0KICNlbmRpZgogCi12b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKSB7Ci0gICAgICAgIG1fbmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNj
cm9sbGJhclRoZW1lTWFjKiBtYWNUaGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCk7Ci0gICAgaWYg
KCFtYWNUaGVtZSkgewotICAgICAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1hY1RoZW1lLT51c2VzT3Zlcmxh
eVNjcm9sbGJhcnNDaGFuZ2VkKCk7Ci0KLSAgICBOU1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUgPSBb
bV9zY3JvbGxlckltcFBhaXIgc2Nyb2xsZXJTdHlsZV07Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiB2
ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkg
ewotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIE5T
U2Nyb2xsZXJJbXAgKm9sZFZlcnRpY2FsUGFpbnRlciA9IFttX3Njcm9sbGVySW1wUGFpciB2ZXJ0
aWNhbFNjcm9sbGVySW1wXTsKLSAgICAgICAgYXV0byBuZXdWZXJ0aWNhbFBhaW50ZXIgPSByZXRh
aW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUgY29udHJv
bFNpemU6KE5TQ29udHJvbFNpemUpdmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgaG9y
aXpvbnRhbDpOTyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRWZXJ0aWNhbFBhaW50ZXJdKTsKLQot
ICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpuZXdWZXJ0
aWNhbFBhaW50ZXIuZ2V0KCldOwotICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNj
cm9sbGJhcigqdmVydGljYWxTY3JvbGxiYXIsIFdURk1vdmUobmV3VmVydGljYWxQYWludGVyKSk7
Ci0gICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxlckltcCgqdmVydGljYWxTY3JvbGxi
YXIpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRp
ZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAgICAgICAvLyBm
cmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdp
bGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJs
eSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRo
aWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgICAgIHZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNr
bmVzcykpOwotICAgIH0KLQotICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIg
PSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICBob3Jp
em9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgTlNTY3JvbGxlckltcCAq
b2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgaG9yaXpvbnRhbFNjcm9s
bGVySW1wXTsKLSAgICAgICAgYXV0byBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHJldGFpblB0cihb
TlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZToo
TlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250
YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZEhvcml6b250YWxQYWludGVyXSk7Ci0KLSAg
ICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpuZXdIb3Jp
em9udGFsUGFpbnRlci5nZXQoKV07Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9y
U2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld0hvcml6b250YWxQYWlu
dGVyKSk7Ci0gICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxlckltcCgqaG9yaXpvbnRh
bFNjcm9sbGJhcik7Ci0KLSAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3JvbGxiYXIgc3R5bGVz
IGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNldCB0aGUgCi0gICAg
ICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRoZSByZS1sYXlvdXQg
YmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCi0gICAgICAgIC8vIGFuZCBsZW5ndGggYXJl
IHByb3Blcmx5IHVwZGF0ZWQuCi0gICAgICAgIGludCB0aGlja25lc3MgPSBtYWNUaGVtZS0+c2Ny
b2xsYmFyVGhpY2tuZXNzKGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlj
a25lc3MsIHRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIC8vIElmIG1fbmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBhZ2UgaXMgcmVzdG9yaW5nIGZyb20gdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZSwgYW5kCi0gICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBlbiBvbiBp
dHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vyc2VsdmVz
LgotICAgIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKG5ld1N0eWxlID09
IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkgPyBTY3JvbGxiYXJTdHlsZTo6T3ZlcmxheSA6IFNjcm9s
bGJhclN0eWxlOjpBbHdheXNWaXNpYmxlLCAhbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpOwot
Ci0gICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkKLXsKLSAgICBtX2luaXRp
YWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMpOwotfQotCi1ib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCkKLXsKLSAg
ICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpCi17Ci0gICAgLy8g
VG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZp
cnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxlckltcFBhaXIKLSAgICAvLyBtaWdodCB0aGluayB0
aGF0IHRoZSBzY3JvbGxiYXJzIGFyZSBhbHJlYWR5IHNob3dpbmcgYW5kIGJhaWwgZWFybHkuCi0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgZmxhc2hTY3JvbGxlcnNdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsK
LSAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gZGVsdGE7Ci0KLSAg
ICBpZiAoIW1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0KLSAg
ICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RN
b25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9u
aXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25p
dG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRJbkRpcmVjdGlvbjpOU01h
a2VQb2ludChkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSldOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQoKQotewotICAg
IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xs
RGVsdGEpOwotICAgIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSBGbG9h
dFNpemUoKTsKLQotICAgIGlmIChtX3doZWVsRXZlbnRUZXN0TW9uaXRvcikKLSAgICAgICAgbV93
aGVlbEV2ZW50VGVzdE1vbml0b3ItPnJlbW92ZURlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0
X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRo
aXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNv
bnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCi17Ci0gICAgSW50UmVjdCByZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPSBzY3JvbGxlclRodW1iOwotICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBy
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFp
bmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7Ci0KLSAgICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVz
ID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Njcm9sbGFibGVBcmVhLnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29v
cmRpbmF0ZXMpOwotICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nv
b3JkaW5hdGVzOwotfQotCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewog
ICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIucHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKHdoZWVsRXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmU1ZDJmNzJhMWUzMjljNGFj
ZTQxNTczNDk0OTY4NWIwODE5ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmgKQEAgLTAsMCArMSwxMzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1Mg
V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CitPQkpDX0NMQVNTIFdlYlNjcm9sbGVy
SW1wUGFpckRlbGVnYXRlOworT0JKQ19DTEFTUyBXZWJTY3JvbGxlckltcERlbGVnYXRlOworCit0
eXBlZGVmIGlkIFNjcm9sbGVySW1wUGFpcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7CisKK2NsYXNzIFNjcm9sbGJhcnNDb250cm9sbGVyTWFj
IDogcHVibGljIFNjcm9sbGJhcnNDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxiYXJzQ29udHJvbGxlck1hYyk7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMoU2Nyb2xsYWJs
ZUFyZWEmKTsKKyAgICB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMoKTsKKworICAgIHZvaWQgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIGZpbmFsOyAvLyBGSVhN
RTogVXNlIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bnMoKSBmaW5hbDsKKworICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBtYXlCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29udGVu
dEFyZWFXaWxsUGFpbnQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgZmluYWw7
CisgICAgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91
c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IGZpbmFsOworICAgIHZv
aWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIGZpbmFsOworICAgIHZvaWQgY29udGVudHNTaXplQ2hh
bmdlZCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBmaW5hbDsK
KyAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIGZpbmFsOworICAgIHZvaWQgY29udGVudEFy
ZWFEaWRIaWRlKCkgZmluYWw7CisKKyAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkgZmluYWw7CisgICAgYm9vbCBzY3JvbGxiYXJz
Q2FuQmVBY3RpdmUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQ
YXJ0TGF5ZXJzKFNjcm9sbGJhciopIGZpbmFsOworCisgICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCkgZmluYWw7CisgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKSBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgZmluYWw7CisKKyAgICB2b2lkIG5vdGlmeUNvbnRl
bnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmluYWw7CisKKyAgICBTdHJp
bmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOworICAg
IFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwor
CisKKyAgICAvLyBQdWJsaWMgdG8gYmUgY2FsbGFibGUgZnJvbSBPYmotQy4KKyAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9p
ZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVy
VGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQoKSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIC8vIHNlbmRDb250ZW50QXJlYVNjcm9s
bGVkU29vbigpIHdpbGwgZG8gdGhlIHNhbWUgd29yayB0aGF0IHNlbmRDb250ZW50QXJlYVNjcm9s
bGVkKCkgZG9lcyBleGNlcHQKKyAgICAvLyBpdCBkb2VzIGl0IGFmdGVyIGEgemVyby1kZWxheSB0
aW1lciBmaXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSB1cGRhdGluZyBvdmVybGF5IHNj
cm9sbGJhcgorICAgIC8vIGluZm9ybWF0aW9uIGR1cmluZyBsYXlvdXQuCisgICAgdm9pZCBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsKKyAgICB2
b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIHNjcm9sbERl
bHRhKTsKKworICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpOworICAg
IHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKCk7CisKKyAgICBXaGVlbEV2
ZW50VGVzdE1vbml0b3IqIHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0OworCisgICAgVGlt
ZXIgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyAgICBUaW1lciBtX3NlbmRDb250ZW50
QXJlYVNjcm9sbGVkVGltZXI7CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xsZXJJbXBQYWlyPiBtX3Nj
cm9sbGVySW1wUGFpcjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+
IG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1w
RGVsZWdhdGU+IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGU7CisgICAgUmV0YWluUHRy
PFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlOwor
CisgICAgRmxvYXRTaXplIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGE7Cisg
ICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKKworICAgIGJvb2wgbV9uZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIy
ZmE4NDQ4MDczMTgxYTA4NTVhOTE4NTIwMTdlMmQ3NDlmN2VhMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0K
QEAgLTAsMCArMSwxMDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
Ik5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCisjaW1wb3J0ICJTY3JvbGxBbmltYXRvci5oIgorI2lt
cG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbXBvcnQgIlNjcm9sbGJhci5oIgorI2ltcG9ydCAi
U2Nyb2xsYmFyVGhlbWVNYWMuaCIKKyNpbXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCisjaW1wb3J0
ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIgLy8gRklYTUU6IFRoaXMgaXMgIGxheWVyaW5nIHZp
b2xhdGlvbi4KKworI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTY3JvbGxlckltcFNQSS5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5o
PgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBTY3JvbGxiYXJUaGVtZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQoreworICAg
IFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
OworICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSA/IHN0YXRpY19jYXN0
PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKSA6IG51bGxwdHI7Cit9CisKK3N0
YXRpYyBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcEZvclNjcm9sbGJhcihTY3JvbGxiYXImIHNj
cm9sbGJhcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW50ZXJm
YWNlIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIDogTlNPYmplY3QgPE5TU2Nyb2xsZXJJbXBQ
YWlyRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogX3Njcm9sbGFibGVB
cmVhOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEqKXNjcm9sbGFibGVBcmVhOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTY3Jv
bGxlckltcFBhaXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFyZWEKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBf
c2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9sbGFibGVBcmVhID0gbnVsbHB0cjsKK30K
KworLSAoTlNSZWN0KWNvbnRlbnRBcmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxl
ckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJ
bXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9zY3JvbGxhYmxl
QXJlYS0+Y29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVu
dHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5M
aXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVy
SW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICgh
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gX3Njcm9s
bGFibGVBcmVhLT5pbkxpdmVSZXNpemUoKTsKK30KKworLSAoTlNQb2ludCltb3VzZUxvY2F0aW9u
SW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3Jv
bGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBp
ZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAg
Ly8gSXQncyBPSyB0aGF0IHRoaXMgcG9zaXRpb24gaXNuJ3QgcmVsYXRpdmUgdG8gdGhpcyBzY3Jv
bGxlciAod2hpY2ggbWlnaHQgYmUgYW4gb3ZlcmZsb3cgc2Nyb2xsZXIpLgorICAgIC8vIEFwcEtp
dCBqdXN0IHRha2VzIHRoZSByZXN1bHQgYW5kIHBhc3NlcyBpdCBiYWNrIHRvIC1zY3JvbGxlcklt
cFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOi4KKyAgICByZXR1cm4gX3Nj
cm9sbGFibGVBcmVhLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKKy0gKE5T
UG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFp
ciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9s
bGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKK3sKKyAgICBVTlVTRURfUEFSQU0o
c2Nyb2xsZXJJbXBQYWlyKTsKKworICAgIGlmICghX3Njcm9sbGFibGVBcmVhIHx8ICFzY3JvbGxl
ckltcCkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgV2ViQ29yZTo6U2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChbc2Nyb2xsZXJJbXAgaXNIb3Jpem9udGFsXSkK
KyAgICAgICAgc2Nyb2xsYmFyID0gX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIgPSBfc2Nyb2xsYWJsZUFyZWEtPnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBz
Y3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAg
IC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxi
YXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0
cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21l
CisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVn
aXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCisgICAgLy8gaXNzdWUuCisgICAgaWYgKCFz
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIEFTU0VSVChzY3Jv
bGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKSk7CisKKyAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KFdlYkNvcmU6OnJvdW5k
ZWRJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlcklt
cFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHNldENvbnRlbnRBcmVh
TmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVjdAoreworICAgIFVOVVNFRF9QQVJBTShzY3Jv
bGxlckltcFBhaXIpOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKworICAgIGlmICghX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50
KCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNj
cm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlCit7Cisg
ICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIFtzY3JvbGxl
ckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGVdOwor
CisgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMmPihfc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbGJhcnNDb250cm9sbGVyKCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKK30KKworQGVuZAorCitlbnVtIEZlYXR1cmVUb0FuaW1hdGUgeworICAgIFRodW1iQWxwaGEs
CisgICAgVHJhY2tBbHBoYSwKKyAgICBVSVN0YXRlVHJhbnNpdGlvbiwKKyAgICBFeHBhbnNpb25U
cmFuc2l0aW9uCit9OworCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEZlYXR1cmVUb0FuaW1hdGUgZmVhdHVyZSkKK3sKKyAg
ICBzd2l0Y2ggKGZlYXR1cmUpIHsKKyAgICBjYXNlIFRodW1iQWxwaGE6IHRzIDw8ICJUaHVtYkFs
cGhhIiA7IGJyZWFrOworICAgIGNhc2UgVHJhY2tBbHBoYTogdHMgPDwgIlRyYWNrQWxwaGEiIDsg
YnJlYWs7CisgICAgY2FzZSBVSVN0YXRlVHJhbnNpdGlvbjogdHMgPDwgIlVJU3RhdGVUcmFuc2l0
aW9uIiA7IGJyZWFrOworICAgIGNhc2UgRXhwYW5zaW9uVHJhbnNpdGlvbjogdHMgPDwgIkV4cGFu
c2lvblRyYW5zaXRpb24iIDsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKwordXNp
bmcgV2ViQ29yZTo6TG9nT3ZlcmxheVNjcm9sbGJhcnM7CisKKyNlbmRpZgorCitAaW50ZXJmYWNl
IFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU09iamVjdCB7CisgICAgV2ViQ29yZTo6U2Ny
b2xsYmFyKiBfc2Nyb2xsYmFyOworICAgIFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xs
ZXJJbXA7CisgICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVhdHVyZVRvQW5pbWF0ZTsKKyAgICBDR0Zs
b2F0IF9zdGFydFZhbHVlOworICAgIENHRmxvYXQgX2VuZFZhbHVlOworICAgIE5TVGltZUludGVy
dmFsIF9kdXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3RpbWVyOworICAgIFJldGFp
blB0cjxOU0RhdGU+IF9zdGFydERhdGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xs
YmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihGZWF0
dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3RhcnRW
YWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVydmFs
KWR1cmF0aW9uOworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcjsK
Ky0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOworLSAodm9pZClz
dG9wQW5pbWF0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbgorCistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilz
Y3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9Bbmlt
YXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVu
ZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
Y29uc3QgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gMC4wMTsKKyAgICBfdGltZXIgPSBh
ZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRo
VGltZUludGVydmFsU2luY2VOb3c6MF0gaW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihzZXRDdXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVw
ZWF0czpZRVNdKTsKKyAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBfdGltaW5nRnVuY3Rp
b24gPSBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6RWFzZUluT3V0KTsKKworICAgIExPR19XSVRIX1NU
UkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZlYXR1cmVUb0FuaW1hdGUgPDwgIiBmcm9tICIgPDwgc3Rh
cnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5kVmFsdWUpOworCisgICAgX3Njcm9sbGJhciA9IHNjcm9s
bGJhcjsKKyAgICBfZmVhdHVyZVRvQW5pbWF0ZSA9IGZlYXR1cmVUb0FuaW1hdGU7CisgICAgX3N0
YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICBBU1NFUlQo
X3Njcm9sbGJhcik7CisKKyAgICBfc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqX3Njcm9sbGJhcik7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMs
IHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwgc2VsZiA8PCAic3Rh
cnRBbmltYXRpb25dIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKKworICAgIFtbTlNSdW5M
b29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfdGltZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRS
dW5Mb29wTW9kZV07CisgICAgX3N0YXJ0RGF0ZSA9IGFkb3B0TlMoW1tOU0RhdGUgYWxsb2NdIGlu
aXRXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0pOworfQorCistICh2b2lkKXNldFN0YXJ0VmFs
dWU6KENHRmxvYXQpc3RhcnRWYWx1ZQoreworICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsK
K30KKworLSAodm9pZClzZXRFbmRWYWx1ZTooQ0dGbG9hdCllbmRWYWx1ZQoreworICAgIF9lbmRW
YWx1ZSA9IGVuZFZhbHVlOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1l
ciAqKXRpbWVyCit7CisgICAgQ0dGbG9hdCBwcm9ncmVzcyA9IDA7CisgICAgTlNEYXRlICpub3cg
PSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF07CisgICAgTlNUaW1lSW50
ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGltZUludGVydmFsU2luY2VEYXRlOl9zdGFydERhdGUuZ2V0
KCldOworICAgIGlmIChlbGFwc2VkID4gX2R1cmF0aW9uKSB7CisgICAgICAgIHByb2dyZXNzID0g
MTsKKyAgICAgICAgW3RpbWVyIGludmFsaWRhdGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5T
VGltZUludGVydmFsIHQgPSAxOworICAgICAgICBpZiAoX2R1cmF0aW9uKQorICAgICAgICAgICAg
dCA9IGVsYXBzZWQgLyBfZHVyYXRpb247CisgICAgICAgIHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0
aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9kdXJhdGlvbik7CisgICAgfQorICAgIEFTU0VSVChfc2Ny
b2xsYmFyKTsKKworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFt
IDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50
UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8PCJdIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsK
KworICAgIENHRmxvYXQgY3VycmVudFZhbHVlOworICAgIGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRW
YWx1ZSkKKyAgICAgICAgY3VycmVudFZhbHVlID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAg
ICAgICAgY3VycmVudFZhbHVlID0gcHJvZ3Jlc3M7CisKKyAgICBzd2l0Y2ggKF9mZWF0dXJlVG9B
bmltYXRlKSB7CisgICAgY2FzZSBUaHVtYkFscGhhOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNl
dEtub2JBbHBoYTpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNr
QWxwaGE6CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVd
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOgorICAgICAgICBb
X3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOgorICAgICAgICBb
X3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVd
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRz
VXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0
ZSgpOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCisgICAgX3Njcm9sbGJhciA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpc2V0RHVy
YXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgX2R1cmF0aW9uID0gZHVyYXRp
b247Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbgoreworICAgIFtfdGltZXIgaW52YWxpZGF0
ZV07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJTY3JvbGxlckltcERlbGVnYXRlIDogTlNP
YmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwgTlNTY3JvbGxlckltcERlbGVnYXRlPiB7CisgICAg
V2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOworCisgICAgUmV0YWluUHRyPFdlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24+IF9rbm9iQWxwaGFBbmltYXRpb247CisgICAgUmV0YWluUHRyPFdl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF90cmFja0FscGhhQW5pbWF0aW9uOworICAgIFJldGFp
blB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRp
b247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9leHBhbnNpb25U
cmFuc2l0aW9uQW5pbWF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6
OlNjcm9sbGJhciopc2Nyb2xsYmFyOworLSAodm9pZCljYW5jZWxBbmltYXRpb25zOworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZQorCistIChpZClpbml0V2l0
aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3RyYWNrQWxw
aGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1h
dGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24g
c3RvcEFuaW1hdGlvbl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCistIChO
YWtlZFB0cjxXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYz4pc2Nyb2xsYmFyc0NvbnRy
b2xsZXIKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjJj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJzQ29udHJv
bGxlcigpKTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJl
Y3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21C
YWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5
ZXIgKilsYXllcgoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIGlmICghV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OmlzQ3VycmVudGx5RHJhd2lu
Z0ludG9MYXllcigpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogbGF5ZXI7CisgICAgaWYgKF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gV2Vi
Q29yZTo6VmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Ny
b2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgZWxzZQorICAg
ICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisKKyAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FM
YXllciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSA6IGR1bW15TGF5ZXI7Cit9CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xs
ZXJGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCit7CisgICAgaWYg
KCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBBU1NFUlRf
VU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqX3Njcm9sbGJhcikpOworCisgICAgYXV0byBwb3NpdGlvbkluVmlldyA9IF9zY3JvbGxiYXIt
PnNjcm9sbGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOworICAgIHJl
dHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBvc2l0aW9uSW5WaWV3
KTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QKK3sKKyAg
ICByZXR1cm4gcmVjdDsKK30KKworLSAoQk9PTClzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3Jv
bGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGVySW1wKTsKKworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlU
aHJlYWQoKTsKK30KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCistIChOU0FwcGVh
cmFuY2UgKillZmZlY3RpdmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAg
KilzY3JvbGxlckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisKKyAgICBp
ZiAoIV9zY3JvbGxiYXIpIHsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KKyAgICAgICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFwcGVhcmFuY2VdOwor
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9CisKKyAgICAv
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIuCisg
ICAgLy8gVGhlIGJhc2Ugc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZGFyayBBcXVhLCBzbyB3ZSBt
aWdodCBnZXQgYSBudWxsIHJlc3VsdC4KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlID0gX3Nj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS51c2VEYXJrQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMo
KTsKKyAgICBpZiAoYXV0byAqYXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5h
bWVkOnVzZURhcmtBcHBlYXJhbmNlID8gTlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhIDogTlNBcHBl
YXJhbmNlTmFtZUFxdWFdKQorICAgICAgICByZXR1cm4gYXBwZWFyYW5jZTsKKyAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1
cnJlbnRBcHBlYXJhbmNlXTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
K30KKyNlbmRpZgorCistICh2b2lkKXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXZWJT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBh
aW50ZXI6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Ny
b2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3Jv
bGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUu
CisgICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCisgICAgYm9vbCBtdXN0
QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCgpOworCisgICAgaWYgKFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c2Nyb2xs
YmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgeworICAgICAgICBbc2VsZiBzY3JvbGxi
YXJzQ29udHJvbGxlcl0tPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29p
bmcgdG8gYW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgorICAgIFtzZWxmIHNjcm9sbGJh
cnNDb250cm9sbGVyXS0+c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKworICAgIC8vIElmIHdl
IGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBzdG9wCisgICAgaWYgKHNjcm9sbGJhclBhcnRBbmlt
YXRpb24pIHsKKyAgICAgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07
CisgICAgICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBuaWw7CisgICAgfQorCisgICAgaWYg
KGF1dG8qIG1hY1RoZW1lID0gV2ViQ29yZTo6bWFjU2Nyb2xsYmFyVGhlbWUoKSkKKyAgICAgICAg
bWFjVGhlbWUtPnNldFBhaW50Q2hhcmFjdGVyaXN0aWNzRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFy
KTsKKworICAgIGlmIChwYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCAmJiBfc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IFdlYkNvcmU6OlZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlm
IChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAgICBhdXRvIHRodW1iUmVjdCA9IFdlYkNvcmU6
OkludFJlY3QoW3Njcm9sbGVyUGFpbnRlciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOwor
ICAgICAgICAgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zZXRWaXNpYmxlU2Nyb2xs
ZXJUaHVtYlJlY3QodGh1bWJSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbc2Vs
ZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh7IH0p
OworICAgIH0KKworICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOnBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0
ID8gVGh1bWJBbHBoYSA6IFRyYWNrQWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlRnJv
bTpwYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCA/IFtzY3JvbGxlclBhaW50ZXIga25vYkFscGhh
XSA6IFtzY3JvbGxlclBhaW50ZXIgdHJhY2tBbHBoYV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
aW1hdGVUbzpuZXdBbHBoYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9u
XSk7CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOworfQorCist
ICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUtu
b2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwp
ZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJh
cikpOworCisgICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJ
bXAgKilzY3JvbGxlckltcDsKKyAgICBpZiAoIVtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+
c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkpIHsKKyAgICAgICAgW3Njcm9sbGVySW1wIHNldEtub2JB
bHBoYTowXTsKKyAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFyIGF3YXks
IHRoYXQgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdvaW5nIHRv
CisgICAgLy8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gQ2Fs
bGluZyBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQorICAgIC8v
IHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1wIEFQSS4K
KyAgICBpZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCgpKQorICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNl
bnRhdGlvblZhbHVlOk5PXTsKKworICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tub2JB
bHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29y
ZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlv
bl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlcklt
cCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5T
VGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxi
YXIoKl9zY3JvbGxiYXIpKTsKKworICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9
IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7CisgICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1h
dGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVy
IHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhh
IGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxl
ckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqX3Njcm9sbGJhcikpOworCisgICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3YXlzIGFu
aW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZv
aWRzIGEgaGFyZCB0cmFuc2l0aW9uLgorICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNp
dGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11d
OworCisgICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLCB0aGVu
IHdlIGFyZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9sbGluZyB0
aHJlYWQuCisgICAgaWYgKF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJl
YWQoKSkKKyAgICAgICAgW3Njcm9sbGVySW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsK
KworICAgIGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uKSB7CisgICAgICAgIF91aVN0
YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICBmZWF0
dXJlVG9BbmltYXRlOlVJU3RhdGVUcmFuc2l0aW9uCisgICAgICAgICAgICBhbmltYXRlRnJvbTpb
c2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc10KKyAgICAgICAgICAgIGFuaW1h
dGVUbzoxLjAKKyAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24s
IGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgorICAgICAg
ICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1w
IHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKyAgICAgICAgW191aVN0YXRlVHJhbnNpdGlv
bkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOworICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9u
QW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICB9CisgICAgW191aVN0YXRlVHJh
bnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJ
bXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlv
bldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3Jv
bGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3Jv
bGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgLy8gRXhwYW5zaW9uVHJh
bnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8gMS4gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgaW4g
cHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJkIHRyYW5zaXRpb24uCisgICAgW3Njcm9sbGVySW1w
IHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczoxIC0gW3Njcm9sbGVySW1wIGV4cGFuc2lv
blRyYW5zaXRpb25Qcm9ncmVzc11dOworCisgICAgaWYgKCFfZXhwYW5zaW9uVHJhbnNpdGlvbkFu
aW1hdGlvbikgeworICAgICAgICBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0
TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpf
c2Nyb2xsYmFyCisgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOkV4cGFuc2lvblRyYW5zaXRp
b24KKyAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0
aW9uUHJvZ3Jlc3NdCisgICAgICAgICAgICBhbmltYXRlVG86MS4wCisgICAgICAgICAgICBkdXJh
dGlvbjpkdXJhdGlvbl0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IG5l
ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4g
Y2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5p
bWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jl
c3NdXTsKKyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVl
OjEuMF07CisgICAgICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXREdXJhdGlv
bjpkdXJhdGlvbl07CisgICAgfQorICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBz
dGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAg
KilzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNPdmVybGF5U2Ny
b2xsZXJTdGF0ZSluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsK
K30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9sbGJhciA9IDA7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW19rbm9iQWxwaGFBbmltYXRpb24gaW52YWxp
ZGF0ZV07CisgICAgW190cmFja0FscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAgIFtfdWlT
dGF0ZVRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0ZV07CisgICAgW19leHBhbnNpb25UcmFu
c2l0aW9uQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZShTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM+KHNjcm9sbGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxh
YmxlQXJlYSkKKyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNjcm9sbGFibGVBcmVhKQorICAg
ICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcigqdGhpcywgJlNjcm9sbGJhcnNDb250cm9s
bGVyTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQorICAgICwgbV9zZW5kQ29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNl
bmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCkKK3sKKyAgICBtX3Njcm9sbGVySW1wUGFp
ckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxlQXJlYV0pOworICAgIG1fc2Nyb2xsZXJJ
bXBQYWlyID0gYWRvcHROUyhbW05TU2Nyb2xsZXJJbXBQYWlyIGFsbG9jXSBpbml0XSk7CisgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUu
Z2V0KCldOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOlNjcm9sbGVy
U3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKK30KKworU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYygpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW52YWxpZGF0
ZV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21faG9y
aXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgW21fdmVydGljYWxT
Y3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKK30KKworLy8gRklYTUU6IFJlbW92ZQordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAg
bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChkZWx0YSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQoreworICAgIGlmIChzY3JvbGxiYXJQYWlu
dFRpbWVySXNBY3RpdmUoKSkKKyAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAg
ICBbbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKKyAg
ICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVj
dChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQoreworICAgIGF1dG8gcmVjdEluVmlld0Nv
b3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKKyAgICBpZiAoYXV0byogdmVydGljYWxTY3JvbGxi
YXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJlY3RJ
blZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5n
VmlldyhzY3JvbGxlclRodW1iKTsKKworICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0g
bV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9s
bGFibGVBcmVhKCkuc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGlu
YXRlcyk7CisgICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QgPSByZWN0SW5WaWV3Q29vcmRp
bmF0ZXM7Cit9CisKKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhKCkuc2Ny
b2xsQW5pbWF0b3IoKS5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKK3sKKyAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgorICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVdpbGxEcmF3XTsKKyAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIExPR19XSVRIX1NUUkVB
TShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBm
b3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtb3VzZUVudGVyZWRDb250ZW50QXJlYSIp
OworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZUVudGVy
ZWRDb250ZW50QXJlYV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNl
RXhpdGVkQ29udGVudEFyZWEoKQoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xs
YmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xs
YWJsZUFyZWEoKSA8PCAiXSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhIik7CisgICAgaWYgKFttX3Nj
cm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwg
IlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJd
IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIik7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21f
c2Nyb2xsZXJJbXBQYWlyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKSBjb25zdAoreworICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xs
YmFycyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KKyAgICBpZiAoU2Nyb2xsZXJT
dHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlT
Y3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlNTY3Jv
bGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQor
ICAgICAgICBbcGFpbnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAoreworICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFy
cyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KKyAgICBpZiAoU2Nyb2xsZXJTdHls
ZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3Jv
bGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlNTY3JvbGxl
ckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQorICAg
ICAgICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKK30KKwordm9pZCBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgYm9vbCBtb3VzZUlzRG93bikgY29uc3QKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWly
IG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpKSB7CisgICAgICAgIFtwYWludGVyIHNldFRyYWNraW5nOm1vdXNlSXNEb3duXTsKKyAg
ICAgICAgaWYgKG1vdXNlSXNEb3duKQorICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJl
Z2luU2Nyb2xsR2VzdHVyZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFttX3Njcm9sbGVy
SW1wUGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQoreworICAgIGlmIChbbV9zY3JvbGxl
ckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsK
KworICAgIFttX3Njcm9sbGVySW1wUGFpciBzdGFydExpdmVSZXNpemVdOworfQorCit2b2lkIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3QKK3sKKyAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFEaWRS
ZXNpemVdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsRW5kTGl2ZVJl
c2l6ZSgpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxFbmRMaXZlUmVzaXplKCk7
CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2Nr
ZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5kTGl2ZVJl
c2l6ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhRGlk
U2hvdygpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHdp
bmRvd09yZGVyZWRJbl07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRl
bnRBcmVhRGlkSGlkZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIHdpbmRvd09yZGVyZWRPdXRdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19XSVRIX1NUUkVB
TShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBm
b3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRCZWdpblNjcm9sbEdlc3R1cmUiKTsK
KworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9s
bEdlc3R1cmVdOworCisgICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0
b3IoKSkKKyAgICAgICAgbW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxX
aGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdo
ZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKK3sK
KyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gZGlkRW5k
U2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIGVuZFNjcm9sbEdlc3R1cmVdOworCisgICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVl
bEV2ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAgbW9uaXRvci0+cmVtb3ZlRGVmZXJyYWxGb3JS
ZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVB
cmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9s
bEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdp
blNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Ny
b2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Ny
b2xsYWJsZUFyZWEoKSA8PCAiXSBtYXlCZWdpblNjcm9sbEdlc3R1cmUiKTsKKworICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAg
IHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVdOwor
ICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkXTsKK30KKwordm9pZCBT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVu
KGJvb2wgc2hvdWxkTG9ja1N0YXRlKQoreworICAgIGlmIChzaG91bGRMb2NrU3RhdGUpCisgICAg
ICAgIFttX3Njcm9sbGVySW1wUGFpciBsb2NrT3ZlcmxheVNjcm9sbGVyU3RhdGU6TlNPdmVybGF5
U2Nyb2xsZXJTdGF0ZUhpZGRlbl07CisgICAgZWxzZSB7CisgICAgICAgIFttX3Njcm9sbGVySW1w
UGFpciB1bmxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZV07CisKKyAgICAgICAgLy8gV2UgbmV2ZXIg
dXBkYXRlIHNjcm9sbGVyIHN0eWxlIGZvciBQYWludGVyQ29udHJvbGxlcnMgdGhhdCBhcmUgbG9j
a2VkLiBJZiB3ZSBoYXZlIGEgcGVuZGluZworICAgICAgICAvLyBuZWVkIHRvIHVwZGF0ZSB0aGUg
c3R5bGUsIGRvIGl0IG9uY2Ugd2UndmUgdW5sb2NrZWQgdGhlIHNjcm9sbGVyIHN0YXRlLgorICAg
ICAgICBpZiAobV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpCisgICAgICAgICAgICB1cGRhdGVT
Y3JvbGxlclN0eWxlKCk7CisgICAgfQorfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFj
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JT
Y3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQoIW1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlKTsKKyAgICBtX3Zl
cnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcERlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKKworICAgIFtwYWludGVy
IHNldERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKKyAgICBp
ZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXll
ci0+cGxhdGZvcm1MYXllcigpXTsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNh
bFNjcm9sbGVySW1wOnBhaW50ZXJdOworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJl
c2l6ZSgpKQorICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAg
IFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBtX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7CisKKyAgICBbcGFpbnRlciBzZXREZWxl
Z2F0ZTpuaWxdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1w
Om5pbF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAq
cGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICgh
cGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3Jv
bGxlckltcERlbGVnYXRlKTsKKyAgICBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlID0g
YWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFy
OnNjcm9sbGJhcl0pOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Ny
b2xsZXJJbXBEZWxlZ2F0ZS5nZXQoKV07CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKwor
ICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07
CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCisgICAgICAgIFtwYWlu
dGVyIHNldEtub2JBbHBoYToxXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7Cisg
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIFttX2hvcml6b250YWxTY3Jv
bGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1w
RGVsZWdhdGUgPSBudWxscHRyOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAg
ICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5
ZXJzKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIg
PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBbcGFpbnRlciBzZXRO
ZWVkc0Rpc3BsYXk6WUVTXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6dmVy
dGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBzY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIo
KTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTY3JvbGxl
ckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAg
IGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW3BhaW50ZXIgc2V0TGF5ZXI6
bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsXTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBzY3JvbGxhYmxl
QXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9y
U2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigp
IDogbmlsXTsKK30KKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hvdWxkU2Nyb2xs
YmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAg
Ly8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhp
dCB0ZXN0aW5nLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5
bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgcGFydGljaXBhdGUgaW4gaGl0IHRlc3Rp
bmcgd2hlbmV2ZXIgdGhleSBhcmUgYXQgYWxsIHZpc2libGUuCisgICAgTlNTY3JvbGxlckltcCAq
cGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICgh
cGFpbnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbcGFpbnRlciBrbm9i
QWxwaGFdID4gMDsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5Q29u
dGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQoreworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIGJhY2svZm9y
d2FyZCBjYWNoZSwgYnV0IHRoZSBwYWdlCisgICAgLy8gaXNuJ3QgcmVhbGx5IHNjcm9sbGluZyBp
biB0aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlCisg
ICAgLy8gU2Nyb2xsZXJJbXBQYWlyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBh
Y3RpdmUgcGFnZS4KKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0
YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpKQorICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxl
ZChkZWx0YSk7CisgICAgZWxzZQorICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24o
ZGVsdGEpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp1cGRhdGVTY3JvbGxl
clN0eWxlKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0
YXRlSXNMb2NrZWRdKSB7CisgICAgICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIG1hY1RoZW1lID0gbWFjU2Ny
b2xsYmFyVGhlbWUoKTsKKyAgICBpZiAoIW1hY1RoZW1lKSB7CisgICAgICAgIG1fbmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbWFjVGhlbWUtPnVzZXNPdmVybGF5U2Nyb2xsYmFyc0NoYW5nZWQoKTsKKworICAgIE5TU2Ny
b2xsZXJTdHlsZSBuZXdTdHlsZSA9IFttX3Njcm9sbGVySW1wUGFpciBzY3JvbGxlclN0eWxlXTsK
KworICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEo
KS52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7CisKKyAgICAgICAgTlNTY3JvbGxlckltcCAqb2xkVmVydGljYWxQYWludGVyID0g
W21fc2Nyb2xsZXJJbXBQYWlyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOworICAgICAgICBhdXRvIG5l
d1ZlcnRpY2FsUGFpbnRlciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdp
dGhTdHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSl2ZXJ0aWNhbFNjcm9s
bGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9s
ZFZlcnRpY2FsUGFpbnRlcl0pOworCisgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0
aWNhbFNjcm9sbGVySW1wOm5ld1ZlcnRpY2FsUGFpbnRlci5nZXQoKV07CisgICAgICAgIG1hY1Ro
ZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCp2ZXJ0aWNhbFNjcm9sbGJhciwgV1RGTW92
ZShuZXdWZXJ0aWNhbFBhaW50ZXIpKTsKKyAgICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9s
bGVySW1wKCp2ZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBz
Y3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJl
LXNldCB0aGUKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkpOworICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
MCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICBpZiAoU2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworCisg
ICAgICAgIE5TU2Nyb2xsZXJJbXAgKm9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Nyb2xsZXJJ
bXBQYWlyIGhvcml6b250YWxTY3JvbGxlckltcF07CisgICAgICAgIGF1dG8gbmV3SG9yaXpvbnRh
bFBhaW50ZXIgPSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6
bmV3U3R5bGUgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpaG9yaXpvbnRhbFNjcm9sbGJhci0+
Y29udHJvbFNpemUoKSBob3Jpem9udGFsOllFUyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRIb3Jp
em9udGFsUGFpbnRlcl0pOworCisgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9u
dGFsU2Nyb2xsZXJJbXA6bmV3SG9yaXpvbnRhbFBhaW50ZXIuZ2V0KCldOworICAgICAgICBtYWNU
aGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgV1RG
TW92ZShuZXdIb3Jpem9udGFsUGFpbnRlcikpOworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRl
U2Nyb2xsZXJJbXAoKmhvcml6b250YWxTY3JvbGxiYXIpOworCisgICAgICAgIC8vIFRoZSBkaWZm
ZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2Ug
bXVzdCByZS1zZXQgdGhlCisgICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVz
cywgYW5kIHRoZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCisgICAg
ICAgIC8vIGFuZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCisgICAgICAgIGludCB0aGlj
a25lc3MgPSBtYWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKGhvcml6b250YWxTY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCkpOworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIC8v
IElmIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBhZ2UgaXMg
cmVzdG9yaW5nIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgYW5kCisgICAgLy8gYSByZWxh
eW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUg
YSByZS1sYXlvdXQgb3Vyc2VsdmVzLgorICAgIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsYmFyU3R5
bGVDaGFuZ2VkKG5ld1N0eWxlID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkgPyBTY3JvbGxiYXJT
dHlsZTo6T3ZlcmxheSA6IFNjcm9sbGJhclN0eWxlOjpBbHdheXNWaXNpYmxlLCAhbV9uZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUpOworCisgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBm
YWxzZTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCkKK3sKKyAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25l
U2hvdCgxMDBfbXMpOworfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzY3JvbGxi
YXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCkKK3sKKyAgICBtX2luaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpCit7CisgICAgLy8gVG8gZm9yY2UgdGhl
IHNjcm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndp
c2UsIHRoZSBTY3JvbGxlckltcFBhaXIKKyAgICAvLyBtaWdodCB0aGluayB0aGF0IHRoZSBzY3Jv
bGxiYXJzIGFyZSBhbHJlYWR5IHNob3dpbmcgYW5kIGJhaWwgZWFybHkuCisgICAgW21fc2Nyb2xs
ZXJJbXBQYWlyIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIg
Zmxhc2hTY3JvbGxlcnNdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5k
Q29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQoKQoreworICAgIHNlbmRDb250ZW50QXJlYVNj
cm9sbGVkKG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEpOworICAgIG1fY29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSB7IH07CisKKyAgICBpZiAoYXV0byog
bW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5yZW1v
dmVEZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9y
OjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIGRlbHRh
KQoreworICAgIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSBkZWx0YTsK
KworICAgIGlmICghbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
KworICAgIGlmIChhdXRvKiBtb25pdG9yID0gd2hlZWxFdmVudFRlc3RNb25pdG9yKCkpCisgICAg
ICAgIG1vbml0b3ItPmRlZmVyRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRl
c3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVz
dE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBk
ZWx0YSkKK3sKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZEluRGly
ZWN0aW9uOk5TTWFrZVBvaW50KGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpKV07Cit9CisK
K3N0YXRpYyBTdHJpbmcgc2Nyb2xsYmFyU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7Cisg
ICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiAibm9uZSJfczsKKworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoc2Nyb2xsYmFyLT5lbmFibGVkKCkg
PyAiZW5hYmxlZCJfcyA6ICJkaXNhYmxlZCJfcyk7CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwor
ICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVySW1wID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
KnNjcm9sbGJhcik7CisgICAgaWYgKCFzY3JvbGxlckltcCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOworCisgICAgaWYgKHNjcm9sbGVySW1wLmV4cGFuZGVkKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCIsZXhwYW5kZWQiX3MpOworCisgICAgaWYgKHNjcm9sbGVySW1wLnRyYWNr
QWxwaGEgPiAwKQorICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90cmFjayJfcyk7CisK
KyAgICBpZiAoc2Nyb2xsZXJJbXAua25vYkFscGhhID4gMCkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiLHZpc2libGVfdGh1bWIiX3MpOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwor
fQorCitTdHJpbmcgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJT
dGF0ZUZvclRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShzY3Jv
bGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK1N0cmluZyBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpOworfQorCitXaGVlbEV2ZW50VGVzdE1vbml0b3IqIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSBjb25zdAoreworICAgIHJldHVybiBz
Y3JvbGxhYmxlQXJlYSgpLnNjcm9sbEFuaW1hdG9yKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCk7
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRv
ck1vY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1v
Y2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjYxNThjZmNkNDljNTliMGY4
YmQwNzA0NWJlNTliNDg1OWJmYmUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JN
b2NrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDE2IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yTW9jay5oIgotCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1TY3JvbGxBbmltYXRvck1vY2s6OlNjcm9sbEFuaW1hdG9yTW9jayhTY3Jv
bGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4mJiBsb2dnZXIpCi0gICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAg
ICAsIG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKLXsKLX0KLQotU2Nyb2xsQW5pbWF0b3JNb2Nr
Ojp+U2Nyb2xsQW5pbWF0b3JNb2NrKCkgPSBkZWZhdWx0OwotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBTY3JvbGxBbmltYXRvcjo6
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1vY2s6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Ci17Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFu
aW1hdG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNb2NrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOwotICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBudWxscHRyOwot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhKCkKLXsKLSAgICBtX2xvZ2dlcigibW91c2VFbnRlcmVkQ29udGVudEFyZWEi
KTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKLXsKLSAg
ICBtX2xvZ2dlcigibW91c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKLSAgICBTY3JvbGxBbmltYXRv
cjo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1v
Y2s6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZUV4aXRl
ZENvbnRlbnRBcmVhIik7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNlRXhpdGVkQ29udGVudEFy
ZWEoKTsKLX0KLQotY29uc3QgY2hhciogU2Nyb2xsQW5pbWF0b3JNb2NrOjpzY3JvbGxiYXJQcmVm
aXgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciA9
PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gIlZlcnRpY2FsIiA6IHNjcm9sbGJhciA9PSBtX2hvcml6
b250YWxTY3JvbGxiYXIgPyAiSG9yaXpvbnRhbCIgOiAiVW5rbm93biI7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpIGNvbnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFbnRlcmVkIiwgc2Ny
b2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7Ci0gICAgU2Nyb2xsQW5pbWF0
b3I6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yTW9jazo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFeGl0ZWQiLCBzY3JvbGxiYXJQ
cmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1v
Y2s6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgaXNQ
cmVzc2VkKSBjb25zdAotewotICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoaXNQcmVzc2VkID8gIm1v
dXNlSXNEb3duSW4iIDogIm1vdXNlSXNVcEluIiwgc2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciks
ICJTY3JvbGxiYXIiKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNlSXNEb3duSW5TY3JvbGxi
YXIoc2Nyb2xsYmFyLCBpc1ByZXNzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9j
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MjFhOGY2MjJjODllNTQ2ZDllYmJhY2Q5
ODIxMGY4MzExYjk5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgU2Nyb2xsQW5p
bWF0b3IgdXNlZCB0byB0ZXN0IHRoZSBzY3JvbGwgZXZlbnRzCi0vLyByZWNlaXZlZCBieSB0aGUg
c2Nyb2xsIGFuaW1hdG9yLiBUZXN0cyBjYW4gZW5hYmxlIHRoaXMgc2Nyb2xsIGFuaW1hdG9yIHVz
aW5nCi0vLyB0aGUgaW50ZXJuYWwgc2V0dGluZyBlbmFibGVNb2NrU2Nyb2xsQW5pbWF0b3IuCi1j
bGFzcyBTY3JvbGxBbmltYXRvck1vY2sgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3Igewot
cHVibGljOgotICAgIFNjcm9sbEFuaW1hdG9yTW9jayhTY3JvbGxhYmxlQXJlYSYsIFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JNb2NrKCk7Ci0KLXByaXZhdGU6Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAg
Ym9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgYWxsb3dzVmVydGlj
YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAgYm9vbCBpc1Bpbm5lZEZvclNjcm9sbERlbHRh
KGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
UmVjdEVkZ2VzPGJvb2w+IGVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHsgfTsgfQotICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGluZygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRSdWJiZXJC
YW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJikgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgYWRqdXN0
U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYK
LQotICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRl
OwotICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJy
aWRlOwotICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1v
dXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRXhpdGVk
U2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VJc0Rv
d25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25z
dCBjaGFyKiBzY3JvbGxiYXJQcmVmaXgoU2Nyb2xsYmFyKikgY29uc3Q7Ci0KLSAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fbG9nZ2VyOwotICAgIFNjcm9sbGJhciogbV92
ZXJ0aWNhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKLSAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRh
bFNjcm9sbGJhciB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJv
bGxlck1vY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2Y2YwMjgyYmJhYmU4OTJhN2M0MDBiNzRkZDhk
YTE1ZTBmZjEzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoYykgMjAyMSBB
cHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jay5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFdURjo6RnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmKT4mJiBsb2dnZXIpCisgICAgOiBTY3JvbGxiYXJzQ29udHJvbGxlcihzY3JvbGxh
YmxlQXJlYSkKKyAgICAsIG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKK3sKK30KKworU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrOjp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKCkgPSBkZWZhdWx0
OworCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IHNj
cm9sbGJhcjsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OmRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBudWxscHRy
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1vY2s6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBtX2xvZ2dlcigibW91
c2VFbnRlcmVkQ29udGVudEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VF
bnRlcmVkQ29udGVudEFyZWEoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6
Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKK3sKKyAgICBtX2xvZ2dlcigibW91c2VNb3ZlZElu
Q29udGVudEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VNb3ZlZEluQ29u
dGVudEFyZWEoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhp
dGVkQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZUV4aXRlZENvbnRlbnRBcmVh
Iik7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsK
K30KKworY29uc3QgY2hhciogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpzY3JvbGxiYXJQcmVm
aXgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhciA9
PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gIlZlcnRpY2FsIiA6IHNjcm9sbGJhciA9PSBtX2hvcml6
b250YWxTY3JvbGxiYXIgPyAiSG9yaXpvbnRhbCIgOiAiVW5rbm93biI7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFbnRlcmVk
Iiwgc2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7CisgICAgU2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VF
eGl0ZWQiLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgaXNQcmVzc2VkKSBjb25zdAoreworICAgIG1fbG9n
Z2VyKG1ha2VTdHJpbmcoaXNQcmVzc2VkID8gIm1vdXNlSXNEb3duSW4iIDogIm1vdXNlSXNVcElu
Iiwgc2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7CisgICAgU2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoc2Nyb2xsYmFyLCBpc1ByZXNz
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNDczMzkzMTEyZDg0YWE1M2VkMmI2NzllZmYwODQ2NzMzYjg4MmJmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1v
Y2suaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBB
IE1vY2sgaW1wbGVtZW50YXRpb24gb2YgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgdXNlZCB0byB0ZXN0
IHRoZSBzY3JvbGwgZXZlbnRzCisvLyByZWNlaXZlZCBieSB0aGUgc2Nyb2xsYmFyIGNvbnRyb2xs
ZXIuIFRlc3RzIGNhbiBlbmFibGUgdGhpcyBtb2NrIG9iamVjdCB1c2luZworLy8gdGhlIGludGVy
bmFsIHNldHRpbmcgc2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcigpLgorLy8gRklYTUU6IHNldFVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBuZWVkcyByZW5hbWluZy4KKworY2xhc3MgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrIGZpbmFsIDogcHVibGljIFNjcm9sbGJhcnNDb250cm9sbGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2spOworcHVibGljOgorICAgIFNjcm9sbGJhcnNDb250cm9sbGVy
TW9jayhTY3JvbGxhYmxlQXJlYSYsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4m
Jik7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKCk7CisKK3ByaXZhdGU6
CisKKyAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOwor
ICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAg
ICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAg
ICB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOwor
ICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRB
cmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiwg
Ym9vbCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogc2Nyb2xsYmFyUHJlZml4KFNjcm9s
bGJhciopIGNvbnN0OworCisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiBt
X2xvZ2dlcjsKKyAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxTY3JvbGxiYXIgeyBudWxscHRyIH07
CisgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxTY3JvbGxiYXIgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
</data>
<flag name="review"
          id="461540"
          type_id="1"
          status="+"
          setter="thorton"
    />
    <flag name="commit-queue"
          id="461542"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438258</attachid>
            <date>2021-09-15 10:36:57 -0700</date>
            <delta_ts>2021-09-15 10:56:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210915103656.patch</filename>
            <type>text/plain</type>
            <size>189872</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc2NGE4OWQ1ZjVhNjQ5
ZWQ1NTIyOGY2YzkxZWEyMWMyM2ZmY2M1ZS4uMWVkM2VlMjc0M2EyYjNiM2I2NWFlMGIxMzJkMTk5
ZmMxNjcxM2VlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IEFzIHRoZSBmaXJzdCBzdGVwIHRvIGNsZWFuaW5nIHVwIFNjcm9sbEFuaW1hdG9yL1Njcm9sbENv
bnRyb2xsZXIsIG1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YKKyAgICAgICAgU2Ny
b2xsQW5pbWF0b3IgYW5kIGludG8gYSBuZXcgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgY2xhc3MsIHdp
dGggcGxhdGZvcm0tc3BlY2lmaWMgc3ViY2xhc3Nlcy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBt
dWNoIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIFNjcm9sbEFu
aW1hdG9yLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OndoZWVsRXZlbnRUZXN0TW9uaXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25J
blNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRI
aWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5oLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnNjcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNh
bmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYVdpbGxQ
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRTaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlcjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlcjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om5vdGlmeUNvbnRlbnRBcmVhU2Ny
b2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9y
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVy
aWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVhc2VPdXRDdWJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpj
b250ZW50QXJlYURpZFNob3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9s
bEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpoYW5k
bGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9s
bGVySW1wUGFpcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6XSk6IERlbGV0ZWQuCisgICAgICAgIChvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBp
bml0V2l0aFNjcm9sbGJhcjpmZWF0dXJlVG9BbmltYXRlOmFuaW1hdGVGcm9tOmFuaW1hdGVUbzpk
dXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24gc2V0RW5kVmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGludmFsaWRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXREdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW5pdFdp
dGhTY3JvbGxiYXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdh
dGUgY2FuY2VsQW5pbWF0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RUb0JhY2tpbmc6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBsYXllcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIG1vdXNlTG9jYXRpb25JblNjcm9s
bGVyRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgY29udmVydFJlY3RUb0xheWVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGVmZmVjdGl2ZUFw
cGVhcmFuY2VGb3JTY3JvbGxlckltcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzZXRVcEFscGhhQW5pbWF0aW9uOnNjcm9sbGVyUGFpbnRlcjpwYXJ0OmFu
aW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDph
bmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDpv
dmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJl
c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudHNSZXNpemVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c3RvcFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNj
cm9sbGVkU29vbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxi
YXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6Cisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0
Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wUGFpckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAg
ICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgICgt
W1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5p
bWF0ZTphbmltYXRlRnJvbTphbmltYXRlVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGluaXRXaXRoU2Nyb2xsYmFyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBzY3JvbGxiYXJzQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgbGF5ZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBtb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKToKKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
c2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDphbmltYXRlQWxwaGFUbzpk
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlcklt
cDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVy
SW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlT
dGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNjcm9sbEdl
c3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hv
dWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50
QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFy
U3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25p
dG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
b2NrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
QW5pbWF0b3JNb2NrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDogQWRkZWQuCisKIDIwMjEtMDktMTMgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNvbXB1
dGVkIHN0eWxlIGZvciB0cmFuc2Zvcm0tb3JpZ2luIG9uIFNWRyBib3hlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAzOGE3ZDM0NzUwNWQ5NDBjM2YwZTM0ZDNkNjk3MzM4MzQzNzljYTIyLi5kZDkzNGIwNzI5
YTgyN2VjNGNmMzliOGJiNTlhMjZmYzhiMTdlZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxOCw2
ICsxODE4LDcgQEAgcGxhdGZvcm0vU2Nyb2xsVHlwZXMuY3BwCiBwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CitwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHAKIHBsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCiBwbGF0Zm9ybS9T
ZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlLmNwcApAQCAtMjA4Niw3ICsyMDg3LDcgQEAgcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKIHBsYXRmb3JtL21vY2svUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwCiBwbGF0Zm9ybS9tb2NrL1JUQ0RhdGFDaGFubmVs
SGFuZGxlck1vY2suY3BwCiBwbGF0Zm9ybS9tb2NrL1JUQ05vdGlmaWVyc01vY2suY3BwCi1wbGF0
Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAKK3BsYXRmb3JtL21vY2svU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suY3Bw
CiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guY3BwCiBwbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggMmFmZDRjMjMyMDE4NTFjY2JjZjBmNzMzNDQxNjlmY2NjYjhlMDhiOC4uZGYx
ZWNmYTI2YTJjMDdhNmU2MmI1YTc1YjdhNWFkMjE5OGI1YThiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC00OTEsNiArNDkxLDcgQEAgcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1h
Yy5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIEBuby11bmlmeQogcGxhdGZv
cm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1t
CitwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tYWMvU2Vy
aWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQogcGxhdGZvcm0vbWFjL1N0cmluZ1V0aWxpdGll
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCBlMjIyZjY2YjE1NmE4YjdmMjZiNWY5OGQ2NmU5
ZDdhY2NhM2Q0ZDA2Li5kY2RjZWVmMDgxNzgyNDMwNWRmNGUwZWUwZDRiY2UyNzg4OTMwYjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtNzIsNiArNzIsNyBAQCBwbGF0Zm9ybS9nYW1lcGFkL21h
bmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwCiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0
ZUdhbWVwYWRQcm92aWRlci5jcHAKIAogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdl
bmVyaWMuY3BwCitwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5j
cHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9HTENvbnRleHQuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRleCBi
MTBjMWVjZTUyMDc1Yjc1MzVkYTUxYzJjYzMxNmRjOTM0M2ZkMDgxLi5iNGFlNWM5YjFkNzFjZTAw
Y2ZhMjA0YTczZDZiZGY2MjVlYjU2MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjUsNiAr
NjUsNyBAQCBwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKIHBsYXRm
b3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAogCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKK3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMjEzNDRlYzgyMzBjYzNiMzM4MTUw
ZDczNGQwOWE0ZmE3NWNmNTE5Li5iZjQzOGUwYWM2MmViOGRjZDJhMWU5ZGJhZGQ1M2Y4YzA1ZjZm
OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zODIsNiArMzgyLDcgQEAKIAkJMEZFQTNFODgxOTFCM0JENzAwMEYxQjU1IC8q
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEzRTg2MTkxQjNCRDcwMDBGMUI1NSAvKiBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQUY2NkIyM0JGQzM5RTAwNDAzMERBIC8qIENvbG9y
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU2Qzc2QzFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JVdGlsaXRpZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDMTIwQzIyQkYyQ0Qy
MDA0RTlEMzUgLyogTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMxMjA5MjJCRjJDQzcwMDRFOUQzNSAv
KiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUUzNzExMjZGMTk1MjkwMDFCNTE4NCAvKiBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDIyNDUzMjZGMTVENzUwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbSAqLzsgfTsKIAkJMEZGM0I5MjkxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGM0I5
MjUxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZC5oICovOyB9OwogCQkwRkYzQjkyQjFFRTNC
NkRFMDBCODQxNDQgLyogSlNET01RdWFkSW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGM0I5MjcxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVh
ZEluaXQuaCAqLzsgfTsKIAkJMEZGNTAyNkExMDJCQTk0MzAwNjZGMzlBIC8qIEpTU3R5bGVNZWRp
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAy
NjgxMDJCQTk0MzAwNjZGMzlBIC8qIEpTU3R5bGVNZWRpYS5oICovOyB9OwpAQCAtMjAxNiw3ICsy
MDE3LDcgQEAKIAkJNUM5QzJEQjUyMjQxQTY3QjAwOTk2QjBCIC8qIENvbnRlbnRSdWxlTGlzdFJl
c3VsdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUMyREIzMjI0MUE2NzMwMDk5NkIwQiAvKiBDb250ZW50UnVsZUxpc3RSZXN1bHRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUM5RUYyRjMyMUYw
NjE5MDAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUVGMkYyMjFGMDYxNzEwMDNCREM1NiAv
KiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBMURFQzYxRjcxRjFDNzAwRTcxQkQzIC8qIEhUVFBIZWFk
ZXJGaWVsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNBMURFQzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVDQjM3RkZGMUM2MkQyQTEw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxB
bmltYXRvck1vY2suaCAqLzsgfTsKKwkJNUNCMzdGRkYxQzYyRDJBMTAwRjIwMTg4IC8qIFNjcm9s
bGJhcnNDb250cm9sbGVyTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9s
bGVyTW9jay5oICovOyB9OwogCQk1Q0JDOERBRDFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nl
c3NpYmlsaXR5U29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlT
b2Z0TGluay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTVDQkQ1OTU5MjI4MEU5MjYwMDJCMjJBQSAvKiBDdXN0b21IZWFkZXJGaWVsZHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1RDIzODYyMjdB
MDc3QzAwMEI5QkRBIC8qIEN1c3RvbUhlYWRlckZpZWxkcy5jcHAgKi87IH07CiAJCTVDQzc5MDBF
MjY2QUZBODkwMDY5MjRGRSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDNzkwMEIyNjZBRkE4ODAwNjkyNEZFIC8q
IFRpbWluZ0FsbG93T3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYxNTQsNiArNjE1NSwxMCBAQAogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4
NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBFNzA1OEVEMUJDNUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlYXJjaFBvcHVw
TWVudUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRTcwNThGMzFCQzVD
Q0Q3MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vh
cmNoUG9wdXBNZW51Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0
NTAyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMDIyNDUzMjZGMTVENzUwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAyMjQ1NDI2RjE1RDc1MDAw
MjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwM0Mw
NzMxODg0Njk1RTAwQTVGOENBIC8qIFN5c3RlbU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTeXN0ZW1NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQw
NzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3Myw4ICs5Nzc4LDggQEAKIAkJNUM5
RUYyRjIyMUYwNjE3MTAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ExREVDMjFGNzFFNjg2MDBFNzFCRDMgLyogSFRU
UEhlYWRlckZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
VFBIZWFkZXJGaWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQTFERUM0
MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRUUEhlYWRlckZpZWxkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTVDQjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNCMzdGRkQxQzYyRDI3ODAwRjIw
MTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JvbGxBbmltYXRvck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0IzN0ZGRDFDNjJEMjc4
MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1Q0JDOERBQTFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3Np
YmlsaXR5U29mdExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExp
bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFBY2Nlc3NpYmlsaXR5
U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDNzkwMEIyNjZBRkE4
ODAwNjkyNEZFIC8qIFRpbWluZ0FsbG93T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbWluZ0FsbG93T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMTY2OCw4ICsyMTY3Myw4IEBACiAJCQkJMDczNzk0RjQxOUY1ODY0RTAwRTVBMDQ1IC8q
IFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2suaCAqLywKIAkJCQkwNzM3OTRGNzE5RjU4NjRFMDBF
NUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5jcHAgKi8sCiAJCQkJMDczNzk0RjgxOUY1ODY0RTAw
RTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suaCAqLywKLQkJCQk1Q0IzN0ZGQzFDNjJEMjc4MDBG
MjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmNwcCAqLywKLQkJCQk1Q0IzN0ZGRDFDNjJEMjc4
MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi8sCisJCQkJNUNCMzdGRkMxQzYyRDI3
ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAgKi8sCisJCQkJNUNCMzdG
RkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oICovLAogCQkJ
CTBGRTcxNDAzMTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suY3BwICovLAog
CQkJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLywK
IAkJCQkyRDdFRDBBOTFCQUU5OTE3MDA0M0IzRTUgLyogVGltZXJFdmVudEJhc2VkTW9jay5oICov
LApAQCAtMjIwMjcsNiArMjIwMzIsOCBAQAogCQkJCTAwODFGRUZFMTZCMEEyQjYwMDhBQUE3QSAv
KiBQdWJsaWNTdWZmaXhNYWMubW0gKi8sCiAJCQkJQkNBRTFGQTUxMjkzOURCNzAwNENCMDI2IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAorCQkJCTBGMDIyNDU0MjZGMTVENzUwMDAyNjVDMyAv
KiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oICovLAorCQkJCTBGMDIyNDUzMjZGMTVENzUwMDAy
NjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQlCQzhCODUzQzBFN0M3
RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VGODY5RTBFODQ0
RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi8sCiAJCQkJNUIxRTBFNDMyNUQx
NjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8sCkBAIC0yNzk4NCw2ICsyNzk5
MSw4IEBACiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmgg
Ki8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJ
CQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAorCQkJCTBGMDIy
NDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHAgKi8sCisJCQkJ
MEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyLmggKi8sCiAJ
CQkJMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLywKIAkJ
CQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlC
QzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICov
LApAQCAtMzQ3NDEsOCArMzQ3NTAsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0ODAxMzc4Qjc3MjAw
OURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FFMUZB
NzEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFC
Njk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNDAyOEIwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzYzMjgsNiArMzYzMzcsNyBAQAogCQkJCTQxOTI0MjQ5MjEyN0I5M0Uw
MDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29j
b2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Ny
b2xsQW5pbWF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVFMzcxMTI2RjE5NTI5MDAx
QjUxODQgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0b3JQc2V1ZG9DbGFz
c0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2QUEw
RjlFMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CmluZGV4IDlhYzQxOWYzMDExMGNlNWNiMTBmM2FiNDJlYjNiMGUzMWYyMmNiY2MuLjgwZTAxMTk5
NzQyZGY0ZGRkMTdjMGUxMjk3MjkzNzVkNGZkMTRiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM3MywyMiArMzczLDcgQEAgdm9pZCBTY3JvbGxB
bmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpCiAjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxBbmlt
YXRvcjo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+
dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6d2lsbEVu
ZExpdmVSZXNpemUoKQotewotICAgIG1fc2Nyb2xsQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVu
Z3RocygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKQotewotICAgIG1fc2Nyb2xsQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVu
Z3RocygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciopCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1NpemVDaGFuZ2Vk
KCkgY29uc3QKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IGE0ZjM5
ZDU2MWM2Mzk1MWY1MzEyOWVmY2VmNTQyNTBlMTU5YTJiYWYuLmEzM2EwYmM5ZjViYjFhNjM3NGVk
OWQwYTIxOWNiOWJhYmRjYTFhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaApAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogCiAgICAgU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCisg
ICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICBib29sIGhhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQ7IH0KKyAgICB2b2lkIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoYm9vbCBoYXZl
U2Nyb2xsZWQpIHsgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gaGF2ZVNjcm9sbGVkOyB9
CisKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKTsKIAogICAgIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IuZ2V0KCk7IH0KQEAgLTk2LDQ0ICsxMDEsMTIgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50
QXJlYVdpbGxQYWludCgpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29u
c3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFy
KiwgYm9vbCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRB
cmVhRGlkU2hvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4o
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Ny
b2xsYmFyKFNjcm9sbGJhciopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIHsgfQotCi0gICAgdmlydHVhbCBi
b29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciopIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgVU5VU0VEX1BBUkFNKGRlbHRhKTsgfQotCiAg
ICAgdmlydHVhbCBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBob3Jpem9u
dGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQotCiAgICAgdm9pZCBzZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IoUmVmUHRyPFdoZWVsRXZlbnRUZXN0TW9uaXRvcj4mJiB0ZXN0TW9uaXRv
cikgeyBtX3doZWVsRXZlbnRUZXN0TW9uaXRvciA9IHRlc3RNb25pdG9yOyB9CisgICAgV2hlZWxF
dmVudFRlc3RNb25pdG9yKiB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSBjb25zdCB7IHJldHVybiBt
X3doZWVsRXZlbnRUZXN0TW9uaXRvci5nZXQoKTsgfQogCiAgICAgRmxvYXRQb2ludCBhZGp1c3RT
Y3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCwg
U2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKICAgICBmbG9hdCBhZGp1c3RTY3JvbGxP
ZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgRmxvYXRQb2lu
dCYgbmV3T2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QpOwpAQCAtMTc4LDYg
KzE1MSw3IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJv
bGxlcjsKICAgICBUaW1lciBtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lcjsKICAgICBG
bG9hdFBvaW50IG1fY3VycmVudFBvc2l0aW9uOworICAgIGJvb2wgbV9oYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkIHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRp
b24+IG1fc2Nyb2xsQW5pbWF0aW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yPiBtX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggOTY3ZTEzMjZhYmU1YjMwMGE3Mjc2
YjQ0ZWI5ODRiMTc5YWI0MzU1Yi4uMGUxMGFiNjIzZTE3NTBlNGIyMDAzN2VmYThlOWIyMGJiMDQ2
OGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAt
MzksOCArMzksOCBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yTW9jay5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIHN0cnVjdCBTYW1l
U2l6ZUFzU2Nyb2xsYWJsZUFyZWEgewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCB3ZWFr
UHRyRmFjdG9yV2FzQ29uc3RydWN0ZWRPbk1haW5UaHJlYWQ7CiAjZW5kaWYKLSAgICB2b2lkKiBw
b2ludGVyWzJdOworICAgIHZvaWQqIHBvaW50ZXJbM107CiAgICAgSW50UG9pbnQgb3JpZ2luOwog
ICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OwogfTsKQEAgLTc0LDE3ICs3NCwyNSBAQCBTY3Jv
bGxhYmxlQXJlYTo6flNjcm9sbGFibGVBcmVhKCkgPSBkZWZhdWx0OwogCiBTY3JvbGxBbmltYXRv
ciYgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
c2Nyb2xsQW5pbWF0b3IpIHsKKyAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCisgICAgICAgIG1f
c2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xs
YWJsZUFyZWEmPigqdGhpcykpOworCisgICAgcmV0dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgp
OworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlciYgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhcnND
b250cm9sbGVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIpIHsK
KyAgICAgICAgLy8gTm90ZSB0aGF0IHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgaXMgYSBtaXNub21l
ci4KICAgICAgICAgaWYgKHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSkgewotICAgICAgICAgICAg
bV9zY3JvbGxBbmltYXRvciA9IG1ha2VVbmlxdWU8U2Nyb2xsQW5pbWF0b3JNb2NrPihjb25zdF9j
YXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpLCBbdGhpc10oY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSB7CisgICAgICAgICAgICBtX3Njcm9sbGJhcnNDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2s+KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyks
IFt0aGlzXShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICBsb2dNb2Nr
U2Nyb2xsQW5pbWF0b3JNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSk7CisgICAgICAgICAgICBt
X3Njcm9sbGJhcnNDb250cm9sbGVyID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZShjb25z
dF9jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9z
Y3JvbGxBbmltYXRvcik7Ci0gICAgcmV0dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgpOworICAg
IHJldHVybiAqbV9zY3JvbGxiYXJzQ29udHJvbGxlci5nZXQoKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4pCkBAIC0yMDEs
NyArMjA5LDcgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICB9CiAKICAgICBpZiAoc2Nyb2xsUG9z
aXRpb24oKSAhPSBvbGRQb3NpdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CisgICAg
ICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChzY3Jv
bGxQb3NpdGlvbigpIC0gb2xkUG9zaXRpb24pOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVhOjpo
YW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgc3RkOjpvcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4pCkBAIC0yNDMs
ODkgKzI1MSw4MyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkK
ICAgICBpZiAobV9pbkxpdmVSZXNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBtX2luTGl2ZVJl
c2l6ZSA9IHRydWU7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPndpbGxTdGFy
dExpdmVSZXNpemUoKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxTdGFydExpdmVS
ZXNpemUoKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUoKQog
ewogICAgIGlmICghbV9pbkxpdmVSZXNpemUpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1faW5M
aXZlUmVzaXplID0gZmFsc2U7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPndp
bGxFbmRMaXZlUmVzaXplKCk7Ci19ICAgIAorCisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS53
aWxsRW5kTGl2ZVJlc2l6ZSgpOworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29udGVudHNTaXplQ2hh
bmdlZCgpOworfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYVdpbGxQYWludCgp
IGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVh
V2lsbFBhaW50KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYVdpbGxQ
YWludCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPm1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3ItPm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKS5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVh
Ojptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0g
ICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIp
OwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRXhpdGVk
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4
aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1vdXNlSXNEb3du
KSBjb25zdAogewotICAgIHNjcm9sbEFuaW1hdG9yKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihz
Y3JvbGxiYXIsIG1vdXNlSXNEb3duKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNl
SXNEb3duSW5TY3JvbGxiYXIoc2Nyb2xsYmFyLCBtb3VzZUlzRG93bik7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9s
bEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVhRGlkU2hvdygpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkuY29udGVudEFyZWFEaWRTaG93KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1h
dG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVhRGlkSGlkZSgpOworICAgIHNjcm9sbGJhcnNDb250
cm9sbGVyKCkuY29udGVudEFyZWFEaWRIaWRlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkg
Y29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bG9ja092ZXJsYXlT
Y3JvbGxiYXJTdGF0ZVRvSGlkZGVuKHNob3VsZExvY2tTdGF0ZSk7CisgICAgc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9ja1N0
YXRlKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkg
Y29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnNjcm9s
bGJhcnNDYW5CZUFjdGl2ZSgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpOwogfQogCiB2b2lkIFNjcm9s
bGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5kaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CisKKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKIAogICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS85Nzk3MjUzPiBBcHBLaXQgcmVzZXRzIHRoZSBzY3JvbGxiYXIn
cyBzdHlsZSB3aGVuIHlvdSBhdHRhY2ggYSBzY3JvbGxiYXIKICAgICBzZXRTY3JvbGxiYXJPdmVy
bGF5U3R5bGUoc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpOwpAQCAtMzM0LDIxICszMzYsMjEgQEAg
dm9pZCBTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBTY3JvbGxiYXJPcmllbnRhdGlvbgogdm9pZCBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCiB7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxi
YXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpCiB7Ci0gICAgaWYg
KFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRzUmVzaXplZCgpOworICAgIHNjcm9s
bEFuaW1hdG9yKCkuY29udGVudHNTaXplQ2hhbmdlZCgpOworICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkuY29udGVudHNTaXplQ2hhbmdlZCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikKIHsK
LSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxB
bmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudHNSZXNpemVkKCk7IC8v
IFRoaXMgZmxhc2hlcyBvdmVybGF5IHNjcm9sbGJhcnMuCisgICAgc2Nyb2xsQW5pbWF0b3IoKS5j
b250ZW50c1NpemVDaGFuZ2VkKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50
c1NpemVDaGFuZ2VkKCk7IC8vIFRoaXMgZmxhc2hlcyBvdmVybGF5IHNjcm9sbGJhcnMuCiB9CiAK
IGJvb2wgU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKQEAgLTM3
NCwxNCArMzc2LDEyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJz
KCkKIHsKICAgICBpZiAoYXV0byogc2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
CiAgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAgICBpZiAoYXV0byogc2Ny
b2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgICAgICBzY3Jv
bGxBbmltYXRvci0+aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5pbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVy
cyhzY3JvbGxiYXIpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0g
ICAgICAgICAgICBzY3JvbGxBbmltYXRvci0+aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMo
c2Nyb2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5pbnZhbGlkYXRlU2Ny
b2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOwogICAgIH0KIH0KIApAQCAtNDIyLDEyICs0MjIs
MTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lcihjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLnZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6aG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLmhv
cml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CiB9CiAKIGJvb2wgU2Ny
b2xsYWJsZUFyZWE6Omhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0CkBAIC00
NTksMTIgKzQ1OSwxMiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjphbGxvd3NWZXJ0aWNhbFNjcm9s
bGluZygpIGNvbnN0CiAKIFN0cmluZyBTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJh
clN0YXRlRm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCku
aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVybiBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLmhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0K
IAogU3RyaW5nIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkudmVydGljYWxTY3JvbGxi
YXJTdGF0ZUZvclRlc3RpbmcoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS52
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBjb25zdCBMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8qIFNjcm9sbGFibGVBcmVhOjpzbmFwT2Zmc2V0c0luZm8oKSBjb25z
dApAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5
b3V0KCkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICp0aGlz
IDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlOiBpc1Njcm9sbFNuYXBJblByb2dyZXNzICIgPDwg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIDw8ICIgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyAiIDw8
IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSk7CiAKLSAgICBTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7CisgICAgYXV0byogc2Nyb2xsQW5p
bWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7CiAgICAgaWYgKCFzY3JvbGxBbmltYXRv
ciB8fCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgfHwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCmluZGV4IGZkMzk2MzMzODBiOTQ3YTIwNTBhN2I4NjgwYzU3OTkwZjZkNzVjYjYuLjhmOWVl
OGJlMDk2NzBkYTljZjkwNGFmZWYxYzMxODY1YTNmNWQwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBMYXlvdXRTaXpl
OwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50Owog
Y2xhc3MgU2Nyb2xsQW5pbWF0b3I7CitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlcjsKIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBUaWxlZEJhY2tpbmc7CiAKQEAgLTE3MiwxMiArMTczLDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3JlYXRl
IGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICAgIFdFQkNP
UkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OwotCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0b3IgaGFz
bid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5nU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxiYXJzQ29udHJvbGxlciYgc2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhcihTY3JvbGxi
YXImLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0ID0gMDsKQEAgLTM3OCw2ICszNzgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgPSAwOwogCiAgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7
CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IG1fc2Ny
b2xsYmFyc0NvbnRyb2xsZXI7CiAKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5h
dGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2lsbCBi
ZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgcmV2
ZXJzZWQgZGlyZWN0aW9uIG9yIHdyaXRpbmctbW9kZS4gVGhlIGNvbWJpbmF0aW9ucyBhcmU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCA5NjY1NzcwN2RjZWY4MGVkYjEy
Zjk3MGRiY2FlZWVmMWU1NDg3MzFmLi5mMGFkMjJhOTBkOTYyYTU2MzUwNjBlZTQ1MGE0Zjk2ZTEw
NGIwYjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTQyOCw3ICs0
MjgsNyBAQCBib29sIFNjcm9sbGJhcjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKQog
ICAgIC8vIE5vbi1vdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBp
biBoaXQgdGVzdGluZy4KICAgICBpZiAoIWlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvcigp
LnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOworICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjppc1dp
bmRvd0FjdGl2ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5NWQ2MTAzNzE0MDJiMzliZDc3ZTQ2Yjg3
ZGJjY2I2NGZiMTM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV1BFKQorc3RkOjp1bmlxdWVfcHRyPFNjcm9s
bGJhcnNDb250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJz
Q29udHJvbGxlcj4oc2Nyb2xsYWJsZUFyZWEpOworfQorI2VuZGlmCisKK1Njcm9sbGJhcnNDb250
cm9sbGVyOjpTY3JvbGxiYXJzQ29udHJvbGxlcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFy
ZWEpCisgICAgOiBtX3Njcm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
c0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjU4ZmUxM2QzMzQ3NTQ0MDUyMjI4ZjQ1ZWMzNWFm
MDU3OTIzN2YyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyc0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBT
Y3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJhcnND
b250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJh
cnNDb250cm9sbGVyPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKKworICAgIGV4cGxpY2l0IFNj
cm9sbGJhcnNDb250cm9sbGVyKFNjcm9sbGFibGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Nyb2xs
YmFyc0NvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgU2Nyb2xsYWJsZUFyZWEmIHNj
cm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorCisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJikg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIG1h
eUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFy
ZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBj
b25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxi
YXIqLCBib29sKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3QgeyB9
CisgICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJl
YURpZEhpZGUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0
YXRlVG9IaWRkZW4oYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFj
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIqKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIHsg
fQorCisgICAgdmlydHVhbCBib29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0
aW5nKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIGhv
cml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0
cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRl
c3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisKK3ByaXZhdGU6CisgICAg
U2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bEFuaW1hdG9yR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Nj
cm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAKaW5kZXggODkwODQyZGM2NjNmNjM5OTU3MmY4OTMxNDU4
OWNiMjcyNzNkOWI4Mi4uZjY3ODM0YjY2NGQ5NTlkYjBkNjI4ODk0MzllYTVjMmVkNGI4NjY5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRv
ckdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xs
QW5pbWF0b3JHZW5lcmljLmNwcApAQCAtMzgsOSArMzgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1
cmF0aW9uIHsgMV9zIH07Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNB
bmltYXRpb25IaWRlRGVsYXkgeyAyX3MgfTsKLQogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRvckdlbmVyaWM+KHNjcm9s
bGFibGVBcmVhKTsKQEAgLTQ4LDcgKzQ1LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmwKIAog
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmltYXRvckdlbmVyaWMoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEp
Ci0gICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CiAg
ICAgbV9raW5ldGljQW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGlj
PigKICAgICAgICAgW3RoaXNdKCkgLT4gU2Nyb2xsRXh0ZW50cyB7CkBAIC05NywxOTYgKzkzLDUg
QEAgdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQm
JiBwb3NpdGlvbikKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQoKTsK
IH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
KQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKLSAgICBt
X3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxi
YXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7Ci0gICAgbV9ob3Jp
em9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgIT0g
c2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxi
YXIgPSBudWxscHRyOwotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKLSAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJh
ciAhPSBzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
KQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0
eSgpCi17Ci0gICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPm9w
YWNpdHkoKSkgewotICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0
eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAgaWYgKG1fdmVy
dGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKLSAgICAgICAg
ICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5
KCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSht
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICAgICAgaWYgKG1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQotICAgICAgICAg
ICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQotewotICAgIGRv
dWJsZSBwID0gdCAtIDE7Ci0gICAgcmV0dXJuIHAgKiBwICogcCArIDE7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgp
Ci17Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX292ZXJsYXlTY3Jv
bGxiYXJzTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNb25vdG9uaWNUaW1lIGN1cnJl
bnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgZG91YmxlIHByb2dyZXNzID0gMTsK
LSAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1l
KQotICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25F
bmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52YWx1ZSgpOwot
ICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlICsgKGVhc2VP
dXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0IC0g
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7Ci0gICAgaWYgKHByb2dyZXNzICE9
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKLSAgICAgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOwotICAgICAgICB1cGRhdGVPdmVy
bGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQp
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKLSAgICAgICAg
c3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9tczsKLSAgICAg
ICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUgLSAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVydmFsKTsKLSAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlbHRh
VG9OZXh0RnJhbWUpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMo
KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNob3dPdmVybGF5U2Nyb2xsYmFy
cygpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
ICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotCi0gICAg
aWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKLSAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwotICAgIGlmIChtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5k
VGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Ny
b2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaGlkZU92
ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpoaWRl
T3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5z
dG9wKCk7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVy
dGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJy
ZW50OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9IDA7Ci0gICAgaWYg
KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyBvdmVyZmxvd1Njcm9s
bGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
RW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93
U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9u
SGlkZURlbGF5OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25l
U2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQotewotICAgIHNo
b3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7
Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjptb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpCi17Ci0gICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQotewotICAgIHNob3dPdmVybGF5U2Ny
b2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6Y29udGVudEFyZWFE
aWRIaWRlKCkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgewotICAgICAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKLSAgICAgICAgdXBkYXRlT3Zlcmxh
eVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2Vu
ZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKQotewotICAg
IHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJp
Yzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRl
KQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3VsZExvY2tTdGF0
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgPSBzaG91
bGRMb2NrU3RhdGU7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYg
IW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Ny
b2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3Bh
Y2l0eSgwKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAg
ICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPT0g
MSkKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICB9Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKaW5kZXggZTA0NmM1MzFiYjg0
YzJhY2ZmNWU4OTQ2NTU2ZGRjMTEyNWM5OGFmMy4uMmQ2YWQ5OWM2MTMxNTFjZDU1YWVlOTkyNGJk
N2JiYTZmMWVlMDNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJp
Yy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
ZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC00NCw0MCArNDQsMTIgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR2VuZXJpYygpOwogCiBwcml2YXRlOgotICAg
IGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYs
IFNjcm9sbENsYW1waW5nKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbFJl
bW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUV4aXRl
ZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIG5vdGlmeUNv
bnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiwgU2Nyb2xsQ2xhbXBpbmcpIGZpbmFsOwogCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlUG9zaXRpb24o
RmxvYXRQb2ludCYmKTsKIAotICAgIHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
RmlyZWQoKTsKLSAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHZvaWQgaGlk
ZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09w
YWNpdHkoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBt
X2tpbmV0aWNBbmltYXRpb247Ci0gICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Ny
b2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsg
ZmFsc2UgfTsKLSAgICBUaW1lciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcjsKLSAg
ICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9OwotICAgIGRv
dWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07Ci0gICAgZG91Ymxl
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07Ci0gICAgTW9ub3Rvbmlj
VGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgTW9ub3Rvbmlj
VGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJp
Yy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgx
YTc1MjdhNTRlNzMxNWNlMTA0ZTliNDViNzZhYzUzMjhmNGQ5ZjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2Vu
ZXJpYy5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljLmgiCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uIHsg
MV9zIH07CitzdGF0aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25I
aWRlRGVsYXkgeyAyX3MgfTsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJhcnNDb250cm9sbGVy
PiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM+KHNjcm9sbGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpT
Y3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
KQorICAgIDogU2Nyb2xsYmFyc0NvbnRyb2xsZXIoc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbGJhcnNDb250cm9sbGVy
R2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Nj
cm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6flNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYygp
ID0gZGVmYXVsdDsKKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmRpZEFkZFZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIFNjcm9sbGJhcnND
b250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworCisgICAgaWYg
KCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisgICAg
bV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgaWYgKCFtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50ID0gMTsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0
eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBoaWRlT3ZlcmxheVNj
cm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgU2Nyb2xs
YmFyc0NvbnRyb2xsZXI6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKwor
ICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgaWYg
KCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uQ3VycmVudCA9IDE7CisgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBoaWRl
T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sK
KyAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOworICAg
IGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAhPSBzY3JvbGxi
YXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0g
bnVsbHB0cjsKKyAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpCit7
CisgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPm9wYWNpdHko
KSkgeworICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAgICAgIG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgaWYg
KG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsK
KyAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICAgICAgbV9o
b3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQoreworICAgIGRvdWJsZSBw
ID0gdCAtIDE7CisgICAgcmV0dXJuIHAgKiBwICogcCArIDE7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgp
Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX292ZXJsYXlTY3Jv
bGxiYXJzTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBNb25vdG9uaWNUaW1lIGN1cnJl
bnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgZG91YmxlIHByb2dyZXNzID0gMTsK
KyAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1l
KQorICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25F
bmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52YWx1ZSgpOwor
ICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlICsgKGVhc2VP
dXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0IC0g
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7CisgICAgaWYgKHByb2dyZXNzICE9
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKKyAgICAgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOworICAgICAgICB1cGRhdGVPdmVy
bGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICB9CisKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7CisgICAgICAg
IHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9tczsKKyAgICAg
ICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUgLSAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVydmFsKTsKKyAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlbHRh
VG9OZXh0RnJhbWUpOworICAgIH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMo
KTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OnNob3dPdmVybGF5U2Ny
b2xsYmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0Fj
dGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQorICAgICAg
ICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwor
CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3Zl
cmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKKyAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOworICAgIGlmIChtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
Q3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJm
bG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOworICAgICAgICBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAgIGlmIChtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UYXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxi
YXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9
IDA7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyBv
dmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7CisgICAgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGlt
ZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dTY3JvbGxi
YXJzQW5pbWF0aW9uSGlkZURlbGF5OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7CisgICAgc2hvd092ZXJsYXlTY3Jv
bGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpjb250ZW50
QXJlYURpZFNob3coKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50ID0gMDsKKyAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bm90
aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKQoreworICAgIHNob3dPdmVy
bGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6
bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKQor
eworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3VsZExvY2tTdGF0ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgPSBzaG91bGRM
b2NrU3RhdGU7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9v
dmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0
eSgwKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPT0gMSkK
KyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzcyYzUxYTcwZTViMjZjNjY0NzgxNjRmOGRkYzNlMWQ4N2M2MWJmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9s
bGJhcnNDb250cm9sbGVyR2VuZXJpYyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxl
ciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljKFNj
cm9sbGFibGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFy
ZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjb250ZW50QXJlYURpZFNob3coKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbnRlbnRBcmVhRGlk
SGlkZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xs
YmFyU3RhdGVUb0hpZGRlbihib29sKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFy
cygpOworICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgdm9pZCB1cGRhdGVP
dmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKworICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFy
c0xvY2tlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXI7CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSB7IDAg
fTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0IHsgMCB9Owor
ICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50IHsgMCB9OworICAg
IE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lOworICAg
IE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1Njcm9sbEFuaW1hdG9ySU9TLmgKaW5kZXggZjBmODgzMzZmYmJkN2RmYzRiNWQxOWJiNDRiNzlm
NTczMGRhNzUwMS4uOGI4MWY5MDRmNmUyNWZmYTFhMGRmMjI2ZTFmYWU0ZmE1MWEzMWRmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKQEAg
LTU1LDE2ICs1NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBBeGlzTGF0Y2hIb3Jpem9udGFsLAog
ICAgICAgICBBeGlzTGF0Y2hWZXJ0aWNhbAogICAgIH07Ci0gICAgQXhpc0xhdGNoIG1fdG91Y2hT
Y3JvbGxBeGlzTGF0Y2g7Ci0gICAgYm9vbCBtX2luVG91Y2hTZXF1ZW5jZTsKLSAgICBib29sIG1f
Y29tbWl0dGVkVG9TY3JvbGxBeGlzOwotICAgIGJvb2wgbV9zdGFydGVkU2Nyb2xsOworICAgIEF4
aXNMYXRjaCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoIHsgQXhpc0xhdGNoTm90Q29tcHV0ZWQgfTsK
KyAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY29tbWl0
dGVkVG9TY3JvbGxBeGlzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZFNjcm9sbCB7IGZh
bHNlIH07CiAgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9pbnQ7CiAgICAgSW50UG9pbnQgbV9s
YXN0VG91Y2hQb2ludDsKIAogICAgIC8vIFdoZW4gd2UncmUgaW4gYSB0b3VjaCBzZXF1ZW5jZSwg
dGhpcyB3aWxsIHBvaW50IHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEgdGhhdAogICAgIC8vIHNob3Vs
ZCBhY3R1YWxseSBiZSBzY3JvbGxlZCBkdXJpbmcgdGhlIHNlcXVlbmNlLgotICAgIFNjcm9sbGFi
bGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZTsKKyAgICBTY3JvbGxhYmxl
QXJlYSogbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgeyBudWxscHRyIH07CiAjZW5k
aWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxB
bmltYXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRv
cklPUy5tbQppbmRleCBjYjRmYjc4ODRjODQwNjM1MzdlNzUwMmM2MjNjNDRiZWIzNmNhN2Y3Li5k
OTc2ZTRlYTRjZjlmMGQwODZiZTlhZTMwYTc2ZTU1OGE4YTljNjM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCkBAIC00NSwxMyArNDUs
NiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVh
dGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogCiBTY3JvbGxBbmltYXRvcklPUzo6U2Nyb2xs
QW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xs
QW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAs
IG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhpc0xhdGNoTm90Q29tcHV0ZWQpCi0gICAgLCBtX2lu
VG91Y2hTZXF1ZW5jZShmYWxzZSkKLSAgICAsIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKGZhbHNl
KQotICAgICwgbV9zdGFydGVkU2Nyb2xsKGZhbHNlKQotICAgICwgbV9zY3JvbGxhYmxlQXJlYUZv
clRvdWNoU2VxdWVuY2UoMCkKLSNlbmRpZgogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDRhNWUzZjJlMmY5NmQ2ZTU1OGNm
YTNmZGIxYTcyOWVjZWNiNWI0NGMuLjViNWJhNTNhZGI0ODJlMWFmNTMyY2M2ZTA5ZGFlMWMzOGQ1
MmEyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCkBAIC0yOCwxMTkgKzI4LDQ3IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBXZWJT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLU9CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBQ
YWlyRGVsZWdhdGU7Ci1PQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1wRGVsZWdhdGU7Ci0KLXR5cGVk
ZWYgaWQgU2Nyb2xsZXJJbXBQYWlyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNj
cm9sbGJhcjsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0
b3IgeworY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0
b3IgewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJik7CiAg
ICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3Np
dGlvbik7Ci0gICAgYm9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QgeyByZXR1
cm4gbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9s
bGVyU3R5bGUoKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICB2b2lkIHN0b3BT
Y3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgp
IGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXI7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwotCi0gICAgUmV0YWluUHRyPFNj
cm9sbGVySW1wUGFpcj4gbV9zY3JvbGxlckltcFBhaXI7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9s
bGVySW1wUGFpckRlbGVnYXRlPiBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlOwotICAgIFJldGFp
blB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVn
YXRlOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX3ZlcnRpY2FsU2Ny
b2xsZXJJbXBEZWxlZ2F0ZTsKLQotICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJG
aXJlZCgpOwotICAgIFRpbWVyIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7Ci0KLSAgICB2
b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgpOwotICAgIFRpbWVyIG1fc2Vu
ZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcjsKLSAgICBGbG9hdFNpemUgbV9jb250ZW50QXJlYVNj
cm9sbGVkVGltZXJTY3JvbGxEZWx0YTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVu
dGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwg
T3B0aW9uU2V0PFNjcm9sbEJlaGF2aW9yPikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzY3JvbGxUb1Bv
c2l0aW9uV2l0aEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgb3ZlcnJpZGU7
CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+
KSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAg
ICBib29sIHNob3VsZEZvcndhcmRXaGVlbEV2ZW50c1RvUGFyZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYpIGNvbnN0OwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgaGFuZGxlV2hl
ZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBvdmVycmlkZTsKKyAgICB2b2lk
IGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgZmluYWw7CiAK
LSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbEFu
aW1hdGlvbnMoKSBmaW5hbDsKICAgICAKLSAgICB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChj
b25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhV2ls
bFBhaW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lk
IG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbEVuZExpdmVS
ZXNpemUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIG92ZXJyaWRl
OwotICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRC
ZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUo
KSBjb25zdDsKLSAgICB2b2lkIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotCi0gICAg
dm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRMb2NrU3Rh
dGUpIGZpbmFsOwotCi0gICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclBhcnRM
YXllcnMoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbm90
aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsK
LQotICAgIC8vIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbigpIHdpbGwgZG8gdGhlIHNhbWUg
d29yayB0aGF0IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKCkgZG9lcyBleGNlcHQKLSAgICAvLyBp
dCBkb2VzIGl0IGFmdGVyIGEgemVyby1kZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3aWxsIHByZXZl
bnQgdXMgZnJvbSB1cGRhdGluZyBvdmVybGF5IHNjcm9sbGJhciAKLSAgICAvLyBpbmZvcm1hdGlv
biBkdXJpbmcgbGF5b3V0LgotICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7Ci0gICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxl
ZFNvb24oY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7CisgICAgdm9pZCBub3RpZnlQb3Np
dGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmluYWw7CiAKICAgICBGbG9hdFBv
aW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OwogCi0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QgZmluYWw7CiAKLSAgICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXRl
Rm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotICAgIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0
YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JikgZmluYWw7CiAKICAgICAvLyBTY3JvbGxDb250cm9sbGVyQ2xpZW50LgogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKQEAgLTE1Nyw5ICs4NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBh
ZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBmaW5hbDsKICNlbmRpZgog
Ci0gICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7Ci0gICAgYm9vbCBtX25lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0OworICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7CisgICAgUmV0
YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmluZGV4IDE3YTkx
YjUzZjk1NjMxYWUwMThhYzFiYWE2MTFmN2Q2NzJiZjIyY2IuLmM0NzQ5MGZiN2RmNjg2YjQxNTM4
OTQ1N2E0NTdhY2ViYzVhNmQyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KQEAgLTMxLDQ2ICszMSwyMCBAQAogI2ltcG9ydCAiR3Jh
ZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
LSNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKICNpbXBvcnQgIlNjcm9sbGFibGVBcmVh
LmgiCi0jaW1wb3J0ICJTY3JvbGxiYXJUaGVtZS5oIgotI2ltcG9ydCAiU2Nyb2xsYmFyVGhlbWVN
YWMuaCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsZXJJbXBTUEkuaD4KKyNpbXBvcnQg
IlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9u
cy5oPgogI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNjcm9sbGJhclRoZW1lTWFj
KiBtYWNTY3JvbGxiYXJUaGVtZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRo
ZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3JvbGxiYXJUaGVt
ZS5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xs
YmFyVGhlbWUpIDogbnVsbHB0cjsKLX0KLQotc3RhdGljIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVy
SW1wRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBTY3Jv
bGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KIHVzaW5nIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOwogdXNp
bmcgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM7CiB1c2luZyBXZWJDb3JlOjpTY3JvbGxiYXI7
Ci11c2luZyBXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzsKIHVzaW5nIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI7CiB1c2luZyBXZWJDb3JlOjpWZXJ0aWNhbFNjcm9sbGJhcjsKLXVzaW5nIFdlYkNv
cmU6Om1hY1Njcm9sbGJhclRoZW1lOwogdXNpbmcgV2ViQ29yZTo6SW50UmVjdDsKLXVzaW5nIFdl
YkNvcmU6OlRodW1iUGFydDsKLXVzaW5nIFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b247Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi11c2luZyBXZWJDb3JlOjpMb2dPdmVybGF5U2Nyb2xs
YmFyczsKLSNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CkBAIC0xNzYs
NTIyICsxNTAsNiBAQCAtICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcwogCiBAZW5k
CiAKLUBpbnRlcmZhY2UgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgOiBOU09iamVjdCA8TlNT
Y3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4KLXsKLSAgICBTY3JvbGxhYmxlQXJlYSogX3Njcm9sbGFi
bGVBcmVhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Nyb2xsYWJsZUFyZWEq
KXNjcm9sbGFibGVBcmVhOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBQ
YWlyRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Nyb2xsYWJsZUFy
ZWEqKXNjcm9sbGFibGVBcmVhCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGFibGVBcmVhID0g
c2Nyb2xsYWJsZUFyZWE7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0
ZQotewotICAgIF9zY3JvbGxhYmxlQXJlYSA9IDA7Ci19Ci0KLS0gKE5TUmVjdCljb250ZW50QXJl
YVJlY3RGb3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQ
YWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Ny
b2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBOU1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6
SW50U2l6ZSBjb250ZW50c1NpemUgPSBfc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpOwot
ICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50
c1NpemUuaGVpZ2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1w
UGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAg
ICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+aW5MaXZlUmVzaXpl
KCk7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxl
ckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0g
ICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIC8vIEl0J3MgT0sgdGhhdCB0aGlzIHBv
c2l0aW9uIGlzbid0IHJlbGF0aXZlIHRvIHRoaXMgc2Nyb2xsZXIgKHdoaWNoIG1pZ2h0IGJlIGFu
IG92ZXJmbG93IHNjcm9sbGVyKS4KLSAgICAvLyBBcHBLaXQganVzdCB0YWtlcyB0aGUgcmVzdWx0
IGFuZCBwYXNzZXMgaXQgYmFjayB0byAtc2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRDb250ZW50UG9p
bnQ6dG9TY3JvbGxlckltcDouCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+bGFzdEtub3du
TW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi0tIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjoo
TlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgY29udmVydENvbnRlbnRQb2ludDoo
TlNQb2ludClwb2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAq
KXNjcm9sbGVySW1wCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0KLSAg
ICBpZiAoIV9zY3JvbGxhYmxlQXJlYSB8fCAhc2Nyb2xsZXJJbXApCi0gICAgICAgIHJldHVybiBO
U1plcm9Qb2ludDsKLQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKLSAg
ICBpZiAoW3Njcm9sbGVySW1wIGlzSG9yaXpvbnRhbF0pCi0gICAgICAgIHNjcm9sbGJhciA9IF9z
Y3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGVsc2UgCi0gICAgICAg
IHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLQotICAg
IC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBoZXJlIHNpbmNlIGl0
IGlzIHBvc3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCi0gICAgLy8gbWV0aG9kIHRvIGJlIGNhbGxl
ZCBiZXR3ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVlbiBzZXQgdG8gMCBh
bmQgdGhlCi0gICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVk
LiBXZSBzaG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKLSAgICAvLyBvZiB0aGUgY2xlYW4t
dXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2
b2lkIHRoaXMKLSAgICAvLyBpc3N1ZS4KLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuIE5TWmVyb1BvaW50OwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1w
Rm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvaW50SW5Db250
ZW50QXJlYSkpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBh
aXIgKilzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5T
UmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgVU5V
U0VEX1BBUkFNKHJlY3QpOwotCi0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKLX0KLQotLSAodm9pZClzY3JvbGxlcklt
cFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVy
U3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdS
ZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOm5l
d1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07Ci0KLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmlt
YXRvck1hYyY+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSkudXBkYXRlU2Nyb2xs
ZXJTdHlsZSgpOwotfQotCi1AZW5kCi0KLWVudW0gRmVhdHVyZVRvQW5pbWF0ZSB7Ci0gICAgVGh1
bWJBbHBoYSwKLSAgICBUcmFja0FscGhhLAotICAgIFVJU3RhdGVUcmFuc2l0aW9uLAotICAgIEV4
cGFuc2lvblRyYW5zaXRpb24KLX07Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRmVhdHVyZVRvQW5pbWF0ZSBmZWF0dXJl
KQotewotICAgIHN3aXRjaCAoZmVhdHVyZSkgewotICAgIGNhc2UgVGh1bWJBbHBoYTogdHMgPDwg
IlRodW1iQWxwaGEiIDsgYnJlYWs7Ci0gICAgY2FzZSBUcmFja0FscGhhOiB0cyA8PCAiVHJhY2tB
bHBoYSIgOyBicmVhazsKLSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOiB0cyA8PCAiVUlTdGF0
ZVRyYW5zaXRpb24iIDsgYnJlYWs7Ci0gICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOiB0cyA8
PCAiRXhwYW5zaW9uVHJhbnNpdGlvbiIgOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwot
fQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TT2Jq
ZWN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwotICAgIFJldGFpblB0cjxOU1Njcm9s
bGVySW1wPiBfc2Nyb2xsZXJJbXA7Ci0gICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVhdHVyZVRvQW5p
bWF0ZTsKLSAgICBDR0Zsb2F0IF9zdGFydFZhbHVlOwotICAgIENHRmxvYXQgX2VuZFZhbHVlOwot
ICAgIE5TVGltZUludGVydmFsIF9kdXJhdGlvbjsKLSAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3Rp
bWVyOwotICAgIFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7Ci0gICAgUmVmUHRyPEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRo
U2Nyb2xsYmFyOihTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihGZWF0dXJl
VG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3RhcnRWYWx1
ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uOwotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcjsKLS0g
KHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotLSAodm9pZClzdG9w
QW5pbWF0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFyUGFydEFuaW1h
dGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhcjooU2Nyb2xsYmFyKilzY3JvbGxiYXIgZmVh
dHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRlIGFuaW1hdGVG
cm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZhbHVlIGR1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgY29uc3QgTlNUaW1l
SW50ZXJ2YWwgdGltZUludGVydmFsID0gMC4wMTsKLSAgICBfdGltZXIgPSBhZG9wdE5TKFtbTlNU
aW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFs
U2luY2VOb3c6MF0gaW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihzZXRDdXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdKTsK
LSAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBfdGltaW5nRnVuY3Rpb24gPSBDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6RWFz
ZUluT3V0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFt
IDw8ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZlYXR1cmVU
b0FuaW1hdGUgPDwgIiBmcm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5kVmFsdWUp
OwotCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBfZmVhdHVyZVRvQW5pbWF0ZSA9
IGZlYXR1cmVUb0FuaW1hdGU7Ci0gICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOwotICAgIF9l
bmRWYWx1ZSA9IGVuZFZhbHVlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc3Rh
cnRBbmltYXRpb24KLXsKLSAgICBBU1NFUlQoX3Njcm9sbGJhcik7Ci0KLSAgICBfc2Nyb2xsZXJJ
bXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7Ci0KLSAgICBMT0dfV0lU
SF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uICIgPDwgc2VsZiA8PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8IF9mZWF0dXJl
VG9BbmltYXRlKTsKLQotICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfdGlt
ZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgX3N0YXJ0RGF0ZSA9
IGFkb3B0TlMoW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0p
OwotfQotCi0tICh2b2lkKXNldFN0YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1ZQotewotICAg
IF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKLX0KLQotLSAodm9pZClzZXRFbmRWYWx1ZTooQ0dG
bG9hdCllbmRWYWx1ZQotewotICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwotfQotCi0tICh2b2lk
KXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyCi17Ci0gICAgQ0dGbG9hdCBwcm9n
cmVzcyA9IDA7Ci0gICAgTlNEYXRlICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFs
U2luY2VOb3c6MF07Ci0gICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGltZUludGVy
dmFsU2luY2VEYXRlOl9zdGFydERhdGUuZ2V0KCldOwotICAgIGlmIChlbGFwc2VkID4gX2R1cmF0
aW9uKSB7Ci0gICAgICAgIHByb2dyZXNzID0gMTsKLSAgICAgICAgW3RpbWVyIGludmFsaWRhdGVd
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHQgPSAxOwotICAgICAgICBp
ZiAoX2R1cmF0aW9uKQotICAgICAgICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRpb247Ci0gICAg
ICAgIHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9kdXJhdGlv
bik7Ci0gICAgfQotICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKLQotICAgIExPR19XSVRIX1NUUkVB
TShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gIiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8PCJdIGZv
ciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKLQotICAgIENHRmxvYXQgY3VycmVudFZhbHVlOwot
ICAgIGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRWYWx1ZSkKLSAgICAgICAgY3VycmVudFZhbHVlID0g
MSAtIHByb2dyZXNzOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVudFZhbHVlID0gcHJvZ3Jlc3M7
Ci0KLSAgICBzd2l0Y2ggKF9mZWF0dXJlVG9BbmltYXRlKSB7Ci0gICAgY2FzZSBUaHVtYkFscGhh
OgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFsdWVdOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRyYWNrQWxwaGE6Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAg
c2V0VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVJ
U3RhdGVUcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0
aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHBh
bnNpb25UcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5z
aXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBpZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKLSAg
ICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbc2VsZiBzdG9wQW5pbWF0
aW9uXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgX3Njcm9sbGJhciA9IDA7
Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0g
ICAgX2R1cmF0aW9uID0gZHVyYXRpb247Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIFtfdGltZXIgaW52YWxpZGF0ZV07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJTY3Jv
bGxlckltcERlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwgTlNTY3JvbGxl
ckltcERlbGVnYXRlPgotewotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogX3Njcm9sbGJhcjsKLQot
ICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfa25vYkFscGhhQW5pbWF0
aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdHJhY2tBbHBo
YUFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3Vp
U3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uPiBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbjsKLX0KLS0gKGlkKWluaXRX
aXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcjsKLS0gKHZvaWQpY2Fu
Y2VsQW5pbWF0aW9uczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1wRGVs
ZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Ny
b2xsYmFyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxBbmltYXRpb25zCi17Ci0gICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW19rbm9iQWxwaGFBbmltYXRpb24gc3RvcEFuaW1h
dGlvbl07Ci0gICAgW190cmFja0FscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIFtf
dWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW19leHBhbnNp
b25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKLX0KLQotLSAoTmFrZWRQdHI8U2Nyb2xsQW5pbWF0b3JNYWM+KXNjcm9sbEFu
aW1hdG9yCi17Ci0gICAgcmV0dXJuICZzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKSk7Ci19Ci0KLS0gKE5T
UmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJuIGFS
ZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0KWFSZWN0
Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0tIChDQUxheWVyICopbGF5ZXIKLXsKLSAgICBp
ZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAoIVNjcm9sbGJh
clRoZW1lTWFjOjppc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyOwotICAgIGlmIChfc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBsYXllciA9IF9zY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwotICAg
IGVsc2UKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwotCi0gICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5
ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBsYXllciA/IGxheWVyLT5w
bGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOwotfQotCi0tIChOU1BvaW50KW1vdXNlTG9jYXRp
b25JblNjcm9sbGVyRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAot
ewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0g
ICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIGF1dG8gcG9zaXRpb25JblZpZXcgPSBf
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXco
KTsKLSAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhwb3Np
dGlvbkluVmlldyk7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdCly
ZWN0Ci17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0gKEJPT0wpc2hvdWxkVXNlTGF5ZXJQZXJQ
YXJ0Rm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAotewotICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxlckltcCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9u
U2Vjb25kYXJ5VGhyZWFkKCk7Ci19Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
LSAoTlNBcHBlYXJhbmNlICopZWZmZWN0aXZlQXBwZWFyYW5jZUZvclNjcm9sbGVySW1wOihOU1Nj
cm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXAp
OwotCi0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgotICAgICAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFy
YW5jZV07Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAg
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBGcmFtZVZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyLgot
ICAgIC8vIFRoZSBiYXNlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGRhcmsgQXF1YSwgc28gd2Ug
bWlnaHQgZ2V0IGEgbnVsbCByZXN1bHQuCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA9IF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkudXNlRGFya0FwcGVhcmFuY2VGb3JTY3JvbGxiYXJz
KCk7Ci0gICAgaWYgKGF1dG8gKmFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VO
YW1lZDp1c2VEYXJrQXBwZWFyYW5jZSA/IE5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1YSA6IE5TQXBw
ZWFyYW5jZU5hbWVBcXVhXSkKLSAgICAgICAgcmV0dXJuIGFwcGVhcmFuY2U7Ci0gICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBj
dXJyZW50QXBwZWFyYW5jZV07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci19Ci0jZW5kaWYKLQotLSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8V2Vi
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQ
YWludGVyOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNj
cm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Ny
b2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBoZXJl
LgotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1cm5zLgotICAgIGJvb2wgbXVz
dEFuaW1hdGUgPSBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxv
YWQoKTsKLQotICAgIGlmIChbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNjcm9sbGJhclBhaW50VGlt
ZXJJc0FjdGl2ZSgpICYmICFtdXN0QW5pbWF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKLSAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5z
dGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFuaW1hdGUgbm93
LCBzbyBzdG9wIHRoZSB0aW1lci4KLSAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnN0b3BTY3Jv
bGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGFuaW1hdGlu
Zywgc3RvcAotICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7Ci0gICAgICAgIFtzY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgICAgICBzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uID0gbmlsOwotICAgIH0KLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogbWFj
VGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKQotICAgICAgICBtYWNUaGVtZS0+c2V0UGFpbnRD
aGFyYWN0ZXJpc3RpY3NGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOwotCi0gICAgaWYgKHBhcnQg
PT0gV2ViQ29yZTo6VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKLSAgICAgICAg
ICAgIEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xsZXJQYWludGVyIHJlY3RGb3JQ
YXJ0Ok5TU2Nyb2xsZXJLbm9iXSk7Ci0gICAgICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0t
PnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9
IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpfc2Nyb2xsYmFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6cGFydCA9PSBU
aHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
aW1hdGVGcm9tOnBhcnQgPT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRlciBrbm9iQWxwaGFd
IDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhhXQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5p
bWF0ZVRvOm5ld0FscGhhIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9u
XSk7Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi0t
ICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUtu
b2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwp
ZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJh
cikpOwotCi0gICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJ
bXAgKilzY3JvbGxlckltcDsKLSAgICBpZiAoIVtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xs
YmFyc0NhbkJlQWN0aXZlKCkpIHsKLSAgICAgICAgW3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTow
XTsKLSAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFyIGF3YXksIHRoYXQg
aXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdvaW5nIHRvCi0gICAg
Ly8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gQ2FsbGluZyBb
c2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQotICAgIC8vIHdpbGwg
cGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1wIEFQSS4KLSAgICBp
ZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29u
ZGFyeVRocmVhZCgpKQotICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlv
blZhbHVlOk5PXTsKLQotICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tub2JBbHBoYUFu
aW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6VGh1
bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Ci19
Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmlt
YXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9z
Y3JvbGxiYXIpKTsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9IChOU1Nj
cm9sbGVySW1wICopc2Nyb2xsZXJJbXA7Ci0gICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpf
dHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6
V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0
aW9uOmR1cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAq
KXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigq
X3Njcm9sbGJhcikpOwotCi0gICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVz
IHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEg
aGFyZCB0cmFuc2l0aW9uLgotICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlvblBy
b2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotCi0g
ICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLCB0aGVuIHdlIGFy
ZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQu
Ci0gICAgaWYgKF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkK
LSAgICAgICAgW3Njcm9sbGVySW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKLQotICAg
IGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uKQotICAgICAgICBfdWlTdGF0ZVRyYW5z
aXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgotICAgICAgICAgICAgZmVhdHVyZVRvQW5p
bWF0ZTpVSVN0YXRlVHJhbnNpdGlvbgotICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVy
SW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdCi0gICAgICAgICAgICBhbmltYXRlVG86MS4w
Ci0gICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAgIGVsc2UgewotICAgICAgICAv
LyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwganVzdCByZXNl
dCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCi0gICAgICAgIFtfdWlTdGF0
ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRy
YW5zaXRpb25Qcm9ncmVzc11dOwotICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9u
IHNldEVuZFZhbHVlOjEuMF07Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
c2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIH0KLSAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5p
bWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9y
U2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7Ci0KLSAgICAvLyBFeHBhbnNpb25UcmFuc2l0aW9uIGFs
d2F5cyBhbmltYXRlcyB0byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBwcm9ncmVzcyB0
aGlzIGF2b2lkcyBhIGhhcmQgdHJhbnNpdGlvbi4KLSAgICBbc2Nyb2xsZXJJbXAgc2V0RXhwYW5z
aW9uVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlv
blByb2dyZXNzXV07Ci0KLSAgICBpZiAoIV9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uKSB7
Ci0gICAgICAgIF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIK
LSAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6RXhwYW5zaW9uVHJhbnNpdGlvbgotICAgICAg
ICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVz
c10KLSAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKLSAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0
aW9uXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0
aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkg
aGF2ZSBjaGFuZ2VkLgotICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0
U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotICAg
ICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4wXTsKLSAg
ICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9u
XTsKLSAgICB9Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0
aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
SW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU092ZXJsYXlTY3JvbGxlclN0YXRl
KW5ld092ZXJsYXlTY3JvbGxlclN0YXRlCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1w
KTsKLSAgICBVTlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotfQotCi0tICh2
b2lkKWludmFsaWRhdGUKLXsKLSAgICBfc2Nyb2xsYmFyID0gMDsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKLSAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAg
ICBbX3RyYWNrQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgW191aVN0YXRlVHJhbnNp
dGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25Bbmlt
YXRpb24gaW52YWxpZGF0ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1A
ZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKQEAgLTcwMSwzMCArMTU5LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4g
U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsCiAKIFNjcm9s
bEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAgICAsIG1faW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxl
ZFRpbWVyRmlyZWQpCi0gICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpCi0g
ICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSkKIHsKICAgICBtX3Njcm9sbEFu
aW1hdGlvbkhlbHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAgICBtX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Ny
b2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAgbV9zY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhTY3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJsZUFyZWFdKTsKLSAgICBtX3Njcm9sbGVySW1wUGFp
ciA9IGFkb3B0TlMoW1tOU1Njcm9sbGVySW1wUGFpciBhbGxvY10gaW5pdF0pOwotICAgIFttX3Nj
cm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTptX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlLmdldCgp
XTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpTY3JvbGxlclN0eWxl
OjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CiB9CiAKLVNjcm9sbEFuaW1hdG9yTWFjOjp+
U2Nyb2xsQW5pbWF0b3JNYWMoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgIFttX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIFttX3Njcm9s
bGVySW1wUGFpciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX2hvcml6b250YWxTY3JvbGxlcklt
cERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBpbnZhbGlkYXRlXTsKLSAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBpbnZh
bGlkYXRlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19CitTY3JvbGxBbmltYXRv
ck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkgPSBkZWZhdWx0OwogCiBzdGF0aWMgYm9vbCBzY3Jv
bGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkKIHsKQEAgLTc1Myw3ICsxOTQsNyBAQCBzdGF0
aWMgYm9vbCBydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3RlbSgpCiAKIGJvb2wgU2Nyb2xsQW5p
bWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIE9w
dGlvblNldDxTY3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IpCiB7Ci0gICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKHRy
dWUpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBkbyBkaXJlY3Rpb25hbCBzbmFwcGlu
ZywgYnV0IG91ciBiYXNlIGNsYXNzIGRvZXMuIEl0IHdpbGwgY2FsbCBpbnRvCiAgICAgLy8gU2Ny
b2xsQW5pbWF0b3JNYWM6OnNjcm9sbCBhZ2FpbiB3aXRoIHRoZSBzbmFwcGVkIHBvc2l0aW9ucyBh
bmQgU2Nyb2xsQmVoYXZpb3I6OkRlZmF1bHQuCkBAIC04NDAsNDMgKzI4MSw2IEBAIGJvb2wgU2Ny
b2xsQW5pbWF0b3JNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAogICAgIHJldHVy
biBtX3Njcm9sbENvbnRyb2xsZXIuaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOwogfQogCi1zdGF0
aWMgU3RyaW5nIHNjcm9sbGJhclN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlm
ICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gIm5vbmUiX3M7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKHNjcm9sbGJhci0+ZW5hYmxlZCgpID8gImVu
YWJsZWQiX3MgOiAiZGlzYWJsZWQiX3MpOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0KLSAgICBO
U1Njcm9sbGVySW1wICpzY3JvbGxlckltcCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIGlmICghc2Nyb2xsZXJJbXApCi0gICAgICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLQotICAgIGlmIChzY3JvbGxlckltcC5leHBhbmRlZCkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiLGV4cGFuZGVkIl9zKTsKLQotICAgIGlmIChzY3JvbGxlckltcC50cmFja0FscGhh
ID4gMCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZpc2libGVfdHJhY2siX3MpOwotCi0gICAg
aWYgKHNjcm9sbGVySW1wLmtub2JBbHBoYSA+IDApCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIix2
aXNpYmxlX3RodW1iIl9zKTsKLQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQot
U3RyaW5nIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUobV9zY3JvbGxhYmxlQXJl
YS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1TdHJpbmcgU2Nyb2xsQW5pbWF0b3JNYWM6
OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsYmFyU3RhdGUobV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0K
LQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNj
cm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAgICBBU1NF
UlQobV9zY3JvbGxBbmltYXRpb25IZWxwZXIpOwpAQCAtODg1LDMxNyArMjg5LDE1IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb25Gb3JTY3JvbGxBbmlt
YXRpb24oY29uc3QgRmxvYXRQCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogewotICAgIG5vdGlmeUNvbnRlbnRB
cmVhU2Nyb2xsZWQoZGVsdGEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRy
b2xsZXIoKS5ub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKICAgICBTY3JvbGxBbmlt
YXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKIH0KIAotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAotewotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgW21fc2Ny
b2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOwotICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJz
LCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgp
IDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7Ci0gICAgaWYgKFttX3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9y
TWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRXhpdGVkQ29udGVudEFy
ZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VF
eGl0ZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJh
cnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVh
KCkgPDwgIl0gbW91c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3Jv
bGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgotICAgIGlmIChTY3JvbGxl
clN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdh
Y3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikp
Ci0gICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0Ci17Ci0gICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5l
ZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgotICAgIGlmIChTY3JvbGxlclN0eWxlOjpy
ZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVy
U3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChOU1Njcm9sbGVySW1w
ICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCi0gICAgICAg
IFtwYWludGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1v
dXNlSXNEb3duKSBjb25zdAotewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNj
cm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChOU1Njcm9s
bGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpIHsK
LSAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rvd25dOwotICAgICAgICBpZiAo
bW91c2VJc0Rvd24pCi0gICAgICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxH
ZXN0dXJlXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVu
ZFNjcm9sbEdlc3R1cmVdOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2ls
bFN0YXJ0TGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5
U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xs
ZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21f
c2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQotewotICAgIGlmIChbbV9zY3JvbGxlcklt
cFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJlZEluXTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKLXsKLSAgICBpZiAoW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJlZE91dF07Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAg
TE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1h
dG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2Vz
dHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJl
Z2luU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0g
ICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJl
dF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0
aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAot
ewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3Jv
bGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRFbmRTY3Jv
bGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBh
aXIgZW5kU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3Ip
Ci0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNv
bihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Q
cm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1heUJlZ2luU2Nyb2xsR2Vz
dHVyZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBz
dHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8
ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFp
ciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
W21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Ci0gICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUp
Ci17Ci0gICAgaWYgKHNob3VsZExvY2tTdGF0ZSkKLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWly
IGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092ZXJsYXlTY3JvbGxlclN0YXRlSGlkZGVuXTsK
LSAgICBlbHNlIHsKLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHVubG9ja092ZXJsYXlTY3Jv
bGxlclN0YXRlXTsKLQotICAgICAgICAvLyBXZSBuZXZlciB1cGRhdGUgc2Nyb2xsZXIgc3R5bGUg
Zm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFyZSBsb2NrZWQuIElmIHdlIGhhdmUgYSBwZW5k
aW5nCi0gICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdHlsZSwgZG8gaXQgb25jZSB3ZSd2
ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUuCi0gICAgICAgIGlmIChtX25lZWRzU2Nyb2xs
ZXJTdHlsZVVwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLSAgICB9
Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3Rh
dGVJc0xvY2tlZF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBh
aW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBh
aW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGVy
SW1wRGVsZWdhdGUpOwotICAgIG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlID0gYWRvcHRO
UyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9s
bGJhcl0pOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGVySW1w
RGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJh
ci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwotCi0gICAgW21fc2Ny
b2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNj
cm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCi0gICAgICAgIFtwYWludGVyIHNldEtub2JB
bHBoYToxXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZVZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBh
aW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBh
aW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSk7Ci0gICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRh
dGVdOwotICAgIG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlID0gbnVsbHB0cjsKLQotICAg
IFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZl
cnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7
Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faG9y
aXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1w
RGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hv
cml6b250YWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxh
eWVyKCldOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlcklt
cDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKLSAg
ICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
LXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
KnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgW21faG9yaXpvbnRh
bFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxd
OwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXll
cnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9
IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIFtwYWludGVyIHNldE5l
ZWRzRGlzcGxheTpZRVNdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1f
c2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJh
ciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAg
IGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1Njcm9sbGVySW1wICpw
YWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFw
YWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/
IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQotewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNj
cm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbcGFp
bnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOwotfQot
Ci1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0
VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICAvLyBOb24tb3ZlcmxheSBzY3Jv
bGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRlc3RpbmcuCi0gICAgaWYg
KFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJT
dHlsZU92ZXJsYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gT3ZlcmxheSBzY3Jv
bGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZyB3aGVuZXZlciB0aGV5IGFy
ZSBhdCBhbGwgdmlzaWJsZS4KLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFtwYWludGVyIGtub2JBbHBoYV0gPiAwOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZs
b2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBh
IHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBidXQgdGhlIHBhZ2UK
LSAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9u
bHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKLSAgICAvLyBTY3JvbGxlckltcFBhaXIgd2hl
biB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgotICAgIGlmIChbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkp
Ci0gICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7Ci19Ci0KIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQogewogICAgIFNjcm9sbEFuaW1hdG9yOjpj
YW5jZWxBbmltYXRpb25zKCk7Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFs
c2U7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCi0gICAgICAgIHN0
b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVs
ZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107Ci0gICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVn
YXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQo
ZmFsc2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVs
RXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKQEAgLTEyMDQsMTUgKzMw
NiwxNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiAKICAgICAvLyBUaGlzIG1heSBub3QgaGF2ZSBi
ZWVuIHNldCB0byB0cnVlIHlldCBpZiB0aGUgd2hlZWwgZXZlbnQgd2FzIGhhbmRsZWQgYnkgdGhl
IFNjcm9sbGluZ1RyZWUsCiAgICAgLy8gU28gc2V0IGl0IHRvIHRydWUgaGVyZS4KLSAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNl
UGFnZUxvYWQodHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogTmVlZCB0byBlbnN1cmUgd2UgZ2V0IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZC4KICAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2U6OkJlZ2FuKQotICAgICAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEJlZ2lu
U2Nyb2xsR2VzdHVyZSgpOwogICAgIGVsc2UgaWYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlOjpFbmRlZCB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2Vs
bGVkKQotICAgICAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5kaWRFbmRTY3JvbGxHZXN0dXJlKCk7CiAgICAg
ZWxzZSBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luKQotICAg
ICAgICBtYXlCZWdpblNjcm9sbEdlc3R1cmUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5z
Y3JvbGxiYXJzQ29udHJvbGxlcigpLm1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpOwogfQogCiAjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMTIyNyw3ICszMjksNyBAQCBib29sIFNjcm9sbEFu
aW1hdG9yTWFjOjpzaG91bGRGb3J3YXJkV2hlZWxFdmVudHNUb1BhcmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbgogICAgIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7Ci0gICAgbV9oYXZlU2Ny
b2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKHRydWUpOwogCiAgICAgaWYgKCF3aGVlbEV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMoKSB8fCAhcnViYmVyQmFuZGluZ0VuYWJsZWRGb3JTeXN0ZW0oKSkKICAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwpAQCAtMTM2OCwx
MjUgKzQ3MCw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNv
bnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiB9CiAjZW5kaWYKIAotdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCi17Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkgewotICAgICAgICBtX25lZWRzU2Nyb2xsZXJT
dHlsZVVwZGF0ZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxi
YXJUaGVtZU1hYyogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpOwotICAgIGlmICghbWFj
VGhlbWUpIHsKLSAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtYWNUaGVtZS0+dXNlc092ZXJsYXlTY3Jv
bGxiYXJzQ2hhbmdlZCgpOwotCi0gICAgTlNTY3JvbGxlclN0eWxlIG5ld1N0eWxlID0gW21fc2Ny
b2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOwotCi0gICAgaWYgKFNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBOU1Njcm9s
bGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgdmVydGljYWxT
Y3JvbGxlckltcF07Ci0gICAgICAgIGF1dG8gbmV3VmVydGljYWxQYWludGVyID0gcmV0YWluUHRy
KFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5ld1N0eWxlIGNvbnRyb2xTaXpl
OihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250
YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkVmVydGljYWxQYWludGVyXSk7Ci0KLSAgICAg
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmV3VmVydGljYWxQ
YWludGVyLmdldCgpXTsKLSAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxi
YXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld1ZlcnRpY2FsUGFpbnRlcikpOwotICAg
ICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJbXAoKnZlcnRpY2FsU2Nyb2xsYmFyKTsK
LQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJl
bnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVS
ZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVu
c3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBk
YXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25l
c3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3Mp
KTsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Ny
b2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgaG9yaXpvbnRh
bFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIE5TU2Nyb2xsZXJJbXAgKm9sZEhv
cml6b250YWxQYWludGVyID0gW21fc2Nyb2xsZXJJbXBQYWlyIGhvcml6b250YWxTY3JvbGxlcklt
cF07Ci0gICAgICAgIGF1dG8gbmV3SG9yaXpvbnRhbFBhaW50ZXIgPSByZXRhaW5QdHIoW05TU2Ny
b2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUgY29udHJvbFNpemU6KE5TQ29u
dHJvbFNpemUpaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOllF
UyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRIb3Jpem9udGFsUGFpbnRlcl0pOwotCi0gICAgICAg
IFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmV3SG9yaXpvbnRh
bFBhaW50ZXIuZ2V0KCldOwotICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9s
bGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgV1RGTW92ZShuZXdIb3Jpem9udGFsUGFpbnRlcikp
OwotICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJbXAoKmhvcml6b250YWxTY3Jv
bGxiYXIpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZl
IGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAgICAgICAv
LyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93
IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9w
ZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJh
clRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAg
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNz
LCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBiYWNrL2Zv
cndhcmQgY2FjaGUsIGFuZAotICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBoYXBwZW4gb24gaXRzIG93
bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0IG91cnNlbHZlcy4KLSAg
ICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSA9PSBOU1Nj
cm9sbGVyU3R5bGVPdmVybGF5ID8gU2Nyb2xsYmFyU3R5bGU6Ok92ZXJsYXkgOiBTY3JvbGxiYXJT
dHlsZTo6QWx3YXlzVmlzaWJsZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKTsKLQotICAg
IG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Ny
b2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3QoMTAwX21zKTsKLX0KLQotYm9vbCBTY3JvbGxB
bmltYXRvck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5pc0FjdGl2ZSgpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9p
bml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoKQotewotICAgIC8vIFRvIGZv
cmNlIHRoZSBzY3JvbGxiYXJzIHRvIGZsYXNoLCB3ZSBoYXZlIHRvIGNhbGwgaGlkZSBmaXJzdC4g
T3RoZXJ3aXNlLCB0aGUgU2Nyb2xsZXJJbXBQYWlyCi0gICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0
aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93aW5nIGFuZCBiYWlsIGVhcmx5LgotICAgIFtt
X3Njcm9sbGVySW1wUGFpciBoaWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIGZsYXNoU2Nyb2xsZXJzXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2Vu
ZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAg
bV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IGRlbHRhOwotCi0gICAgaWYg
KCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9z
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotCi0gICAgaWYg
KG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAgICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRv
ci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6
OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
ZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQotewotICAgIFtt
X3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkSW5EaXJlY3Rpb246TlNNYWtlUG9p
bnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKCkKLXsKLSAgICBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRh
KTsKLSAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gRmxvYXRTaXpl
KCk7Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxF
dmVudFRlc3RNb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0
PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwg
V2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJ
bnRSZWN0JiBzY3JvbGxlclRodW1iKQotewotICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5h
dGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdW
aWV3KHNjcm9sbGVyVGh1bWIpOwotCi0gICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBt
X3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3Jv
bGxhYmxlQXJlYS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5h
dGVzKTsKLSAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGlu
YXRlczsKLX0KLQogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICBy
ZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3
aGVlbEV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA0MzQwMGU4MzU1NzkyNDQyNzZkYjY2
YjgyMmMwMmQxN2U1YjA5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFdlYlNj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworT0JKQ19DTEFTUyBXZWJTY3JvbGxlckltcFBh
aXJEZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKKwordHlwZWRl
ZiBpZCBTY3JvbGxlckltcFBhaXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2hl
ZWxFdmVudFRlc3RNb25pdG9yOworCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlck1hYyA6IHB1
YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOworcHVi
bGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGJhcnNDb250cm9sbGVyTWFjKFNjcm9sbGFibGVBcmVh
Jik7CisgICAgflNjcm9sbGJhcnNDb250cm9sbGVyTWFjKCk7CisKKyAgICB2b2lkIG5vdGlmeUNv
bnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmluYWw7CisKKyAgICB2
b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsKKworICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxH
ZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCBtYXlCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGZp
bmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIGZpbmFsOworICAgIHZv
aWQgY29udGVudHNTaXplQ2hhbmdlZCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgd2lsbEVuZExp
dmVSZXNpemUoKSBmaW5hbDsKKyAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIGZpbmFsOwor
ICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgZmluYWw7CisKKyAgICB2b2lkIGxvY2tPdmVy
bGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkgZmluYWw7Cisg
ICAgYm9vbCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQg
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCB3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2lsbFJl
bW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisKKyAgICB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIGZpbmFsOworCisgICAgdm9p
ZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgZmluYWw7CisgICAgdm9pZCBob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxk
U2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgZmluYWw7CisKKyAg
ICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFs
OworICAgIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZp
bmFsOworCisKKyAgICAvLyBQdWJsaWMgdG8gYmUgY2FsbGFibGUgZnJvbSBPYmotQy4KKyAgICB2
b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJ
c0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7Cisg
ICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIHZvaWQgc2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQoKSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIC8vIHNlbmRDb250ZW50QXJl
YVNjcm9sbGVkU29vbigpIHdpbGwgZG8gdGhlIHNhbWUgd29yayB0aGF0IHNlbmRDb250ZW50QXJl
YVNjcm9sbGVkKCkgZG9lcyBleGNlcHQKKyAgICAvLyBpdCBkb2VzIGl0IGFmdGVyIGEgemVyby1k
ZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSB1cGRhdGluZyBvdmVy
bGF5IHNjcm9sbGJhcgorICAgIC8vIGluZm9ybWF0aW9uIGR1cmluZyBsYXlvdXQuCisgICAgdm9p
ZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsK
KyAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIHNj
cm9sbERlbHRhKTsKKworICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgp
OworICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKCk7CisKKyAgICBX
aGVlbEV2ZW50VGVzdE1vbml0b3IqIHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0OworCisg
ICAgVGltZXIgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyAgICBUaW1lciBtX3NlbmRD
b250ZW50QXJlYVNjcm9sbGVkVGltZXI7CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xsZXJJbXBQYWly
PiBtX3Njcm9sbGVySW1wUGFpcjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGU+IG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdlYlNjcm9s
bGVySW1wRGVsZWdhdGU+IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGU7CisgICAgUmV0
YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1fdmVydGljYWxTY3JvbGxlckltcERlbGVn
YXRlOworCisgICAgRmxvYXRTaXplIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVs
dGE7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKKworICAgIGJvb2wg
bV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNmOWVkYjRmMzEyYTA4Nzg4ODY1NmJmNjY4MDdiZWFjNzM5MDk3MzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWMubW0KQEAgLTAsMCArMSwxMDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmgiCisKKyNpZiBQTEFURk9STShN
QUMpCisKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCisjaW1wb3J0ICJTY3JvbGxBbmltYXRvci5o
IgorI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbXBvcnQgIlNjcm9sbGJhci5oIgorI2lt
cG9ydCAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKKyNpbXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCisj
aW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIgLy8gRklYTUU6IFRoaXMgaXMgIGxheWVy
aW5nIHZpb2xhdGlvbi4KKworI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTY3JvbGxlckltcFNQSS5o
PgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9OYWtl
ZFB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBTY3JvbGxiYXJUaGVtZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQor
eworICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOworICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSA/IHN0YXRp
Y19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKSA6IG51bGxwdHI7Cit9
CisKK3N0YXRpYyBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcEZvclNjcm9sbGJhcihTY3JvbGxi
YXImIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitA
aW50ZXJmYWNlIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIDogTlNPYmplY3QgPE5TU2Nyb2xs
ZXJJbXBQYWlyRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogX3Njcm9s
bGFibGVBcmVhOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVh
OihXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFyZWEKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBfc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9sbGFibGVBcmVhID0gbnVsbHB0
cjsKK30KKworLSAoTlNSZWN0KWNvbnRlbnRBcmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooTlNT
Y3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ny
b2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9zY3Jv
bGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwg
Y29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJP
T0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNj
cm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAg
IGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4g
X3Njcm9sbGFibGVBcmVhLT5pbkxpdmVSZXNpemUoKTsKK30KKworLSAoTlNQb2ludCltb3VzZUxv
Y2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIg
KilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsK
KyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50Owor
CisgICAgLy8gSXQncyBPSyB0aGF0IHRoaXMgcG9zaXRpb24gaXNuJ3QgcmVsYXRpdmUgdG8gdGhp
cyBzY3JvbGxlciAod2hpY2ggbWlnaHQgYmUgYW4gb3ZlcmZsb3cgc2Nyb2xsZXIpLgorICAgIC8v
IEFwcEtpdCBqdXN0IHRha2VzIHRoZSByZXN1bHQgYW5kIHBhc3NlcyBpdCBiYWNrIHRvIC1zY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOi4KKyAgICByZXR1
cm4gX3Njcm9sbGFibGVBcmVhLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisK
Ky0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVy
SW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0
b1Njcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKworICAgIGlmICghX3Njcm9sbGFibGVBcmVhIHx8ICFz
Y3JvbGxlckltcCkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgV2ViQ29yZTo6
U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChbc2Nyb2xsZXJJbXAgaXNIb3Jpem9u
dGFsXSkKKyAgICAgICAgc2Nyb2xsYmFyID0gX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIgPSBfc2Nyb2xsYWJsZUFyZWEt
PnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEg
bnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0
ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBz
Y3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAgIC8vIG1vbWVudCB3aGVuIGl0
cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBs
ZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVNYWM6
OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCisgICAgLy8gaXNzdWUuCisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIEFTU0VS
VChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKSk7CisK
KyAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KFdlYkNvcmU6
OnJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKK30KKworLSAodm9pZClzY3Jv
bGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHNldENvbnRl
bnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVjdAoreworICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcFBhaXIpOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKworICAgIGlmICgh
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRBcmVhV2ls
bFBhaW50KCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFp
ciAqKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRT
Y3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxl
Cit7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIFtz
Y3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5
bGVdOworCisgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMm
Pihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhcnNDb250cm9sbGVyKCkpLnVwZGF0ZVNjcm9sbGVy
U3R5bGUoKTsKK30KKworQGVuZAorCitlbnVtIEZlYXR1cmVUb0FuaW1hdGUgeworICAgIFRodW1i
QWxwaGEsCisgICAgVHJhY2tBbHBoYSwKKyAgICBVSVN0YXRlVHJhbnNpdGlvbiwKKyAgICBFeHBh
bnNpb25UcmFuc2l0aW9uCit9OworCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEZlYXR1cmVUb0FuaW1hdGUgZmVhdHVyZSkK
K3sKKyAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKKyAgICBjYXNlIFRodW1iQWxwaGE6IHRzIDw8ICJU
aHVtYkFscGhhIiA7IGJyZWFrOworICAgIGNhc2UgVHJhY2tBbHBoYTogdHMgPDwgIlRyYWNrQWxw
aGEiIDsgYnJlYWs7CisgICAgY2FzZSBVSVN0YXRlVHJhbnNpdGlvbjogdHMgPDwgIlVJU3RhdGVU
cmFuc2l0aW9uIiA7IGJyZWFrOworICAgIGNhc2UgRXhwYW5zaW9uVHJhbnNpdGlvbjogdHMgPDwg
IkV4cGFuc2lvblRyYW5zaXRpb24iIDsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30K
KwordXNpbmcgV2ViQ29yZTo6TG9nT3ZlcmxheVNjcm9sbGJhcnM7CisKKyNlbmRpZgorCitAaW50
ZXJmYWNlIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU09iamVjdCB7CisgICAgV2ViQ29y
ZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOworICAgIFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBf
c2Nyb2xsZXJJbXA7CisgICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVhdHVyZVRvQW5pbWF0ZTsKKyAg
ICBDR0Zsb2F0IF9zdGFydFZhbHVlOworICAgIENHRmxvYXQgX2VuZFZhbHVlOworICAgIE5TVGlt
ZUludGVydmFsIF9kdXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3RpbWVyOworICAg
IFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsKK30KKy0gKGlkKWluaXRXaXRo
U2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRl
OihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQp
c3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uOworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0
aW1lcjsKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOworLSAo
dm9pZClzdG9wQW5pbWF0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbgorCistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xs
YmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJl
VG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zs
b2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gMC4wMTsKKyAgICBfdGlt
ZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRh
dGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0gaW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdl
dDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzZXRDdXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpu
aWwgcmVwZWF0czpZRVNdKTsKKyAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBfdGltaW5n
RnVuY3Rpb24gPSBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoV2Vi
Q29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6RWFzZUluT3V0KTsKKworICAgIExPR19X
SVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJDcmVhdGluZyBXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZlYXR1cmVUb0FuaW1hdGUgPDwgIiBmcm9tICIg
PDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5kVmFsdWUpOworCisgICAgX3Njcm9sbGJhciA9
IHNjcm9sbGJhcjsKKyAgICBfZmVhdHVyZVRvQW5pbWF0ZSA9IGZlYXR1cmVUb0FuaW1hdGU7Cisg
ICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICBB
U1NFUlQoX3Njcm9sbGJhcik7CisKKyAgICBfc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqX3Njcm9sbGJhcik7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9s
bGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwgc2VsZiA8
PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKKworICAgIFtb
TlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfdGltZXIuZ2V0KCkgZm9yTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZV07CisgICAgX3N0YXJ0RGF0ZSA9IGFkb3B0TlMoW1tOU0RhdGUgYWxs
b2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0pOworfQorCistICh2b2lkKXNldFN0
YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1ZQoreworICAgIF9zdGFydFZhbHVlID0gc3RhcnRW
YWx1ZTsKK30KKworLSAodm9pZClzZXRFbmRWYWx1ZTooQ0dGbG9hdCllbmRWYWx1ZQoreworICAg
IF9lbmRWYWx1ZSA9IGVuZFZhbHVlOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczoo
TlNUaW1lciAqKXRpbWVyCit7CisgICAgQ0dGbG9hdCBwcm9ncmVzcyA9IDA7CisgICAgTlNEYXRl
ICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF07CisgICAgTlNU
aW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGltZUludGVydmFsU2luY2VEYXRlOl9zdGFydERh
dGUuZ2V0KCldOworICAgIGlmIChlbGFwc2VkID4gX2R1cmF0aW9uKSB7CisgICAgICAgIHByb2dy
ZXNzID0gMTsKKyAgICAgICAgW3RpbWVyIGludmFsaWRhdGVdOworICAgIH0gZWxzZSB7CisgICAg
ICAgIE5TVGltZUludGVydmFsIHQgPSAxOworICAgICAgICBpZiAoX2R1cmF0aW9uKQorICAgICAg
ICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRpb247CisgICAgICAgIHByb2dyZXNzID0gX3RpbWlu
Z0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9kdXJhdGlvbik7CisgICAgfQorICAgIEFTU0VS
VChfc2Nyb2xsYmFyKTsKKworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywg
c3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBzZWxmIDw8ICJzZXRD
dXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8PCJdIGZvciAiIDw8IF9mZWF0dXJlVG9Bbmlt
YXRlKTsKKworICAgIENHRmxvYXQgY3VycmVudFZhbHVlOworICAgIGlmIChfc3RhcnRWYWx1ZSA+
IF9lbmRWYWx1ZSkKKyAgICAgICAgY3VycmVudFZhbHVlID0gMSAtIHByb2dyZXNzOworICAgIGVs
c2UKKyAgICAgICAgY3VycmVudFZhbHVlID0gcHJvZ3Jlc3M7CisKKyAgICBzd2l0Y2ggKF9mZWF0
dXJlVG9BbmltYXRlKSB7CisgICAgY2FzZSBUaHVtYkFscGhhOgorICAgICAgICBbX3Njcm9sbGVy
SW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRyYWNrQWxwaGE6CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VHJhY2tBbHBoYTpjdXJyZW50
VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOgorICAg
ICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6Y3VycmVudFZh
bHVlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOgorICAg
ICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50
VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIV9zY3JvbGxiYXItPnN1
cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAgICAgX3Njcm9sbGJhci0+aW52
YWxpZGF0ZSgpOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgX3Njcm9sbGJhciA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQp
c2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgX2R1cmF0aW9uID0g
ZHVyYXRpb247Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbgoreworICAgIFtfdGltZXIgaW52
YWxpZGF0ZV07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJTY3JvbGxlckltcERlbGVnYXRl
IDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwgTlNTY3JvbGxlckltcERlbGVnYXRlPiB7
CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOworCisgICAgUmV0YWluUHRyPFdl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9rbm9iQWxwaGFBbmltYXRpb247CisgICAgUmV0YWlu
UHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF90cmFja0FscGhhQW5pbWF0aW9uOworICAg
IFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdWlTdGF0ZVRyYW5zaXRpb25B
bmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9leHBh
bnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdl
YkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyOworLSAodm9pZCljYW5jZWxBbmltYXRpb25zOwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZQorCistIChpZClp
bml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKKyAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3Ry
YWNrQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgW191aVN0YXRlVHJhbnNpdGlv
bkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25Bbmlt
YXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQor
CistIChOYWtlZFB0cjxXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYz4pc2Nyb2xsYmFy
c0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJh
cnNDb250cm9sbGVyTWFjJj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJz
Q29udHJvbGxlcigpKTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1Jl
Y3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVj
dEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0g
KENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIGlmICghV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OmlzQ3VycmVudGx5
RHJhd2luZ0ludG9MYXllcigpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogbGF5ZXI7CisgICAgaWYgKF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gV2ViQ29yZTo6VmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIGxheWVyID0gX3Njcm9sbGJh
ci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgZWxz
ZQorICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9
IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7Cit9CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbklu
U2Nyb2xsZXJGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCit7Cisg
ICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBB
U1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgYXV0byBwb3NpdGlvbkluVmlldyA9IF9zY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwor
ICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBvc2l0aW9u
SW5WaWV3KTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QK
K3sKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAoQk9PTClzaG91bGRVc2VMYXllclBlclBhcnRG
b3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VE
X1BBUkFNKHNjcm9sbGVySW1wKTsKKworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNv
bmRhcnlUaHJlYWQoKTsKK30KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCistIChO
U0FwcGVhcmFuY2UgKillZmZlY3RpdmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xs
ZXJJbXAgKilzY3JvbGxlckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisK
KyAgICBpZiAoIV9zY3JvbGxiYXIpIHsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfQkVHSU4KKyAgICAgICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFwcGVhcmFu
Y2VdOworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9CisK
KyAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3Ju
ZXIuCisgICAgLy8gVGhlIGJhc2Ugc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZGFyayBBcXVhLCBz
byB3ZSBtaWdodCBnZXQgYSBudWxsIHJlc3VsdC4KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
ID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS51c2VEYXJrQXBwZWFyYW5jZUZvclNjcm9s
bGJhcnMoKTsKKyAgICBpZiAoYXV0byAqYXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFy
YW5jZU5hbWVkOnVzZURhcmtBcHBlYXJhbmNlID8gTlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhIDog
TlNBcHBlYXJhbmNlTmFtZUFxdWFdKQorICAgICAgICByZXR1cm4gYXBwZWFyYW5jZTsKKyAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIHJldHVybiBbTlNBcHBlYXJh
bmNlIGN1cnJlbnRBcHBlYXJhbmNlXTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKK30KKyNlbmRpZgorCistICh2b2lkKXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0
cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3Jv
bGxlclBhaW50ZXI6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29y
ZTo6U2Nyb2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1
cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIC8vIElmIHRoZSB1c2VyIGhh
cyBzY3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVk
IGhlcmUuCisgICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCisgICAgYm9v
bCBtdXN0QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+aGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCgpOworCisgICAgaWYgKFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+
c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNw
ZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgeworICAgICAgICBbc2VsZiBz
Y3JvbGxiYXJzQ29udHJvbGxlcl0tPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRl
bHkgZ29pbmcgdG8gYW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgorICAgIFtzZWxmIHNj
cm9sbGJhcnNDb250cm9sbGVyXS0+c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKworICAgIC8v
IElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBzdG9wCisgICAgaWYgKHNjcm9sbGJhclBh
cnRBbmltYXRpb24pIHsKKyAgICAgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RvcEFuaW1h
dGlvbl07CisgICAgICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBuaWw7CisgICAgfQorCisg
ICAgaWYgKGF1dG8qIG1hY1RoZW1lID0gV2ViQ29yZTo6bWFjU2Nyb2xsYmFyVGhlbWUoKSkKKyAg
ICAgICAgbWFjVGhlbWUtPnNldFBhaW50Q2hhcmFjdGVyaXN0aWNzRm9yU2Nyb2xsYmFyKCpfc2Ny
b2xsYmFyKTsKKworICAgIGlmIChwYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCAmJiBfc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IFdlYkNvcmU6OlZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAg
ICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAgICBhdXRvIHRodW1iUmVjdCA9IFdl
YkNvcmU6OkludFJlY3QoW3Njcm9sbGVyUGFpbnRlciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25v
Yl0pOworICAgICAgICAgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QodGh1bWJSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVj
dCh7IH0pOworICAgIH0KKworICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBhZG9wdE5TKFtb
V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9s
bGJhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOnBhcnQgPT0gV2ViQ29yZTo6VGh1
bWJQYXJ0ID8gVGh1bWJBbHBoYSA6IFRyYWNrQWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRlRnJvbTpwYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCA/IFtzY3JvbGxlclBhaW50ZXIga25v
YkFscGhhXSA6IFtzY3JvbGxlclBhaW50ZXIgdHJhY2tBbHBoYV0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuaW1hdGVUbzpuZXdBbHBoYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1
cmF0aW9uXSk7CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwor
fQorCistICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5p
bWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Nj
cm9sbGJhcikpOworCisgICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Ny
b2xsZXJJbXAgKilzY3JvbGxlckltcDsKKyAgICBpZiAoIVtzZWxmIHNjcm9sbGJhcnNDb250cm9s
bGVyXS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkpIHsKKyAgICAgICAgW3Njcm9sbGVySW1wIHNl
dEtub2JBbHBoYTowXTsKKyAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFy
IGF3YXksIHRoYXQgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdv
aW5nIHRvCisgICAgLy8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVh
ZC4gQ2FsbGluZyBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQor
ICAgIC8vIHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1w
IEFQSS4KKyAgICBpZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNV
cGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVz
ZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKKworICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246
X2tub2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6
V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpk
dXJhdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JT
Y3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFp
bnRlciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7CisgICAgW3NlbGYgc2V0VXBBbHBo
YUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQ
YWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFj
a0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNT
Y3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJh
dGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZv
clNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3
YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRo
aXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgorICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRl
VHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9n
cmVzc11dOworCisgICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5n
LCB0aGVuIHdlIGFyZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9s
bGluZyB0aHJlYWQuCisgICAgaWYgKF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRh
cnlUaHJlYWQoKSkKKyAgICAgICAgW3Njcm9sbGVySW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVl
Ok5PXTsKKworICAgIGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uKSB7CisgICAgICAg
IF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAg
ICBmZWF0dXJlVG9BbmltYXRlOlVJU3RhdGVUcmFuc2l0aW9uCisgICAgICAgICAgICBhbmltYXRl
RnJvbTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc10KKyAgICAgICAgICAg
IGFuaW1hdGVUbzoxLjAKKyAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmlt
YXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgor
ICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9s
bGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKyAgICAgICAgW191aVN0YXRlVHJh
bnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOworICAgICAgICBbX3VpU3RhdGVUcmFu
c2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICB9CisgICAgW191aVN0
YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Ny
b2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlRXhwYW5zaW9uVHJh
bnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAo
IV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9
PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgLy8gRXhwYW5z
aW9uVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8gMS4gSW4gY2FzZSBhbiBhbmltYXRpb24g
aXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJkIHRyYW5zaXRpb24uCisgICAgW3Njcm9s
bGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczoxIC0gW3Njcm9sbGVySW1wIGV4
cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzc11dOworCisgICAgaWYgKCFfZXhwYW5zaW9uVHJhbnNp
dGlvbkFuaW1hdGlvbikgeworICAgICAgICBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiA9
IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOkV4cGFuc2lvblRy
YW5zaXRpb24KKyAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3JvbGxlckltcCBleHBhbnNpb25U
cmFuc2l0aW9uUHJvZ3Jlc3NdCisgICAgICAgICAgICBhbmltYXRlVG86MS4wCisgICAgICAgICAg
ICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGRv
bid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1
ZXMgaW4gY2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0
aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9u
UHJvZ3Jlc3NdXTsKKyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVu
ZFZhbHVlOjEuMF07CisgICAgICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRE
dXJhdGlvbjpkdXJhdGlvbl07CisgICAgfQorICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1h
dGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xs
ZXJJbXAgKilzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNPdmVy
bGF5U2Nyb2xsZXJTdGF0ZSluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9Q
QVJBTShzY3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0
YXRlKTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9sbGJhciA9IDA7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW19rbm9iQWxwaGFBbmltYXRpb24g
aW52YWxpZGF0ZV07CisgICAgW190cmFja0FscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAg
IFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0ZV07CisgICAgW19leHBhbnNp
b25UcmFuc2l0aW9uQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVl
X3B0cjxTY3JvbGxiYXJzQ29udHJvbGxlcj4gU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZShT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM+KHNjcm9sbGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcigqdGhpcywgJlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQorICAgICwgbV9z
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCkKK3sKKyAgICBtX3Njcm9sbGVy
SW1wUGFpckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGFs
bG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxlQXJlYV0pOworICAgIG1fc2Ny
b2xsZXJJbXBQYWlyID0gYWRvcHROUyhbW05TU2Nyb2xsZXJJbXBQYWlyIGFsbG9jXSBpbml0XSk7
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm1fc2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUuZ2V0KCldOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOlNj
cm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKK30KKworU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYygpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW52
YWxpZGF0ZV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm5pbF07CisgICAg
W21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgW21fdmVy
dGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucygpCit7CisgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAg
ICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIFttX2hvcml6b250YWxTY3JvbGxl
ckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9s
bGVyVGh1bWIpCit7CisgICAgYXV0byByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzY3JvbGxlclRo
dW1iOworICAgIGlmIChhdXRvKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCku
dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVy
dGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOwor
CisgICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1i
UmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVT
Y3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30KKworCitib29sIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigpLmhhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBh
aXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAorfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBz
dHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJl
YSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7CisgICAgaWYgKFttX3Njcm9sbGVy
SW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKK30KKwor
dm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7
CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9s
bGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNl
RXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlT
Y3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxl
ckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKK3sKKyAgICBMT0dfV0lUSF9T
VFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VN
b3ZlZEluQ29udGVudEFyZWFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpt
b3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAg
Ly8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90
aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9s
bGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Ny
b2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAgICAgIFtwYWludGVyIG1vdXNl
RW50ZXJlZFNjcm9sbGVyXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgLy8g
QXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZp
Y2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVy
U3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xs
ZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAgICAgIFtwYWludGVyIG1vdXNlRXhp
dGVkU2Nyb2xsZXJdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUlz
RG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1vdXNlSXNEb3duKSBj
b25zdAoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpIHsKKyAgICAgICAgW3Bh
aW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rvd25dOworICAgICAgICBpZiAobW91c2VJc0Rvd24p
CisgICAgICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZFNjcm9sbEdlc3R1
cmVdOworICAgIH0KK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xs
ZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBh
aXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAg
IFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYURpZFJlc2l6ZV07Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBTY3JvbGxi
YXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNpemUoKTsKKworICAgIGlmIChbbV9zY3JvbGxl
ckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsK
KworICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZlUmVzaXplXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkKK3sKKyAgICBpZiAoW21f
c2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJlZEluXTsKK30KKwor
dm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJlZE91
dF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEJlZ2luU2Nyb2xsR2Vz
dHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBz
dHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJl
YSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVy
SW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisKKyAgICBpZiAo
YXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAgICAgICBtb25pdG9y
LT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpD
b250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19XSVRIX1NUUkVBTShP
dmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3Ig
WyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRFbmRTY3JvbGxHZXN0dXJlIik7CisKKyAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5kU2Nyb2xsR2VzdHVy
ZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQor
ICAgICAgICBtb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0
PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwg
V2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0
Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNj
cm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1h
eUJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWly
IGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFj
Ojpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUp
Cit7CisgICAgaWYgKHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWly
IGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092ZXJsYXlTY3JvbGxlclN0YXRlSGlkZGVuXTsK
KyAgICBlbHNlIHsKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHVubG9ja092ZXJsYXlTY3Jv
bGxlclN0YXRlXTsKKworICAgICAgICAvLyBXZSBuZXZlciB1cGRhdGUgc2Nyb2xsZXIgc3R5bGUg
Zm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFyZSBsb2NrZWQuIElmIHdlIGhhdmUgYSBwZW5k
aW5nCisgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdHlsZSwgZG8gaXQgb25jZSB3ZSd2
ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUuCisgICAgICAgIGlmIChtX25lZWRzU2Nyb2xs
ZXJTdHlsZVVwZGF0ZSkKKyAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAgICB9
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Ny
b2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsK
KyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV92ZXJ0
aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIG1fdmVydGljYWxTY3JvbGxlckltcERlbGVn
YXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Ny
b2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNh
bFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwor
CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07
CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCisgICAgICAgIFtwYWlu
dGVyIHNldEtub2JBbHBoYToxXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAg
IE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21fdmVydGljYWxTY3JvbGxlcklt
cERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRl
ID0gbnVsbHB0cjsKKworICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAg
IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CisKKyAgICBb
cGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgp
XTsKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVB
cmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIFtwYWludGVyIHNl
dExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWly
IHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFy
ZWEoKS5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWlu
dGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSk7CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxp
ZGF0ZV07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7CisK
KyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBz
ZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xs
YmFyKCpzY3JvbGxiYXIpOworICAgIFtwYWludGVyIHNldE5lZWRzRGlzcGxheTpZRVNdOworfQor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlk
Q2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGFibGVBcmVhKCku
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0g
c2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGlmICghc2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xs
ZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9y
bUxheWVyKCkgOiBuaWxdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gc2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9s
bGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7
CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRM
YXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOworfQorCitib29sIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBOb24tb3ZlcmxheSBzY3JvbGxi
YXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRlc3RpbmcuCisgICAgaWYgKFNj
cm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHls
ZU92ZXJsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxi
YXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZyB3aGVuZXZlciB0aGV5IGFyZSBh
dCBhbGwgdmlzaWJsZS4KKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFtwYWludGVyIGtub2JBbHBoYV0gPiAwOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBidXQgdGhlIHBh
Z2UKKyAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxk
IG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKKyAgICAvLyBTY3JvbGxlckltcFBhaXIg
d2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgorICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmlzSGFuZGxpbmdXaGVlbEV2ZW50
KCkpCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKKyAgICBlbHNlCisg
ICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQoreworICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pIHsKKyAgICAg
ICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSB0cnVlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpOworICAgIGlm
ICghbWFjVGhlbWUpIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtYWNUaGVtZS0+dXNlc092ZXJs
YXlTY3JvbGxiYXJzQ2hhbmdlZCgpOworCisgICAgTlNTY3JvbGxlclN0eWxlIG5ld1N0eWxlID0g
W21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOworCisgICAgaWYgKFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBO
U1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgdmVy
dGljYWxTY3JvbGxlckltcF07CisgICAgICAgIGF1dG8gbmV3VmVydGljYWxQYWludGVyID0gcmV0
YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5ld1N0eWxlIGNvbnRy
b2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhv
cml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkVmVydGljYWxQYWludGVyXSk7CisK
KyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmV3VmVy
dGljYWxQYWludGVyLmdldCgpXTsKKyAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JT
Y3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld1ZlcnRpY2FsUGFpbnRlcikp
OworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJbXAoKnZlcnRpY2FsU2Nyb2xs
YmFyKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBk
aWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZQorICAgICAgICAvLyBm
cmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdp
bGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJs
eSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRo
aWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIHZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNr
bmVzcykpOworICAgIH0KKworICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIg
PSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICBob3Jp
em9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAgICAgTlNTY3JvbGxlckltcCAq
b2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgaG9yaXpvbnRhbFNjcm9s
bGVySW1wXTsKKyAgICAgICAgYXV0byBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHJldGFpblB0cihb
TlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZToo
TlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250
YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZEhvcml6b250YWxQYWludGVyXSk7CisKKyAg
ICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpuZXdIb3Jp
em9udGFsUGFpbnRlci5nZXQoKV07CisgICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9y
U2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld0hvcml6b250YWxQYWlu
dGVyKSk7CisgICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxlckltcCgqaG9yaXpvbnRh
bFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3JvbGxiYXIgc3R5bGVz
IGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNldCB0aGUKKyAgICAg
ICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBi
ZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUg
cHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3Jv
bGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAg
ICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNr
bmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgLy8gSWYgbV9uZWVkc1Njcm9sbGVyU3R5
bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUgYmFj
ay9mb3J3YXJkIGNhY2hlLCBhbmQKKyAgICAvLyBhIHJlbGF5b3V0IHdpbGwgaGFwcGVuIG9uIGl0
cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxheW91dCBvdXJzZWx2ZXMu
CisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUgPT0g
TlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxlOjpPdmVybGF5IDogU2Nyb2xs
YmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7CisK
KyAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1f
aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RhcnRPbmVTaG90KDEwMF9tcyk7Cit9CisKK2Jv
b2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3Rp
dmUoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3RvcFNjcm9sbGJhclBh
aW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lckZpcmVkKCkKK3sKKyAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwg
d2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGVySW1wUGFp
cgorICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hv
d2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICBbbV9zY3JvbGxlckltcFBhaXIgaGlkZU92ZXJsYXlT
Y3JvbGxlcnNdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBmbGFzaFNjcm9sbGVyc107Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGlt
ZXJGaXJlZCgpCit7CisgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQobV9jb250ZW50QXJlYVNj
cm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7CisgICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJT
Y3JvbGxEZWx0YSA9IHsgfTsKKworICAgIGlmIChhdXRvKiBtb25pdG9yID0gd2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpCisgICAgICAgIG1vbml0b3ItPnJlbW92ZURlZmVycmFsRm9yUmVhc29uKHJl
aW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dy
ZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVh
U2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAgbV9jb250ZW50QXJl
YVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IGRlbHRhOworCisgICAgaWYgKCFtX3NlbmRDb250
ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zZW5kQ29udGVudEFy
ZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworCisgICAgaWYgKGF1dG8qIG1vbml0
b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAgbW9uaXRvci0+ZGVmZXJGb3JS
ZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVB
cmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9s
bEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29u
dGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQoreworICAgIFttX3Njcm9s
bGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkSW5EaXJlY3Rpb246TlNNYWtlUG9pbnQoZGVs
dGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsKK30KKworc3RhdGljIFN0cmluZyBzY3JvbGxi
YXJTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuICJub25lIl9zOworCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAg
cmVzdWx0LmFwcGVuZChzY3JvbGxiYXItPmVuYWJsZWQoKSA/ICJlbmFibGVkIl9zIDogImRpc2Fi
bGVkIl9zKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCisgICAgTlNTY3JvbGxlckltcCAqc2Ny
b2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAo
IXNjcm9sbGVySW1wKQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisKKyAgICBp
ZiAoc2Nyb2xsZXJJbXAuZXhwYW5kZWQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIixleHBhbmRl
ZCJfcyk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAudHJhY2tBbHBoYSA+IDApCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIix2aXNpYmxlX3RyYWNrIl9zKTsKKworICAgIGlmIChzY3JvbGxlckltcC5r
bm9iQWxwaGEgPiAwKQorICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90aHVtYiJfcyk7
CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKK30KKworU3RyaW5nIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp2ZXJ0
aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9s
bGJhclN0YXRlKHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK1do
ZWVsRXZlbnRUZXN0TW9uaXRvciogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndoZWVsRXZlbnRU
ZXN0TW9uaXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xs
QW5pbWF0b3IoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDIyNjE1OGNmY2Q0OWM1OWIwZjhiZDA3MDQ1YmU1OWI0ODU5YmZiZTMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNb2NrLmgiCi0KLSNpbmNs
dWRlICJTY3JvbGxhYmxlQXJlYS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNjcm9sbEFu
aW1hdG9yTW9jazo6U2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGxvZ2dlcikKLSAgICA6
IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotICAgICwgbV9sb2dnZXIoV1RGTW92ZShs
b2dnZXIpKQotewotfQotCi1TY3JvbGxBbmltYXRvck1vY2s6On5TY3JvbGxBbmltYXRvck1vY2so
KSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6ZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6Ondp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBT
Y3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0g
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQotewotICAg
IG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9y
Ojptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9j
azo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZU1vdmVk
SW5Db250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZU1vdmVkSW5Db250ZW50
QXJlYSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpCi17Ci0gICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKLSAgICBT
Y3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotfQotCi1jb25zdCBjaGFy
KiBTY3JvbGxBbmltYXRvck1vY2s6OnNjcm9sbGJhclByZWZpeChTY3JvbGxiYXIqIHNjcm9sbGJh
cikgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1fdmVydGljYWxTY3JvbGxiYXIg
PyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhciA/ICJIb3Jp
em9udGFsIiA6ICJVbmtub3duIjsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNl
RW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBtX2xv
Z2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFy
KSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjptb3VzZUV4aXRl
ZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBtX2xvZ2dlciht
YWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Ny
b2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VJc0Rvd25JblNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBpc1ByZXNzZWQpIGNvbnN0Ci17Ci0gICAg
bV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNzZWQgPyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJ
c1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBT
Y3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIGlzUHJlc3Nl
ZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmOTcyMWE4ZjYyMmM4OWU1NDZkOWViYmFjZDk4MjEwZjgzMTFiOTlhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEEgTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBTY3JvbGxBbmltYXRvciB1c2VkIHRvIHRlc3QgdGhl
IHNjcm9sbCBldmVudHMKLS8vIHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGwgYW5pbWF0b3IuIFRlc3Rz
IGNhbiBlbmFibGUgdGhpcyBzY3JvbGwgYW5pbWF0b3IgdXNpbmcKLS8vIHRoZSBpbnRlcm5hbCBz
ZXR0aW5nIGVuYWJsZU1vY2tTY3JvbGxBbmltYXRvci4KLWNsYXNzIFNjcm9sbEFuaW1hdG9yTW9j
ayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsQW5p
bWF0b3JNb2NrKFNjcm9sbGFibGVBcmVhJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1vY2soKTsKLQotcHJpdmF0ZToK
LQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBib29sIGFsbG93c0hvcml6b250YWxT
dHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBJ
bnRTaXplIHN0cmV0Y2hBbW91bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRTaXplKCk7
IH0KLSAgICBib29sIGlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBp
bm5lZFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyB9OyB9Ci0gICAgYm9vbCBhbGxv
d3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxE
aXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGlt
bWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRT
aXplJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRz
SWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFkZEhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3Zl
VmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVt
b3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJh
ciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIHNjcm9sbGJhclByZWZp
eChTY3JvbGxiYXIqKSBjb25zdDsKLQotICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4gbV9sb2dnZXI7Ci0gICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsU2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwotICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDZjZjAyODJiYmFiZTg5MmE3YzQwMGI3NGRkOGRhMTVlMGZmMTNmYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNb2NrLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmgiCisKKyNpbmNsdWRlICJT
Y3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGxvZ2dlcikK
KyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9sb2dn
ZXIoV1RGTW92ZShsb2dnZXIpKQoreworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6On5T
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2soKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNb2NrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKK3sKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIFNjcm9sbGJh
cnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3Jv
bGxiYXI7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OndpbGxS
ZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3Jv
bGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBu
dWxscHRyOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFbnRlcmVk
Q29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRDb250ZW50QXJlYSIp
OworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOworICAgIFNj
cm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7Cisg
ICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29u
dHJvbGxlcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworfQorCitjb25zdCBjaGFyKiBTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeChTY3JvbGxiYXIqIHNjcm9sbGJh
cikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1fdmVydGljYWxTY3JvbGxiYXIg
PyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhciA/ICJIb3Jp
em9udGFsIiA6ICJVbmtub3duIjsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6
Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAg
ICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBzY3JvbGxiYXJQcmVmaXgoc2Ny
b2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QK
K3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNjcm9sbGJhclByZWZp
eChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpt
b3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Ym9vbCBpc1ByZXNzZWQpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNz
ZWQgPyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJc1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Ny
b2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VJ
c0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIGlzUHJlc3NlZCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Nj
cm9sbGJhcnNDb250cm9sbGVyTW9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0NzMzOTMxMTJkODRhYTUzZWQy
YjY3OWVmZjA4NDY3MzNiODgyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoYykg
MjAyMSBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTW9jayBpbXBsZW1lbnRhdGlvbiBv
ZiBTY3JvbGxiYXJzQ29udHJvbGxlciB1c2VkIHRvIHRlc3QgdGhlIHNjcm9sbCBldmVudHMKKy8v
IHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGxiYXIgY29udHJvbGxlci4gVGVzdHMgY2FuIGVuYWJsZSB0
aGlzIG1vY2sgb2JqZWN0IHVzaW5nCisvLyB0aGUgaW50ZXJuYWwgc2V0dGluZyBzZXRVc2VzTW9j
a1Njcm9sbEFuaW1hdG9yKCkuCisvLyBGSVhNRTogc2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcigp
IG5lZWRzIHJlbmFtaW5nLgorCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2sgZmluYWwg
OiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJhcnNDb250cm9sbGVyTW9jayk7
CitwdWJsaWM6CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKFNjcm9sbGFibGVBcmVhJiwg
V1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKKyAgICB2aXJ0dWFsIH5TY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2soKTsKKworcHJpdmF0ZToKKworICAgIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBm
aW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lk
IG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCBmaW5hbDsKKyAg
ICBjb25zdCBjaGFyKiBzY3JvbGxiYXJQcmVmaXgoU2Nyb2xsYmFyKikgY29uc3Q7CisKKyAgICBX
VEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fbG9nZ2VyOworICAgIFNjcm9sbGJh
ciogbV92ZXJ0aWNhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICBTY3JvbGxiYXIqIG1faG9y
aXpvbnRhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwo=
</data>
<flag name="commit-queue"
          id="461588"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438259</attachid>
            <date>2021-09-15 10:56:06 -0700</date>
            <delta_ts>2021-09-17 19:29:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210915105605.patch</filename>
            <type>text/plain</type>
            <size>189890</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc2NGE4OWQ1ZjVhNjQ5
ZWQ1NTIyOGY2YzkxZWEyMWMyM2ZmY2M1ZS4uMWVkM2VlMjc0M2EyYjNiM2I2NWFlMGIxMzJkMTk5
ZmMxNjcxM2VlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IEFzIHRoZSBmaXJzdCBzdGVwIHRvIGNsZWFuaW5nIHVwIFNjcm9sbEFuaW1hdG9yL1Njcm9sbENv
bnRyb2xsZXIsIG1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YKKyAgICAgICAgU2Ny
b2xsQW5pbWF0b3IgYW5kIGludG8gYSBuZXcgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgY2xhc3MsIHdp
dGggcGxhdGZvcm0tc3BlY2lmaWMgc3ViY2xhc3Nlcy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBt
dWNoIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIFNjcm9sbEFu
aW1hdG9yLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OndoZWVsRXZlbnRUZXN0TW9uaXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25J
blNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRI
aWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5oLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnNjcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNh
bmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYVdpbGxQ
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRTaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlcjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlcjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om5vdGlmeUNvbnRlbnRBcmVhU2Ny
b2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9y
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVy
aWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVhc2VPdXRDdWJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpj
b250ZW50QXJlYURpZFNob3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9s
bEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpoYW5k
bGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9s
bGVySW1wUGFpcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6XSk6IERlbGV0ZWQuCisgICAgICAgIChvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBp
bml0V2l0aFNjcm9sbGJhcjpmZWF0dXJlVG9BbmltYXRlOmFuaW1hdGVGcm9tOmFuaW1hdGVUbzpk
dXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24gc2V0RW5kVmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGludmFsaWRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXREdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW5pdFdp
dGhTY3JvbGxiYXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdh
dGUgY2FuY2VsQW5pbWF0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RUb0JhY2tpbmc6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBsYXllcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIG1vdXNlTG9jYXRpb25JblNjcm9s
bGVyRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgY29udmVydFJlY3RUb0xheWVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGVmZmVjdGl2ZUFw
cGVhcmFuY2VGb3JTY3JvbGxlckltcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzZXRVcEFscGhhQW5pbWF0aW9uOnNjcm9sbGVyUGFpbnRlcjpwYXJ0OmFu
aW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDph
bmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDpv
dmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJl
c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudHNSZXNpemVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c3RvcFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNj
cm9sbGVkU29vbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxi
YXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6Cisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0
Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wUGFpckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAg
ICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgICgt
W1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5p
bWF0ZTphbmltYXRlRnJvbTphbmltYXRlVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGluaXRXaXRoU2Nyb2xsYmFyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBzY3JvbGxiYXJzQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgbGF5ZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBtb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKToKKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
c2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDphbmltYXRlQWxwaGFUbzpk
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlcklt
cDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVy
SW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlT
dGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNjcm9sbEdl
c3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hv
dWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50
QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFy
U3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25p
dG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
b2NrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
QW5pbWF0b3JNb2NrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDogQWRkZWQuCisKIDIwMjEtMDktMTMgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNvbXB1
dGVkIHN0eWxlIGZvciB0cmFuc2Zvcm0tb3JpZ2luIG9uIFNWRyBib3hlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAzOGE3ZDM0NzUwNWQ5NDBjM2YwZTM0ZDNkNjk3MzM4MzQzNzljYTIyLi5kZDkzNGIwNzI5
YTgyN2VjNGNmMzliOGJiNTlhMjZmYzhiMTdlZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxOCw2
ICsxODE4LDcgQEAgcGxhdGZvcm0vU2Nyb2xsVHlwZXMuY3BwCiBwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CitwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHAKIHBsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCiBwbGF0Zm9ybS9T
ZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlLmNwcApAQCAtMjA4Niw3ICsyMDg3LDcgQEAgcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKIHBsYXRmb3JtL21vY2svUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwCiBwbGF0Zm9ybS9tb2NrL1JUQ0RhdGFDaGFubmVs
SGFuZGxlck1vY2suY3BwCiBwbGF0Zm9ybS9tb2NrL1JUQ05vdGlmaWVyc01vY2suY3BwCi1wbGF0
Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5jcHAKK3BsYXRmb3JtL21vY2svU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suY3Bw
CiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guY3BwCiBwbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggMmFmZDRjMjMyMDE4NTFjY2JjZjBmNzMzNDQxNjlmY2NjYjhlMDhiOC4uZGYx
ZWNmYTI2YTJjMDdhNmU2MmI1YTc1YjdhNWFkMjE5OGI1YThiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC00OTEsNiArNDkxLDcgQEAgcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1h
Yy5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIEBuby11bmlmeQogcGxhdGZv
cm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1t
CitwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tYWMvU2Vy
aWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQogcGxhdGZvcm0vbWFjL1N0cmluZ1V0aWxpdGll
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCBlMjIyZjY2YjE1NmE4YjdmMjZiNWY5OGQ2NmU5
ZDdhY2NhM2Q0ZDA2Li5kY2RjZWVmMDgxNzgyNDMwNWRmNGUwZWUwZDRiY2UyNzg4OTMwYjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtNzIsNiArNzIsNyBAQCBwbGF0Zm9ybS9nYW1lcGFkL21h
bmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwCiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0
ZUdhbWVwYWRQcm92aWRlci5jcHAKIAogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdl
bmVyaWMuY3BwCitwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5j
cHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9HTENvbnRleHQuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRleCBi
MTBjMWVjZTUyMDc1Yjc1MzVkYTUxYzJjYzMxNmRjOTM0M2ZkMDgxLi5iNGFlNWM5YjFkNzFjZTAw
Y2ZhMjA0YTczZDZiZGY2MjVlYjU2MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjUsNiAr
NjUsNyBAQCBwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKIHBsYXRm
b3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAogCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKK3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMjEzNDRlYzgyMzBjYzNiMzM4MTUw
ZDczNGQwOWE0ZmE3NWNmNTE5Li5iZjQzOGUwYWM2MmViOGRjZDJhMWU5ZGJhZGQ1M2Y4YzA1ZjZm
OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zODIsNiArMzgyLDcgQEAKIAkJMEZFQTNFODgxOTFCM0JENzAwMEYxQjU1IC8q
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEzRTg2MTkxQjNCRDcwMDBGMUI1NSAvKiBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQUY2NkIyM0JGQzM5RTAwNDAzMERBIC8qIENvbG9y
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU2Qzc2QzFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JVdGlsaXRpZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDMTIwQzIyQkYyQ0Qy
MDA0RTlEMzUgLyogTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMxMjA5MjJCRjJDQzcwMDRFOUQzNSAv
KiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUUzNzExMjZGMTk1MjkwMDFCNTE4NCAvKiBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDIyNDUzMjZGMTVENzUwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbSAqLzsgfTsKIAkJMEZGM0I5MjkxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGM0I5
MjUxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZC5oICovOyB9OwogCQkwRkYzQjkyQjFFRTNC
NkRFMDBCODQxNDQgLyogSlNET01RdWFkSW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGM0I5MjcxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVh
ZEluaXQuaCAqLzsgfTsKIAkJMEZGNTAyNkExMDJCQTk0MzAwNjZGMzlBIC8qIEpTU3R5bGVNZWRp
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAy
NjgxMDJCQTk0MzAwNjZGMzlBIC8qIEpTU3R5bGVNZWRpYS5oICovOyB9OwpAQCAtMjAxNiw3ICsy
MDE3LDcgQEAKIAkJNUM5QzJEQjUyMjQxQTY3QjAwOTk2QjBCIC8qIENvbnRlbnRSdWxlTGlzdFJl
c3VsdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUMyREIzMjI0MUE2NzMwMDk5NkIwQiAvKiBDb250ZW50UnVsZUxpc3RSZXN1bHRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUM5RUYyRjMyMUYw
NjE5MDAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUVGMkYyMjFGMDYxNzEwMDNCREM1NiAv
KiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBMURFQzYxRjcxRjFDNzAwRTcxQkQzIC8qIEhUVFBIZWFk
ZXJGaWVsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNBMURFQzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVDQjM3RkZGMUM2MkQyQTEw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxB
bmltYXRvck1vY2suaCAqLzsgfTsKKwkJNUNCMzdGRkYxQzYyRDJBMTAwRjIwMTg4IC8qIFNjcm9s
bGJhcnNDb250cm9sbGVyTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9s
bGVyTW9jay5oICovOyB9OwogCQk1Q0JDOERBRDFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nl
c3NpYmlsaXR5U29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlT
b2Z0TGluay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTVDQkQ1OTU5MjI4MEU5MjYwMDJCMjJBQSAvKiBDdXN0b21IZWFkZXJGaWVsZHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1RDIzODYyMjdB
MDc3QzAwMEI5QkRBIC8qIEN1c3RvbUhlYWRlckZpZWxkcy5jcHAgKi87IH07CiAJCTVDQzc5MDBF
MjY2QUZBODkwMDY5MjRGRSAvKiBUaW1pbmdBbGxvd09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDNzkwMEIyNjZBRkE4ODAwNjkyNEZFIC8q
IFRpbWluZ0FsbG93T3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYxNTQsNiArNjE1NSwxMCBAQAogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4
NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBFNzA1OEVEMUJDNUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlYXJjaFBvcHVw
TWVudUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRTcwNThGMzFCQzVD
Q0Q3MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vh
cmNoUG9wdXBNZW51Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0
NTAyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMDIyNDUzMjZGMTVENzUwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAyMjQ1NDI2RjE1RDc1MDAw
MjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwM0Mw
NzMxODg0Njk1RTAwQTVGOENBIC8qIFN5c3RlbU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTeXN0ZW1NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQw
NzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3Myw4ICs5Nzc4LDggQEAKIAkJNUM5
RUYyRjIyMUYwNjE3MTAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ExREVDMjFGNzFFNjg2MDBFNzFCRDMgLyogSFRU
UEhlYWRlckZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
VFBIZWFkZXJGaWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQTFERUM0
MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRUUEhlYWRlckZpZWxkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTVDQjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNCMzdGRkQxQzYyRDI3ODAwRjIw
MTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JvbGxBbmltYXRvck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0IzN0ZGRDFDNjJEMjc4
MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1Q0JDOERBQTFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3Np
YmlsaXR5U29mdExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExp
bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFBY2Nlc3NpYmlsaXR5
U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDNzkwMEIyNjZBRkE4
ODAwNjkyNEZFIC8qIFRpbWluZ0FsbG93T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbWluZ0FsbG93T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMTY2OCw4ICsyMTY3Myw4IEBACiAJCQkJMDczNzk0RjQxOUY1ODY0RTAwRTVBMDQ1IC8q
IFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2suaCAqLywKIAkJCQkwNzM3OTRGNzE5RjU4NjRFMDBF
NUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5jcHAgKi8sCiAJCQkJMDczNzk0RjgxOUY1ODY0RTAw
RTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suaCAqLywKLQkJCQk1Q0IzN0ZGQzFDNjJEMjc4MDBG
MjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmNwcCAqLywKLQkJCQk1Q0IzN0ZGRDFDNjJEMjc4
MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi8sCisJCQkJNUNCMzdGRkMxQzYyRDI3
ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAgKi8sCisJCQkJNUNCMzdG
RkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jay5oICovLAogCQkJ
CTBGRTcxNDAzMTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suY3BwICovLAog
CQkJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLywK
IAkJCQkyRDdFRDBBOTFCQUU5OTE3MDA0M0IzRTUgLyogVGltZXJFdmVudEJhc2VkTW9jay5oICov
LApAQCAtMjIwMjcsNiArMjIwMzIsOCBAQAogCQkJCTAwODFGRUZFMTZCMEEyQjYwMDhBQUE3QSAv
KiBQdWJsaWNTdWZmaXhNYWMubW0gKi8sCiAJCQkJQkNBRTFGQTUxMjkzOURCNzAwNENCMDI2IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAorCQkJCTBGMDIyNDU0MjZGMTVENzUwMDAyNjVDMyAv
KiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oICovLAorCQkJCTBGMDIyNDUzMjZGMTVENzUwMDAy
NjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQlCQzhCODUzQzBFN0M3
RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VGODY5RTBFODQ0
RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi8sCiAJCQkJNUIxRTBFNDMyNUQx
NjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8sCkBAIC0yNzk4NCw2ICsyNzk5
MSw4IEBACiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmgg
Ki8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJ
CQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAorCQkJCTBGMDIy
NDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5jcHAgKi8sCisJCQkJ
MEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyLmggKi8sCiAJ
CQkJMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLywKIAkJ
CQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlC
QzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICov
LApAQCAtMzQ3NDEsOCArMzQ3NTAsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0ODAxMzc4Qjc3MjAw
OURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FFMUZB
NzEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFC
Njk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNDAyOEIwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzYzMjgsNiArMzYzMzcsNyBAQAogCQkJCTQxOTI0MjQ5MjEyN0I5M0Uw
MDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29j
b2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Ny
b2xsQW5pbWF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVFMzcxMTI2RjE5NTI5MDAx
QjUxODQgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0b3JQc2V1ZG9DbGFz
c0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2QUEw
RjlFMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CmluZGV4IDlhYzQxOWYzMDExMGNlNWNiMTBmM2FiNDJlYjNiMGUzMWYyMmNiY2MuLjgwZTAxMTk5
NzQyZGY0ZGRkMTdjMGUxMjk3MjkzNzVkNGZkMTRiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM3MywyMiArMzczLDcgQEAgdm9pZCBTY3JvbGxB
bmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpCiAjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxBbmlt
YXRvcjo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+
dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6d2lsbEVu
ZExpdmVSZXNpemUoKQotewotICAgIG1fc2Nyb2xsQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVu
Z3RocygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKQotewotICAgIG1fc2Nyb2xsQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVu
Z3RocygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciopCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1NpemVDaGFuZ2Vk
KCkgY29uc3QKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IGE0ZjM5
ZDU2MWM2Mzk1MWY1MzEyOWVmY2VmNTQyNTBlMTU5YTJiYWYuLmEzM2EwYmM5ZjViYjFhNjM3NGVk
OWQwYTIxOWNiOWJhYmRjYTFhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaApAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogCiAgICAgU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCisg
ICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICBib29sIGhhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQ7IH0KKyAgICB2b2lkIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoYm9vbCBoYXZl
U2Nyb2xsZWQpIHsgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gaGF2ZVNjcm9sbGVkOyB9
CisKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKTsKIAogICAgIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IuZ2V0KCk7IH0KQEAgLTk2LDQ0ICsxMDEsMTIgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50
QXJlYVdpbGxQYWludCgpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29u
c3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFy
KiwgYm9vbCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRB
cmVhRGlkU2hvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4o
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Ny
b2xsYmFyKFNjcm9sbGJhciopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIqKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIHsgfQotCi0gICAgdmlydHVhbCBi
b29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciopIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgVU5VU0VEX1BBUkFNKGRlbHRhKTsgfQotCiAg
ICAgdmlydHVhbCBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBob3Jpem9u
dGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQotCiAgICAgdm9pZCBzZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IoUmVmUHRyPFdoZWVsRXZlbnRUZXN0TW9uaXRvcj4mJiB0ZXN0TW9uaXRv
cikgeyBtX3doZWVsRXZlbnRUZXN0TW9uaXRvciA9IHRlc3RNb25pdG9yOyB9CisgICAgV2hlZWxF
dmVudFRlc3RNb25pdG9yKiB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSBjb25zdCB7IHJldHVybiBt
X3doZWVsRXZlbnRUZXN0TW9uaXRvci5nZXQoKTsgfQogCiAgICAgRmxvYXRQb2ludCBhZGp1c3RT
Y3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCwg
U2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKICAgICBmbG9hdCBhZGp1c3RTY3JvbGxP
ZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgRmxvYXRQb2lu
dCYgbmV3T2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QpOwpAQCAtMTc4LDYg
KzE1MSw3IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJv
bGxlcjsKICAgICBUaW1lciBtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lcjsKICAgICBG
bG9hdFBvaW50IG1fY3VycmVudFBvc2l0aW9uOworICAgIGJvb2wgbV9oYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkIHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRp
b24+IG1fc2Nyb2xsQW5pbWF0aW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yPiBtX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggOTY3ZTEzMjZhYmU1YjMwMGE3Mjc2
YjQ0ZWI5ODRiMTc5YWI0MzU1Yi4uMGUxMGFiNjIzZTE3NTBlNGIyMDAzN2VmYThlOWIyMGJiMDQ2
OGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAt
MzksOCArMzksOCBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yTW9jay5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIHN0cnVjdCBTYW1l
U2l6ZUFzU2Nyb2xsYWJsZUFyZWEgewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCB3ZWFr
UHRyRmFjdG9yV2FzQ29uc3RydWN0ZWRPbk1haW5UaHJlYWQ7CiAjZW5kaWYKLSAgICB2b2lkKiBw
b2ludGVyWzJdOworICAgIHZvaWQqIHBvaW50ZXJbM107CiAgICAgSW50UG9pbnQgb3JpZ2luOwog
ICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OwogfTsKQEAgLTc0LDE3ICs3NCwyNSBAQCBTY3Jv
bGxhYmxlQXJlYTo6flNjcm9sbGFibGVBcmVhKCkgPSBkZWZhdWx0OwogCiBTY3JvbGxBbmltYXRv
ciYgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
c2Nyb2xsQW5pbWF0b3IpIHsKKyAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCisgICAgICAgIG1f
c2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xs
YWJsZUFyZWEmPigqdGhpcykpOworCisgICAgcmV0dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgp
OworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlciYgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhcnND
b250cm9sbGVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIpIHsK
KyAgICAgICAgLy8gTm90ZSB0aGF0IHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgaXMgYSBtaXNub21l
ci4KICAgICAgICAgaWYgKHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSkgewotICAgICAgICAgICAg
bV9zY3JvbGxBbmltYXRvciA9IG1ha2VVbmlxdWU8U2Nyb2xsQW5pbWF0b3JNb2NrPihjb25zdF9j
YXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpLCBbdGhpc10oY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSB7CisgICAgICAgICAgICBtX3Njcm9sbGJhcnNDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2s+KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyks
IFt0aGlzXShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICBsb2dNb2Nr
U2Nyb2xsQW5pbWF0b3JNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSk7CisgICAgICAgICAgICBt
X3Njcm9sbGJhcnNDb250cm9sbGVyID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZShjb25z
dF9jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9z
Y3JvbGxBbmltYXRvcik7Ci0gICAgcmV0dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgpOworICAg
IHJldHVybiAqbV9zY3JvbGxiYXJzQ29udHJvbGxlci5nZXQoKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4pCkBAIC0yMDEs
NyArMjA5LDcgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICB9CiAKICAgICBpZiAoc2Nyb2xsUG9z
aXRpb24oKSAhPSBvbGRQb3NpdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CisgICAg
ICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChzY3Jv
bGxQb3NpdGlvbigpIC0gb2xkUG9zaXRpb24pOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVhOjpo
YW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgc3RkOjpvcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4pCkBAIC0yNDMs
ODkgKzI1MSw4MyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkK
ICAgICBpZiAobV9pbkxpdmVSZXNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBtX2luTGl2ZVJl
c2l6ZSA9IHRydWU7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPndpbGxTdGFy
dExpdmVSZXNpemUoKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxTdGFydExpdmVS
ZXNpemUoKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUoKQog
ewogICAgIGlmICghbV9pbkxpdmVSZXNpemUpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1faW5M
aXZlUmVzaXplID0gZmFsc2U7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPndp
bGxFbmRMaXZlUmVzaXplKCk7Ci19ICAgIAorCisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS53
aWxsRW5kTGl2ZVJlc2l6ZSgpOworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29udGVudHNTaXplQ2hh
bmdlZCgpOworfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYVdpbGxQYWludCgp
IGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVh
V2lsbFBhaW50KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYVdpbGxQ
YWludCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPm1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3ItPm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKS5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVh
Ojptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0g
ICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIp
OwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRXhpdGVk
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4
aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1vdXNlSXNEb3du
KSBjb25zdAogewotICAgIHNjcm9sbEFuaW1hdG9yKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihz
Y3JvbGxiYXIsIG1vdXNlSXNEb3duKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNl
SXNEb3duSW5TY3JvbGxiYXIoc2Nyb2xsYmFyLCBtb3VzZUlzRG93bik7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9s
bEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVhRGlkU2hvdygpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkuY29udGVudEFyZWFEaWRTaG93KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFNjcm9sbEFuaW1h
dG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRBcmVhRGlkSGlkZSgpOworICAgIHNjcm9sbGJhcnNDb250
cm9sbGVyKCkuY29udGVudEFyZWFEaWRIaWRlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkg
Y29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bG9ja092ZXJsYXlT
Y3JvbGxiYXJTdGF0ZVRvSGlkZGVuKHNob3VsZExvY2tTdGF0ZSk7CisgICAgc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9ja1N0
YXRlKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkg
Y29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnNjcm9s
bGJhcnNDYW5CZUFjdGl2ZSgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpOwogfQogCiB2b2lkIFNjcm9s
bGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5kaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CisKKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKIAogICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS85Nzk3MjUzPiBBcHBLaXQgcmVzZXRzIHRoZSBzY3JvbGxiYXIn
cyBzdHlsZSB3aGVuIHlvdSBhdHRhY2ggYSBzY3JvbGxiYXIKICAgICBzZXRTY3JvbGxiYXJPdmVy
bGF5U3R5bGUoc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpOwpAQCAtMzM0LDIxICszMzYsMjEgQEAg
dm9pZCBTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBTY3JvbGxiYXJPcmllbnRhdGlvbgogdm9pZCBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCiB7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxi
YXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpCiB7Ci0gICAgaWYg
KFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPmNvbnRlbnRzUmVzaXplZCgpOworICAgIHNjcm9s
bEFuaW1hdG9yKCkuY29udGVudHNTaXplQ2hhbmdlZCgpOworICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkuY29udGVudHNTaXplQ2hhbmdlZCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikKIHsK
LSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxB
bmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudHNSZXNpemVkKCk7IC8v
IFRoaXMgZmxhc2hlcyBvdmVybGF5IHNjcm9sbGJhcnMuCisgICAgc2Nyb2xsQW5pbWF0b3IoKS5j
b250ZW50c1NpemVDaGFuZ2VkKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50
c1NpemVDaGFuZ2VkKCk7IC8vIFRoaXMgZmxhc2hlcyBvdmVybGF5IHNjcm9sbGJhcnMuCiB9CiAK
IGJvb2wgU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKQEAgLTM3
NCwxNCArMzc2LDEyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJz
KCkKIHsKICAgICBpZiAoYXV0byogc2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
CiAgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAgICBpZiAoYXV0byogc2Ny
b2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgICAgICBzY3Jv
bGxBbmltYXRvci0+aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5pbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVy
cyhzY3JvbGxiYXIpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0g
ICAgICAgICAgICBzY3JvbGxBbmltYXRvci0+aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMo
c2Nyb2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5pbnZhbGlkYXRlU2Ny
b2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOwogICAgIH0KIH0KIApAQCAtNDIyLDEyICs0MjIs
MTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lcihjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLnZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6aG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLmhv
cml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CiB9CiAKIGJvb2wgU2Ny
b2xsYWJsZUFyZWE6Omhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0CkBAIC00
NTksMTIgKzQ1OSwxMiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjphbGxvd3NWZXJ0aWNhbFNjcm9s
bGluZygpIGNvbnN0CiAKIFN0cmluZyBTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJh
clN0YXRlRm9yVGVzdGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCku
aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVybiBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLmhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKTsKIH0K
IAogU3RyaW5nIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkudmVydGljYWxTY3JvbGxi
YXJTdGF0ZUZvclRlc3RpbmcoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS52
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBjb25zdCBMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8qIFNjcm9sbGFibGVBcmVhOjpzbmFwT2Zmc2V0c0luZm8oKSBjb25z
dApAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5
b3V0KCkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICp0aGlz
IDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlOiBpc1Njcm9sbFNuYXBJblByb2dyZXNzICIgPDwg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIDw8ICIgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyAiIDw8
IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSk7CiAKLSAgICBTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7CisgICAgYXV0byogc2Nyb2xsQW5p
bWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7CiAgICAgaWYgKCFzY3JvbGxBbmltYXRv
ciB8fCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgfHwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCmluZGV4IGZkMzk2MzMzODBiOTQ3YTIwNTBhN2I4NjgwYzU3OTkwZjZkNzVjYjYuLjhmOWVl
OGJlMDk2NzBkYTljZjkwNGFmZWYxYzMxODY1YTNmNWQwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBMYXlvdXRTaXpl
OwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50Owog
Y2xhc3MgU2Nyb2xsQW5pbWF0b3I7CitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlcjsKIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBUaWxlZEJhY2tpbmc7CiAKQEAgLTE3MiwxMiArMTczLDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3JlYXRl
IGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICAgIFdFQkNP
UkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OwotCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0b3IgaGFz
bid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5nU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxiYXJzQ29udHJvbGxlciYgc2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhcihTY3JvbGxi
YXImLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0ID0gMDsKQEAgLTM3OCw2ICszNzgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgPSAwOwogCiAgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7
CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IG1fc2Ny
b2xsYmFyc0NvbnRyb2xsZXI7CiAKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5h
dGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2lsbCBi
ZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgcmV2
ZXJzZWQgZGlyZWN0aW9uIG9yIHdyaXRpbmctbW9kZS4gVGhlIGNvbWJpbmF0aW9ucyBhcmU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCA5NjY1NzcwN2RjZWY4MGVkYjEy
Zjk3MGRiY2FlZWVmMWU1NDg3MzFmLi5mMGFkMjJhOTBkOTYyYTU2MzUwNjBlZTQ1MGE0Zjk2ZTEw
NGIwYjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTQyOCw3ICs0
MjgsNyBAQCBib29sIFNjcm9sbGJhcjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKQog
ICAgIC8vIE5vbi1vdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBp
biBoaXQgdGVzdGluZy4KICAgICBpZiAoIWlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvcigp
LnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOworICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjppc1dp
bmRvd0FjdGl2ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk5Y2ZiMjE0MWZiOWZlZTNmYWQ5ODAzOGIz
ODI1ZTEyYjJhYWFkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV1BFKSAmJiAhUExBVEZPUk0oR1RLKQorc3Rk
Ojp1bmlxdWVfcHRyPFNjcm9sbGJhcnNDb250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJvbGxlcj4oc2Nyb2xsYWJsZUFyZWEpOworfQorI2VuZGlm
CisKK1Njcm9sbGJhcnNDb250cm9sbGVyOjpTY3JvbGxiYXJzQ29udHJvbGxlcihTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBtX3Njcm9sbGFibGVBcmVhKHNjcm9sbGFibGVB
cmVhKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjU4ZmUxM2QzMzQ3
NTQ0MDUyMjI4ZjQ1ZWMzNWFmMDU3OTIzN2YyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDkyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
Y3JvbGxiYXI7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsYmFyc0NvbnRy
b2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNjcm9sbGJhcnNDb250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFNjcm9sbGJhcnNDb250cm9sbGVyPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsK
KworICAgIGV4cGxpY2l0IFNjcm9sbGJhcnNDb250cm9sbGVyKFNjcm9sbGFibGVBcmVhJik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CisgICAgCisgICAg
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYTsgfQorCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQo
Y29uc3QgRmxvYXRTaXplJikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9u
cygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0IHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9CisgICAgdmlydHVh
bCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG1v
dXNlRXhpdGVkQ29udGVudEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZElu
Q29udGVudEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFy
KFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZFNjcm9s
bGJhcihTY3JvbGxiYXIqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25J
blNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVD
aGFuZ2VkKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsb2Nr
T3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29s
IHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVy
cyhTY3JvbGxiYXIqKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgpIHsgfQorCisgICAgdmlydHVhbCBib29sIHNob3VsZFNjcm9sbGJhclBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IHZpcnR1YWwgU3RyaW5nIGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25z
dCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdmVydGljYWxT
Y3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9
CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAKaW5kZXggODkwODQyZGM2
NjNmNjM5OTU3MmY4OTMxNDU4OWNiMjcyNzNkOWI4Mi4uZjY3ODM0YjY2NGQ5NTlkYjBkNjI4ODk0
MzllYTVjMmVkNGI4NjY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Vu
ZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNwcApAQCAtMzgsOSArMzgsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Ny
b2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uIHsgMV9zIH07Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBv
dmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgeyAyX3MgfTsKLQogc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxBbmlt
YXRvckdlbmVyaWM+KHNjcm9sbGFibGVBcmVhKTsKQEAgLTQ4LDcgKzQ1LDYgQEAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmwKIAogU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpTY3JvbGxBbmltYXRvckdl
bmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0
b3Ioc2Nyb2xsYWJsZUFyZWEpCi0gICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1l
cigqdGhpcywgJlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyRmlyZWQpCiB7CiAgICAgbV9raW5ldGljQW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3Jv
bGxBbmltYXRpb25LaW5ldGljPigKICAgICAgICAgW3RoaXNdKCkgLT4gU2Nyb2xsRXh0ZW50cyB7
CkBAIC05NywxOTYgKzkzLDUgQEAgdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZVBv
c2l0aW9uKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JPZmZzZXQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFu
aW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotCi0gICAgaWYgKCFz
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0gICAgbV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25D
dXJyZW50ID0gMTsKLSAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSht
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6
OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlmICghc2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX3ZlcnRpY2FsT3Zl
cmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCA9IDE7Ci0gICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9sbGJh
cnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgbV92ZXJ0
aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOwotICAgIGlmICghbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCA9IDA7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9ob3Jpem9u
dGFsT3ZlcmxheVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25D
dXJyZW50ID0gMDsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92ZXJs
YXlTY3JvbGxiYXJzT3BhY2l0eSgpCi17Ci0gICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xs
YmFyICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXItPm9wYWNpdHkoKSkgewotICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsK
LSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09
IE5vUGFydCkKLSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlk
YXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9s
bGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAg
ICAgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0KQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxp
ZGF0ZSgpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRv
dWJsZSB0KQotewotICAgIGRvdWJsZSBwID0gdCAtIDE7Ci0gICAgcmV0dXJuIHAgKiBwICogcCAr
IDE7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBN
b25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgZG91
YmxlIHByb2dyZXNzID0gMTsKLSAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25FbmRUaW1lKQotICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3Rh
cnRUaW1lKS52YWx1ZSgpOwotICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU291cmNlICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7Ci0g
ICAgaWYgKHByb2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsK
LSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOwot
ICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJh
dGUgPSA2MDsKLSAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBm
cmFtZVJhdGU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVy
dmFsID0gMV9tczsKLSAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgo
dGlja1RpbWUgLSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1U
aW1lckludGVydmFsKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIu
c3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOwotICAgIH0gZWxzZQotICAgICAgICBoaWRl
T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNo
b3dPdmVybGF5U2Nyb2xsYmFycygpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2Nr
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9
PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
Q3VycmVudDsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwotICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0
VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlT
Y3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25DdXJyZW50OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRh
cmdldCA9IDA7Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQotICAgICAgICByZXR1cm47Ci0gICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Ci0gICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0
YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dT
Y3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVs
YXkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgaGlkZU92
ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjptb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSgpCi17Ci0gICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQotewot
ICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2Vu
ZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFy
c0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyLnN0b3AoKTsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKLSAg
ICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBG
bG9hdFNpemUmKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJv
b2wgc2hvdWxkTG9ja1N0YXRlKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2Vk
ID09IHNob3VsZExvY2tTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9s
bGJhcnNMb2NrZWQgPSBzaG91bGRMb2NrU3RhdGU7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgewotICAgICAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIGlmIChtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3Zlcmxh
eVNjcm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9w
YWNpdHkoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvbkN1cnJlbnQgPT0gMSkKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJz
T3BhY2l0eSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJh
cnMoKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgK
aW5kZXggZTA0NmM1MzFiYjg0YzJhY2ZmNWU4OTQ2NTU2ZGRjMTEyNWM5OGFmMy4uMmQ2YWQ5OWM2
MTMxNTFjZDU1YWVlOTkyNGJkN2JiYTZmMWVlMDNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC00NCw0
MCArNDQsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR2VuZXJpYygp
OwogCiBwcml2YXRlOgotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYsIFNjcm9sbENsYW1waW5nKSBvdmVycmlkZTsKLQotICAgIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwot
ICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRl
OwotICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRT
aG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0
YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4o
Ym9vbCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlv
bihjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIGZpbmFsOwogCisgICAgYm9vbCBo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogICAgIHZv
aWQgdXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludCYmKTsKIAotICAgIHZvaWQgb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFy
cygpOwotICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgdm9pZCB1cGRhdGVP
dmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRpb25LaW5ldGljPiBtX2tpbmV0aWNBbmltYXRpb247Ci0gICAgU2Nyb2xsYmFyKiBtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX292ZXJsYXlT
Y3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKLSAgICBUaW1lciBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lcjsKLSAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291
cmNlIHsgMCB9OwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQg
eyAwIH07Ci0gICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgeyAw
IH07Ci0gICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRp
bWU7Ci0gICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1l
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxYTc1MjdhNTRlNzMxNWNlMTA0ZTliNDViNzZhYzUzMjhmNGQ5ZjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bGJhcnNDb250cm9sbGVyR2VuZXJpYy5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgiCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25L
aW5ldGljLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0Fu
aW1hdGlvbkR1cmF0aW9uIHsgMV9zIH07CitzdGF0aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Nj
cm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgeyAyX3MgfTsKKworc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbGJhcnNDb250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWM+KHNjcm9sbGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljOjpTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsYmFyc0NvbnRyb2xsZXIoc2Nyb2xsYWJs
ZUFyZWEpCisgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNj
cm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
RmlyZWQpCit7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6flNjcm9sbGJhcnND
b250cm9sbGVyR2VuZXJpYygpID0gZGVmYXVsdDsKKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxl
ckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
eworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAg
ICAgICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7
CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsK
KyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBz
Y3JvbGxiYXI7CisgICAgaWYgKCFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7CisgICAgbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25D
dXJyZW50KTsKKyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgIT0g
c2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxi
YXIgPSBudWxscHRyOworICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhciAhPSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OnVwZGF0ZU92ZXJsYXlTY3Jv
bGxiYXJzT3BhY2l0eSgpCit7CisgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICYm
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNhbE92ZXJsYXlT
Y3JvbGxiYXItPm9wYWNpdHkoKSkgeworICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJh
ci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAg
ICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFy
dCkKKyAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7
CisgICAgfQorCisgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyLT5vcGFjaXR5KCkpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+
c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAg
aWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KQorICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52YWxpZGF0ZSgp
OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0
KQoreworICAgIGRvdWJsZSBwID0gdCAtIDE7CisgICAgcmV0dXJuIHAgKiBwICogcCArIDE7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBN
b25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgZG91
YmxlIHByb2dyZXNzID0gMTsKKyAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25FbmRUaW1lKQorICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAtIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3Rh
cnRUaW1lKS52YWx1ZSgpOworICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU291cmNlICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7Cisg
ICAgaWYgKHByb2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsK
KyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNzOwor
ICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICB9CisKKyAgICBp
ZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJh
dGUgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBm
cmFtZVJhdGU7CisgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVy
dmFsID0gMV9tczsKKyAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgo
dGlja1RpbWUgLSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmltdW1U
aW1lckludGVydmFsKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIu
c3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOworICAgIH0gZWxzZQorICAgICAgICBoaWRl
T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM6OnNob3dPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJh
cnNMb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRh
cmdldCA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGltZXIuc3RvcCgpOworCisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uQ3VycmVudDsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAx
OworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOworICAgICAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblRhcmdldCA9IDA7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRhcmdldCA9PSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQorICAgICAgICBy
ZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Cisg
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9u
ICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OworICAgIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmlt
YXRpb25IaWRlRGVsYXkpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6
bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygp
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpCit7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7Cisg
ICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xs
YmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6Y29udGVudEFy
ZWFEaWRIaWRlKCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsK
KyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKKyAgICAgICAgdXBkYXRlT3Zl
cmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
KQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wg
c2hvdWxkTG9ja1N0YXRlKQoreworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID09
IHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJh
cnNMb2NrZWQgPSBzaG91bGRMb2NrU3RhdGU7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgeworICAgICAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIGlmIChtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNp
dHkoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQgPT0gMSkKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3Bh
Y2l0eSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMo
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJH
ZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcyYzUxYTcwZTViMjZjNjY0NzgxNjRmOGRkYzNlMWQ4N2M2
MWJmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMv
U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Nyb2xs
YmFyc0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYyBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxiYXJzQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljKFNjcm9sbGFibGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFy
c0NvbnRyb2xsZXJHZW5lcmljKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgbW91
c2VFbnRlcmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Q29udGVu
dEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSBvdmVycmlkZTsKKworICAg
IHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNo
b3dPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7
CisgICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKworICAgIFNjcm9s
bGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAgICBTY3Jv
bGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAgIGJvb2wg
bV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXI7CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblNvdXJjZSB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGFyZ2V0IHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25D
dXJyZW50IHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU3RhcnRUaW1lOworICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uRW5kVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKaW5kZXggZjBmODgzMzZmYmJk
N2RmYzRiNWQxOWJiNDRiNzlmNTczMGRhNzUwMS4uOGI4MWY5MDRmNmUyNWZmYTFhMGRmMjI2ZTFm
YWU0ZmE1MWEzMWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nj
cm9sbEFuaW1hdG9ySU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9s
bEFuaW1hdG9ySU9TLmgKQEAgLTU1LDE2ICs1NSwxNiBAQCBwcml2YXRlOgogICAgICAgICBBeGlz
TGF0Y2hIb3Jpem9udGFsLAogICAgICAgICBBeGlzTGF0Y2hWZXJ0aWNhbAogICAgIH07Ci0gICAg
QXhpc0xhdGNoIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2g7Ci0gICAgYm9vbCBtX2luVG91Y2hTZXF1
ZW5jZTsKLSAgICBib29sIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzOwotICAgIGJvb2wgbV9zdGFy
dGVkU2Nyb2xsOworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoIHsgQXhpc0xh
dGNoTm90Q29tcHV0ZWQgfTsKKyAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
c3RhcnRlZFNjcm9sbCB7IGZhbHNlIH07CiAgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9pbnQ7
CiAgICAgSW50UG9pbnQgbV9sYXN0VG91Y2hQb2ludDsKIAogICAgIC8vIFdoZW4gd2UncmUgaW4g
YSB0b3VjaCBzZXF1ZW5jZSwgdGhpcyB3aWxsIHBvaW50IHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEg
dGhhdAogICAgIC8vIHNob3VsZCBhY3R1YWxseSBiZSBzY3JvbGxlZCBkdXJpbmcgdGhlIHNlcXVl
bmNlLgotICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5j
ZTsKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2Ug
eyBudWxscHRyIH07CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQppbmRleCBjYjRmYjc4ODRjODQwNjM1MzdlNzUwMmM2
MjNjNDRiZWIzNmNhN2Y3Li5kOTc2ZTRlYTRjZjlmMGQwODZiZTlhZTMwYTc2ZTU1OGE4YTljNjM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9T
Lm1tCkBAIC00NSwxMyArNDUsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogCiBTY3JvbGxB
bmltYXRvcklPUzo6U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0jaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhpc0xhdGNoTm90Q29t
cHV0ZWQpCi0gICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKLSAgICAsIG1fY29tbWl0dGVk
VG9TY3JvbGxBeGlzKGZhbHNlKQotICAgICwgbV9zdGFydGVkU2Nyb2xsKGZhbHNlKQotICAgICwg
bV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKLSNlbmRpZgogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDRh
NWUzZjJlMmY5NmQ2ZTU1OGNmYTNmZGIxYTcyOWVjZWNiNWI0NGMuLjViNWJhNTNhZGI0ODJlMWFm
NTMyY2M2ZTA5ZGFlMWMzOGQ1MmEyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oCkBAIC0yOCwxMTkgKzI4LDQ3IEBACiAKICNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IAogT0JKQ19DTEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLU9CSkNfQ0xB
U1MgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7Ci1PQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1w
RGVsZWdhdGU7Ci0KLXR5cGVkZWYgaWQgU2Nyb2xsZXJJbXBQYWlyOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFNjcm9sbGJhcjsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgOiBw
dWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgZmluYWwgOiBw
dWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNj
cm9sbGFibGVBcmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAg
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBuZXdQb3NpdGlvbik7Ci0gICAgYm9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOyB9Ci0KLSAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRU
aW1lcklzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIo
KTsKLSAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICB2b2lkIHNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBib29sIHNjcm9s
bGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIFJldGFpblB0
cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbEFu
aW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwot
Ci0gICAgUmV0YWluUHRyPFNjcm9sbGVySW1wUGFpcj4gbV9zY3JvbGxlckltcFBhaXI7Ci0gICAg
UmV0YWluUHRyPFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlPiBtX3Njcm9sbGVySW1wUGFpckRl
bGVnYXRlOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX2hvcml6b250
YWxTY3JvbGxlckltcERlbGVnYXRlOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVn
YXRlPiBtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKLQotICAgIHZvaWQgaW5pdGlhbFNj
cm9sbGJhclBhaW50VGltZXJGaXJlZCgpOwotICAgIFRpbWVyIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXI7Ci0KLSAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgp
OwotICAgIFRpbWVyIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcjsKLSAgICBGbG9hdFNp
emUgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YTsKLQotICAgIGJvb2wgc2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllciwgT3B0aW9uU2V0PFNjcm9sbEJlaGF2aW9yPikgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25T
ZXQ8U2Nyb2xsQmVoYXZpb3I+KSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRo
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBib29sIHNjcm9sbFRvUG9z
aXRpb25XaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKIAogI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKICAgICBib29sIHNob3VsZEZvcndhcmRXaGVlbEV2ZW50c1RvUGFyZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAjZW5kaWYKIAot
ICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBv
dmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZSkgZmluYWw7CiAKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsKICAgICAKLSAgICB2b2lkIG5vdGlm
eVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIq
LCBib29sKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVh
RGlkU2hvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRp
ZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIG1heUJlZ2luU2Nyb2xsR2VzdHVy
ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4o
Ym9vbCBzaG91bGRMb2NrU3RhdGUpIGZpbmFsOwotCi0gICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3ZlSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhv
cml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
IGRlbHRhKSBvdmVycmlkZTsKLQotICAgIC8vIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbigp
IHdpbGwgZG8gdGhlIHNhbWUgd29yayB0aGF0IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKCkgZG9l
cyBleGNlcHQKLSAgICAvLyBpdCBkb2VzIGl0IGFmdGVyIGEgemVyby1kZWxheSB0aW1lciBmaXJl
cy4gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSB1cGRhdGluZyBvdmVybGF5IHNjcm9sbGJhciAK
LSAgICAvLyBpbmZvcm1hdGlvbiBkdXJpbmcgbGF5b3V0LgotICAgIHZvaWQgc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7Ci0gICAgdm9pZCBzZW5k
Q29udGVudEFyZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7Cisg
ICAgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgZmlu
YWw7CiAKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCi0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CiAKLSAgICBTdHJpbmcgaG9yaXpv
bnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotICAgIFN0cmluZyB2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9v
bCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAKICAgICAvLyBTY3JvbGxDb250cm9sbGVy
Q2xpZW50LgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKQEAgLTE1Nyw5ICs4NSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3Nhcnko
KSBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7
Ci0gICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0OworICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRp
b25IZWxwZXI7CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
PiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLm1tCmluZGV4IDE3YTkxYjUzZjk1NjMxYWUwMThhYzFiYWE2MTFmN2Q2NzJiZjIyY2IuLmM0
NzQ5MGZiN2RmNjg2YjQxNTM4OTQ1N2E0NTdhY2ViYzVhNmQyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KQEAgLTMxLDQ2ICszMSwy
MCBAQAogI2ltcG9ydCAiR3JhZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKICNpbXBv
cnQgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW1wb3J0ICJTY3JvbGxiYXJUaGVtZS5oIgotI2ltcG9y
dCAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsZXJJ
bXBTUEkuaD4KKyNpbXBvcnQgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCiAjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IFNjcm9sbGJhclRoZW1lTWFjKiBtYWNTY3JvbGxiYXJUaGVtZSgpCi17Ci0gICAgU2Nyb2xsYmFy
VGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgcmV0
dXJuICFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
VGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpIDogbnVsbHB0cjsKLX0KLQotc3RhdGljIE5TU2Ny
b2xsZXJJbXAgKnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQot
ewotICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KIHVzaW5nIFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOwogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM7CiB1c2luZyBX
ZWJDb3JlOjpTY3JvbGxiYXI7Ci11c2luZyBXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzsKIHVz
aW5nIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI7CiB1c2luZyBXZWJDb3JlOjpWZXJ0aWNhbFNjcm9s
bGJhcjsKLXVzaW5nIFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lOwogdXNpbmcgV2ViQ29yZTo6
SW50UmVjdDsKLXVzaW5nIFdlYkNvcmU6OlRodW1iUGFydDsKLXVzaW5nIFdlYkNvcmU6OkN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb247Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi11c2luZyBXZWJDb3Jl
OjpMb2dPdmVybGF5U2Nyb2xsYmFyczsKLSNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQp
ZGVsZWdhdGU7CkBAIC0xNzYsNTIyICsxNTAsNiBAQCAtICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1
dGVUb29sVGlwcwogCiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgOiBOU09iamVjdCA8TlNTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4KLXsKLSAgICBTY3JvbGxh
YmxlQXJlYSogX3Njcm9sbGFibGVBcmVhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJl
YTooU2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxl
QXJlYTooU2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAg
X3Njcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWE7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9zY3JvbGxhYmxlQXJlYSA9IDA7Ci19Ci0KLS0g
KE5TUmVjdCljb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQ
YWlyICopc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFp
cik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBOU1plcm9SZWN0
OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUgPSBfc2Nyb2xsYWJsZUFyZWEt
PmNvbnRlbnRzU2l6ZSgpOwotICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6
ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJl
c2l6ZUZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBh
aXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3Jv
bGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxl
QXJlYS0+aW5MaXZlUmVzaXplKCk7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29u
dGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJ
bXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFf
c2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIC8vIEl0
J3MgT0sgdGhhdCB0aGlzIHBvc2l0aW9uIGlzbid0IHJlbGF0aXZlIHRvIHRoaXMgc2Nyb2xsZXIg
KHdoaWNoIG1pZ2h0IGJlIGFuIG92ZXJmbG93IHNjcm9sbGVyKS4KLSAgICAvLyBBcHBLaXQganVz
dCB0YWtlcyB0aGUgcmVzdWx0IGFuZCBwYXNzZXMgaXQgYmFjayB0byAtc2Nyb2xsZXJJbXBQYWly
OmNvbnZlcnRDb250ZW50UG9pbnQ6dG9TY3JvbGxlckltcDouCi0gICAgcmV0dXJuIF9zY3JvbGxh
YmxlQXJlYS0+bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi0tIChOU1BvaW50
KXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgY29u
dmVydENvbnRlbnRQb2ludDooTlNQb2ludClwb2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlcklt
cDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGVySW1wUGFpcik7Ci0KLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSB8fCAhc2Nyb2xsZXJJbXAp
Ci0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciog
c2Nyb2xsYmFyID0gMDsKLSAgICBpZiAoW3Njcm9sbGVySW1wIGlzSG9yaXpvbnRhbF0pCi0gICAg
ICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwot
ICAgIGVsc2UgCi0gICAgICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKLQotICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9s
bGJhciBoZXJlIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCi0gICAgLy8g
bWV0aG9kIHRvIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBo
YXMgYmVlbiBzZXQgdG8gMCBhbmQgdGhlCi0gICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0
b3IgaGFzIGJlZW4gY2FsbGVkLiBXZSBzaG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKLSAg
ICAvLyBvZiB0aGUgY2xlYW4tdXAgd29yayBpbiBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3Rl
clNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKLSAgICAvLyBpc3N1ZS4KLSAgICBpZiAoIXNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgQVNTRVJUKHNjcm9sbGVy
SW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKTsKLQotICAgIHJldHVy
biBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6cm91bmRlZElu
dFBvaW50KHBvaW50SW5Db250ZW50QXJlYSkpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wUGFp
cjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVk
c0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVy
SW1wUGFpcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotCi0gICAgaWYgKCFfc2Nyb2xsYWJs
ZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJs
YXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKLX0KLQot
LSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQ
YWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5T
U2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9z
Y3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3Njcm9sbGVySW1wUGFpciBz
ZXRTY3JvbGxlclN0eWxlOm5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07Ci0KLSAgICBzdGF0
aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0
b3IoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwotfQotCi1AZW5kCi0KLWVudW0gRmVhdHVyZVRv
QW5pbWF0ZSB7Ci0gICAgVGh1bWJBbHBoYSwKLSAgICBUcmFja0FscGhhLAotICAgIFVJU3RhdGVU
cmFuc2l0aW9uLAotICAgIEV4cGFuc2lvblRyYW5zaXRpb24KLX07Ci0KLSNpZiAhTE9HX0RJU0FC
TEVECi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRmVhdHVy
ZVRvQW5pbWF0ZSBmZWF0dXJlKQotewotICAgIHN3aXRjaCAoZmVhdHVyZSkgewotICAgIGNhc2Ug
VGh1bWJBbHBoYTogdHMgPDwgIlRodW1iQWxwaGEiIDsgYnJlYWs7Ci0gICAgY2FzZSBUcmFja0Fs
cGhhOiB0cyA8PCAiVHJhY2tBbHBoYSIgOyBicmVhazsKLSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0
aW9uOiB0cyA8PCAiVUlTdGF0ZVRyYW5zaXRpb24iIDsgYnJlYWs7Ci0gICAgY2FzZSBFeHBhbnNp
b25UcmFuc2l0aW9uOiB0cyA8PCAiRXhwYW5zaW9uVHJhbnNpdGlvbiIgOyBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbiA6IE5TT2JqZWN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwotICAg
IFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xsZXJJbXA7Ci0gICAgRmVhdHVyZVRvQW5p
bWF0ZSBfZmVhdHVyZVRvQW5pbWF0ZTsKLSAgICBDR0Zsb2F0IF9zdGFydFZhbHVlOwotICAgIENH
RmxvYXQgX2VuZFZhbHVlOwotICAgIE5TVGltZUludGVydmFsIF9kdXJhdGlvbjsKLSAgICBSZXRh
aW5QdHI8TlNUaW1lcj4gX3RpbWVyOwotICAgIFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7
Ci0gICAgUmVmUHRyPEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsK
LX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJl
VG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206
KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5T
VGltZXIgKil0aW1lcjsKLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uOwotLSAodm9pZClzdG9wQW5pbWF0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2Vi
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhcjooU2Nyb2xs
YmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJl
VG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zs
b2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsID0gMC4wMTsKLSAgICBfdGlt
ZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRh
dGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0gaW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdl
dDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzZXRDdXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpu
aWwgcmVwZWF0czpZRVNdKTsKLSAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBfdGltaW5n
RnVuY3Rpb24gPSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6RWFzZUluT3V0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5
U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
IGZvciAiIDw8IGZlYXR1cmVUb0FuaW1hdGUgPDwgIiBmcm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAi
IHRvICIgPDwgZW5kVmFsdWUpOwotCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBf
ZmVhdHVyZVRvQW5pbWF0ZSA9IGZlYXR1cmVUb0FuaW1hdGU7Ci0gICAgX3N0YXJ0VmFsdWUgPSBz
dGFydFZhbHVlOwotICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpc3RhcnRBbmltYXRpb24KLXsKLSAgICBBU1NFUlQoX3Njcm9sbGJhcik7
Ci0KLSAgICBfc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJh
cik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAi
LVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwgc2VsZiA8PCAic3RhcnRBbmltYXRpb25d
IGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKLQotICAgIFtbTlNSdW5Mb29wIG1haW5SdW5M
b29wXSBhZGRUaW1lcjpfdGltZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07
Ci0gICAgX3N0YXJ0RGF0ZSA9IGFkb3B0TlMoW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUlu
dGVydmFsU2luY2VOb3c6MF0pOwotfQotCi0tICh2b2lkKXNldFN0YXJ0VmFsdWU6KENHRmxvYXQp
c3RhcnRWYWx1ZQotewotICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKLX0KLQotLSAodm9p
ZClzZXRFbmRWYWx1ZTooQ0dGbG9hdCllbmRWYWx1ZQotewotICAgIF9lbmRWYWx1ZSA9IGVuZFZh
bHVlOwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyCi17
Ci0gICAgQ0dGbG9hdCBwcm9ncmVzcyA9IDA7Ci0gICAgTlNEYXRlICpub3cgPSBbTlNEYXRlIGRh
dGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF07Ci0gICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNl
ZCA9IFtub3cgdGltZUludGVydmFsU2luY2VEYXRlOl9zdGFydERhdGUuZ2V0KCldOwotICAgIGlm
IChlbGFwc2VkID4gX2R1cmF0aW9uKSB7Ci0gICAgICAgIHByb2dyZXNzID0gMTsKLSAgICAgICAg
W3RpbWVyIGludmFsaWRhdGVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TVGltZUludGVydmFs
IHQgPSAxOwotICAgICAgICBpZiAoX2R1cmF0aW9uKQotICAgICAgICAgICAgdCA9IGVsYXBzZWQg
LyBfZHVyYXRpb247Ci0gICAgICAgIHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zv
cm1UaW1lKHQsIF9kdXJhdGlvbik7Ci0gICAgfQotICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKLQot
ICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8
PCBwcm9ncmVzcyA8PCJdIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKLQotICAgIENHRmxv
YXQgY3VycmVudFZhbHVlOwotICAgIGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRWYWx1ZSkKLSAgICAg
ICAgY3VycmVudFZhbHVlID0gMSAtIHByb2dyZXNzOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVu
dFZhbHVlID0gcHJvZ3Jlc3M7Ci0KLSAgICBzd2l0Y2ggKF9mZWF0dXJlVG9BbmltYXRlKSB7Ci0g
ICAgY2FzZSBUaHVtYkFscGhhOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTpj
dXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYWNrQWxwaGE6Ci0gICAg
ICAgIFtfc2Nyb2xsZXJJbXAgc2V0VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVdOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1w
IHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOgotICAgICAgICBbX3Njcm9sbGVySW1w
IHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNv
bmRhcnlUaHJlYWQoKSkKLSAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotfQotCi0t
ICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAg
ICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0g
ICAgX3Njcm9sbGJhciA9IDA7Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCi17Ci0gICAgX2R1cmF0aW9uID0gZHVyYXRpb247Ci19Ci0KLS0gKHZvaWQp
c3RvcEFuaW1hdGlvbgotewotICAgIFtfdGltZXIgaW52YWxpZGF0ZV07Ci19Ci0KLUBlbmQKLQot
QGludGVyZmFjZSBXZWJTY3JvbGxlckltcERlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25E
ZWxlZ2F0ZSwgTlNTY3JvbGxlckltcERlbGVnYXRlPgotewotICAgIFdlYkNvcmU6OlNjcm9sbGJh
ciogX3Njcm9sbGJhcjsKLQotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
PiBfa25vYkFscGhhQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uPiBfdHJhY2tBbHBoYUFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4gX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uOwotICAgIFJldGFpblB0
cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlv
bjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9s
bGJhcjsKLS0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdlYlNjcm9sbGVySW1wRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNv
cmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGJhciA9
IHNjcm9sbGJhcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxBbmltYXRp
b25zCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW19rbm9iQWxwaGFB
bmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW190cmFja0FscGhhQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dOwotICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlv
bl07Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotLSAoTmFrZWRQdHI8U2Nyb2xsQW5p
bWF0b3JNYWM+KXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgcmV0dXJuICZzdGF0aWNfY2FzdDxTY3Jv
bGxBbmltYXRvck1hYyY+KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0
b3IoKSk7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0
Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFj
a2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0tIChDQUxheWVy
ICopbGF5ZXIKLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBpZiAoIVNjcm9sbGJhclRoZW1lTWFjOjppc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIo
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyOwotICAg
IGlmIChfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3Jv
bGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwotCi0gICAgc3RhdGlj
IENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgIHJldHVy
biBsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOwotfQotCi0tIChO
U1BvaW50KW1vdXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJ
bXAgKilzY3JvbGxlckltcAotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
IE5TWmVyb1BvaW50OwotCi0gICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xsZXJJ
bXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIGF1dG8g
cG9zaXRpb25JblZpZXcgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKTsKLSAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21D
b250YWluaW5nVmlldyhwb3NpdGlvbkluVmlldyk7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVj
dFRvTGF5ZXI6KE5TUmVjdClyZWN0Ci17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0gKEJPT0wp
c2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7Ci0KLSAgICBpZiAoIV9z
Y3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBfc2Nyb2xsYmFy
LT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCk7Ci19Ci0KLSNpZiBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQotLSAoTlNBcHBlYXJhbmNlICopZWZmZWN0aXZlQXBwZWFyYW5jZUZv
clNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsZXJJbXApOwotCi0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICByZXR1cm4gW05TQXBwZWFy
YW5jZSBjdXJyZW50QXBwZWFyYW5jZV07Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAotCi0gICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBGcmFtZVZpZXc6OnBh
aW50U2Nyb2xsQ29ybmVyLgotICAgIC8vIFRoZSBiYXNlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0
IGRhcmsgQXF1YSwgc28gd2UgbWlnaHQgZ2V0IGEgbnVsbCByZXN1bHQuCi0gICAgYm9vbCB1c2VE
YXJrQXBwZWFyYW5jZSA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkudXNlRGFya0FwcGVh
cmFuY2VGb3JTY3JvbGxiYXJzKCk7Ci0gICAgaWYgKGF1dG8gKmFwcGVhcmFuY2UgPSBbTlNBcHBl
YXJhbmNlIGFwcGVhcmFuY2VOYW1lZDp1c2VEYXJrQXBwZWFyYW5jZSA/IE5TQXBwZWFyYW5jZU5h
bWVEYXJrQXF1YSA6IE5TQXBwZWFyYW5jZU5hbWVBcXVhXSkKLSAgICAgICAgcmV0dXJuIGFwcGVh
cmFuY2U7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICByZXR1
cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5jZV07Ci0gICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECi19Ci0jZW5kaWYKLQotLSAodm9pZClzZXRVcEFscGhhQW5pbWF0
aW9uOihSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRB
bmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJQYWludGVy
IHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9h
dCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICAvLyBJ
ZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVz
dCBiZSBhbmltYXRlZCBoZXJlLgotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1
cm5zLgotICAgIGJvb2wgbXVzdEFuaW1hdGUgPSBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPmhhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKLQotICAgIGlmIChbc2VsZiBzY3JvbGxBbmltYXRvcl0t
PnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0QW5pbWF0ZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkU3Vz
cGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKLSAgICAgICAgW3NlbGYg
c2Nyb2xsQW5pbWF0b3JdLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBkZWZpbml0ZWx5IGdv
aW5nIHRvIGFuaW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0aW1lci4KLSAgICBbc2VsZiBzY3JvbGxB
bmltYXRvcl0tPnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUg
Y3VycmVudGx5IGFuaW1hdGluZywgc3RvcAotICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
KSB7Ci0gICAgICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAg
ICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gbmlsOwotICAgIH0KLQotICAgIGlmIChTY3Jv
bGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKQotICAgICAgICBt
YWNUaGVtZS0+c2V0UGFpbnRDaGFyYWN0ZXJpc3RpY3NGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIp
OwotCi0gICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG5ld0FscGhh
ID09IDEpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xs
ZXJQYWludGVyIHJlY3RGb3JQYXJ0Ok5TU2Nyb2xsZXJLbm9iXSk7Ci0gICAgICAgICAgICBbc2Vs
ZiBzY3JvbGxBbmltYXRvcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3Qp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2V0
VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgc2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFs
bG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVU
b0FuaW1hdGU6cGFydCA9PSBUaHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGVGcm9tOnBhcnQgPT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVy
UGFpbnRlciBrbm9iQWxwaGFdIDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhhXQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0ZVRvOm5ld0FscGhhIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGR1cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRB
bmltYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Ny
b2xsZXJJbXAgYW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0gICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWlu
dGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcDsKLSAgICBpZiAoIVtzZWxmIHNjcm9s
bEFuaW1hdG9yXS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkpIHsKLSAgICAgICAgW3Njcm9sbGVy
SW1wIHNldEtub2JBbHBoYTowXTsKLSAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIGZhZGluZyB0aGUgc2Ny
b2xsYmFyIGF3YXksIHRoYXQgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9u
Z2VyIGdvaW5nIHRvCi0gICAgLy8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5n
IHRocmVhZC4gQ2FsbGluZyBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVl
Ok5PXQotICAgIC8vIHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9s
bGVySW1wIEFQSS4KLSAgICBpZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Njcm9sbGJhci0+c3Vw
cG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQotICAgICAgICBbc2Nyb2xsZXJQYWludGVy
IHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKLQotICAgIFtzZWxmIHNldFVwQWxwaGFBbmlt
YXRpb246X2tub2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVy
IHBhcnQ6V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJh
dGlvbjpkdXJhdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAg
KilzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEg
ZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9s
bGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7Ci0gICAgW3NlbGYgc2V0
VXBBbHBoYUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Ny
b2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpu
ZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlcklt
cDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxi
YXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxl
ckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0gICAgLy8gVUlTdGF0ZVRyYW5zaXRp
b24gYWx3YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dy
ZXNzIHRoaXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgotICAgIFtzY3JvbGxlckltcCBzZXRV
aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRp
b25Qcm9ncmVzc11dOwotCi0gICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5zaXRpb24gaXMgaGFw
cGVuaW5nLCB0aGVuIHdlIGFyZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhl
IHNjcm9sbGluZyB0aHJlYWQuCi0gICAgaWYgKF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25T
ZWNvbmRhcnlUaHJlYWQoKSkKLSAgICAgICAgW3Njcm9sbGVySW1wIHNldFVzZVByZXNlbnRhdGlv
blZhbHVlOk5PXTsKLQotICAgIGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uKQotICAg
ICAgICBfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgotICAgICAg
ICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpVSVN0YXRlVHJhbnNpdGlvbgotICAgICAgICAgICAgYW5p
bWF0ZUZyb206W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdCi0gICAgICAg
ICAgICBhbmltYXRlVG86MS4wCi0gICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAg
IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFu
aW1hdGlvbiwganVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQu
Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Ny
b2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotICAgICAgICBbX3VpU3RhdGVU
cmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07Ci0gICAgICAgIFtfdWlTdGF0ZVRy
YW5zaXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIH0KLSAgICBbX3Vp
U3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClz
Y3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVFeHBhbnNpb25U
cmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIGlm
ICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1w
ID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7Ci0KLSAgICAvLyBFeHBh
bnNpb25UcmFuc2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlv
biBpcyBpbiBwcm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhhcmQgdHJhbnNpdGlvbi4KLSAgICBbc2Ny
b2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAg
ZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzXV07Ci0KLSAgICBpZiAoIV9leHBhbnNpb25UcmFu
c2l0aW9uQW5pbWF0aW9uKSB7Ci0gICAgICAgIF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9u
ID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Ny
b2xsYmFyOl9zY3JvbGxiYXIKLSAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6RXhwYW5zaW9u
VHJhbnNpdGlvbgotICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIGV4cGFuc2lv
blRyYW5zaXRpb25Qcm9ncmVzc10KLSAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKLSAgICAgICAg
ICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2Ug
ZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZh
bHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICBbX2V4cGFuc2lvblRyYW5z
aXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRp
b25Qcm9ncmVzc11dOwotICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0
RW5kVmFsdWU6MS4wXTsKLSAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNl
dER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICB9Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5p
bWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU092
ZXJsYXlTY3JvbGxlclN0YXRlKW5ld092ZXJsYXlTY3JvbGxlclN0YXRlCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNjcm9sbGVySW1wKTsKLSAgICBVTlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVy
U3RhdGUpOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBfc2Nyb2xsYmFyID0gMDsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbX2tub2JBbHBoYUFuaW1hdGlv
biBpbnZhbGlkYXRlXTsKLSAgICBbX3RyYWNrQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07Ci0g
ICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX2V4cGFu
c2lvblRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwotfQotCi1AZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKQEAgLTcwMSwzMCArMTU5LDEzIEBAIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsCiAKIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkKLSAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIoKnRoaXMsICZTY3JvbGxB
bmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2Vu
ZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5k
Q29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpCi0gICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNl
UGFnZUxvYWQoZmFsc2UpCi0gICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSkK
IHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9y
OnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0NsYXNz
RnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVs
ZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAgbV9z
Y3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJsZUFyZWFdKTsKLSAg
ICBtX3Njcm9sbGVySW1wUGFpciA9IGFkb3B0TlMoW1tOU1Njcm9sbGVySW1wUGFpciBhbGxvY10g
aW5pdF0pOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTptX3Njcm9sbGVySW1w
UGFpckRlbGVnYXRlLmdldCgpXTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJT
dHlsZTpTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CiB9CiAKLVNj
cm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMoKQotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotICAgIFttX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRh
dGVdOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX2hv
cml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIFttX3ZlcnRpY2Fs
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBbbV9zY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
Ci19CitTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkgPSBkZWZhdWx0Owog
CiBzdGF0aWMgYm9vbCBzY3JvbGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkKIHsKQEAgLTc1
Myw3ICsxOTQsNyBAQCBzdGF0aWMgYm9vbCBydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3RlbSgp
CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4gYmVoYXZpb3IpCiB7Ci0g
ICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xs
ZWRTaW5jZVBhZ2VMb2FkKHRydWUpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBkbyBk
aXJlY3Rpb25hbCBzbmFwcGluZywgYnV0IG91ciBiYXNlIGNsYXNzIGRvZXMuIEl0IHdpbGwgY2Fs
bCBpbnRvCiAgICAgLy8gU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbCBhZ2FpbiB3aXRoIHRoZSBz
bmFwcGVkIHBvc2l0aW9ucyBhbmQgU2Nyb2xsQmVoYXZpb3I6OkRlZmF1bHQuCkBAIC04NDAsNDMg
KzI4MSw2IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
KSBjb25zdAogICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuaXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpOwogfQogCi1zdGF0aWMgU3RyaW5nIHNjcm9sbGJhclN0YXRlKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQotewotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gIm5vbmUiX3M7
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKHNjcm9sbGJh
ci0+ZW5hYmxlZCgpID8gImVuYWJsZWQiX3MgOiAiZGlzYWJsZWQiX3MpOwotCi0gICAgaWYgKCFz
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Ci0KLSAgICBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcCA9IHNjcm9sbGVySW1w
Rm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghc2Nyb2xsZXJJbXApCi0gICAgICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQotICAgIGlmIChzY3JvbGxlckltcC5leHBhbmRl
ZCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLGV4cGFuZGVkIl9zKTsKLQotICAgIGlmIChzY3Jv
bGxlckltcC50cmFja0FscGhhID4gMCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZpc2libGVf
dHJhY2siX3MpOwotCi0gICAgaWYgKHNjcm9sbGVySW1wLmtub2JBbHBoYSA+IDApCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RodW1iIl9zKTsKLQotICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Ny
b2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyU3Rh
dGUobV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1TdHJpbmcg
U2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUobV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNh
bFNjcm9sbGJhcigpKTsKLX0KLQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Ny
b2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3Np
dGlvbikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxBbmltYXRpb25IZWxwZXIpOwpAQCAtODg1LDMx
NyArMjg5LDE1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9z
aXRpb25Gb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQCiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogewot
ICAgIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOworICAgIG1fc2Nyb2xsYWJsZUFy
ZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRh
KTsKICAgICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKIH0K
IAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAot
ewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOwotICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFN
KE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8
PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7Ci0gICAg
aWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0g
PDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1v
dXNlRXhpdGVkQ29udGVudEFyZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJs
YXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKLXsKLSAgICBMT0dfV0lUSF9TVFJF
QU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsi
IDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKLSAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VNb3ZlZEluQ29u
dGVudEFyZWFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgLy8gQXQgdGhpcyB0aW1l
LCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJl
LgotICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBO
U1Njcm9sbGVyU3R5bGVMZWdhY3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKnNjcm9sbGJhcikpCi0gICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVy
XTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxl
Z2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgotICAgIGlm
IChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVy
U3R5bGVMZWdhY3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBh
aXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNj
cm9sbGJhcikpCi0gICAgICAgIFtwYWludGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJdOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBib29sIG1vdXNlSXNEb3duKSBjb25zdAotewotICAgIGlmIChbbV9zY3JvbGxl
ckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxi
YXIoKnNjcm9sbGJhcikpIHsKLSAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rv
d25dOwotICAgICAgICBpZiAobW91c2VJc0Rvd24pCi0gICAgICAgICAgICBbbV9zY3JvbGxlcklt
cFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW21f
c2Nyb2xsZXJJbXBQYWlyIGVuZFNjcm9sbEdlc3R1cmVdOwotICAgIH0KLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKFttX3Njcm9s
bGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKFtt
X3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQotewotICAg
IGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZlUmVzaXplXTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkKLXsKLSAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJlZElu
XTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKLXsK
LSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRd
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93T3JkZXJl
ZE91dF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVy
ZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJl
YW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJd
IGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21f
c2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBpZiAobV93aGVlbEV2
ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5kZWZlckZv
clJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Ny
b2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEVuZFNjcm9s
bEdlc3R1cmUoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFy
cywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEo
KSA8PCAiXSBkaWRFbmRTY3JvbGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbbV9zY3JvbGxlckltcFBhaXIgZW5kU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBpZiAobV93aGVl
bEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5yZW1v
dmVEZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9y
OjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92
ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBz
Y3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOwotCi0gICAgaWYg
KFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07
Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9v
bCBzaG91bGRMb2NrU3RhdGUpCi17Ci0gICAgaWYgKHNob3VsZExvY2tTdGF0ZSkKLSAgICAgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092ZXJsYXlTY3Jv
bGxlclN0YXRlSGlkZGVuXTsKLSAgICBlbHNlIHsKLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWly
IHVubG9ja092ZXJsYXlTY3JvbGxlclN0YXRlXTsKLQotICAgICAgICAvLyBXZSBuZXZlciB1cGRh
dGUgc2Nyb2xsZXIgc3R5bGUgZm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFyZSBsb2NrZWQu
IElmIHdlIGhhdmUgYSBwZW5kaW5nCi0gICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdHls
ZSwgZG8gaXQgb25jZSB3ZSd2ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUuCi0gICAgICAg
IGlmIChtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9s
bGVyU3R5bGUoKTsKLSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJh
cnNDYW5CZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFbbV9zY3JvbGxlckltcFBhaXIg
b3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCgh
bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIG1fdmVydGljYWxTY3JvbGxlcklt
cERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92
ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFwaGljc0xheWVy
KiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVy
KCldOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFp
bnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCi0gICAgICAg
IFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgW21fdmVydGljYWxTY3JvbGxlcklt
cERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRl
ID0gbnVsbHB0cjsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21fc2Ny
b2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIG1faG9y
aXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7Ci0KLSAgICBbcGFpbnRl
ciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKLSAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCku
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFtwYWludGVyIHNldExheWVy
OmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhv
cml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5p
bkxpdmVSZXNpemUoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xs
ZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7
Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAg
bV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFpbnRl
ciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6bmlsXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3Jv
bGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwot
ICAgIFtwYWludGVyIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKLXsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNh
bFNjcm9sbGJhcigpOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9s
bGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbcGFpbnRl
ciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
KQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Ny
b2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGlmICghc2Nyb2xsYmFyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxh
eWVyKCkgOiBuaWxdOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxi
YXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICAv
LyBOb24tb3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0
IHRlc3RpbmcuCi0gICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZSgpICE9IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGlu
ZyB3aGVuZXZlciB0aGV5IGFyZSBhdCBhbGwgdmlzaWJsZS4KLSAgICBOU1Njcm9sbGVySW1wICpw
YWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFw
YWludGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFtwYWludGVyIGtub2JB
bHBoYV0gPiAwOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLCBidXQgdGhlIHBhZ2UKLSAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQg
Y2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKLSAgICAvLyBT
Y3JvbGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBw
YWdlLgotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLmlzSGFu
ZGxpbmdXaGVlbEV2ZW50KCkpCi0gICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRh
KTsKLSAgICBlbHNlCi0gICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7
Ci19Ci0KIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQogewogICAg
IFNjcm9sbEFuaW1hdG9yOjpjYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gZmFsc2U7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0
aXZlKCkpCi0gICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgW21faG9yaXpv
bnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107Ci0gICAgW21fdmVydGlj
YWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIHNldEhhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFy
c0NvbnRyb2xsZXIoKS5jYW5jZWxBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFz
ZSkKQEAgLTEyMDQsMTUgKzMwNiwxNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVX
aGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiAKICAgICAvLyBU
aGlzIG1heSBub3QgaGF2ZSBiZWVuIHNldCB0byB0cnVlIHlldCBpZiB0aGUgd2hlZWwgZXZlbnQg
d2FzIGhhbmRsZWQgYnkgdGhlIFNjcm9sbGluZ1RyZWUsCiAgICAgLy8gU28gc2V0IGl0IHRvIHRy
dWUgaGVyZS4KLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIHNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQodHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogTmVlZCB0
byBlbnN1cmUgd2UgZ2V0IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZC4KICAgICBpZiAo
cGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuKQotICAgICAgICBkaWRCZWdp
blNjcm9sbEdlc3R1cmUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpOwogICAgIGVsc2UgaWYgKHBoYXNlID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZTo6Q2FuY2VsbGVkKQotICAgICAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7Cisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5kaWRFbmRTY3Jv
bGxHZXN0dXJlKCk7CiAgICAgZWxzZSBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2U6Ok1heUJlZ2luKQotICAgICAgICBtYXlCZWdpblNjcm9sbEdlc3R1cmUoKTsKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLm1heUJlZ2luU2Nyb2xsR2Vz
dHVyZSgpOwogfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMTIyNyw3ICszMjks
NyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRGb3J3YXJkV2hlZWxFdmVudHNUb1Bh
cmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbgogICAgIAogYm9vbCBTY3JvbGxBbmltYXRvck1h
Yzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBzZXRIYXZl
U2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKHRydWUpOwogCiAgICAgaWYgKCF3aGVlbEV2ZW50Lmhhc1By
ZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSB8fCAhcnViYmVyQmFuZGluZ0VuYWJsZWRGb3JTeXN0ZW0o
KSkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpOwpAQCAtMTM2OCwxMjUgKzQ3MCw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omlt
bWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiB9CiAjZW5kaWYKIAotdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCi17Ci0gICAgaWYgKFtt
X3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkgewotICAgICAg
ICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVt
ZSgpOwotICAgIGlmICghbWFjVGhlbWUpIHsKLSAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtYWNUaGVt
ZS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzQ2hhbmdlZCgpOwotCi0gICAgTlNTY3JvbGxlclN0eWxl
IG5ld1N0eWxlID0gW21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOwotCi0gICAgaWYg
KFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
LQotICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9zY3JvbGxl
ckltcFBhaXIgdmVydGljYWxTY3JvbGxlckltcF07Ci0gICAgICAgIGF1dG8gbmV3VmVydGljYWxQ
YWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5l
d1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkVmVydGljYWxQ
YWludGVyXSk7Ci0KLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xs
ZXJJbXA6bmV3VmVydGljYWxQYWludGVyLmdldCgpXTsKLSAgICAgICAgbWFjVGhlbWUtPnNldE5l
d1BhaW50ZXJGb3JTY3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5ld1ZlcnRp
Y2FsUGFpbnRlcikpOwotICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJbXAoKnZl
cnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBz
dHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAK
LSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxh
eW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0
aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1l
LT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwot
ICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhp
Y2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9u
dGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsK
LSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIE5T
U2Nyb2xsZXJJbXAgKm9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Nyb2xsZXJJbXBQYWlyIGhv
cml6b250YWxTY3JvbGxlckltcF07Ci0gICAgICAgIGF1dG8gbmV3SG9yaXpvbnRhbFBhaW50ZXIg
PSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUg
Y29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNp
emUoKSBob3Jpem9udGFsOllFUyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRIb3Jpem9udGFsUGFp
bnRlcl0pOwotCi0gICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xs
ZXJJbXA6bmV3SG9yaXpvbnRhbFBhaW50ZXIuZ2V0KCldOwotICAgICAgICBtYWNUaGVtZS0+c2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgV1RGTW92ZShuZXdI
b3Jpem9udGFsUGFpbnRlcikpOwotICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJ
bXAoKmhvcml6b250YWxTY3JvbGxiYXIpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Ny
b2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1z
ZXQgdGhlIAotICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0
aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBh
bmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0g
bWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpKTsKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJl
Y3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBtX25l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3Rvcmlu
ZyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGFuZAotICAgIC8vIGEgcmVsYXlvdXQgd2ls
bCBoYXBwZW4gb24gaXRzIG93bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5
b3V0IG91cnNlbHZlcy4KLSAgICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0eWxlQ2hhbmdl
ZChuZXdTdHlsZSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ID8gU2Nyb2xsYmFyU3R5bGU6Ok92
ZXJsYXkgOiBTY3JvbGxiYXJTdHlsZTo6QWx3YXlzVmlzaWJsZSwgIW1fbmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlKTsKLQotICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFsc2U7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17
Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3QoMTAwX21zKTsK
LX0KLQotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5pc0Fj
dGl2ZSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRU
aW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQo
KQotewotICAgIC8vIFRvIGZvcmNlIHRoZSBzY3JvbGxiYXJzIHRvIGZsYXNoLCB3ZSBoYXZlIHRv
IGNhbGwgaGlkZSBmaXJzdC4gT3RoZXJ3aXNlLCB0aGUgU2Nyb2xsZXJJbXBQYWlyCi0gICAgLy8g
bWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93aW5nIGFuZCBi
YWlsIGVhcmx5LgotICAgIFttX3Njcm9sbGVySW1wUGFpciBoaWRlT3ZlcmxheVNjcm9sbGVyc107
Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGZsYXNoU2Nyb2xsZXJzXTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6
ZSYgZGVsdGEpCi17Ci0gICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9
IGRlbHRhOwotCi0gICAgaWYgKCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hv
dCgwX3MpOwotCi0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAgICAgICBtX3do
ZWVsRXZlbnRUZXN0TW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
IGRlbHRhKQotewotICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkSW5E
aXJlY3Rpb246TlNNYWtlUG9pbnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZp
cmVkKCkKLXsKLSAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lclNjcm9sbERlbHRhKTsKLSAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9s
bERlbHRhID0gRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3Ip
Ci0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNv
bihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Q
cm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxl
clRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQotewotICAgIEludFJlY3Qg
cmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFy
KiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIo
KSkKLSAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxiYXItPmNv
bnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOwotCi0gICAgaWYgKHJlY3RJblZp
ZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
cmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9
IHJlY3RJblZpZXdDb29yZGluYXRlczsKLX0KLQogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cHJv
Y2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKIHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnByb2Nlc3NXaGVlbEV2
ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA0MzQw
MGU4MzU1NzkyNDQyNzZkYjY2YjgyMmMwMmQxN2U1YjA5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShN
QUMpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitPQkpDX0NMQVNTIFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworT0JKQ19DTEFT
UyBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBE
ZWxlZ2F0ZTsKKwordHlwZWRlZiBpZCBTY3JvbGxlckltcFBhaXI7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOworCitjbGFzcyBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYyA6IHB1YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWMpOworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjKFNjcm9sbGFibGVBcmVhJik7CisgICAgflNjcm9sbGJhcnNDb250cm9sbGVyTWFjKCk7CisK
KyAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0
YSkgZmluYWw7CisKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsKKworICAgIHZv
aWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBkaWRFbmRT
Y3JvbGxHZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBtYXlCZWdpblNjcm9sbEdlc3R1
cmUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgZmluYWw7CisgICAg
dm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZU1vdmVk
SW5Db250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNj
cm9sbGJhciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNj
cm9sbGJhciosIGJvb2wpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpIGZpbmFsOworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZCgpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBmaW5hbDsKKyAgICB2b2lkIGNvbnRlbnRBcmVh
RGlkU2hvdygpIGZpbmFsOworICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgZmluYWw7CisK
KyAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExv
Y2tTdGF0ZSkgZmluYWw7CisgICAgYm9vbCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBm
aW5hbDsKKworICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFs
OworICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciop
IGZpbmFsOworCisgICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgZmlu
YWw7CisgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBmaW5hbDsK
KworICAgIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xs
YmFyKikgZmluYWw7CisKKyAgICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVz
dGluZygpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9y
VGVzdGluZygpIGNvbnN0IGZpbmFsOworCisKKyAgICAvLyBQdWJsaWMgdG8gYmUgY2FsbGFibGUg
ZnJvbSBPYmotQy4KKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAgICBib29sIHNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3JvbGxi
YXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAg
IHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICBi
b29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdDsKKworcHJpdmF0ZToKKworICAg
IC8vIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbigpIHdpbGwgZG8gdGhlIHNhbWUgd29yayB0
aGF0IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKCkgZG9lcyBleGNlcHQKKyAgICAvLyBpdCBkb2Vz
IGl0IGFmdGVyIGEgemVyby1kZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdXMg
ZnJvbSB1cGRhdGluZyBvdmVybGF5IHNjcm9sbGJhcgorICAgIC8vIGluZm9ybWF0aW9uIGR1cmlu
ZyBsYXlvdXQuCisgICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNp
emUmIHNjcm9sbERlbHRhKTsKKyAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihj
b25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCgpOworICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1l
ckZpcmVkKCk7CisKKyAgICBXaGVlbEV2ZW50VGVzdE1vbml0b3IqIHdoZWVsRXZlbnRUZXN0TW9u
aXRvcigpIGNvbnN0OworCisgICAgVGltZXIgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsK
KyAgICBUaW1lciBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXI7CisKKyAgICBSZXRhaW5Q
dHI8U2Nyb2xsZXJJbXBQYWlyPiBtX3Njcm9sbGVySW1wUGFpcjsKKyAgICBSZXRhaW5QdHI8V2Vi
U2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+IG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7CisgICAg
UmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1faG9yaXpvbnRhbFNjcm9sbGVySW1w
RGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1fdmVydGlj
YWxTY3JvbGxlckltcERlbGVnYXRlOworCisgICAgRmxvYXRTaXplIG1fY29udGVudEFyZWFTY3Jv
bGxlZFRpbWVyU2Nyb2xsRGVsdGE7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1i
UmVjdDsKKworICAgIGJvb2wgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9s
bGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9s
bGVyTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOWVkYjRmMzEyYTA4Nzg4ODY1NmJmNjY4MDdiZWFjNzM5
MDk3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWMubW0KQEAgLTAsMCArMSwxMDg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmgi
CisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCisjaW1wb3J0
ICJTY3JvbGxBbmltYXRvci5oIgorI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbXBvcnQg
IlNjcm9sbGJhci5oIgorI2ltcG9ydCAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKKyNpbXBvcnQgIlRp
bWluZ0Z1bmN0aW9uLmgiCisjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIgLy8gRklY
TUU6IFRoaXMgaXMgIGxheWVyaW5nIHZpb2xhdGlvbi4KKworI2ltcG9ydCA8cGFsL3NwaS9tYWMv
TlNTY3JvbGxlckltcFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxiYXJUaGVtZU1hYyogbWFj
U2Nyb2xsYmFyVGhlbWUoKQoreworICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOworICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUuaXNN
b2NrVGhlbWUoKSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRo
ZW1lKSA6IG51bGxwdHI7Cit9CisKK3N0YXRpYyBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcEZv
clNjcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFy
VGhlbWVNYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitAaW50ZXJmYWNlIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIDog
TlNPYmplY3QgPE5TU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpTY3Jv
bGxhYmxlQXJlYSogX3Njcm9sbGFibGVBcmVhOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxl
QXJlYTooV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZQorCistIChpZClpbml0
V2l0aFNjcm9sbGFibGVBcmVhOihXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFy
ZWEKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICBfc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9s
bGFibGVBcmVhID0gbnVsbHB0cjsKK30KKworLSAoTlNSZWN0KWNvbnRlbnRBcmVhUmVjdEZvclNj
cm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNv
bnRlbnRzU2l6ZSA9IF9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCk7CisgICAgcmV0dXJu
IE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWln
aHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Nj
cm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3Jv
bGxlckltcFBhaXIpOworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
Tk87CisKKyAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5pbkxpdmVSZXNpemUoKTsKK30KKwor
LSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjoo
TlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0o
c2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0
dXJuIE5TWmVyb1BvaW50OworCisgICAgLy8gSXQncyBPSyB0aGF0IHRoaXMgcG9zaXRpb24gaXNu
J3QgcmVsYXRpdmUgdG8gdGhpcyBzY3JvbGxlciAod2hpY2ggbWlnaHQgYmUgYW4gb3ZlcmZsb3cg
c2Nyb2xsZXIpLgorICAgIC8vIEFwcEtpdCBqdXN0IHRha2VzIHRoZSByZXN1bHQgYW5kIHBhc3Nl
cyBpdCBiYWNrIHRvIC1zY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9s
bGVySW1wOi4KKyAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCk7Cit9CisKKy0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVy
SW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBv
aW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJ
bXAKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKworICAgIGlmICghX3Nj
cm9sbGFibGVBcmVhIHx8ICFzY3JvbGxlckltcCkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50
OworCisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChbc2Ny
b2xsZXJJbXAgaXNIb3Jpem9udGFsXSkKKyAgICAgICAgc2Nyb2xsYmFyID0gX3Njcm9sbGFibGVB
cmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIg
PSBfc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBw
b3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJs
ZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0
aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAg
IC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxk
IHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4g
U2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCisg
ICAgLy8gaXNzdWUuCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBOU1plcm9Q
b2ludDsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsK
K30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xs
ZXJJbXBQYWlyIHNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVjdAor
eworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIFVOVVNFRF9QQVJBTShy
ZWN0KTsKKworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoW3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ29udHJvbGxl
cigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWly
OihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxl
Rm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlCit7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybjsKKworICAgIFtzY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGVdOworCisgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMmPihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhcnNDb250cm9sbGVy
KCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKK30KKworQGVuZAorCitlbnVtIEZlYXR1cmVUb0Fu
aW1hdGUgeworICAgIFRodW1iQWxwaGEsCisgICAgVHJhY2tBbHBoYSwKKyAgICBVSVN0YXRlVHJh
bnNpdGlvbiwKKyAgICBFeHBhbnNpb25UcmFuc2l0aW9uCit9OworCisjaWYgIUxPR19ESVNBQkxF
RAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEZlYXR1cmVU
b0FuaW1hdGUgZmVhdHVyZSkKK3sKKyAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKKyAgICBjYXNlIFRo
dW1iQWxwaGE6IHRzIDw8ICJUaHVtYkFscGhhIiA7IGJyZWFrOworICAgIGNhc2UgVHJhY2tBbHBo
YTogdHMgPDwgIlRyYWNrQWxwaGEiIDsgYnJlYWs7CisgICAgY2FzZSBVSVN0YXRlVHJhbnNpdGlv
bjogdHMgPDwgIlVJU3RhdGVUcmFuc2l0aW9uIiA7IGJyZWFrOworICAgIGNhc2UgRXhwYW5zaW9u
VHJhbnNpdGlvbjogdHMgPDwgIkV4cGFuc2lvblRyYW5zaXRpb24iIDsgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB0czsKK30KKwordXNpbmcgV2ViQ29yZTo6TG9nT3ZlcmxheVNjcm9sbGJhcnM7
CisKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU09i
amVjdCB7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOworICAgIFJldGFpblB0
cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xsZXJJbXA7CisgICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVh
dHVyZVRvQW5pbWF0ZTsKKyAgICBDR0Zsb2F0IF9zdGFydFZhbHVlOworICAgIENHRmxvYXQgX2Vu
ZFZhbHVlOworICAgIE5TVGltZUludGVydmFsIF9kdXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8TlNU
aW1lcj4gX3RpbWVyOworICAgIFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdGdW5jdGlvbjsK
K30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJh
ciBmZWF0dXJlVG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5p
bWF0ZUZyb206KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUg
ZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOworLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TVGltZXIgKil0aW1lcjsKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uOworLSAodm9pZClzdG9wQW5pbWF0aW9uOworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgorCistIChpZClpbml0V2l0aFNjcm9sbGJh
cjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVy
ZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFs
dWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFs
ID0gMC4wMTsKKyAgICBfdGltZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhG
aXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0gaW50ZXJ2YWw6
dGltZUludGVydmFsIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzZXRDdXJyZW50UHJv
Z3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdKTsKKyAgICBfZHVyYXRpb24gPSBkdXJh
dGlvbjsKKyAgICBfdGltaW5nRnVuY3Rpb24gPSBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6RWFzZUlu
T3V0KTsKKworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8
ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZlYXR1cmVUb0Fu
aW1hdGUgPDwgIiBmcm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5kVmFsdWUpOwor
CisgICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBfZmVhdHVyZVRvQW5pbWF0ZSA9IGZl
YXR1cmVUb0FuaW1hdGU7CisgICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworICAgIF9lbmRW
YWx1ZSA9IGVuZFZhbHVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc3RhcnRB
bmltYXRpb24KK3sKKyAgICBBU1NFUlQoX3Njcm9sbGJhcik7CisKKyAgICBfc2Nyb2xsZXJJbXAg
PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uICIgPDwgc2VsZiA8PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8IF9mZWF0dXJlVG9B
bmltYXRlKTsKKworICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfdGltZXIu
Z2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgX3N0YXJ0RGF0ZSA9IGFk
b3B0TlMoW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0pOwor
fQorCistICh2b2lkKXNldFN0YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1ZQoreworICAgIF9z
dGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKK30KKworLSAodm9pZClzZXRFbmRWYWx1ZTooQ0dGbG9h
dCllbmRWYWx1ZQoreworICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOworfQorCistICh2b2lkKXNl
dEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyCit7CisgICAgQ0dGbG9hdCBwcm9ncmVz
cyA9IDA7CisgICAgTlNEYXRlICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2lu
Y2VOb3c6MF07CisgICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGltZUludGVydmFs
U2luY2VEYXRlOl9zdGFydERhdGUuZ2V0KCldOworICAgIGlmIChlbGFwc2VkID4gX2R1cmF0aW9u
KSB7CisgICAgICAgIHByb2dyZXNzID0gMTsKKyAgICAgICAgW3RpbWVyIGludmFsaWRhdGVdOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIE5TVGltZUludGVydmFsIHQgPSAxOworICAgICAgICBpZiAo
X2R1cmF0aW9uKQorICAgICAgICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRpb247CisgICAgICAg
IHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9kdXJhdGlvbik7
CisgICAgfQorICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKKworICAgIExPR19XSVRIX1NUUkVBTShP
dmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24g
IiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8PCJdIGZvciAi
IDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKKworICAgIENHRmxvYXQgY3VycmVudFZhbHVlOworICAg
IGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRWYWx1ZSkKKyAgICAgICAgY3VycmVudFZhbHVlID0gMSAt
IHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVudFZhbHVlID0gcHJvZ3Jlc3M7CisK
KyAgICBzd2l0Y2ggKF9mZWF0dXJlVG9BbmltYXRlKSB7CisgICAgY2FzZSBUaHVtYkFscGhhOgor
ICAgICAgICBbX3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFsdWVdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRyYWNrQWxwaGE6CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0
VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVJU3Rh
dGVUcmFuc2l0aW9uOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9u
UHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBhbnNp
b25UcmFuc2l0aW9uOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRp
b25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAg
ICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbc2VsZiBzdG9wQW5pbWF0aW9u
XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgX3Njcm9sbGJhciA9IG51bGxw
dHI7Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7
CisgICAgX2R1cmF0aW9uID0gZHVyYXRpb247Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbgor
eworICAgIFtfdGltZXIgaW52YWxpZGF0ZV07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXZWJT
Y3JvbGxlckltcERlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwgTlNTY3Jv
bGxlckltcERlbGVnYXRlPiB7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwor
CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9rbm9iQWxwaGFBbmlt
YXRpb247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF90cmFja0Fs
cGhhQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBf
dWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24+IF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uOworfQorLSAoaWQpaW5p
dFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyOworLSAodm9pZClj
YW5jZWxBbmltYXRpb25zOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBE
ZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilz
Y3JvbGxiYXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBzdG9wQW5p
bWF0aW9uXTsKKyAgICBbX3RyYWNrQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAg
W191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2V4cGFu
c2lvblRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworfQorCistIChOYWtlZFB0cjxXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYz4pc2Nyb2xsYmFyc0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0
PFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjJj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS5zY3JvbGxiYXJzQ29udHJvbGxlcigpKTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRS
ZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0g
KE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1
cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICghX3Njcm9sbGJh
cikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVNYWM6OmlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcigpKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXI7CisgICAgaWYgKF9zY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6VmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCk7CisgICAgZWxzZQorICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAgICBzdGF0aWMgQ0FM
YXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIGxh
eWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7Cit9CisKKy0gKE5TUG9p
bnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAq
KXNjcm9sbGVySW1wCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gTlNa
ZXJvUG9pbnQ7CisKKyAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9
PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgYXV0byBwb3Np
dGlvbkluVmlldyA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQ
b3NpdGlvbkluVmlldygpOworICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KHBvc2l0aW9uSW5WaWV3KTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9M
YXllcjooTlNSZWN0KXJlY3QKK3sKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAoQk9PTClzaG91
bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
SW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKKworICAgIGlmICghX3Njcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIF9zY3JvbGxiYXItPnN1
cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKTsKK30KKworI2lmIEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCistIChOU0FwcGVhcmFuY2UgKillZmZlY3RpdmVBcHBlYXJhbmNlRm9yU2Ny
b2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAoreworICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcCk7CisKKyAgICBpZiAoIV9zY3JvbGxiYXIpIHsKKyAgICAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgcmV0dXJuIFtOU0FwcGVhcmFu
Y2UgY3VycmVudEFwcGVhcmFuY2VdOworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKKyAgICB9CisKKyAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIEZyYW1lVmll
dzo6cGFpbnRTY3JvbGxDb3JuZXIuCisgICAgLy8gVGhlIGJhc2Ugc3lzdGVtIGRvZXMgbm90IHN1
cHBvcnQgZGFyayBBcXVhLCBzbyB3ZSBtaWdodCBnZXQgYSBudWxsIHJlc3VsdC4KKyAgICBib29s
IHVzZURhcmtBcHBlYXJhbmNlID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS51c2VEYXJr
QXBwZWFyYW5jZUZvclNjcm9sbGJhcnMoKTsKKyAgICBpZiAoYXV0byAqYXBwZWFyYW5jZSA9IFtO
U0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOnVzZURhcmtBcHBlYXJhbmNlID8gTlNBcHBlYXJh
bmNlTmFtZURhcmtBcXVhIDogTlNBcHBlYXJhbmNlTmFtZUFxdWFdKQorICAgICAgICByZXR1cm4g
YXBwZWFyYW5jZTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAg
IHJldHVybiBbTlNBcHBlYXJhbmNlIGN1cnJlbnRBcHBlYXJhbmNlXTsKKyAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKK30KKyNlbmRpZgorCistICh2b2lkKXNldFVwQWxwaGFB
bmltYXRpb246KFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlclBh
aW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihD
R0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAg
IC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFy
cyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUuCisgICAgLy8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5
IHJldHVybnMuCisgICAgYm9vbCBtdXN0QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbGJhcnNDb250cm9s
bGVyXS0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOworCisgICAgaWYgKFtzZWxmIHNjcm9s
bGJhcnNDb250cm9sbGVyXS0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RB
bmltYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkg
eworICAgICAgICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnN0YXJ0U2Nyb2xsYmFyUGFp
bnRUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2lu
dCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRp
bWVyLgorICAgIFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c3RvcFNjcm9sbGJhclBhaW50
VGltZXIoKTsKKworICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBzdG9wCisg
ICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKKyAgICAgICAgW3Njcm9sbGJhclBhcnRB
bmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24g
PSBuaWw7CisgICAgfQorCisgICAgaWYgKGF1dG8qIG1hY1RoZW1lID0gV2ViQ29yZTo6bWFjU2Ny
b2xsYmFyVGhlbWUoKSkKKyAgICAgICAgbWFjVGhlbWUtPnNldFBhaW50Q2hhcmFjdGVyaXN0aWNz
Rm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKKworICAgIGlmIChwYXJ0ID09IFdlYkNvcmU6OlRo
dW1iUGFydCAmJiBfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFdlYkNvcmU6OlZlcnRpY2Fs
U2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAgICBh
dXRvIHRodW1iUmVjdCA9IFdlYkNvcmU6OkludFJlY3QoW3Njcm9sbGVyUGFpbnRlciByZWN0Rm9y
UGFydDpOU1Njcm9sbGVyS25vYl0pOworICAgICAgICAgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRy
b2xsZXJdLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QodGh1bWJSZWN0KTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdCh7IH0pOworICAgIH0KKworICAgIHNjcm9sbGJhclBhcnRBbmlt
YXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdp
dGhTY3JvbGxiYXI6X3Njcm9sbGJhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOnBh
cnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gVGh1bWJBbHBoYSA6IFRyYWNrQWxwaGEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbmltYXRlRnJvbTpwYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCA/IFtz
Y3JvbGxlclBhaW50ZXIga25vYkFscGhhXSA6IFtzY3JvbGxlclBhaW50ZXIgdHJhY2tBbHBoYV0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVUbzpuZXdBbHBoYQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24g
c3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1w
ICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBk
dXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlcklt
cEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgTlNTY3JvbGxlckltcCAqc2Nyb2xs
ZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcDsKKyAgICBpZiAoIVtzZWxm
IHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkpIHsKKyAgICAg
ICAgW3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTowXTsKKyAgICAgICAgX3Njcm9sbGJhci0+aW52
YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIGZh
ZGluZyB0aGUgc2Nyb2xsYmFyIGF3YXksIHRoYXQgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB3
ZSBhcmUgbm8gbG9uZ2VyIGdvaW5nIHRvCisgICAgLy8gYmUgbW92aW5nIGl0IGFyb3VuZCBvbiB0
aGUgc2Nyb2xsaW5nIHRocmVhZC4gQ2FsbGluZyBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNl
bnRhdGlvblZhbHVlOk5PXQorICAgIC8vIHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIHRv
IHRoZSBOU1Njcm9sbGVySW1wIEFQSS4KKyAgICBpZiAobmV3S25vYkFscGhhID09IDAgJiYgX3Nj
cm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAgICAgICBbc2Ny
b2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKKworICAgIFtzZWxmIHNl
dFVwQWxwaGFBbmltYXRpb246X2tub2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Ny
b2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tu
b2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5T
U2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5l
d1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYg
KCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJbXAg
PT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAgIE5TU2Nyb2xs
ZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7Cisg
ICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlvbiBzY3JvbGxl
clBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmlt
YXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9p
ZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVVSVN0YXRl
VHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBp
ZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlcklt
cCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgLy8gVUlT
dGF0ZVRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4gYW5pbWF0aW9u
IGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgorICAgIFtzY3Jv
bGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgdWlT
dGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOworCisgICAgLy8gSWYgdGhlIFVJIHN0YXRlIHRyYW5z
aXRpb24gaXMgaGFwcGVuaW5nLCB0aGVuIHdlIGFyZSBubyBsb25nZXIgbW92aW5nIHRoZSBzY3Jv
bGxiYXIgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgaWYgKF9zY3JvbGxiYXItPnN1cHBv
cnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAgICAgW3Njcm9sbGVySW1wIHNldFVz
ZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKKworICAgIGlmICghX3VpU3RhdGVUcmFuc2l0aW9uQW5p
bWF0aW9uKSB7CisgICAgICAgIF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMo
W1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Ny
b2xsYmFyCisgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOlVJU3RhdGVUcmFuc2l0aW9uCisg
ICAgICAgICAgICBhbmltYXRlRnJvbTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9n
cmVzc10KKyAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKKyAgICAgICAgICAgIGR1cmF0aW9uOmR1
cmF0aW9uXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBp
bml0aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRo
ZXkgaGF2ZSBjaGFuZ2VkLgorICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNl
dFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKyAg
ICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOworICAg
ICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsK
KyAgICB9CisgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07
Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBh
bmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVy
YXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikp
OworCisgICAgLy8gRXhwYW5zaW9uVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8gMS4gSW4g
Y2FzZSBhbiBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJkIHRyYW5z
aXRpb24uCisgICAgW3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczox
IC0gW3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzc11dOworCisgICAgaWYg
KCFfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbikgeworICAgICAgICBfZXhwYW5zaW9uVHJh
bnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFs
bG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICBmZWF0dXJlVG9B
bmltYXRlOkV4cGFuc2lvblRyYW5zaXRpb24KKyAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3Jv
bGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3NdCisgICAgICAgICAgICBhbmltYXRl
VG86MS4wCisgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBq
dXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4gY2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAg
W19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1w
IHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0
aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07CisgICAgICAgIFtfZXhwYW5zaW9uVHJhbnNp
dGlvbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgfQorICAgIFtfZXhwYW5z
aW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Ny
b2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUNoYW5nZWRUbzooTlNPdmVybGF5U2Nyb2xsZXJTdGF0ZSluZXdPdmVybGF5U2Nyb2xsZXJTdGF0
ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFNKG5l
d092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAg
X3Njcm9sbGJhciA9IDA7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW19r
bm9iQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07CisgICAgW190cmFja0FscGhhQW5pbWF0aW9u
IGludmFsaWRhdGVdOworICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0
ZV07CisgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxTY3JvbGxiYXJzQ29udHJvbGxlcj4gU2Nyb2xsYmFyc0Nv
bnRyb2xsZXI6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCit7CisgICAg
cmV0dXJuIG1ha2VVbmlxdWU8U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM+KHNjcm9sbGFibGVBcmVh
KTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFj
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbGJhcnNDb250cm9s
bGVyKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcigq
dGhpcywgJlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1l
ckZpcmVkKQorICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0aGlzLCAmU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCkK
K3sKKyAgICBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVy
SW1wUGFpckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxl
QXJlYV0pOworICAgIG1fc2Nyb2xsZXJJbXBQYWlyID0gYWRvcHROUyhbW05TU2Nyb2xsZXJJbXBQ
YWlyIGFsbG9jXSBpbml0XSk7CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERlbGVnYXRlOm1f
c2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3Njcm9sbGVySW1wUGFpciBz
ZXRTY3JvbGxlclN0eWxlOlNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgp
XTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1h
YygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fc2Nyb2xsZXJJ
bXBQYWlyRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERl
bGVnYXRlOm5pbF07CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxp
ZGF0ZV07CisgICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgaWYgKHNjcm9sbGJhclBhaW50VGlt
ZXJJc0FjdGl2ZSgpKQorICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIFtt
X2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNv
bnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCit7CisgICAgYXV0byByZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSBzY3JvbGxlclRodW1iOworICAgIGlmIChhdXRvKiB2ZXJ0aWNhbFNjcm9sbGJhciA9
IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmVjdEluVmll
d0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KHNjcm9sbGVyVGh1bWIpOworCisgICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zp
c2libGVTY3JvbGxlclRodW1iUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsYWJs
ZUFyZWEoKS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVz
KTsKKyAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRl
czsKK30KKworCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpoYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxB
bmltYXRvcigpLmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworICAgIGlm
IChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAg
ICAgIHJldHVybjsKKworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisg
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOworICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92
ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBb
IiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7Cisg
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJz
LCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxl
QXJlYSgpIDw8ICJdIG1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47
CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkK
K3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91
c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJs
YXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3Jv
bGxlckltcFBhaXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOworfQorCit2b2lkIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpIGNvbnN0Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJz
IG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxl
OjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVy
SW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAg
ICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKK30KKwordm9pZCBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5l
ZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpy
ZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVy
U3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Njcm9sbGVySW1w
ICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCisgICAgICAg
IFtwYWludGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBi
b29sIG1vdXNlSXNEb3duKSBjb25zdAoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zl
cmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChO
U1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJh
cikpIHsKKyAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rvd25dOworICAgICAg
ICBpZiAobW91c2VJc0Rvd24pCisgICAgICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5T
Y3JvbGxHZXN0dXJlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIGVuZFNjcm9sbEdlc3R1cmVdOworICAgIH0KK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGlm
IChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAg
ICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYURpZFJlc2l6
ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVzaXpl
KCkKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNpemUoKTsKKwor
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
CisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZlUmVzaXpl
XTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFEaWRTaG93
KCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93
T3JkZXJlZEluXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFy
ZWFEaWRIaWRlKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBh
aXIgd2luZG93T3JkZXJlZE91dF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92
ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBb
IiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisg
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2Vz
dHVyZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KQorICAgICAgICBtb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxF
dmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAg
IExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJz
Q29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRFbmRTY3Jv
bGxHZXN0dXJlIik7CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBh
aXIgZW5kU2Nyb2xsR2VzdHVyZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZl
bnRUZXN0TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNv
bihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Q
cm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1heUJlZ2luU2Ny
b2xsR2VzdHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxi
YXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxh
YmxlQXJlYSgpIDw8ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Nj
cm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9v
bCBzaG91bGRMb2NrU3RhdGUpCit7CisgICAgaWYgKHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092ZXJsYXlTY3Jv
bGxlclN0YXRlSGlkZGVuXTsKKyAgICBlbHNlIHsKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWly
IHVubG9ja092ZXJsYXlTY3JvbGxlclN0YXRlXTsKKworICAgICAgICAvLyBXZSBuZXZlciB1cGRh
dGUgc2Nyb2xsZXIgc3R5bGUgZm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFyZSBsb2NrZWQu
IElmIHdlIGhhdmUgYSBwZW5kaW5nCisgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdHls
ZSwgZG8gaXQgb25jZSB3ZSd2ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUuCisgICAgICAg
IGlmIChtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSkKKyAgICAgICAgICAgIHVwZGF0ZVNjcm9s
bGVyU3R5bGUoKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNj
cm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFbbV9zY3JvbGxlcklt
cFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIG1fdmVydGlj
YWxTY3JvbGxlckltcERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgW3BhaW50ZXIgc2V0
RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5w
bGF0Zm9ybUxheWVyKCldOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Ny
b2xsZXJJbXA6cGFpbnRlcl07CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXpl
KCkpCisgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZv
clNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21f
dmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1fdmVydGljYWxT
Y3JvbGxlckltcERlbGVnYXRlID0gbnVsbHB0cjsKKworICAgIFtwYWludGVyIHNldERlbGVnYXRl
Om5pbF07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmls
XTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWlu
dGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGVy
SW1wRGVsZWdhdGUpOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9w
dE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Ny
b2xsYmFyXSk7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxl
ckltcERlbGVnYXRlLmdldCgpXTsKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisg
ICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOworCisgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAg
ICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgW3BhaW50ZXIg
c2V0S25vYkFscGhhOjFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxs
UmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBO
U1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJh
cik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9o
b3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGVy
SW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSA9IG51bGxwdHI7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtt
X3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNj
cm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIFtwYWludGVyIHNldE5lZWRz
RGlzcGxheTpZRVNdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IHNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogc2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Njcm9sbGVySW1w
ICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYg
KCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRMYXllcjpsYXll
ciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVh
KCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBu
aWxdOworfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzaG91bGRTY3JvbGxiYXJQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBO
b24tb3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRl
c3RpbmcuCisgICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgp
ICE9IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gT3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQgdGVzdGluZyB3
aGVuZXZlciB0aGV5IGFyZSBhdCBhbGwgdmlzaWJsZS4KKyAgICBOU1Njcm9sbGVySW1wICpwYWlu
dGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWlu
dGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFtwYWludGVyIGtub2JBbHBo
YV0gPiAwOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3RpZnlDb250ZW50
QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlLCBidXQgdGhlIHBhZ2UKKyAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRo
YXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKKyAgICAv
LyBTY3JvbGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2
ZSBwYWdlLgorICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmlz
SGFuZGxpbmdXaGVlbEV2ZW50KCkpCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRl
bHRhKTsKKyAgICBlbHNlCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0
YSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUoKQoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSB0cnVlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogbWFjVGhlbWUgPSBtYWNTY3JvbGxi
YXJUaGVtZSgpOworICAgIGlmICghbWFjVGhlbWUpIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBt
YWNUaGVtZS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzQ2hhbmdlZCgpOworCisgICAgTlNTY3JvbGxl
clN0eWxlIG5ld1N0eWxlID0gW21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOworCisg
ICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZl
cnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRh
dGUoKTsKKworICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9z
Y3JvbGxlckltcFBhaXIgdmVydGljYWxTY3JvbGxlckltcF07CisgICAgICAgIGF1dG8gbmV3VmVy
dGljYWxQYWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0
eWxlOm5ld1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkVmVy
dGljYWxQYWludGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2Fs
U2Nyb2xsZXJJbXA6bmV3VmVydGljYWxQYWludGVyLmdldCgpXTsKKyAgICAgICAgbWFjVGhlbWUt
PnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5l
d1ZlcnRpY2FsUGFpbnRlcikpOworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xsZXJJ
bXAoKnZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9s
bGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0
IHRoZQorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUg
cmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQg
bGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFj
VGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSk7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAw
LCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIGlmIChTY3JvbGxiYXIqIGhv
cml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIo
KSkgeworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAg
ICAgTlNTY3JvbGxlckltcCAqb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBh
aXIgaG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKKyAgICAgICAgYXV0byBuZXdIb3Jpem9udGFsUGFp
bnRlciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdT
dHlsZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpIGhvcml6b250YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZEhvcml6b250
YWxQYWludGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxT
Y3JvbGxlckltcDpuZXdIb3Jpem9udGFsUGFpbnRlci5nZXQoKV07CisgICAgICAgIG1hY1RoZW1l
LT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFyLCBXVEZNb3Zl
KG5ld0hvcml6b250YWxQYWludGVyKSk7CisgICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3Jv
bGxlckltcCgqaG9yaXpvbnRhbFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVu
dCBzY3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0
IHJlLXNldCB0aGUKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBh
bmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAg
Ly8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVz
cyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29u
dHJvbFNpemUoKSk7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJ
bnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgLy8gSWYg
bV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0
b3JpbmcgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQKKyAgICAvLyBhIHJlbGF5b3V0
IHdpbGwgaGFwcGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJl
LWxheW91dCBvdXJzZWx2ZXMuCisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNo
YW5nZWQobmV3U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxl
OjpPdmVybGF5IDogU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xs
ZXJTdHlsZVVwZGF0ZSk7CisKKyAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNl
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdGFydFNjcm9sbGJhclBhaW50
VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RhcnRPbmVTaG90
KDEwMF9tcyk7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNjcm9sbGJhclBh
aW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXIuaXNBY3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUbyBmb3JjZSB0aGUgc2Ny
b2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwg
dGhlIFNjcm9sbGVySW1wUGFpcgorICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJh
cnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICBbbV9zY3JvbGxlcklt
cFBhaXIgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBmbGFz
aFNjcm9sbGVyc107Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250
ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgpCit7CisgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWQobV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7CisgICAgbV9jb250ZW50
QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IHsgfTsKKworICAgIGlmIChhdXRvKiBtb25p
dG9yID0gd2hlZWxFdmVudFRlc3RNb25pdG9yKCkpCisgICAgICAgIG1vbml0b3ItPnJlbW92ZURl
ZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpT
Y3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNv
bnRlbnRTY3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7
CisgICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IGRlbHRhOworCisg
ICAgaWYgKCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworCisg
ICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAg
bW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1v
bml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9u
aXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRh
KQoreworICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkSW5EaXJlY3Rp
b246TlNNYWtlUG9pbnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsKK30KKworc3Rh
dGljIFN0cmluZyBzY3JvbGxiYXJTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBp
ZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuICJub25lIl9zOworCisgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChzY3JvbGxiYXItPmVuYWJsZWQoKSA/ICJl
bmFibGVkIl9zIDogImRpc2FibGVkIl9zKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCisgICAg
TlNTY3JvbGxlckltcCAqc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Ny
b2xsYmFyKTsKKyAgICBpZiAoIXNjcm9sbGVySW1wKQorICAgICAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAuZXhwYW5kZWQpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIixleHBhbmRlZCJfcyk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAudHJhY2tBbHBo
YSA+IDApCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RyYWNrIl9zKTsKKworICAg
IGlmIChzY3JvbGxlckltcC5rbm9iQWxwaGEgPiAwKQorICAgICAgICByZXN1bHQuYXBwZW5kKCIs
dmlzaWJsZV90aHVtYiJfcyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRl
Rm9yVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFi
bGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworU3RyaW5nIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3Jv
bGxiYXIoKSk7Cit9CisKK1doZWVsRXZlbnRUZXN0TW9uaXRvciogU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OndoZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9s
bGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKTsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjE1OGNmY2Q0OWM1OWIwZjhiZDA3
MDQ1YmU1OWI0ODU5YmZiZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2su
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3JNb2NrLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVNjcm9sbEFuaW1hdG9yTW9jazo6U2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmIGxvZ2dlcikKLSAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotICAgICwg
bV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQotewotfQotCi1TY3JvbGxBbmltYXRvck1vY2s6On5T
Y3JvbGxBbmltYXRvck1vY2soKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2Nr
OjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFuaW1hdG9yOjpkaWRB
ZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TW9jazo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsK
LSAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsQW5pbWF0
b3I6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xs
YmFyKHNjcm9sbGJhcik7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZUhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXIg
PSBudWxscHRyOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwot
ICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIG1f
bG9nZ2VyKCJtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29u
dGVudEFyZWEiKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
OwotfQotCi1jb25zdCBjaGFyKiBTY3JvbGxBbmltYXRvck1vY2s6OnNjcm9sbGJhclByZWZpeChT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1f
dmVydGljYWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikg
Y29uc3QKLXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBzY3JvbGxi
YXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6
bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QK
LXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNjcm9sbGJhclByZWZp
eChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUV4
aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6
bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBpc1ByZXNz
ZWQpIGNvbnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNzZWQgPyAibW91c2VJ
c0Rvd25JbiIgOiAibW91c2VJc1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNj
cm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihz
Y3JvbGxiYXIsIGlzUHJlc3NlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTcyMWE4ZjYyMmM4OWU1NDZkOWViYmFjZDk4MjEw
ZjgzMTFiOTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIEEgTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBTY3JvbGxBbmltYXRv
ciB1c2VkIHRvIHRlc3QgdGhlIHNjcm9sbCBldmVudHMKLS8vIHJlY2VpdmVkIGJ5IHRoZSBzY3Jv
bGwgYW5pbWF0b3IuIFRlc3RzIGNhbiBlbmFibGUgdGhpcyBzY3JvbGwgYW5pbWF0b3IgdXNpbmcK
LS8vIHRoZSBpbnRlcm5hbCBzZXR0aW5nIGVuYWJsZU1vY2tTY3JvbGxBbmltYXRvci4KLWNsYXNz
IFNjcm9sbEFuaW1hdG9yTW9jayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7Ci1wdWJs
aWM6Ci0gICAgU2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFibGVBcmVhJiwgV1RGOjpGdW5jdGlv
bjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1v
Y2soKTsKLQotcHJpdmF0ZToKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBib29s
IGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0
cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBJbnRTaXplKCk7IH0KLSAgICBib29sIGlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoY29u
c3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBSZWN0
RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyB9
OyB9Ci0gICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3Ry
YWludHMoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBhZGp1c3RTY3Jv
bGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KLSNlbmRpZgotCi0g
ICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VF
eGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xs
YmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUlzRG93bklu
U2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNo
YXIqIHNjcm9sbGJhclByZWZpeChTY3JvbGxiYXIqKSBjb25zdDsKLQotICAgIFdURjo6RnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9sb2dnZXI7Ci0gICAgU2Nyb2xsYmFyKiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Ny
b2xsYmFyIHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVy
TW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZjZjAyODJiYmFiZTg5MmE3YzQwMGI3NGRkOGRhMTVl
MGZmMTNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxl
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2Nr
LmgiCisKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Njcm9sbGJhcnNDb250cm9sbGVyTW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKFNj
cm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYmIGxvZ2dlcikKKyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNjcm9sbGFibGVB
cmVhKQorICAgICwgbV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQoreworfQorCitTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6On5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKSA9IGRlZmF1bHQ7CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xs
YmFyOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihz
Y3JvbGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX2hvcml6b250
YWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Ny
b2xsYmFyKHNjcm9sbGJhcik7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxl
cjo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBtX2hvcml6
b250YWxTY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZUVu
dGVyZWRDb250ZW50QXJlYSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZU1vdmVkSW5Db250
ZW50QXJlYSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVkSW5Db250ZW50
QXJlYSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFeGl0ZWRD
b250ZW50QXJlYSgpCit7CisgICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsK
KyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworfQor
Citjb25zdCBjaGFyKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeChT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyID09IG1f
dmVydGljYWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQiLCBz
Y3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJz
Q29udHJvbGxlcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRl
ZCIsIHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOworICAgIFNjcm9s
bGJhcnNDb250cm9sbGVyOjptb3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgYm9vbCBpc1ByZXNzZWQpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIo
bWFrZVN0cmluZyhpc1ByZXNzZWQgPyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJc1VwSW4iLCBz
Y3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3JvbGxiYXJz
Q29udHJvbGxlcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIGlzUHJlc3NlZCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0
NzMzOTMxMTJkODRhYTUzZWQyYjY3OWVmZjA4NDY3MzNiODgyYmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
Y3JvbGxiYXJzQ29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTW9j
ayBpbXBsZW1lbnRhdGlvbiBvZiBTY3JvbGxiYXJzQ29udHJvbGxlciB1c2VkIHRvIHRlc3QgdGhl
IHNjcm9sbCBldmVudHMKKy8vIHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGxiYXIgY29udHJvbGxlci4g
VGVzdHMgY2FuIGVuYWJsZSB0aGlzIG1vY2sgb2JqZWN0IHVzaW5nCisvLyB0aGUgaW50ZXJuYWwg
c2V0dGluZyBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkuCisvLyBGSVhNRTogc2V0VXNlc01v
Y2tTY3JvbGxBbmltYXRvcigpIG5lZWRzIHJlbmFtaW5nLgorCitjbGFzcyBTY3JvbGxiYXJzQ29u
dHJvbGxlck1vY2sgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJh
cnNDb250cm9sbGVyTW9jayk7CitwdWJsaWM6CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2Nr
KFNjcm9sbGFibGVBcmVhJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsK
KyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKTsKKworcHJpdmF0ZToKKwor
ICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAg
dm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZv
aWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAgIHZv
aWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAg
dm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VNb3Zl
ZEluQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEo
KSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29s
KSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBjaGFyKiBzY3JvbGxiYXJQcmVmaXgoU2Nyb2xsYmFy
KikgY29uc3Q7CisKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fbG9n
Z2VyOworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAg
ICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwo=
</data>
<flag name="commit-queue"
          id="461605"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438542</attachid>
            <date>2021-09-17 19:28:53 -0700</date>
            <delta_ts>2021-09-17 19:37:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210917192852.patch</filename>
            <type>text/plain</type>
            <size>193282</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThjMTc5MDJjNGVmZjVi
OWQ5MTI3Yjc0OTM4ZWM2YTIzMTQ0M2UzMC4uYjlmYzg0NjU2NTQyNzlmZjdiYTNmMWY4YTIyOWQ2
MDM0YjVhYmMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IEFzIHRoZSBmaXJzdCBzdGVwIHRvIGNsZWFuaW5nIHVwIFNjcm9sbEFuaW1hdG9yL1Njcm9sbENv
bnRyb2xsZXIsIG1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YKKyAgICAgICAgU2Ny
b2xsQW5pbWF0b3IgYW5kIGludG8gYSBuZXcgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgY2xhc3MsIHdp
dGggcGxhdGZvcm0tc3BlY2lmaWMgc3ViY2xhc3Nlcy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBt
dWNoIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIFNjcm9sbEFu
aW1hdG9yLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OndoZWVsRXZlbnRUZXN0TW9uaXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25J
blNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRI
aWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5oLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnNjcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNh
bmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYVdpbGxQ
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRTaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlcjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlcjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om5vdGlmeUNvbnRlbnRBcmVhU2Ny
b2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9y
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVy
aWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVhc2VPdXRDdWJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpj
b250ZW50QXJlYURpZFNob3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9s
bEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpoYW5k
bGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9s
bGVySW1wUGFpcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6XSk6IERlbGV0ZWQuCisgICAgICAgIChvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBp
bml0V2l0aFNjcm9sbGJhcjpmZWF0dXJlVG9BbmltYXRlOmFuaW1hdGVGcm9tOmFuaW1hdGVUbzpk
dXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24gc2V0RW5kVmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGludmFsaWRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXREdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW5pdFdp
dGhTY3JvbGxiYXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdh
dGUgY2FuY2VsQW5pbWF0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RUb0JhY2tpbmc6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBsYXllcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIG1vdXNlTG9jYXRpb25JblNjcm9s
bGVyRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgY29udmVydFJlY3RUb0xheWVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGVmZmVjdGl2ZUFw
cGVhcmFuY2VGb3JTY3JvbGxlckltcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzZXRVcEFscGhhQW5pbWF0aW9uOnNjcm9sbGVyUGFpbnRlcjpwYXJ0OmFu
aW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDph
bmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDpv
dmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJl
c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudHNSZXNpemVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c3RvcFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNj
cm9sbGVkU29vbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxi
YXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6Cisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0
Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wUGFpckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAg
ICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgICgt
W1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5p
bWF0ZTphbmltYXRlRnJvbTphbmltYXRlVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGluaXRXaXRoU2Nyb2xsYmFyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBzY3JvbGxiYXJzQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgbGF5ZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBtb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKToKKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
c2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDphbmltYXRlQWxwaGFUbzpk
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlcklt
cDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVy
SW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlT
dGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNjcm9sbEdl
c3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hv
dWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50
QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFy
U3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25p
dG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
b2NrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
QW5pbWF0b3JNb2NrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDogQWRkZWQuCisKIDIwMjEtMDktMTcgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ug
T2JqZWN0SWRlbnRpZmllciBmb3IgUmVzb3VyY2VMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzY0
ZjNiMzdjYmVkZWU0OTI0ODBhZjUxY2IxZjk4NzJlMDA0YWQyMi4uNWFhZDBkOTNjMjliZmEzNTE1
ZWVjNTljY2RhOTkxNjkyYzQzOTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4MzEsNiArMTgzMSw3
IEBAIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKIHBs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorcGxhdGZv
cm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5jcHAK
IHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogcGxhdGZvcm0vU2VyaWFsaXpl
ZFBsYXRmb3JtRGF0YUN1ZS5jcHAKQEAgLTIwOTksNyArMjEwMCw3IEBAIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCiBwbGF0Zm9ybS9tb2NrL1BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENEYXRhQ2hhbm5lbEhhbmRsZXJN
b2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENOb3RpZmllcnNNb2NrLmNwcAotcGxhdGZvcm0vbW9j
ay9TY3JvbGxBbmltYXRvck1vY2suY3BwCitwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcAogcGxhdGZv
cm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGVmMjBiZWQzNjE1YmNhODExMDJhMjIwMTA5NDQxYThlMjE5NWU3N2QuLjVjNGFhYzhjMmRi
NDU5YjU2ODI3NjIxZGM2MzMzNGE1ZmMzODY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtNDkxLDYgKzQ5MSw3IEBAIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMu
bW0KK3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
ZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLm1tCiBwbGF0Zm9ybS9tYWMvU3RyaW5nVXRpbGl0
aWVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGNkNzA0N2IxZWNjZTJjMjVkODM3ZjE0ZjM0
ZjRjZDBjODQ5NjViMmYuLjg5NzMwMTIzMzA5NDhkNmVlMDgzNWZlNGY4NjI5MjdkMjY0MzA0Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC03OCw2ICs3OCw3IEBAIHBsYXRmb3JtL2dhbWVwYWQv
bWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAKIHBsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5l
dHRlR2FtZXBhZFByb3ZpZGVyLmNwcAogCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9y
R2VuZXJpYy5jcHAKK3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CmluZGV4
IDhkYWQ4YzcxYzhmZWEyYWJkM2YxOTE5YzA0ZTlkYTI3Njk0ZDgwYjkuLmE5YTI3OTE0MTgwMTY5
OTFkYjI0ZDViZjA5YzllNTEwYzgwMTMzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC02NCw2
ICs2NCw3IEBAIHBsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmNwcAogcGxh
dGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCiAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xs
QW5pbWF0b3JHZW5lcmljLmNwcAorcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxl
ckdlbmVyaWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyNjUwYjQ1ZmY0NzY2ODFlYTMy
YWI5ODdhZDI4ODhkMTIwODFlODAuLjY3MWUzZGEzMDI2YmUzMjFkYzZhYWI3OWM2MTQyNmIyNjI4
YmZiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTM4OSw2ICszODksNyBAQAogCQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUg
LyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTNFODYxOTFCM0JENzAwMEYxQjU1IC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBRjY2QjIzQkZDMzlFMDA0MDMwREEgLyogQ29s
b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUMxMjBDMjJCRjJD
RDIwMDRFOUQzNSAvKiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzEyMDkyMkJGMkNDNzAwNEU5RDM1
IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFRTM3MTEyNkYxOTUyOTAwMUI1MTg0IC8qIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjLm1tICovOyB9OwogCQkwRkYzQjkyOTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYz
QjkyNTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01RdWFkLmggKi87IH07CiAJCTBGRjNCOTJCMUVF
M0I2REUwMEI4NDE0NCAvKiBKU0RPTVF1YWRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYzQjkyNzFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkSW5pdC5oICovOyB9OwogCQkwRkY1MDI2QTEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1l
ZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1
MDI2ODEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1lZGlhLmggKi87IH07CkBAIC0yMDM4LDcg
KzIwMzksNyBAQAogCQk1QzlDMkRCNTIyNDFBNjdCMDA5OTZCMEIgLyogQ29udGVudFJ1bGVMaXN0
UmVzdWx0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM5QzJEQjMyMjQxQTY3MzAwOTk2QjBCIC8qIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QzlFRjJGMzIx
RjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RUYyRjIyMUYwNjE3MTAwM0JEQzU2
IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0ExREVDNjFGNzFGMUM3MDBFNzFCRDMgLyogSFRUUEhl
YWRlckZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0ExREVDNDFGNzFFNjg3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUNCMzdGRkYxQzYyRDJB
MTAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9s
bEFuaW1hdG9yTW9jay5oICovOyB9OworCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmggKi87IH07CiAJCTVDQkM4REFEMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUNCRDU5NTkyMjgwRTkyNjAwMkIyMkFBIC8qIEN1c3RvbUhlYWRlckZpZWxkcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzVEMjM4NjIy
N0EwNzdDMDAwQjlCREEgLyogQ3VzdG9tSGVhZGVyRmllbGRzLmNwcCAqLzsgfTsKIAkJNUNDNzkw
MEUyNjZBRkE4OTAwNjkyNEZFIC8qIFRpbWluZ0FsbG93T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3OTAwQjI2NkFGQTg4MDA2OTI0RkUg
LyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjE3Niw2ICs2MTc3LDEwIEBACiAJCTBDNDUzNDI2MTBDREJCRkEw
MDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9w
dXBNZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJD
NUNDRDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWFyY2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAy
MjQ1MDI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjAyMjQ1MjI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDIyNDU0MjZGMTVENzUw
MDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAz
QzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5
RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODU1LDggKzk4NjAsOCBAQAogCQk1
QzlFRjJGMjIxRjA2MTcxMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBI
VFRQSGVhZGVyRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRUUEhlYWRlckZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURF
QzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVFRQSGVhZGVyRmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvck1v
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0IzN0ZGRDFDNjJEMjc4MDBG
MjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbEFuaW1hdG9yTW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vz
c2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0
TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxp
dHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0M3OTAwQjI2NkFG
QTg4MDA2OTI0RkUgLyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGltaW5nQWxsb3dPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxODExLDggKzIxODE2LDggQEAKIAkJCQkwNzM3OTRGNDE5RjU4NjRFMDBFNUEwNDUg
LyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oICovLAogCQkJCTA3Mzc5NEY3MTlGNTg2NEUw
MEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmNwcCAqLywKIAkJCQkwNzM3OTRGODE5RjU4NjRF
MDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oICovLAotCQkJCTVDQjM3RkZDMUM2MkQyNzgw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3BwICovLAotCQkJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLywKKwkJCQk1Q0IzN0ZGQzFDNjJE
Mjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNwcCAqLywKKwkJCQk1Q0Iz
N0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggKi8sCiAJ
CQkJMEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi8s
CiAJCQkJMEZFNzE0MDQxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oICov
LAogCQkJCTJEN0VEMEE5MUJBRTk5MTcwMDQzQjNFNSAvKiBUaW1lckV2ZW50QmFzZWRNb2NrLmgg
Ki8sCkBAIC0yMjE3MCw2ICsyMjE3NSw4IEBACiAJCQkJMDA4MUZFRkUxNkIwQTJCNjAwOEFBQTdB
IC8qIFB1YmxpY1N1ZmZpeE1hYy5tbSAqLywKIAkJCQlCQ0FFMUZBNTEyOTM5REI3MDA0Q0IwMjYg
LyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAqLywKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBDOTY3NTQg
LyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi8sCisJCQkJMEYwMjI0NTQyNkYxNUQ3NTAwMDI2NUMz
IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmggKi8sCisJCQkJMEYwMjI0NTMyNkYxNUQ3NTAw
MDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3
QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4
NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk1QjFFMEU0MzI1
RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8sCkBAIC0y
ODE0Miw2ICsyODE0OSw4IEBACiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICov
LAorCQkJCTBGMDIyNDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5j
cHAgKi8sCisJCQkJMEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9s
bGVyLmggKi8sCiAJCQkJMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1l
LmNwcCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUu
aCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwICovLApAQCAtMzQ5MjEsOCArMzQ5MzAsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlC
QUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0
ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FFMUZBNzEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRv
ck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBT
Y3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAv
KiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRC
MEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MDgsNiArMzY1MTcsNyBAQAogCQkJCTQxOTI0
MjQ5MjEyN0I5M0UwMDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzUxMTU2RTEyQjE3NDlDMDBD
OTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVFMzcx
MTI2RjE5NTI5MDAxQjUxODQgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI2QUEwRjlFMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRU
eXBlTWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCmluZGV4IDhhNmI2Zjk3NzYxZWIxMTllZTU5Y2VmOWFjZjcxYTQwYzE1ZjMy
NWQuLjg0OGM0NmYyODUwNDk2OWU5MWYwNGVkMWJjNTE1YWViMTAwZDA5YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM1NiwyMiArMzU2LDcgQEAg
dm9pZCBTY3JvbGxBbmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvcjo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBtX3Njcm9s
bEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgbV9zY3JvbGxBbmltYXRpb24tPnVwZGF0
ZVNjcm9sbEV4dGVudHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRl
U2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1Np
emVDaGFuZ2VkKCkgY29uc3QKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xs
RXh0ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggYTExZTkwZTExZDc1OTZmNDFlNjI4ODI5Mjc1NTUxZDcyZGU1YmRhYS4uM2M3NjEwZWVkOThl
YTQzNjEzMjIxZDk3NDgwNjAwMTdhYjZhY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVh
OyB9CiAKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdDsKKworICAgIGJvb2wg
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsgfQorICAgIHZvaWQgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChi
b29sIGhhdmVTY3JvbGxlZCkgeyBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBoYXZlU2Ny
b2xsZWQ7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpOwogCiAgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQpAQCAtOTcsNDkgKzEwMiwxNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciop
IGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihT
Y3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFEaWRTaG93KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlk
SGlkZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbihib29sKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xs
YmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRB
cmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEp
OyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5n
IGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0
eVN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0KICAgICAvLyBTY3Jv
bGxBbmltYXRpb25DbGllbnQKICAgICB2b2lkIHNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3Jv
bGxBbmltYXRpb24mLCBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24pIG92ZXJyaWRl
OwogICAgIHZvaWQgc2Nyb2xsQW5pbWF0aW9uRGlkRW5kKFNjcm9sbEFuaW1hdGlvbiYpIG92ZXJy
aWRlOwogICAgIFNjcm9sbEV4dGVudHMgc2Nyb2xsRXh0ZW50c0ZvckFuaW1hdGlvbihTY3JvbGxB
bmltYXRpb24mKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0V2hlZWxFdmVudFRlc3RNb25pdG9y
KFJlZlB0cjxXaGVlbEV2ZW50VGVzdE1vbml0b3I+JiYgdGVzdE1vbml0b3IpIHsgbV93aGVlbEV2
ZW50VGVzdE1vbml0b3IgPSB0ZXN0TW9uaXRvcjsgfQorICAgIFdoZWVsRXZlbnRUZXN0TW9uaXRv
ciogd2hlZWxFdmVudFRlc3RNb25pdG9yKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGVz
dE1vbml0b3IuZ2V0KCk7IH0KIAogICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9y
U25hcHBpbmdJZk5lZWRlZChjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQsIFNjcm9sbFNuYXBQb2lu
dFNlbGVjdGlvbk1ldGhvZCk7CiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBp
bmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCwg
U2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKQEAgLTE4NCw2ICsxNTcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVy
OwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyOwogICAgIEZsb2F0
UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvblNt
b290aD4gbV9zY3JvbGxBbmltYXRpb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCA0OTkyNDVjYTE0MDdkNDczNzUz
MmNkNGU4NzQ4ODNkMDU0YzMzODZiLi4wM2EwMGMwY2U3M2YzMzYzYTcwMDEzY2FjMDg3NDhhZWQx
YTQxNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBA
IC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcgQEAgc3RydWN0IFNh
bWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIHdl
YWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRocmVhZDsKICNlbmRpZgotICAgIHZvaWQq
IHBvaW50ZXJbMl07CisgICAgdm9pZCogcG9pbnRlclszXTsKICAgICBJbnRQb2ludCBvcmlnaW47
CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CiB9OwpAQCAtNzQsMTcgKzc0LDI1IEBAIFNj
cm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKSA9IGRlZmF1bHQ7CiAKIFNjcm9sbEFuaW1h
dG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAogewotICAgIGlmICgh
bV9zY3JvbGxBbmltYXRvcikgeworICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikKKyAgICAgICAg
bV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoY29uc3RfY2FzdDxTY3Jv
bGxhYmxlQXJlYSY+KCp0aGlzKSk7CisKKyAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFy
c0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXJzQ29udHJvbGxlcikg
eworICAgICAgICAvLyBOb3RlIHRoYXQgbW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCBpcyBhIG1p
c25vbWVyLgogICAgICAgICBpZiAobW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCgpKSB7Ci0gICAg
ICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRvck1vY2s+
KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyksIFt0aGlzXShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBtYWtlVW5p
cXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTW9jaz4oY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+
KCp0aGlzKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgewogICAgICAgICAgICAgICAg
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gU2Nyb2xsQW5p
bWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKKyAgICAg
ICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwogICAgIH0KIAotICAgIEFT
U0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKLSAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7CisgICAgcmV0dXJuICptX3Njcm9sbGJhcnNDb250cm9sbGVyLmdldCgpOwogfQogCiB2b2lk
IFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbikK
QEAgLTIwMSw3ICsyMDksNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nZWQoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIH0KIAogICAgIGlmIChz
Y3JvbGxQb3NpdGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigp
Lm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRpb24oKSAtIG9sZFBvc2l0aW9u
KTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9CiAKIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPikK
QEAgLTI0Miw5MSArMjUwLDg1IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxTdGFydExpdmVS
ZXNpemUoKQogewogICAgIGlmIChtX2luTGl2ZVJlc2l6ZSkKICAgICAgICAgcmV0dXJuOworCiAg
ICAgbV9pbkxpdmVSZXNpemUgPSB0cnVlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT53aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS53
aWxsU3RhcnRMaXZlUmVzaXplKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxFbmRM
aXZlUmVzaXplKCkKIHsKICAgICBpZiAoIW1faW5MaXZlUmVzaXplKQogICAgICAgICByZXR1cm47
CisKICAgICBtX2luTGl2ZVJlc2l6ZSA9IGZhbHNlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciog
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9s
bEFuaW1hdG9yLT53aWxsRW5kTGl2ZVJlc2l6ZSgpOwotfSAgICAKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLndpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250
ZW50c1NpemVDaGFuZ2VkKCk7Cit9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVh
V2lsbFBhaW50KCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZmxhc2ggb3Zlcmxh
eSBzY3JvbGxiYXJzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KLSAgICBpZiAoU2Nyb2xsQW5pbWF0
b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBz
Y3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewotICAgIGlmIChT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAg
ICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJl
ZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIHNj
cm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3Io
KS5tb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgbW91c2VJc0Rvd24pOworICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIG1v
dXNlSXNEb3duKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFy
ZWFEaWRTaG93KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZFNo
b3coKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFEaWRI
aWRlKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZEhpZGUoKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlk
ZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9j
a1N0YXRlKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihzaG91bGRMb2NrU3RhdGUpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkuZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudHNTaXplQ2hhbmdlZCgpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMzUsMjEgKzMzNywyMSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkud2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCkKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29u
dGVudHNSZXNpemVkKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT5jb250ZW50c1Jlc2l6ZWQoKTsgLy8gVGhpcyBmbGFzaGVzIG92ZXJsYXkgc2Nyb2xsYmFy
cy4KKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsgLy8gVGhpcyBmbGFzaGVz
IG92ZXJsYXkgc2Nyb2xsYmFycy4KIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMzc1LDE0ICszNzcsMTIgQEAgdm9pZCBTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMoKQogewogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZhbGlkYXRlU2Nyb2xsYmFy
UGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZh
bGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJz
Q29udHJvbGxlcigpLmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAg
ICAgfQogfQogCkBAIC00MjMsMTIgKzQyMywxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQog
ewotICAgIHNjcm9sbEFuaW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKQEAgLTQ2MCwxMiArNDYwLDEyIEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKIAogU3RyaW5nIFNjcm9sbGFi
bGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCk7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVy
biBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCk7CiB9CiAKIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFy
ZWE6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CkBAIC01MTgsNyArNTE4LDcgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGU6IGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgPDwgIiBp
c1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKTsKIAot
ICAgIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KTsKICAgICBpZiAoIXNjcm9sbEFuaW1hdG9yIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggNGU5ZjY1ZmIxNzcxM2YwN2RjMzYy
ZWU3MmVlMTk1NTczZjM0OWI3MC4uYzEwOTllYzM0MjU2Y2M4NTM3OTRkYmE5YThkOWE0ZWYzYzhl
ODc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC00NSw2
ICs0NSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKK2NsYXNzIFNj
cm9sbGJhcnNDb250cm9sbGVyOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFj
a2luZzsKIApAQCAtMTcyLDEyICsxNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9s
bEFuaW1hdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxs
IGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3Jv
bGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQW5pbWF0b3IuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbGJhcnNDb250
cm9sbGVyJiBzY3JvbGxiYXJzQ29udHJvbGxlcigpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwpAQCAtMzc4LDYgKzM3
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSA9IDA7CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gbV9zY3JvbGxiYXJzQ29udHJvbGxlcjsKIAogICAgIC8vIFRo
ZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVj
dGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwog
ICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2Rl
LiBUaGUgY29tYmluYXRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CmluZGV4IDk2NjU3NzA3ZGNlZjgwZWRiMTJmOTcwZGJjYWVlZWYxZTU0ODczMWYuLmYwYWQyMmE5
MGQ5NjJhNTYzNTA2MGVlNDUwYTRmOTZlMTA0YjBiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBz
aG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyh0aGlzKTsK
IH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OTljZmIyMTQxZmI5ZmVlM2ZhZDk4MDM4YjM4MjVlMTJiMmFhYWRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShX
UEUpICYmICFQTEFURk9STShHVEspCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xs
ZXI+IFNjcm9sbGJhcnNDb250cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyPihz
Y3JvbGxhYmxlQXJlYSk7Cit9CisjZW5kaWYKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9s
bGJhcnNDb250cm9sbGVyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1f
c2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA2NThmZTEzZDMzNDc1NDQwNTIyMjhmNDVlYzM1YWYwNTc5MjM3ZjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVh
OworCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXIpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOworCisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXIoU2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxl
cigpID0gZGVmYXVsdDsKKyAgICAKKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWF5QmVnaW5TY3JvbGxH
ZXN0dXJlKCkgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFp
bnQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CisgICAgdmly
dHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNv
bnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFEaWRTaG93KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFy
KikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKworcHJpdmF0ZToKKyAgICBTY3JvbGxhYmxlQXJl
YSYgbV9zY3JvbGxhYmxlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5l
cmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JH
ZW5lcmljLmNwcAppbmRleCA3ODIzODM1YzQxNTg5N2U5NzUwZmU0MmM3ZGVhYjg1MzYyYWM1M2Yy
Li4wNDU3M2RlYzU3NzYzYjYyNWJjNWVmZWU2YmFmMTU3M2VjOWVjMGMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuY3BwCkBAIC0zOCw5ICszOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGNvbnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24geyAxX3Mg
fTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVE
ZWxheSB7IDJfcyB9OwotCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewogICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdG9yR2VuZXJpYz4oc2Nyb2xsYWJsZUFyZWEpOwpA
QCAtOTAsMjA5ICs4Nyw0IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp1cGRhdGVQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JPZmZzZXQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9s
bEFuaW1hdG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotCi0gICAgaWYg
KCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50ID0gMTsKLSAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0
eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNj
cm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0
b3I6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlmICghc2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faG9y
aXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgaWYgKCFtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudCA9IDE7Ci0gICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSht
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKLSAgICBoaWRlT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgbV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOwotICAgIGlmICghbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudCA9IDA7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9ob3Jp
em9udGFsT3ZlcmxheVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1fdmVy
dGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50ID0gMDsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZU92
ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpCi17Ci0gICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXItPm9wYWNpdHkoKSkgewotICAgICAgICBtX3ZlcnRpY2FsT3Zlcmxh
eVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
KTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkKLSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIg
JiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVy
bGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsK
LSAgICAgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gTm9QYXJ0KQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aW52
YWxpZGF0ZSgpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgZWFzZU91dEN1Ymlj
KGRvdWJsZSB0KQotewotICAgIGRvdWJsZSBwID0gdCAtIDE7Ci0gICAgcmV0dXJuIHAgKiBwICog
cCArIDE7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Ny
b2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAg
ZG91YmxlIHByb2dyZXNzID0gMTsKLSAgICBpZiAoY3VycmVudFRpbWUgPCBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25FbmRUaW1lKQotICAgICAgICBwcm9ncmVzcyA9IChjdXJyZW50VGltZSAt
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKSAvIChtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
U3RhcnRUaW1lKS52YWx1ZSgpOwotICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU291cmNlICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uVGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7
Ci0gICAgaWYgKHByb2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQp
IHsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNz
OwotICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFt
ZVJhdGUgPSA2MDsKLSAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3Mg
LyBmcmFtZVJhdGU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lcklu
dGVydmFsID0gMV9tczsKLSAgICAgICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjpt
YXgodGlja1RpbWUgLSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBjdXJyZW50VGltZSksIG1pbmlt
dW1UaW1lckludGVydmFsKTsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOwotICAgIH0gZWxzZQotICAgICAgICBo
aWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6
OnNob3dPdmVybGF5U2Nyb2xsYmFycygpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNM
b2NrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdl
dCA9PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYm
ICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudDsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwot
ICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0
YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRhcmdldCA9IDA7Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9
PSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Ci0gICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZs
b3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRl
RGVsYXkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgaGlk
ZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCi17Ci0gICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7
Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQot
ewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
R2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xs
YmFyc0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyLnN0b3AoKTsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudCkgewotICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsK
LSAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25z
dCBGbG9hdFNpemUmKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVu
KGJvb2wgc2hvdWxkTG9ja1N0YXRlKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9j
a2VkID09IHNob3VsZExvY2tTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNj
cm9sbGJhcnNMb2NrZWQgPSBzaG91bGRMb2NrU3RhdGU7Ci0KLSAgICBpZiAoIW1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkgewotICAgICAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIGlmICht
X2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxPdmVy
bGF5U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNl
dE9wYWNpdHkoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQgPT0gMSkKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxi
YXJzT3BhY2l0eSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaG93T3ZlcmxheVNjcm9s
bGJhcnMoKTsKLSAgICB9Ci19Ci0KLS8vIEZJWE1FOiBDYW4gd2UganVzdCB1c2UgdGhlIGJhc2Ug
Y2xhc3MgaW1wbGVtZW50YXRpb24/Ci12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xs
QW5pbWF0aW9uRGlkVXBkYXRlKFNjcm9sbEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBpZiAoJmFuaW1hdGlvbiA9PSBtX2tpbmV0aWNBbmlt
YXRpb24uZ2V0KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IENsYXJpZnkgaG93IGFuaW1hdGlvbnMg
aW50ZXJhY3QuIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gb25lIGFjdGl2ZSBhdCBh
IHRpbWUuCi0gICAgICAgIG1fc2Nyb2xsQW5pbWF0aW9uLT5zdG9wKCk7Ci0gICAgICAgIHVwZGF0
ZVBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxBbmltYXRpb25EaWRVcGRhdGUoYW5pbWF0aW9uLCBwb3NpdGlvbik7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKaW5kZXggZjQ4OGYy
ZjVhMTk3Yjc0NjI1NGJkMjA3MDVmOGQ4NGQyMjkxMDI2NC4uN2MyN2JhNjA0ODM2NmI3ZTEwMTk5
N2M5ZTc2OGE0YTkwMDkyZTc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC00NCwyNSArNDQsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR2VuZXJpYygpOwogCiBwcml2YXRl
OgotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYsIFNjcm9sbENsYW1waW5nKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQg
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIG5v
dGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIGZpbmFsOworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKIAogICAgIC8vIFNjcm9sbEFuaW1h
dGlvbkNsaWVudAotICAgIHZvaWQgc2Nyb2xsQW5pbWF0aW9uRGlkVXBkYXRlKFNjcm9sbEFuaW1h
dGlvbiYsIGNvbnN0IEZsb2F0UG9pbnQmIGN1cnJlbnRQb3NpdGlvbikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzY3JvbGxBbmltYXRpb25EaWRVcGRhdGUoU2Nyb2xsQW5pbWF0aW9uJiwgY29uc3QgRmxv
YXRQb2ludCYgY3VycmVudFBvc2l0aW9uKSBmaW5hbDsKIAogICAgIHZvaWQgdXBkYXRlUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYpOwogCkBAIC03MiwxNSArNTgsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4gbV9raW5ldGljQW5pbWF0aW9uOwotICAgIFNj
cm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKLSAgICBT
Y3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIGJv
b2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXI7Ci0gICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblNvdXJjZSB7IDAgfTsKLSAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGFyZ2V0IHsgMCB9OwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50IHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU3RhcnRUaW1lOwotICAgIE1vbm90b25pY1RpbWUgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uRW5kVGltZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5l
cmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRy
b2xsZXJHZW5lcmljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWE3NTI3YTU0ZTczMTVjZTEwNGU5YjQ1Yjc2
YWM1MzI4ZjRkOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwCkBAIC0wLDAgKzEsMjQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5oIgorCisjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290aC5o
IgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxv
d1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbiB7IDFfcyB9Oworc3RhdGljIGNvbnN0IFNlY29u
ZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5IHsgMl9zIH07CisKK3N0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxiYXJzQ29udHJvbGxlcj4gU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNy
ZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIG1ha2VV
bmlxdWU8U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljPihzY3JvbGxhYmxlQXJlYSk7Cit9CisK
K1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbGJhcnNDb250cm9s
bGVyKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXIoKnRoaXMsICZTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lckZpcmVkKQoreworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6
On5TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJHZW5lcmljOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
ID0gc2Nyb2xsYmFyOworICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAg
ICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDE7CisgICAgbV92ZXJ0
aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCk7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQoreworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIGlmICghbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxi
YXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAxOworICAg
IG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCk7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjp3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKG1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlT
Y3JvbGxiYXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAw
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6d2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKG1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisgICAg
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciA9IG51bGxwdHI7CisgICAgaWYgKCFtX3ZlcnRp
Y2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
Q3VycmVudCA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjp1cGRh
dGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKQoreworICAgIGlmIChtX3ZlcnRpY2FsT3Zlcmxh
eVNjcm9sbGJhciAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fdmVy
dGljYWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKKyAgICAgICAgbV92ZXJ0aWNhbE92
ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aG92ZXJlZFBh
cnQoKSA9PSBOb1BhcnQpCisgICAgICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+
aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7CisgICAgICAgIG1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpID09IE5vUGFydCkKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIt
PmludmFsaWRhdGUoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGVhc2VPdXRD
dWJpYyhkb3VibGUgdCkKK3sKKyAgICBkb3VibGUgcCA9IHQgLSAxOworICAgIHJldHVybiBwICog
cCAqIHAgKyAxOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6b3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDE7CisgICAgaWYgKGN1cnJlbnRUaW1lIDwgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSkKKyAgICAgICAgcHJvZ3Jlc3MgPSAoY3Vy
cmVudFRpbWUgLSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUpLnZhbHVlKCkg
LyAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSAtIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblN0YXJ0VGltZSkudmFsdWUoKTsKKyAgICBwcm9ncmVzcyA9IG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblNvdXJjZSArIChlYXNlT3V0Q3ViaWMocHJvZ3Jlc3MpICogKG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blNvdXJjZSkpOworICAgIGlmIChwcm9ncmVzcyAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50KSB7CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQg
PSBwcm9ncmVzczsKKyAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Cisg
ICAgfQorCisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgZnJhbWVSYXRlID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHRpY2tU
aW1lID0gMV9zIC8gZnJhbWVSYXRlOworICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5p
bXVtVGltZXJJbnRlcnZhbCA9IDFfbXM7CisgICAgICAgIFNlY29uZHMgZGVsdGFUb05leHRGcmFt
ZSA9IHN0ZDo6bWF4KHRpY2tUaW1lIC0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gY3VycmVudFRp
bWUpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkZWx0YVRvTmV4dEZyYW1lKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJHZW5lcmljOjpzaG93T3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSAmJiBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQgPT0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAgIGlmICghbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSA9IG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQ7CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGFyZ2V0ID0gMTsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0
ICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKKyAgICAgICAgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cisg
ICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25TdGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJh
dGlvbjsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7CisgICAgfSBlbHNlCisgICAgICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxi
YXJzKCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSAmJiAhbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0KQorICAgICAgICByZXR1
cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAg
aWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKKyAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAwOworICAgIGlmIChtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQgPT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9u
SGlkZURlbGF5OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmlt
YXRpb25EdXJhdGlvbiArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheTsKKyAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qob3ZlcmZsb3dT
Y3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5KTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJv
bGxlckdlbmVyaWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBzaG93T3Zlcmxh
eVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6Om1v
dXNlRXhpdGVkQ29udGVudEFyZWEoKQoreworICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVu
dEFyZWEoKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyR2VuZXJpYzo6Y29udGVudEFyZWFEaWRTaG93KCkKK3sKKyAgICBzaG93
T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNM
b2NrZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25U
aW1lci5zdG9wKCk7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQp
IHsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7CisgICAg
ICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgIH0KK30KKwordm9pZCBT
Y3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29u
c3QgRmxvYXRTaXplJikKK3sKKyAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xs
YmFyc0xvY2tlZCA9PSBzaG91bGRMb2NrU3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX292
ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID0gc2hvdWxkTG9ja1N0YXRlOworCisgICAgaWYgKCFtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpIHsK
KyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgICAg
ICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7CisgICAgICAgIGlmIChtX3ZlcnRp
Y2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xs
YmFyLT5zZXRPcGFjaXR5KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID09IDEpCisgICAgICAgICAgICB1cGRhdGVPdmVybGF5
U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hvd092ZXJs
YXlTY3JvbGxiYXJzKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRy
b2xsZXJHZW5lcmljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJh
cnNDb250cm9sbGVyR2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MmM1MWE3MGU1YjI2YzY2NDc4MTY0
ZjhkZGMzZTFkODdjNjFiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5oCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMgZmlu
YWwgOiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0
IFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYyhTY3JvbGxhYmxlQXJlYSYpOworICAgIHZpcnR1
YWwgflNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYygpOworCitwcml2YXRlOgorICAgIHZvaWQg
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOworICAgIHZvaWQg
d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOworICAgIHZv
aWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKKyAgICB2b2lk
IG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIG92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKCk7
CisgICAgdm9pZCBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB2b2lkIGhpZGVPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHZvaWQgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7
CisKKyAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRy
IH07CisgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIg
fTsKKyAgICBib29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxzZSB9OworICAgIFRp
bWVyIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyOworICAgIGRvdWJsZSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRhcmdldCB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uQ3VycmVudCB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvbkVuZFRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1Mu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCmluZGV4
IGYwZjg4MzM2ZmJiZDdkZmM0YjVkMTliYjQ0Yjc5ZjU3MzBkYTc1MDEuLjhiODFmOTA0ZjZlMjVm
ZmExYTBkZjIyNmUxZmFlNGZhNTFhMzFkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCkBAIC01NSwxNiArNTUsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgQXhpc0xhdGNoSG9yaXpvbnRhbCwKICAgICAgICAgQXhpc0xhdGNoVmVydGljYWwK
ICAgICB9OwotICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoOwotICAgIGJvb2wg
bV9pblRvdWNoU2VxdWVuY2U7Ci0gICAgYm9vbCBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpczsKLSAg
ICBib29sIG1fc3RhcnRlZFNjcm9sbDsKKyAgICBBeGlzTGF0Y2ggbV90b3VjaFNjcm9sbEF4aXNM
YXRjaCB7IEF4aXNMYXRjaE5vdENvbXB1dGVkIH07CisgICAgYm9vbCBtX2luVG91Y2hTZXF1ZW5j
ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX3N0YXJ0ZWRTY3JvbGwgeyBmYWxzZSB9OwogICAgIEludFBvaW50IG1fZmly
c3RUb3VjaFBvaW50OwogICAgIEludFBvaW50IG1fbGFzdFRvdWNoUG9pbnQ7CiAKICAgICAvLyBX
aGVuIHdlJ3JlIGluIGEgdG91Y2ggc2VxdWVuY2UsIHRoaXMgd2lsbCBwb2ludCB0byB0aGUgc2Ny
b2xsYWJsZSBhcmVhIHRoYXQKICAgICAvLyBzaG91bGQgYWN0dWFsbHkgYmUgc2Nyb2xsZWQgZHVy
aW5nIHRoZSBzZXF1ZW5jZS4KLSAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYUZv
clRvdWNoU2VxdWVuY2U7CisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWFGb3JU
b3VjaFNlcXVlbmNlIHsgbnVsbHB0ciB9OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KaW5kZXggY2I0ZmI3ODg0Yzg0
MDYzNTM3ZTc1MDJjNjIzYzQ0YmViMzZjYTdmNy4uZDk3NmU0ZWE0Y2Y5ZjBkMDg2YmU5YWUzMGE3
NmU1NThhOGE5YzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nj
cm9sbEFuaW1hdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3Jv
bGxBbmltYXRvcklPUy5tbQpAQCAtNDUsMTMgKzQ1LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNjcm9s
bEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxh
YmwKIAogU2Nyb2xsQW5pbWF0b3JJT1M6OlNjcm9sbEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQot
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoKEF4
aXNMYXRjaE5vdENvbXB1dGVkKQotICAgICwgbV9pblRvdWNoU2VxdWVuY2UoZmFsc2UpCi0gICAg
LCBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyhmYWxzZSkKLSAgICAsIG1fc3RhcnRlZFNjcm9sbChm
YWxzZSkKLSAgICAsIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKDApCi0jZW5kaWYK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMuaAppbmRleCA3ODlhNTYzOGZiNjYxZDczOTZkZGRmYzQ3NDk2MWNmNDg2NDQ3ZjJlLi5iMzhj
ZTJhYjQ0NWVkNTExMzIxMWM1Yjg1YzQ0MTEzOTNmOGIxNzI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaApAQCAtMjgsMTE5ICsyOCw0NyBA
QAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGU7Ci1PQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlOwotT0JKQ19DTEFTUyBX
ZWJTY3JvbGxlckltcERlbGVnYXRlOwotCi10eXBlZGVmIGlkIFNjcm9sbGVySW1wUGFpcjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXI7CiAKLWNsYXNzIFNjcm9sbEFu
aW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9y
TWFjIGZpbmFsIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKIHB1YmxpYzoKICAgICBTY3JvbGxB
bmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9y
TWFjKCk7CiAKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb25Gb3JTY3JvbGxBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwotICAgIGJvb2wgaGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZDsgfQotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0KLSAgICBib29sIHNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc3RhcnRTY3JvbGxi
YXJQYWludFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotCi0g
ICAgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgYm9vbCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOwotICAgIFJldGFpblB0
cjxXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZTsKLQotICAgIFJldGFpblB0cjxTY3JvbGxlckltcFBhaXI+IG1fc2Nyb2xsZXJJ
bXBQYWlyOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4gbV9zY3Jv
bGxlckltcFBhaXJEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZT4gbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8V2ViU2Ny
b2xsZXJJbXBEZWxlZ2F0ZT4gbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGU7Ci0KLSAgICB2
b2lkIGluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoKTsKLSAgICBUaW1lciBtX2luaXRp
YWxTY3JvbGxiYXJQYWludFRpbWVyOwotCi0gICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxl
ZFRpbWVyRmlyZWQoKTsKLSAgICBUaW1lciBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXI7
Ci0gICAgRmxvYXRTaXplIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGE7Ci0K
LSAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4p
IG92ZXJyaWRlOwotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQpIG92ZXJyaWRlOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlw
bGllciwgT3B0aW9uU2V0PFNjcm9sbEJlaGF2aW9yPikgZmluYWw7CisgICAgYm9vbCBzY3JvbGxU
b1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgYm9v
bCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CiAK
ICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgYm9vbCBzaG91bGRGb3J3YXJkV2hlZWxF
dmVudHNUb1BhcmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKLSAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFs
OwogI2VuZGlmCiAKLSAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UpIGZpbmFsOwogCi0gICAgdm9pZCBjYW5jZWxBbmltYXRpb25z
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgZmluYWw7CiAgICAgCi0g
ICAgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1v
dXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxi
YXIoU2Nyb2xsYmFyKiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsU3RhcnRM
aXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjb250ZW50QXJlYURpZFNob3coKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhRGlk
SGlkZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7
Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBtYXlCZWdp
blNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLQotICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJT
dGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBmaW5hbDsKLQotICAgIHZvaWQgZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQg
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIG92ZXJyaWRl
OwotCi0gICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBvdmVycmlkZTsK
LQotICAgIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xs
YmFyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBzZW5kQ29udGVudEFyZWFT
Y3JvbGxlZFNvb24oKSB3aWxsIGRvIHRoZSBzYW1lIHdvcmsgdGhhdCBzZW5kQ29udGVudEFyZWFT
Y3JvbGxlZCgpIGRvZXMgZXhjZXB0Ci0gICAgLy8gaXQgZG9lcyBpdCBhZnRlciBhIHplcm8tZGVs
YXkgdGltZXIgZmlyZXMuIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gdXBkYXRpbmcgb3Zlcmxh
eSBzY3JvbGxiYXIgCi0gICAgLy8gaW5mb3JtYXRpb24gZHVyaW5nIGxheW91dC4KLSAgICB2b2lk
IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpOwot
ICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYgc2Ny
b2xsRGVsdGEpOworICAgIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6
ZSYgZGVsdGEpIGZpbmFsOwogCiAgICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklm
TmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAotICAgIGJvb2wgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwogCi0gICAg
U3RyaW5nIGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCBmaW5hbDsK
LSAgICBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCBmaW5h
bDsKLQotICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogCiAgICAgLy8gU2Ny
b2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJDbGllbnQuCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQpAQCAtMTU3LDkgKzg1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFNjcm9sbFBvc2l0
aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBib29sIG1faGF2
ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKLSAgICBib29sIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBk
YXRlOwotICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Q7CisgICAgUmV0YWlu
UHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggODRjY2RlOTViZDY0ZDg2ZTMyMzk1
ODM4N2VhOWViYjFiNzg3OThlYi4uYzQ3NDkwZmI3ZGY2ODZiNDE1Mzg5NDU3YTQ1N2FjZWJjNWE2
ZDI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQpAQCAtMzEsNDYgKzMxLDIwIEBACiAjaW1wb3J0ICJHcmFkaWVudC5oIgogI2ltcG9y
dCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTlNTY3Jv
bGxlckltcERldGFpbHMuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2ltcG9y
dCAiU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNpbXBvcnQgIlNj
cm9sbGJhclRoZW1lLmgiCi0jaW1wb3J0ICJTY3JvbGxiYXJUaGVtZU1hYy5oIgotI2ltcG9ydCA8
cGFsL3NwaS9tYWMvTlNTY3JvbGxlckltcFNQSS5oPgorI2ltcG9ydCAiU2Nyb2xsYmFyc0NvbnRy
b2xsZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3
dGYvTmFrZWRQdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2Nyb2xsYmFyVGhlbWVNYWMqIG1hY1Njcm9sbGJhclRo
ZW1lKCkKLXsKLSAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKTsKLSAgICByZXR1cm4gIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkg
PyBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSkgOiBudWxs
cHRyOwotfQotCi1zdGF0aWMgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGJhclRoZW1lTWFjOjpw
YWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE7CiB1c2luZyBXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzsKIHVzaW5nIFdlYkNvcmU6OlNjcm9sbGJhcjsKLXVzaW5nIFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lTWFjOwogdXNpbmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKIHVzaW5n
IFdlYkNvcmU6OlZlcnRpY2FsU2Nyb2xsYmFyOwotdXNpbmcgV2ViQ29yZTo6bWFjU2Nyb2xsYmFy
VGhlbWU7CiB1c2luZyBXZWJDb3JlOjpJbnRSZWN0OwotdXNpbmcgV2ViQ29yZTo6VGh1bWJQYXJ0
OwotdXNpbmcgV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjsKLQotI2lmICFMT0df
RElTQUJMRUQKLXVzaW5nIFdlYkNvcmU6OkxvZ092ZXJsYXlTY3JvbGxiYXJzOwotI2VuZGlmCiAK
IEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCiAtIChp
ZClpbml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKQEAgLTE3Niw1MjIgKzE1MCw2IEBAIC0g
KHZvaWQpX3JlY3Vyc2l2ZVJlY29tcHV0ZVRvb2xUaXBzCiAKIEBlbmQKIAotQGludGVyZmFjZSBX
ZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1Njcm9sbGVySW1wUGFpckRl
bGVnYXRlPgotewotICAgIFNjcm9sbGFibGVBcmVhKiBfc2Nyb2xsYWJsZUFyZWE7Ci19Ci0tIChp
ZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFyZWE7
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZQotCi0t
IChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFy
ZWEKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKLSAgICBfc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgX3Njcm9s
bGFibGVBcmVhID0gMDsKLX0KLQotLSAoTlNSZWN0KWNvbnRlbnRBcmVhUmVjdEZvclNjcm9sbGVy
SW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAg
ICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IF9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCk7Ci0gICAgcmV0dXJuIE5TTWFr
ZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7
Ci19Ci0KLS0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVy
SW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlcklt
cFBhaXIpOwotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gTk87Ci0K
LSAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5pbkxpdmVSZXNpemUoKTsKLX0KLQotLSAoTlNQ
b2ludCltb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjooTlNTY3Jv
bGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xs
ZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIE5T
WmVyb1BvaW50OwotCi0gICAgLy8gSXQncyBPSyB0aGF0IHRoaXMgcG9zaXRpb24gaXNuJ3QgcmVs
YXRpdmUgdG8gdGhpcyBzY3JvbGxlciAod2hpY2ggbWlnaHQgYmUgYW4gb3ZlcmZsb3cgc2Nyb2xs
ZXIpLgotICAgIC8vIEFwcEtpdCBqdXN0IHRha2VzIHRoZSByZXN1bHQgYW5kIHBhc3NlcyBpdCBi
YWNrIHRvIC1zY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1w
Oi4KLSAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCk7Ci19Ci0KLS0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFp
ciAqKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5D
b250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsK
LSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLQotICAgIGlmICghX3Njcm9sbGFi
bGVBcmVhIHx8ICFzY3JvbGxlckltcCkKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0g
ICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOwotICAgIGlmIChbc2Nyb2xsZXJJ
bXAgaXNIb3Jpem9udGFsXSkKLSAgICAgICAgc2Nyb2xsYmFyID0gX3Njcm9sbGFibGVBcmVhLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgZWxzZSAKLSAgICAgICAgc2Nyb2xsYmFyID0gX3Nj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgLy8gSXQgaXMgcG9zc2li
bGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9y
IHRoaXMgZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1v
bWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKLSAgICAvLyBt
b21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9i
YWJseSBkZS1jb3VwbGUgc29tZQotICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9s
bGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQgdGhpcwotICAgIC8v
IGlzc3VlLgotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7
Ci0KLSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNj
cm9sbGJhcikpOwotCi0gICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5n
VmlldyhXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7Ci19Ci0K
LS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1w
UGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7
Ci0KLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KFtzY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50
QXJlYVdpbGxQYWludCgpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxl
ckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xs
ZXJTdHlsZQotewotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3UmVjb21tZW5kZWRTY3Jv
bGxlclN0eWxlXTsKLQotICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpKS51cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci19Ci0K
LUBlbmQKLQotZW51bSBGZWF0dXJlVG9BbmltYXRlIHsKLSAgICBUaHVtYkFscGhhLAotICAgIFRy
YWNrQWxwaGEsCi0gICAgVUlTdGF0ZVRyYW5zaXRpb24sCi0gICAgRXhwYW5zaW9uVHJhbnNpdGlv
bgotfTsKLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBGZWF0dXJlVG9BbmltYXRlIGZlYXR1cmUpCi17Ci0gICAgc3dpdGNo
IChmZWF0dXJlKSB7Ci0gICAgY2FzZSBUaHVtYkFscGhhOiB0cyA8PCAiVGh1bWJBbHBoYSIgOyBi
cmVhazsKLSAgICBjYXNlIFRyYWNrQWxwaGE6IHRzIDw8ICJUcmFja0FscGhhIiA7IGJyZWFrOwot
ICAgIGNhc2UgVUlTdGF0ZVRyYW5zaXRpb246IHRzIDw8ICJVSVN0YXRlVHJhbnNpdGlvbiIgOyBi
cmVhazsKLSAgICBjYXNlIEV4cGFuc2lvblRyYW5zaXRpb246IHRzIDw8ICJFeHBhbnNpb25UcmFu
c2l0aW9uIiA7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0jZW5kaWYKLQotQGlu
dGVyZmFjZSBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIDogTlNPYmplY3QKLXsKLSAgICBTY3Jv
bGxiYXIqIF9zY3JvbGxiYXI7Ci0gICAgUmV0YWluUHRyPE5TU2Nyb2xsZXJJbXA+IF9zY3JvbGxl
ckltcDsKLSAgICBGZWF0dXJlVG9BbmltYXRlIF9mZWF0dXJlVG9BbmltYXRlOwotICAgIENHRmxv
YXQgX3N0YXJ0VmFsdWU7Ci0gICAgQ0dGbG9hdCBfZW5kVmFsdWU7Ci0gICAgTlNUaW1lSW50ZXJ2
YWwgX2R1cmF0aW9uOwotICAgIFJldGFpblB0cjxOU1RpbWVyPiBfdGltZXI7Ci0gICAgUmV0YWlu
UHRyPE5TRGF0ZT4gX3N0YXJ0RGF0ZTsKLSAgICBSZWZQdHI8Q3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbj4gX3RpbWluZ0Z1bmN0aW9uOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFNjcm9s
bGJhciopc2Nyb2xsYmFyIGZlYXR1cmVUb0FuaW1hdGU6KEZlYXR1cmVUb0FuaW1hdGUpZmVhdHVy
ZVRvQW5pbWF0ZSBhbmltYXRlRnJvbTooQ0dGbG9hdClzdGFydFZhbHVlIGFuaW1hdGVUbzooQ0dG
bG9hdCllbmRWYWx1ZSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247Ci0tICh2b2lk
KXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyOwotLSAodm9pZClzZXREdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247Ci0tICh2b2lkKXN0b3BBbmltYXRpb247Ci1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uCi0KLS0gKGlkKWlu
aXRXaXRoU2Nyb2xsYmFyOihTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihG
ZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3Rh
cnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBjb25zdCBOU1RpbWVJbnRlcnZhbCB0aW1lSW50
ZXJ2YWwgPSAwLjAxOwotICAgIF90aW1lciA9IGFkb3B0TlMoW1tOU1RpbWVyIGFsbG9jXSBpbml0
V2l0aEZpcmVEYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXSBpbnRl
cnZhbDp0aW1lSW50ZXJ2YWwgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHNldEN1cnJl
bnRQcm9ncmVzczopIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10pOwotICAgIF9kdXJhdGlvbiA9
IGR1cmF0aW9uOwotICAgIF90aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b246OmNyZWF0ZShDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNlSW5PdXQpOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIkNyZWF0aW5nIFdl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gZm9yICIgPDwgZmVhdHVyZVRvQW5pbWF0ZSA8PCAiIGZy
b20gIiA8PCBzdGFydFZhbHVlIDw8ICIgdG8gIiA8PCBlbmRWYWx1ZSk7Ci0KLSAgICBfc2Nyb2xs
YmFyID0gc2Nyb2xsYmFyOwotICAgIF9mZWF0dXJlVG9BbmltYXRlID0gZmVhdHVyZVRvQW5pbWF0
ZTsKLSAgICBfc3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7Ci0gICAgX2VuZFZhbHVlID0gZW5kVmFs
dWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzdGFydEFuaW1hdGlvbgotewot
ICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKLQotICAgIF9zY3JvbGxlckltcCA9IHNjcm9sbGVySW1w
Rm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5
U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBz
ZWxmIDw8ICJzdGFydEFuaW1hdGlvbl0gZm9yICIgPDwgX2ZlYXR1cmVUb0FuaW1hdGUpOwotCi0g
ICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGFkZFRpbWVyOl90aW1lci5nZXQoKSBmb3JNb2Rl
Ok5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAgICBfc3RhcnREYXRlID0gYWRvcHROUyhbW05TRGF0
ZSBhbGxvY10gaW5pdFdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXSk7Ci19Ci0KLS0gKHZvaWQp
c2V0U3RhcnRWYWx1ZTooQ0dGbG9hdClzdGFydFZhbHVlCi17Ci0gICAgX3N0YXJ0VmFsdWUgPSBz
dGFydFZhbHVlOwotfQotCi0tICh2b2lkKXNldEVuZFZhbHVlOihDR0Zsb2F0KWVuZFZhbHVlCi17
Ci0gICAgX2VuZFZhbHVlID0gZW5kVmFsdWU7Ci19Ci0KLS0gKHZvaWQpc2V0Q3VycmVudFByb2dy
ZXNzOihOU1RpbWVyICopdGltZXIKLXsKLSAgICBDR0Zsb2F0IHByb2dyZXNzID0gMDsKLSAgICBO
U0RhdGUgKm5vdyA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXTsKLSAg
ICBOU1RpbWVJbnRlcnZhbCBlbGFwc2VkID0gW25vdyB0aW1lSW50ZXJ2YWxTaW5jZURhdGU6X3N0
YXJ0RGF0ZS5nZXQoKV07Ci0gICAgaWYgKGVsYXBzZWQgPiBfZHVyYXRpb24pIHsKLSAgICAgICAg
cHJvZ3Jlc3MgPSAxOwotICAgICAgICBbdGltZXIgaW52YWxpZGF0ZV07Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgTlNUaW1lSW50ZXJ2YWwgdCA9IDE7Ci0gICAgICAgIGlmIChfZHVyYXRpb24pCi0g
ICAgICAgICAgICB0ID0gZWxhcHNlZCAvIF9kdXJhdGlvbjsKLSAgICAgICAgcHJvZ3Jlc3MgPSBf
dGltaW5nRnVuY3Rpb24tPnRyYW5zZm9ybVRpbWUodCwgX2R1cmF0aW9uKTsKLSAgICB9Ci0gICAg
QVNTRVJUKF9zY3JvbGxiYXIpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxi
YXJzLCBzdHJlYW0gPDwgIi1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiAiIDw8IHNlbGYgPDwg
InNldEN1cnJlbnRQcm9ncmVzczoiIDw8IHByb2dyZXNzIDw8Il0gZm9yICIgPDwgX2ZlYXR1cmVU
b0FuaW1hdGUpOwotCi0gICAgQ0dGbG9hdCBjdXJyZW50VmFsdWU7Ci0gICAgaWYgKF9zdGFydFZh
bHVlID4gX2VuZFZhbHVlKQotICAgICAgICBjdXJyZW50VmFsdWUgPSAxIC0gcHJvZ3Jlc3M7Ci0g
ICAgZWxzZQotICAgICAgICBjdXJyZW50VmFsdWUgPSBwcm9ncmVzczsKLQotICAgIHN3aXRjaCAo
X2ZlYXR1cmVUb0FuaW1hdGUpIHsKLSAgICBjYXNlIFRodW1iQWxwaGE6Ci0gICAgICAgIFtfc2Ny
b2xsZXJJbXAgc2V0S25vYkFscGhhOmN1cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVHJhY2tBbHBoYToKLSAgICAgICAgW19zY3JvbGxlckltcCBzZXRUcmFja0FscGhhOmN1
cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVUlTdGF0ZVRyYW5zaXRpb246
Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzczpjdXJy
ZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cGFuc2lvblRyYW5zaXRpb246
Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzOmN1
cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghX3Njcm9sbGJh
ci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQotICAgICAgICBfc2Nyb2xsYmFy
LT5pbnZhbGlkYXRlKCk7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOwotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBfc2Nyb2xsYmFyID0gMDsKLX0KLQotLSAodm9pZClz
ZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBfZHVyYXRpb24gPSBk
dXJhdGlvbjsKLX0KLQotLSAodm9pZClzdG9wQW5pbWF0aW9uCi17Ci0gICAgW190aW1lciBpbnZh
bGlkYXRlXTsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlNjcm9sbGVySW1wRGVsZWdhdGUg
OiBOU09iamVjdDxOU0FuaW1hdGlvbkRlbGVnYXRlLCBOU1Njcm9sbGVySW1wRGVsZWdhdGU+Ci17
Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOwotCi0gICAgUmV0YWluUHRyPFdl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9rbm9iQWxwaGFBbmltYXRpb247Ci0gICAgUmV0YWlu
UHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF90cmFja0FscGhhQW5pbWF0aW9uOwotICAg
IFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdWlTdGF0ZVRyYW5zaXRpb25B
bmltYXRpb247Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9leHBh
bnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdl
YkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyOwotLSAodm9pZCljYW5jZWxBbmltYXRpb25zOwot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZQotCi0tIChpZClp
bml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKLSAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX3Ry
YWNrQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW191aVN0YXRlVHJhbnNpdGlv
bkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25Bbmlt
YXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQot
Ci0tIChOYWtlZFB0cjxTY3JvbGxBbmltYXRvck1hYz4pc2Nyb2xsQW5pbWF0b3IKLXsKLSAgICBy
ZXR1cm4gJnN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Njcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigpKTsKLX0KLQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0
VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJlY3Q7Ci19Ci0KLS0gKE5T
UmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4g
YVJlY3Q7Ci19Ci0KLS0gKENBTGF5ZXIgKilsYXllcgotewotICAgIGlmICghX3Njcm9sbGJhcikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlmICghU2Nyb2xsYmFyVGhlbWVNYWM6OmlzQ3Vy
cmVudGx5RHJhd2luZ0ludG9MYXllcigpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXI7Ci0gICAgaWYgKF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgZWxzZQotICAgICAgICBs
YXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCk7Ci0KLSAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBh
bGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IGR1bW15TGF5ZXI7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JT
Y3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17Ci0gICAgaWYgKCFfc2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICBBU1NFUlRfVU5VU0VE
KHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Nj
cm9sbGJhcikpOwotCi0gICAgYXV0byBwb3NpdGlvbkluVmlldyA9IF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotICAgIHJldHVybiBf
c2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBvc2l0aW9uSW5WaWV3KTsKLX0K
LQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QKLXsKLSAgICByZXR1
cm4gcmVjdDsKLX0KLQotLSAoQk9PTClzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGVySW1wKTsKLQotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQo
KTsKLX0KLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0tIChOU0FwcGVhcmFuY2Ug
KillZmZlY3RpdmVBcHBlYXJhbmNlRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7Ci0KLSAgICBpZiAoIV9z
Y3JvbGxiYXIpCi0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0g
ICAgICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1cnJlbnRBcHBlYXJhbmNlXTsKLSAgICAgICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBLZWVwIHRoaXMgaW4g
c3luYyB3aXRoIEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIuCi0gICAgLy8gVGhlIGJhc2Ug
c3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZGFyayBBcXVhLCBzbyB3ZSBtaWdodCBnZXQgYSBudWxs
IHJlc3VsdC4KLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlID0gX3Njcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS51c2VEYXJrQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMoKTsKLSAgICBpZiAoYXV0
byAqYXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOnVzZURhcmtBcHBl
YXJhbmNlID8gTlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhIDogTlNBcHBlYXJhbmNlTmFtZUFxdWFd
KQotICAgICAgICByZXR1cm4gYXBwZWFyYW5jZTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgotICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1cnJlbnRBcHBlYXJhbmNl
XTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLSNlbmRpZgotCi0t
ICh2b2lkKXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6KE5TU2Nyb2xs
ZXJJbXAgKilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0
IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZh
bClkdXJhdGlvbgotewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwg
dGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUuCi0gICAgLy8gVGhpcyBv
dmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCi0gICAgYm9vbCBtdXN0QW5pbWF0ZSA9IFtzZWxm
IHNjcm9sbEFuaW1hdG9yXS0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOwotCi0gICAgaWYg
KFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYg
IW11c3RBbmltYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoX3Njcm9sbGJhci0+c2Ny
b2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5p
bWF0ZSkgewotICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnN0YXJ0U2Nyb2xsYmFyUGFp
bnRUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQXQgdGhpcyBwb2lu
dCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRp
bWVyLgotICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c3RvcFNjcm9sbGJhclBhaW50VGltZXIo
KTsKLQotICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBzdG9wCi0gICAgaWYg
KHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKLSAgICAgICAgW3Njcm9sbGJhclBhcnRBbmltYXRp
b24gc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBuaWw7
Ci0gICAgfQotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiBtYWNUaGVtZSA9IG1hY1Njcm9s
bGJhclRoZW1lKCkpCi0gICAgICAgIG1hY1RoZW1lLT5zZXRQYWludENoYXJhY3RlcmlzdGljc0Zv
clNjcm9sbGJhcigqX3Njcm9sbGJhcik7Ci0KLSAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpUaHVt
YlBhcnQgJiYgX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
ewotICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewotICAgICAgICAgICAgSW50UmVjdCB0aHVt
YlJlY3QgPSBJbnRSZWN0KFtzY3JvbGxlclBhaW50ZXIgcmVjdEZvclBhcnQ6TlNTY3JvbGxlcktu
b2JdKTsKLSAgICAgICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2V0VmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0KHRodW1iUmVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW3Nl
bGYgc2Nyb2xsQW5pbWF0b3JdLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoSW50UmVjdCgp
KTsKLSAgICB9Ci0KLSAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpwYXJ0ID09IFRodW1iUGFydCA/IFRodW1i
QWxwaGEgOiBUcmFja0FscGhhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZUZyb206cGFydCA9
PSBUaHVtYlBhcnQgPyBbc2Nyb2xsZXJQYWludGVyIGtub2JBbHBoYV0gOiBbc2Nyb2xsZXJQYWlu
dGVyIHRyYWNrQWxwaGFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlVG86bmV3QWxwaGEg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAgICBbc2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJ
bXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhhVG86KENHRmxv
YXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAg
IGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcm9sbGVy
SW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7Ci0KLSAgICBOU1Nj
cm9sbGVySW1wICpzY3JvbGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1w
OwotICAgIGlmICghW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUo
KSkgewotICAgICAgICBbc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOjBdOwotICAgICAgICBfc2Ny
b2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiB3ZSBhcmUgZmFkaW5nIHRoZSBzY3JvbGxiYXIgYXdheSwgdGhhdCBpcyBhIGdvb2QgaW5kaWNh
dGlvbiB0aGF0IHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8KLSAgICAvLyBiZSBtb3ZpbmcgaXQg
YXJvdW5kIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBDYWxsaW5nIFtzY3JvbGxlclBhaW50ZXIg
c2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dCi0gICAgLy8gd2lsbCBwYXNzIHRoYXQgaW5mb3Jt
YXRpb24gb24gdG8gdGhlIE5TU2Nyb2xsZXJJbXAgQVBJLgotICAgIGlmIChuZXdLbm9iQWxwaGEg
PT0gMCAmJiBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCi0g
ICAgICAgIFtzY3JvbGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOwotCi0g
ICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfa25vYkFscGhhQW5pbWF0aW9uIHNjcm9sbGVy
UGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFs
cGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3Jv
bGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVUcmFja0FscGhhVG86
KENHRmxvYXQpbmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24K
LXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChz
Y3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0g
ICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcDsKLSAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl90cmFja0FscGhhQW5pbWF0
aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJh
Y2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwot
fQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5p
bWF0ZVVJU3RhdGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7Ci0K
LSAgICAvLyBVSVN0YXRlVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8gMS4gSW4gY2FzZSBh
biBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJkIHRyYW5zaXRpb24u
Ci0gICAgW3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6MSAtIFtzY3Jv
bGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07Ci0KLSAgICAvLyBJZiB0aGUgVUkg
c3RhdGUgdHJhbnNpdGlvbiBpcyBoYXBwZW5pbmcsIHRoZW4gd2UgYXJlIG5vIGxvbmdlciBtb3Zp
bmcgdGhlIHNjcm9sbGJhciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBpZiAoX3Njcm9s
bGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQotICAgICAgICBbc2Nyb2xs
ZXJJbXAgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOwotCi0gICAgaWYgKCFfdWlTdGF0ZVRy
YW5zaXRpb25BbmltYXRpb24pCi0gICAgICAgIF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiA9
IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpfc2Nyb2xsYmFyCi0gICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOlVJU3RhdGVUcmFu
c2l0aW9uCi0gICAgICAgICAgICBhbmltYXRlRnJvbTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5z
aXRpb25Qcm9ncmVzc10KLSAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKLSAgICAgICAgICAgIGR1
cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGRvbid0IG5l
ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4g
Y2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4KLSAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1h
dGlvbiBzZXRTdGFydFZhbHVlOltzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNz
XV07Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4w
XTsKLSAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJh
dGlvbl07Ci0gICAgfQotICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RhcnRBbmlt
YXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xs
ZXJJbXAgYW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3Jv
bGxiYXIpKTsKLQotICAgIC8vIEV4cGFuc2lvblRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVzIHRv
IDEuIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEgaGFy
ZCB0cmFuc2l0aW9uLgotICAgIFtzY3JvbGxlckltcCBzZXRFeHBhbnNpb25UcmFuc2l0aW9uUHJv
Z3Jlc3M6MSAtIFtzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKLQot
ICAgIGlmICghX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24pIHsKLSAgICAgICAgX2V4cGFu
c2lvblRyYW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1h
dGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgotICAgICAgICAgICAgZmVh
dHVyZVRvQW5pbWF0ZTpFeHBhbnNpb25UcmFuc2l0aW9uCi0gICAgICAgICAgICBhbmltYXRlRnJv
bTpbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzXQotICAgICAgICAgICAg
YW5pbWF0ZVRvOjEuMAotICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1h
dGlvbiwganVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCi0g
ICAgICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOltzY3Jv
bGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07Ci0gICAgICAgIFtfZXhwYW5zaW9u
VHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOwotICAgICAgICBbX2V4cGFuc2lv
blRyYW5zaXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIH0KLSAgICBb
X2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi0tICh2
b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgb3ZlcmxheVNjcm9s
bGVyU3RhdGVDaGFuZ2VkVG86KE5TT3ZlcmxheVNjcm9sbGVyU3RhdGUpbmV3T3ZlcmxheVNjcm9s
bGVyU3RhdGUKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOwotICAgIFVOVVNFRF9Q
QVJBTShuZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQot
ewotICAgIF9zY3JvbGxiYXIgPSAwOwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgIFtfa25vYkFscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOwotICAgIFtfdHJhY2tBbHBoYUFu
aW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIGlu
dmFsaWRhdGVdOwotICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRl
XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLUBlbmQKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1h
dG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQpAQCAtNzAxLDMwICsx
NTksMTMgQEAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmwKIAogU2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNj
cm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lckZpcmVkKQotICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0aGlzLCAm
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCkKLSAg
ICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkKLSAgICAsIG1fbmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlKGZhbHNlKQogewogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2Nd
IGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVs
cGVyID0gYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxw
ZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlLmdldCgpXSk7CiAKLSAgICBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlID0gYWRvcHROUyhb
W1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVh
OiZzY3JvbGxhYmxlQXJlYV0pOwotICAgIG1fc2Nyb2xsZXJJbXBQYWlyID0gYWRvcHROUyhbW05T
U2Nyb2xsZXJJbXBQYWlyIGFsbG9jXSBpbml0XSk7Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNl
dERlbGVnYXRlOm1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUuZ2V0KCldOwotICAgIFttX3Njcm9s
bGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOlNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSgpXTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JNYWM6On5TY3JvbGxBbmltYXRvck1h
YygpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fc2Nyb2xsZXJJ
bXBQYWlyRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERl
bGVnYXRlOm5pbF07Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxp
ZGF0ZV07Ci0gICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwot
ICAgIFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KK1Njcm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5p
bWF0b3JNYWMoKSA9IGRlZmF1bHQ7CiAKIHN0YXRpYyBib29sIHNjcm9sbEFuaW1hdGlvbkVuYWJs
ZWRGb3JTeXN0ZW0oKQogewpAQCAtNzUzLDcgKzE5NCw3IEBAIHN0YXRpYyBib29sIHJ1YmJlckJh
bmRpbmdFbmFibGVkRm9yU3lzdGVtKCkKIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgT3B0aW9uU2V0PFNjcm9sbEJl
aGF2aW9yPiBiZWhhdmlvcikKIHsKLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0
cnVlOworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQodHJ1ZSk7CiAKICAgICAvLyBU
aGlzIG1ldGhvZCBkb2Vzbid0IGRvIGRpcmVjdGlvbmFsIHNuYXBwaW5nLCBidXQgb3VyIGJhc2Ug
Y2xhc3MgZG9lcy4gSXQgd2lsbCBjYWxsIGludG8KICAgICAvLyBTY3JvbGxBbmltYXRvck1hYzo6
c2Nyb2xsIGFnYWluIHdpdGggdGhlIHNuYXBwZWQgcG9zaXRpb25zIGFuZCBTY3JvbGxCZWhhdmlv
cjo6RGVmYXVsdC4KQEAgLTg0MCw0MyArMjgxLDYgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJv
bGxlci5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgc2Nyb2xs
YmFyU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0g
ICAgICAgIHJldHVybiAibm9uZSJfczsKLQotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAg
IHJlc3VsdC5hcHBlbmQoc2Nyb2xsYmFyLT5lbmFibGVkKCkgPyAiZW5hYmxlZCJfcyA6ICJkaXNh
YmxlZCJfcyk7Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnNj
cm9sbGVySW1wID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYg
KCFzY3JvbGxlckltcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCi0gICAg
aWYgKHNjcm9sbGVySW1wLmV4cGFuZGVkKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIsZXhwYW5k
ZWQiX3MpOwotCi0gICAgaWYgKHNjcm9sbGVySW1wLnRyYWNrQWxwaGEgPiAwKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90cmFjayJfcyk7Ci0KLSAgICBpZiAoc2Nyb2xsZXJJbXAu
a25vYkFscGhhID4gMCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZpc2libGVfdGh1bWIiX3Mp
OwotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgU2Nyb2xsQW5p
bWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3Jv
bGxiYXIoKSk7Ci19Ci0KLVN0cmluZyBTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxi
YXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZSht
X3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUb1Bvc2l0aW9uRm9yU2Nyb2xsQW5pbWF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIEFTU0VSVChtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlcik7CkBAIC04ODUsMzE5ICsyODksMTUgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9h
dFAKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpCiB7Ci0gICAgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChkZWx0
YSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLm5vdGlmeUNv
bnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOwogICAgIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQoZGVsdGEpOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50
QXJlYVdpbGxQYWludCgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3Jv
bGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxl
QXJlYSgpIDw8ICJdIGNvbnRlbnRBcmVhV2lsbFBhaW50IChzY3JvbGxlcnMgbG9ja2VkICIgPDwg
W21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdIDw8ICIpIik7
Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2Nr
ZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgotICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVdpbGxEcmF3XTsKLSAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQotewotICAgIExPR19XSVRIX1NUUkVB
TShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIg
PDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwotICAg
IGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZUVudGVyZWRDb250
ZW50QXJlYV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVu
dEFyZWEoKQotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFt
IDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhIik7Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Ny
b2xsZXJJbXBQYWlyIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOwotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RS
RUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBb
IiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIik7Ci0g
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIC8vIEF0IHRoaXMgdGlt
ZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFycyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVy
ZS4KLSAgICBpZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0g
TlNTY3JvbGxlclN0eWxlTGVnYWN5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW21fc2Ny
b2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Ny
b2xsYmFyKCpzY3JvbGxiYXIpKQotICAgICAgICBbcGFpbnRlciBtb3VzZUVudGVyZWRTY3JvbGxl
cl07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBs
ZWdhY3kgc2Nyb2xsYmFycyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KLSAgICBp
ZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxl
clN0eWxlTGVnYWN5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpz
Y3JvbGxiYXIpKQotICAgICAgICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhciwgYm9vbCBtb3VzZUlzRG93bikgY29uc3QKLXsKLSAgICBpZiAoW21fc2Nyb2xs
ZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xs
YmFyKCpzY3JvbGxiYXIpKSB7Ci0gICAgICAgIFtwYWludGVyIHNldFRyYWNraW5nOm1vdXNlSXNE
b3duXTsKLSAgICAgICAgaWYgKG1vdXNlSXNEb3duKQotICAgICAgICAgICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtt
X3Njcm9sbGVySW1wUGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQotewotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBzdGFydExpdmVSZXNpemVdOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jlc2l6ZWQoKSBjb25zdAotewotICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYURpZFJlc2l6ZV07
Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKLXsKLSAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5kTGl2ZVJlc2l6ZV07
Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpCi17Ci0g
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHdpbmRvd09yZGVyZWRJ
bl07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCi17
Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2Vk
XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHdpbmRvd09yZGVy
ZWRPdXRdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1
cmUoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3Ry
ZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAi
XSBkaWRCZWdpblNjcm9sbEdlc3R1cmUiKTsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIg
b3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtt
X3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVdOwotCi0gICAgaWYgKG1fd2hlZWxF
dmVudFRlc3RNb25pdG9yKQotICAgICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+ZGVmZXJG
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNj
cm9sbEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRFbmRTY3Jv
bGxHZXN0dXJlKCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJh
cnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVh
KCkgPDwgIl0gZGlkRW5kU2Nyb2xsR2VzdHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZFNjcm9sbEdlc3R1cmVdOwotCi0gICAgaWYgKG1fd2hl
ZWxFdmVudFRlc3RNb25pdG9yKQotICAgICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+cmVt
b3ZlRGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0
b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjptYXlCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShP
dmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwg
c2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtYXlCZWdpblNjcm9sbEdlc3R1cmUiKTsKLQotICAgIGlm
IChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVd
OwotICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkXTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJv
b2wgc2hvdWxkTG9ja1N0YXRlKQotewotICAgIGlmIChzaG91bGRMb2NrU3RhdGUpCi0gICAgICAg
IFttX3Njcm9sbGVySW1wUGFpciBsb2NrT3ZlcmxheVNjcm9sbGVyU3RhdGU6TlNPdmVybGF5U2Ny
b2xsZXJTdGF0ZUhpZGRlbl07Ci0gICAgZWxzZSB7Ci0gICAgICAgIFttX3Njcm9sbGVySW1wUGFp
ciB1bmxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZV07Ci0KLSAgICAgICAgLy8gV2UgbmV2ZXIgdXBk
YXRlIHNjcm9sbGVyIHN0eWxlIGZvciBQYWludGVyQ29udHJvbGxlcnMgdGhhdCBhcmUgbG9ja2Vk
LiBJZiB3ZSBoYXZlIGEgcGVuZGluZwotICAgICAgICAvLyBuZWVkIHRvIHVwZGF0ZSB0aGUgc3R5
bGUsIGRvIGl0IG9uY2Ugd2UndmUgdW5sb2NrZWQgdGhlIHNjcm9sbGVyIHN0YXRlLgotICAgICAg
ICBpZiAobV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVTY3Jv
bGxlclN0eWxlKCk7Ci0gICAgfQotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxi
YXJzQ2FuQmVBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiAhW21fc2Nyb2xsZXJJbXBQYWly
IG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAg
ICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9s
bGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
IW1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlKTsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcERlbGVnYXRlIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1f
dmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKQotICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXll
cigpXTsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOnBh
aW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQotICAgICAg
ICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAg
ICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9s
bGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3Nj
cm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5pbF07Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCi17Ci0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Ny
b2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlKTsKLSAgICBtX2hv
cml6b250YWxTY3JvbGxlckltcERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwotCi0gICAgW3BhaW50
ZXIgc2V0RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZS5nZXQoKV07Ci0g
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgp
LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBbcGFpbnRlciBzZXRMYXll
cjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRI
b3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCku
aW5MaXZlUmVzaXplKCkpCi0gICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9s
bGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUp
OwotICAgIFttX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwotICAg
IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBudWxscHRyOwotCi0gICAgW3BhaW50
ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRh
bFNjcm9sbGVySW1wOm5pbF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmludmFsaWRh
dGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIE5TU2Ny
b2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsK
LSAgICBbcGFpbnRlciBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCi17Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGlj
YWxTY3JvbGxiYXIoKTsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3BhaW50
ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsXTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Nj
cm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBpZiAoIXNjcm9sbGJhcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVy
SW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1M
YXllcigpIDogbmlsXTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkU2Nyb2xs
YmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
Ly8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhp
dCB0ZXN0aW5nLgotICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5
bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgcGFydGljaXBhdGUgaW4gaGl0IHRlc3Rp
bmcgd2hlbmV2ZXIgdGhleSBhcmUgYXQgYWxsIHZpc2libGUuCi0gICAgTlNTY3JvbGxlckltcCAq
cGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlmICgh
cGFpbnRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBbcGFpbnRlciBrbm9i
QWxwaGFdID4gMDsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVudEFy
ZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQotewotICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIHdoZW4gYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIGJhY2svZm9yd2FyZCBj
YWNoZSwgYnV0IHRoZSBwYWdlCi0gICAgLy8gaXNuJ3QgcmVhbGx5IHNjcm9sbGluZyBpbiB0aGF0
IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlCi0gICAgLy8g
U2Nyb2xsZXJJbXBQYWlyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBhY3RpdmUg
cGFnZS4KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5pc0hh
bmRsaW5nV2hlZWxFdmVudCgpKQotICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChkZWx0
YSk7Ci0gICAgZWxzZQotICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oZGVsdGEp
OwotfQotCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKIHsKICAg
ICBTY3JvbGxBbmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpOwotICAgIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCA9IGZhbHNlOwotCi0gICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0Fj
dGl2ZSgpKQotICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgIFttX2hvcml6
b250YWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOwotICAgIFttX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKKyAgICBzZXRIYXZlU2Ny
b2xsZWRTaW5jZVBhZ2VMb2FkKGZhbHNlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJh
cnNDb250cm9sbGVyKCkuY2FuY2VsQW5pbWF0aW9ucygpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhh
c2UpCkBAIC0xMjA2LDE1ICszMDYsMTUgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxl
V2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQogCiAgICAgLy8g
VGhpcyBtYXkgbm90IGhhdmUgYmVlbiBzZXQgdG8gdHJ1ZSB5ZXQgaWYgdGhlIHdoZWVsIGV2ZW50
IHdhcyBoYW5kbGVkIGJ5IHRoZSBTY3JvbGxpbmdUcmVlLAogICAgIC8vIFNvIHNldCBpdCB0byB0
cnVlIGhlcmUuCi0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAgICBz
ZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKHRydWUpOwogCiAgICAgLy8gRklYTUU6IE5lZWQg
dG8gZW5zdXJlIHdlIGdldCBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQuCiAgICAgaWYg
KHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbikKLSAgICAgICAgZGlkQmVn
aW5TY3JvbGxHZXN0dXJlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5kaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKICAgICBlbHNlIGlmIChwaGFzZSA9
PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQgfHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkKLSAgICAgICAgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOwor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkuZGlkRW5kU2Ny
b2xsR2VzdHVyZSgpOwogICAgIGVsc2UgaWYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpNYXlCZWdpbikKLSAgICAgICAgbWF5QmVnaW5TY3JvbGxHZXN0dXJlKCk7CisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tYXlCZWdpblNjcm9sbEdl
c3R1cmUoKTsKIH0KIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKQEAgLTEyMjksNyArMzI5
LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkRm9yd2FyZFdoZWVsRXZlbnRzVG9Q
YXJlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW4KICAgICAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JN
YWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQogewotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisgICAgc2V0SGF2
ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCh0cnVlKTsKIAogICAgIGlmICghd2hlZWxFdmVudC5oYXNQ
cmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgfHwgIXJ1YmJlckJhbmRpbmdFbmFibGVkRm9yU3lzdGVt
KCkpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKQEAgLTEzNzAsMTI1ICs0NzAsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpp
bW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogfQogI2VuZGlmCiAKLXZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pIHsKLSAgICAg
ICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU2Nyb2xsYmFyVGhlbWVNYWMqIG1hY1RoZW1lID0gbWFjU2Nyb2xsYmFyVGhl
bWUoKTsKLSAgICBpZiAoIW1hY1RoZW1lKSB7Ci0gICAgICAgIG1fbmVlZHNTY3JvbGxlclN0eWxl
VXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbWFjVGhl
bWUtPnVzZXNPdmVybGF5U2Nyb2xsYmFyc0NoYW5nZWQoKTsKLQotICAgIE5TU2Nyb2xsZXJTdHls
ZSBuZXdTdHlsZSA9IFttX3Njcm9sbGVySW1wUGFpciBzY3JvbGxlclN0eWxlXTsKLQotICAgIGlm
IChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNh
bFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7
Ci0KLSAgICAgICAgTlNTY3JvbGxlckltcCAqb2xkVmVydGljYWxQYWludGVyID0gW21fc2Nyb2xs
ZXJJbXBQYWlyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOwotICAgICAgICBhdXRvIG5ld1ZlcnRpY2Fs
UGFpbnRlciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpu
ZXdTdHlsZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSl2ZXJ0aWNhbFNjcm9sbGJhci0+Y29u
dHJvbFNpemUoKSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZFZlcnRpY2Fs
UGFpbnRlcl0pOwotCi0gICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9s
bGVySW1wOm5ld1ZlcnRpY2FsUGFpbnRlci5nZXQoKV07Ci0gICAgICAgIG1hY1RoZW1lLT5zZXRO
ZXdQYWludGVyRm9yU2Nyb2xsYmFyKCp2ZXJ0aWNhbFNjcm9sbGJhciwgV1RGTW92ZShuZXdWZXJ0
aWNhbFBhaW50ZXIpKTsKLSAgICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9sbGVySW1wKCp2
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3JvbGxiYXIg
c3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNldCB0aGUg
Ci0gICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRoZSByZS1s
YXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCi0gICAgICAgIC8vIGFuZCBsZW5n
dGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCi0gICAgICAgIGludCB0aGlja25lc3MgPSBtYWNUaGVt
ZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsK
LSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRo
aWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgaWYgKFNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
Ci0gICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBO
U1Njcm9sbGVySW1wICpvbGRIb3Jpem9udGFsUGFpbnRlciA9IFttX3Njcm9sbGVySW1wUGFpciBo
b3Jpem9udGFsU2Nyb2xsZXJJbXBdOwotICAgICAgICBhdXRvIG5ld0hvcml6b250YWxQYWludGVy
ID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5ld1N0eWxl
IGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKWhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkgaG9yaXpvbnRhbDpZRVMgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkSG9yaXpvbnRhbFBh
aW50ZXJdKTsKLQotICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9s
bGVySW1wOm5ld0hvcml6b250YWxQYWludGVyLmdldCgpXTsKLSAgICAgICAgbWFjVGhlbWUtPnNl
dE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoKmhvcml6b250YWxTY3JvbGxiYXIsIFdURk1vdmUobmV3
SG9yaXpvbnRhbFBhaW50ZXIpKTsKLSAgICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9sbGVy
SW1wKCpob3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUt
c2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJv
bFNpemUoKSk7Ci0gICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRS
ZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgbV9u
ZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3Jp
bmcgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQKLSAgICAvLyBhIHJlbGF5b3V0IHdp
bGwgaGFwcGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxh
eW91dCBvdXJzZWx2ZXMuCi0gICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5n
ZWQobmV3U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxlOjpP
dmVybGF5IDogU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xsZXJT
dHlsZVVwZGF0ZSk7Ci0KLSAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOwot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKQot
ewotICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RhcnRPbmVTaG90KDEwMF9tcyk7
Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNB
Y3RpdmUoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbGJhclBhaW50
VGltZXIoKQotewotICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVk
KCkKLXsKLSAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0
byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGVySW1wUGFpcgotICAgIC8v
IG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQg
YmFpbCBlYXJseS4KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgaGlkZU92ZXJsYXlTY3JvbGxlcnNd
OwotICAgIFttX3Njcm9sbGVySW1wUGFpciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNp
emUmIGRlbHRhKQotewotICAgIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEg
PSBkZWx0YTsKLQotICAgIGlmICghbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKLQotICAgIGlmIChtX3doZWVsRXZlbnRUZXN0TW9uaXRvcikKLSAgICAgICAgbV93
aGVlbEV2ZW50VGVzdE1vbml0b3ItPmRlZmVyRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hl
ZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSkKLXsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZElu
RGlyZWN0aW9uOk5TTWFrZVBvaW50KGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpKV07Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJG
aXJlZCgpCi17Ci0gICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQobV9jb250ZW50QXJlYVNjcm9s
bGVkVGltZXJTY3JvbGxEZWx0YSk7Ci0gICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3Jv
bGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9y
KQotICAgICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+cmVtb3ZlRGVmZXJyYWxGb3JSZWFz
b24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVh
SWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbElu
UHJvZ3Jlc3MpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xs
ZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKLXsKLSAgICBJbnRSZWN0
IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFy
KCkpCi0gICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5j
b252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1iKTsKLQotICAgIGlmIChyZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KHJlY3RJblZpZXdDb29yZGluYXRlcyk7Ci0gICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qg
PSByZWN0SW5WaWV3Q29vcmRpbmF0ZXM7Ci19Ci0KIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiB7CiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5wcm9jZXNzV2hlZWxF
dmVudEZvclNjcm9sbFNuYXAod2hlZWxFdmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNDM0
MDBlODM1NTc5MjQ0Mjc2ZGI2NmI4MjJjMDJkMTdlNWIwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaApAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworT0JKQ19DTEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKK09CSkNfQ0xB
U1MgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7CitPQkpDX0NMQVNTIFdlYlNjcm9sbGVySW1w
RGVsZWdhdGU7CisKK3R5cGVkZWYgaWQgU2Nyb2xsZXJJbXBQYWlyOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKKworY2xhc3MgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMgOiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGJhcnND
b250cm9sbGVyTWFjKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYyhTY3JvbGxhYmxlQXJlYSYpOworICAgIH5TY3JvbGxiYXJzQ29udHJvbGxlck1hYygpOwor
CisgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpIGZpbmFsOworCisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgZmluYWw7CisKKyAgICB2
b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZGlkRW5k
U2Nyb2xsR2VzdHVyZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbWF5QmVnaW5TY3JvbGxHZXN0
dXJlKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGZpbmFsOworICAg
IHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VNb3Zl
ZEluQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNj
cm9sbGJhciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihT
Y3JvbGxiYXIqLCBib29sKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHdpbGxTdGFydExpdmVSZXNp
emUoKSBmaW5hbDsKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgZmluYWw7CisgICAgdm9pZCBjb250ZW50QXJl
YURpZFNob3coKSBmaW5hbDsKKyAgICB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIGZpbmFsOwor
CisgICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRM
b2NrU3RhdGUpIGZpbmFsOworICAgIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qg
ZmluYWw7CisKKyAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZp
bmFsOworICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZp
bmFsOworICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5h
bDsKKyAgICB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZp
bmFsOworCisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIq
KSBmaW5hbDsKKworICAgIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIGZp
bmFsOworICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgZmluYWw7
CisKKyAgICBib29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9s
bGJhciopIGZpbmFsOworCisgICAgU3RyaW5nIGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRl
c3RpbmcoKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKworCisgICAgLy8gUHVibGljIHRvIGJlIGNhbGxhYmxl
IGZyb20gT2JqLUMuCisgICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxlKCk7CisgICAgYm9vbCBz
Y3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xs
YmFyUGFpbnRUaW1lcigpOworICAgIHZvaWQgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAg
ICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAg
Ym9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAg
ICAvLyBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oKSB3aWxsIGRvIHRoZSBzYW1lIHdvcmsg
dGhhdCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZCgpIGRvZXMgZXhjZXB0CisgICAgLy8gaXQgZG9l
cyBpdCBhZnRlciBhIHplcm8tZGVsYXkgdGltZXIgZmlyZXMuIFRoaXMgd2lsbCBwcmV2ZW50IHVz
IGZyb20gdXBkYXRpbmcgb3ZlcmxheSBzY3JvbGxiYXIKKyAgICAvLyBpbmZvcm1hdGlvbiBkdXJp
bmcgbGF5b3V0LgorICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRT
aXplJiBzY3JvbGxEZWx0YSk7CisgICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24o
Y29uc3QgRmxvYXRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICB2b2lkIGluaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGlt
ZXJGaXJlZCgpOworCisgICAgV2hlZWxFdmVudFRlc3RNb25pdG9yKiB3aGVlbEV2ZW50VGVzdE1v
bml0b3IoKSBjb25zdDsKKworICAgIFRpbWVyIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7
CisgICAgVGltZXIgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyOworCisgICAgUmV0YWlu
UHRyPFNjcm9sbGVySW1wUGFpcj4gbV9zY3JvbGxlckltcFBhaXI7CisgICAgUmV0YWluUHRyPFdl
YlNjcm9sbGVySW1wUGFpckRlbGVnYXRlPiBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlOworICAg
IFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX2hvcml6b250YWxTY3JvbGxlcklt
cERlbGVnYXRlOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKKworICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRBcmVhU2Ny
b2xsZWRUaW1lclNjcm9sbERlbHRhOworICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3Q7CisKKyAgICBib29sIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlIHsgZmFsc2UgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJv
bGxlck1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjllZGI0ZjMxMmEwODc4ODg2NTZiZjY2ODA3YmVhYzcz
OTA5NzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhcnNDb250cm9sbGVyTWFjLm1tCkBAIC0wLDAgKzEsMTA4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0xheWVyLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgorI2ltcG9y
dCAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbXBvcnQgIlNjcm9sbGFibGVBcmVhLmgiCisjaW1wb3J0
ICJTY3JvbGxiYXIuaCIKKyNpbXBvcnQgIlNjcm9sbGJhclRoZW1lTWFjLmgiCisjaW1wb3J0ICJU
aW1pbmdGdW5jdGlvbi5oIgorI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiIC8vIEZJ
WE1FOiBUaGlzIGlzICBsYXllcmluZyB2aW9sYXRpb24uCisKKyNpbXBvcnQgPHBhbC9zcGkvbWFj
L05TU2Nyb2xsZXJJbXBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+
CisjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2Nyb2xsYmFyVGhlbWVNYWMqIG1h
Y1Njcm9sbGJhclRoZW1lKCkKK3sKKyAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUg
PSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICByZXR1cm4gIXNjcm9sbGJhclRoZW1lLmlz
TW9ja1RoZW1lKCkgPyBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJU
aGVtZSkgOiBudWxscHRyOworfQorCitzdGF0aWMgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIFNjcm9sbGJh
clRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworQGludGVyZmFjZSBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxOU1Njcm9sbGVySW1wUGFpckRlbGVnYXRlPiB7CisgICAgV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWEqIF9zY3JvbGxhYmxlQXJlYTsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsYWJs
ZUFyZWE6KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKilzY3JvbGxhYmxlQXJlYTsKKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUKKworLSAoaWQpaW5p
dFdpdGhTY3JvbGxhYmxlQXJlYTooV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVB
cmVhCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgX3Njcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWE7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIF9zY3Jv
bGxhYmxlQXJlYSA9IG51bGxwdHI7Cit9CisKKy0gKE5TUmVjdCljb250ZW50QXJlYVJlY3RGb3JT
Y3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUgPSBfc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpOworICAgIHJldHVy
biBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOworfQorCistIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjooTlNT
Y3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Ny
b2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IE5POworCisgICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+aW5MaXZlUmVzaXplKCk7Cit9CisK
Ky0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6
KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCit7CisgICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBOU1plcm9Qb2ludDsKKworICAgIC8vIEl0J3MgT0sgdGhhdCB0aGlzIHBvc2l0aW9uIGlz
bid0IHJlbGF0aXZlIHRvIHRoaXMgc2Nyb2xsZXIgKHdoaWNoIG1pZ2h0IGJlIGFuIG92ZXJmbG93
IHNjcm9sbGVyKS4KKyAgICAvLyBBcHBLaXQganVzdCB0YWtlcyB0aGUgcmVzdWx0IGFuZCBwYXNz
ZXMgaXQgYmFjayB0byAtc2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRDb250ZW50UG9pbnQ6dG9TY3Jv
bGxlckltcDouCisgICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+bGFzdEtub3duTW91c2VQb3Np
dGlvbkluVmlldygpOworfQorCistIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxl
ckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgY29udmVydENvbnRlbnRQb2ludDooTlNQb2ludClw
b2ludEluQ29udGVudEFyZWEgdG9TY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
SW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisKKyAgICBpZiAoIV9z
Y3JvbGxhYmxlQXJlYSB8fCAhc2Nyb2xsZXJJbXApCisgICAgICAgIHJldHVybiBOU1plcm9Qb2lu
dDsKKworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAgICBpZiAoW3Nj
cm9sbGVySW1wIGlzSG9yaXpvbnRhbF0pCisgICAgICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYmFy
ID0gX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgLy8gSXQgaXMg
cG9zc2libGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2li
bGUgZm9yIHRoaXMgZGVsZWdhdGUKKyAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4g
dGhlIG1vbWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKKyAg
ICAvLyBtb21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3Vs
ZCBwcm9iYWJseSBkZS1jb3VwbGUgc29tZQorICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGlu
IFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8gYXZvaWQgdGhpcwor
ICAgIC8vIGlzc3VlLgorICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gTlNaZXJv
UG9pbnQ7CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxi
YXIoKnNjcm9sbGJhcikpOworCisgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250
YWluaW5nVmlldyhXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7
Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9s
bGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QK
K3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0o
cmVjdCk7CisKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKFtzY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKS5jb250ZW50QXJlYVdpbGxQYWludCgpOworfQorCistICh2b2lkKXNjcm9sbGVySW1wUGFp
cjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHls
ZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3UmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlXTsKKworICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTWFjJj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ29udHJvbGxl
cigpKS51cGRhdGVTY3JvbGxlclN0eWxlKCk7Cit9CisKK0BlbmQKKworZW51bSBGZWF0dXJlVG9B
bmltYXRlIHsKKyAgICBUaHVtYkFscGhhLAorICAgIFRyYWNrQWxwaGEsCisgICAgVUlTdGF0ZVRy
YW5zaXRpb24sCisgICAgRXhwYW5zaW9uVHJhbnNpdGlvbgorfTsKKworI2lmICFMT0dfRElTQUJM
RUQKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBGZWF0dXJl
VG9BbmltYXRlIGZlYXR1cmUpCit7CisgICAgc3dpdGNoIChmZWF0dXJlKSB7CisgICAgY2FzZSBU
aHVtYkFscGhhOiB0cyA8PCAiVGh1bWJBbHBoYSIgOyBicmVhazsKKyAgICBjYXNlIFRyYWNrQWxw
aGE6IHRzIDw8ICJUcmFja0FscGhhIiA7IGJyZWFrOworICAgIGNhc2UgVUlTdGF0ZVRyYW5zaXRp
b246IHRzIDw8ICJVSVN0YXRlVHJhbnNpdGlvbiIgOyBicmVhazsKKyAgICBjYXNlIEV4cGFuc2lv
blRyYW5zaXRpb246IHRzIDw8ICJFeHBhbnNpb25UcmFuc2l0aW9uIiA7IGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gdHM7Cit9CisKK3VzaW5nIFdlYkNvcmU6OkxvZ092ZXJsYXlTY3JvbGxiYXJz
OworCisjZW5kaWYKKworQGludGVyZmFjZSBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIDogTlNP
YmplY3QgeworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogX3Njcm9sbGJhcjsKKyAgICBSZXRhaW5Q
dHI8TlNTY3JvbGxlckltcD4gX3Njcm9sbGVySW1wOworICAgIEZlYXR1cmVUb0FuaW1hdGUgX2Zl
YXR1cmVUb0FuaW1hdGU7CisgICAgQ0dGbG9hdCBfc3RhcnRWYWx1ZTsKKyAgICBDR0Zsb2F0IF9l
bmRWYWx1ZTsKKyAgICBOU1RpbWVJbnRlcnZhbCBfZHVyYXRpb247CisgICAgUmV0YWluUHRyPE5T
VGltZXI+IF90aW1lcjsKKyAgICBSZXRhaW5QdHI8TlNEYXRlPiBfc3RhcnREYXRlOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uPiBfdGltaW5nRnVuY3Rpb247
Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxi
YXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRlIGFu
aW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZhbHVl
IGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKHZvaWQpc2V0Q3VycmVudFBy
b2dyZXNzOihOU1RpbWVyICopdGltZXI7CistICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbjsKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbjsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24KKworLSAoaWQpaW5pdFdpdGhTY3JvbGxi
YXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyIGZlYXR1cmVUb0FuaW1hdGU6KEZlYXR1
cmVUb0FuaW1hdGUpZmVhdHVyZVRvQW5pbWF0ZSBhbmltYXRlRnJvbTooQ0dGbG9hdClzdGFydFZh
bHVlIGFuaW1hdGVUbzooQ0dGbG9hdCllbmRWYWx1ZSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwp
ZHVyYXRpb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGNvbnN0IE5TVGltZUludGVydmFsIHRpbWVJbnRlcnZh
bCA9IDAuMDE7CisgICAgX3RpbWVyID0gYWRvcHROUyhbW05TVGltZXIgYWxsb2NdIGluaXRXaXRo
RmlyZURhdGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93OjBdIGludGVydmFs
OnRpbWVJbnRlcnZhbCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q3VycmVudFBy
b2dyZXNzOikgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSk7CisgICAgX2R1cmF0aW9uID0gZHVy
YXRpb247CisgICAgX3RpbWluZ0Z1bmN0aW9uID0gV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VJ
bk91dCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8
PCAiQ3JlYXRpbmcgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBmb3IgIiA8PCBmZWF0dXJlVG9B
bmltYXRlIDw8ICIgZnJvbSAiIDw8IHN0YXJ0VmFsdWUgPDwgIiB0byAiIDw8IGVuZFZhbHVlKTsK
KworICAgIF9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgX2ZlYXR1cmVUb0FuaW1hdGUgPSBm
ZWF0dXJlVG9BbmltYXRlOworICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKKyAgICBfZW5k
VmFsdWUgPSBlbmRWYWx1ZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXN0YXJ0
QW5pbWF0aW9uCit7CisgICAgQVNTRVJUKF9zY3JvbGxiYXIpOworCisgICAgX3Njcm9sbGVySW1w
ID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOworCisgICAgTE9HX1dJVEhf
U1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIi1bV2ViU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbiAiIDw8IHNlbGYgPDwgInN0YXJ0QW5pbWF0aW9uXSBmb3IgIiA8PCBfZmVhdHVyZVRv
QW5pbWF0ZSk7CisKKyAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gYWRkVGltZXI6X3RpbWVy
LmdldCgpIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOworICAgIF9zdGFydERhdGUgPSBh
ZG9wdE5TKFtbTlNEYXRlIGFsbG9jXSBpbml0V2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93OjBdKTsK
K30KKworLSAodm9pZClzZXRTdGFydFZhbHVlOihDR0Zsb2F0KXN0YXJ0VmFsdWUKK3sKKyAgICBf
c3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7Cit9CisKKy0gKHZvaWQpc2V0RW5kVmFsdWU6KENHRmxv
YXQpZW5kVmFsdWUKK3sKKyAgICBfZW5kVmFsdWUgPSBlbmRWYWx1ZTsKK30KKworLSAodm9pZClz
ZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcgoreworICAgIENHRmxvYXQgcHJvZ3Jl
c3MgPSAwOworICAgIE5TRGF0ZSAqbm93ID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNp
bmNlTm93OjBdOworICAgIE5TVGltZUludGVydmFsIGVsYXBzZWQgPSBbbm93IHRpbWVJbnRlcnZh
bFNpbmNlRGF0ZTpfc3RhcnREYXRlLmdldCgpXTsKKyAgICBpZiAoZWxhcHNlZCA+IF9kdXJhdGlv
bikgeworICAgICAgICBwcm9ncmVzcyA9IDE7CisgICAgICAgIFt0aW1lciBpbnZhbGlkYXRlXTsK
KyAgICB9IGVsc2UgeworICAgICAgICBOU1RpbWVJbnRlcnZhbCB0ID0gMTsKKyAgICAgICAgaWYg
KF9kdXJhdGlvbikKKyAgICAgICAgICAgIHQgPSBlbGFwc2VkIC8gX2R1cmF0aW9uOworICAgICAg
ICBwcm9ncmVzcyA9IF90aW1pbmdGdW5jdGlvbi0+dHJhbnNmb3JtVGltZSh0LCBfZHVyYXRpb24p
OworICAgIH0KKyAgICBBU1NFUlQoX3Njcm9sbGJhcik7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0o
T3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
ICIgPDwgc2VsZiA8PCAic2V0Q3VycmVudFByb2dyZXNzOiIgPDwgcHJvZ3Jlc3MgPDwiXSBmb3Ig
IiA8PCBfZmVhdHVyZVRvQW5pbWF0ZSk7CisKKyAgICBDR0Zsb2F0IGN1cnJlbnRWYWx1ZTsKKyAg
ICBpZiAoX3N0YXJ0VmFsdWUgPiBfZW5kVmFsdWUpCisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IDEg
LSBwcm9ncmVzczsKKyAgICBlbHNlCisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHByb2dyZXNzOwor
CisgICAgc3dpdGNoIChfZmVhdHVyZVRvQW5pbWF0ZSkgeworICAgIGNhc2UgVGh1bWJBbHBoYToK
KyAgICAgICAgW19zY3JvbGxlckltcCBzZXRLbm9iQWxwaGE6Y3VycmVudFZhbHVlXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUcmFja0FscGhhOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNl
dFRyYWNrQWxwaGE6Y3VycmVudFZhbHVlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVSVN0
YXRlVHJhbnNpdGlvbjoKKyAgICAgICAgW19zY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlv
blByb2dyZXNzOmN1cnJlbnRWYWx1ZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwYW5z
aW9uVHJhbnNpdGlvbjoKKyAgICAgICAgW19zY3JvbGxlckltcCBzZXRFeHBhbnNpb25UcmFuc2l0
aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKCFfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCisgICAg
ICAgIF9zY3JvbGxiYXItPmludmFsaWRhdGUoKTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW3NlbGYgc3RvcEFuaW1hdGlv
bl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIF9zY3JvbGxiYXIgPSBudWxs
cHRyOworfQorCistICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgor
eworICAgIF9kdXJhdGlvbiA9IGR1cmF0aW9uOworfQorCistICh2b2lkKXN0b3BBbmltYXRpb24K
K3sKKyAgICBbX3RpbWVyIGludmFsaWRhdGVdOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSA6IE5TT2JqZWN0PE5TQW5pbWF0aW9uRGVsZWdhdGUsIE5TU2Ny
b2xsZXJJbXBEZWxlZ2F0ZT4geworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogX3Njcm9sbGJhcjsK
KworICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfa25vYkFscGhhQW5p
bWF0aW9uOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdHJhY2tB
bHBoYUFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4g
X3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uPiBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbjsKK30KKy0gKGlkKWlu
aXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcjsKKy0gKHZvaWQp
Y2FuY2VsQW5pbWF0aW9uczsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1w
RGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciop
c2Nyb2xsYmFyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljYW5jZWxBbmltYXRpb25zCit7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW19rbm9iQWxwaGFBbmltYXRpb24gc3RvcEFu
aW1hdGlvbl07CisgICAgW190cmFja0FscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAg
IFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgW19leHBh
bnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKK30KKworLSAoTmFrZWRQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM+KXNjcm9sbGJhcnNDb250cm9sbGVyCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYyY+KF9zY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKSk7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0
UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Cit7CisgICAgcmV0dXJuIGFSZWN0OworfQorCist
IChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0KWFSZWN0Cit7CisgICAgcmV0
dXJuIGFSZWN0OworfQorCistIChDQUxheWVyICopbGF5ZXIKK3sKKyAgICBpZiAoIV9zY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lTWFjOjppc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyOworICAgIGlmIChfc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IFdlYkNvcmU6OlZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOworCisgICAgc3RhdGljIENB
TGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBs
YXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOworfQorCistIChOU1Bv
aW50KW1vdXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAg
KilzY3JvbGxlckltcAoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIE5T
WmVyb1BvaW50OworCisgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xsZXJJbXAg
PT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAgIGF1dG8gcG9z
aXRpb25JblZpZXcgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNl
UG9zaXRpb25JblZpZXcoKTsKKyAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250
YWluaW5nVmlldyhwb3NpdGlvbkluVmlldyk7Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdFRv
TGF5ZXI6KE5TUmVjdClyZWN0Cit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKEJPT0wpc2hv
dWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxl
ckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisKKyAgICBpZiAoIV9zY3Jv
bGxiYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBfc2Nyb2xsYmFyLT5z
dXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCk7Cit9CisKKyNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQorLSAoTlNBcHBlYXJhbmNlICopZWZmZWN0aXZlQXBwZWFyYW5jZUZvclNj
cm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2Nyb2xsZXJJbXApOworCisgICAgaWYgKCFfc2Nyb2xsYmFyKSB7CisgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIHJldHVybiBbTlNBcHBlYXJh
bmNlIGN1cnJlbnRBcHBlYXJhbmNlXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECisgICAgfQorCisgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBGcmFtZVZp
ZXc6OnBhaW50U2Nyb2xsQ29ybmVyLgorICAgIC8vIFRoZSBiYXNlIHN5c3RlbSBkb2VzIG5vdCBz
dXBwb3J0IGRhcmsgQXF1YSwgc28gd2UgbWlnaHQgZ2V0IGEgbnVsbCByZXN1bHQuCisgICAgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkudXNlRGFy
a0FwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKCk7CisgICAgaWYgKGF1dG8gKmFwcGVhcmFuY2UgPSBb
TlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDp1c2VEYXJrQXBwZWFyYW5jZSA/IE5TQXBwZWFy
YW5jZU5hbWVEYXJrQXF1YSA6IE5TQXBwZWFyYW5jZU5hbWVBcXVhXSkKKyAgICAgICAgcmV0dXJu
IGFwcGVhcmFuY2U7CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAg
ICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5jZV07CisgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECit9CisjZW5kaWYKKworLSAodm9pZClzZXRVcEFscGhh
QW5pbWF0aW9uOihSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJQ
YWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzoo
Q0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAg
ICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJh
cnMgbXVzdCBiZSBhbmltYXRlZCBoZXJlLgorICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJs
eSByZXR1cm5zLgorICAgIGJvb2wgbXVzdEFuaW1hdGUgPSBbc2VsZiBzY3JvbGxiYXJzQ29udHJv
bGxlcl0tPmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKKworICAgIGlmIChbc2VsZiBzY3Jv
bGxiYXJzQ29udHJvbGxlcl0tPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0
QW5pbWF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUp
IHsKKyAgICAgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zdGFydFNjcm9sbGJhclBh
aW50VGltZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHdlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFuaW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0
aW1lci4KKyAgICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnN0b3BTY3JvbGxiYXJQYWlu
dFRpbWVyKCk7CisKKyAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGFuaW1hdGluZywgc3RvcAor
ICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7CisgICAgICAgIFtzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
ID0gbmlsOworICAgIH0KKworICAgIGlmIChhdXRvKiBtYWNUaGVtZSA9IFdlYkNvcmU6Om1hY1Nj
cm9sbGJhclRoZW1lKCkpCisgICAgICAgIG1hY1RoZW1lLT5zZXRQYWludENoYXJhY3RlcmlzdGlj
c0ZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7CisKKyAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpU
aHVtYlBhcnQgJiYgX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpWZXJ0aWNh
bFNjcm9sbGJhcikgeworICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgeworICAgICAgICAgICAg
YXV0byB0aHVtYlJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KFtzY3JvbGxlclBhaW50ZXIgcmVjdEZv
clBhcnQ6TlNTY3JvbGxlcktub2JdKTsKKyAgICAgICAgICAgIFtzZWxmIHNjcm9sbGJhcnNDb250
cm9sbGVyXS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHRodW1iUmVjdCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zZXRWaXNp
YmxlU2Nyb2xsZXJUaHVtYlJlY3QoeyB9KTsKKyAgICB9CisKKyAgICBzY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRX
aXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpw
YXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCA/IFRodW1iQWxwaGEgOiBUcmFja0FscGhhCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0ZUZyb206cGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyBb
c2Nyb2xsZXJQYWludGVyIGtub2JBbHBoYV0gOiBbc2Nyb2xsZXJQYWludGVyIHRyYWNrQWxwaGFd
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlVG86bmV3QWxwaGEKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
IHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlcklt
cCAqKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEg
ZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgaWYgKCFfc2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9s
bGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXA7CisgICAgaWYgKCFbc2Vs
ZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpKSB7CisgICAg
ICAgIFtzY3JvbGxlckltcCBzZXRLbm9iQWxwaGE6MF07CisgICAgICAgIF9zY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBm
YWRpbmcgdGhlIHNjcm9sbGJhciBhd2F5LCB0aGF0IGlzIGEgZ29vZCBpbmRpY2F0aW9uIHRoYXQg
d2UgYXJlIG5vIGxvbmdlciBnb2luZyB0bworICAgIC8vIGJlIG1vdmluZyBpdCBhcm91bmQgb24g
dGhlIHNjcm9sbGluZyB0aHJlYWQuIENhbGxpbmcgW3Njcm9sbGVyUGFpbnRlciBzZXRVc2VQcmVz
ZW50YXRpb25WYWx1ZTpOT10KKyAgICAvLyB3aWxsIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBvbiB0
byB0aGUgTlNTY3JvbGxlckltcCBBUEkuCisgICAgaWYgKG5ld0tub2JBbHBoYSA9PSAwICYmIF9z
Y3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAgICAgW3Nj
cm9sbGVyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpOT107CisKKyAgICBbc2VsZiBz
ZXRVcEFscGhhQW5pbWF0aW9uOl9rbm9iQWxwaGFBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNj
cm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdL
bm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihO
U1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNrQWxwaGFUbzooQ0dGbG9hdClu
ZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIGlm
ICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHNjcm9sbGVySW1w
ID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAgICBOU1Njcm9s
bGVySW1wICpzY3JvbGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wOwor
ICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X3RyYWNrQWxwaGFBbmltYXRpb24gc2Nyb2xs
ZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OkJhY2tUcmFja1BhcnQgYW5p
bWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Cit9CisKKy0gKHZv
aWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlVUlTdGF0
ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAg
aWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc2Nyb2xsZXJJ
bXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAgIC8vIFVJ
U3RhdGVUcmFuc2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlv
biBpcyBpbiBwcm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhhcmQgdHJhbnNpdGlvbi4KKyAgICBbc2Ny
b2xsZXJJbXAgc2V0VWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzczoxIC0gW3Njcm9sbGVySW1wIHVp
U3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKworICAgIC8vIElmIHRoZSBVSSBzdGF0ZSB0cmFu
c2l0aW9uIGlzIGhhcHBlbmluZywgdGhlbiB3ZSBhcmUgbm8gbG9uZ2VyIG1vdmluZyB0aGUgc2Ny
b2xsYmFyIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorICAgIGlmIChfc2Nyb2xsYmFyLT5zdXBw
b3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCisgICAgICAgIFtzY3JvbGxlckltcCBzZXRV
c2VQcmVzZW50YXRpb25WYWx1ZTpOT107CisKKyAgICBpZiAoIV91aVN0YXRlVHJhbnNpdGlvbkFu
aW1hdGlvbikgeworICAgICAgICBfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Nj
cm9sbGJhcgorICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpVSVN0YXRlVHJhbnNpdGlvbgor
ICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJv
Z3Jlc3NdCisgICAgICAgICAgICBhbmltYXRlVG86MS4wCisgICAgICAgICAgICBkdXJhdGlvbjpk
dXJhdGlvbl0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdG8g
aW5pdGlhbGl6ZSB0aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4gY2FzZSB0
aGV5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBz
ZXRTdGFydFZhbHVlOltzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07Cisg
ICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4wXTsKKyAg
ICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07
CisgICAgfQorICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc3RhcnRBbmltYXRpb25d
OworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAg
YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIp
KTsKKworICAgIC8vIEV4cGFuc2lvblRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVzIHRvIDEuIElu
IGNhc2UgYW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEgaGFyZCB0cmFu
c2l0aW9uLgorICAgIFtzY3JvbGxlckltcCBzZXRFeHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3M6
MSAtIFtzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKworICAgIGlm
ICghX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24pIHsKKyAgICAgICAgX2V4cGFuc2lvblRy
YW5zaXRpb25BbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBh
bGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgorICAgICAgICAgICAgZmVhdHVyZVRv
QW5pbWF0ZTpFeHBhbnNpb25UcmFuc2l0aW9uCisgICAgICAgICAgICBhbmltYXRlRnJvbTpbc2Ny
b2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzXQorICAgICAgICAgICAgYW5pbWF0
ZVRvOjEuMAorICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwg
anVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCisgICAgICAg
IFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOltzY3JvbGxlcklt
cCB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07CisgICAgICAgIFtfZXhwYW5zaW9uVHJhbnNp
dGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZToxLjBdOworICAgICAgICBbX2V4cGFuc2lvblRyYW5z
aXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIH0KKyAgICBbX2V4cGFu
c2lvblRyYW5zaXRpb25BbmltYXRpb24gc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXNj
cm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgb3ZlcmxheVNjcm9sbGVyU3Rh
dGVDaGFuZ2VkVG86KE5TT3ZlcmxheVNjcm9sbGVyU3RhdGUpbmV3T3ZlcmxheVNjcm9sbGVyU3Rh
dGUKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOworICAgIFVOVVNFRF9QQVJBTShu
ZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAg
IF9zY3JvbGxiYXIgPSAwOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtf
a25vYkFscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOworICAgIFtfdHJhY2tBbHBoYUFuaW1hdGlv
biBpbnZhbGlkYXRlXTsKKyAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIGludmFsaWRh
dGVdOworICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IFNjcm9sbGJhcnND
b250cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAg
IHJldHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTWFjPihzY3JvbGxhYmxlQXJl
YSk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyTWFjOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
YyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxiYXJzQ29udHJv
bGxlcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIo
KnRoaXMsICZTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGlt
ZXJGaXJlZCkKKyAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcigqdGhpcywgJlNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQp
Cit7CisgICAgbV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxl
ckltcFBhaXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJs
ZUFyZWFdKTsKKyAgICBtX3Njcm9sbGVySW1wUGFpciA9IGFkb3B0TlMoW1tOU1Njcm9sbGVySW1w
UGFpciBhbGxvY10gaW5pdF0pOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXREZWxlZ2F0ZTpt
X3Njcm9sbGVySW1wUGFpckRlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIg
c2V0U2Nyb2xsZXJTdHlsZTpTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUo
KV07Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyTWFjOjp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWMoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX3Njcm9sbGVy
SW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRE
ZWxlZ2F0ZTpuaWxdOworICAgIFttX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGludmFs
aWRhdGVdOworICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQoreworICAgIGlmIChzY3JvbGxiYXJQYWludFRp
bWVySXNBY3RpdmUoKSkKKyAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICBb
bV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKKyAgICBb
bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChj
b25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQoreworICAgIGF1dG8gcmVjdEluVmlld0Nvb3Jk
aW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKKyAgICBpZiAoYXV0byogdmVydGljYWxTY3JvbGxiYXIg
PSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmll
dyhzY3JvbGxlclRodW1iKTsKKworICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92
aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbGFi
bGVBcmVhKCkuc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRl
cyk7CisgICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QgPSByZWN0SW5WaWV3Q29vcmRpbmF0
ZXM7Cit9CisKKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aGF2ZVNjcm9sbGVkU2lu
Y2VQYWdlTG9hZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xs
QW5pbWF0b3IoKS5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKK3sKKyAgICBp
ZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgor
ICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVdpbGxEcmF3XTsKKyAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIExPR19XSVRIX1NUUkVBTShP
dmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3Ig
WyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOwor
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
CisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZUVudGVyZWRD
b250ZW50QXJlYV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRXhp
dGVkQ29udGVudEFyZWEoKQoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFy
cywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJs
ZUFyZWEoKSA8PCAiXSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhIik7CisgICAgaWYgKFttX3Njcm9s
bGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOworfQor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgp
Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNj
cm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1v
dXNlTW92ZWRJbkNvbnRlbnRBcmVhIik7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAoreworICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFy
cyBuZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KKyAgICBpZiAoU2Nyb2xsZXJTdHls
ZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3Jv
bGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlNTY3JvbGxl
ckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQorICAg
ICAgICBbcGFpbnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KSBjb25zdAoreworICAgIC8vIEF0IHRoaXMgdGltZSwgb25seSBsZWdhY3kgc2Nyb2xsYmFycyBu
ZWVkcyB0byBzZW5kIG5vdGlmaWNhdGlvbnMgaGVyZS4KKyAgICBpZiAoU2Nyb2xsZXJTdHlsZTo6
cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlNTY3JvbGxlcklt
cCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpKQorICAgICAg
ICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Ym9vbCBtb3VzZUlzRG93bikgY29uc3QKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92
ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
TlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxi
YXIpKSB7CisgICAgICAgIFtwYWludGVyIHNldFRyYWNraW5nOm1vdXNlSXNEb3duXTsKKyAgICAg
ICAgaWYgKG1vdXNlSXNEb3duKQorICAgICAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2lu
U2Nyb2xsR2VzdHVyZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFttX3Njcm9sbGVySW1w
UGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQoreworICAgIGlmIChbbV9zY3JvbGxlcklt
cFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIFttX3Njcm9sbGVySW1wUGFpciBzdGFydExpdmVSZXNpemVdOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBp
ZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAg
ICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFEaWRSZXNp
emVdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsRW5kTGl2ZVJlc2l6
ZSgpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxFbmRMaXZlUmVzaXplKCk7CisK
KyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5kTGl2ZVJlc2l6
ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhRGlkU2hv
dygpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlz
TG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHdpbmRv
d09yZGVyZWRJbl07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRB
cmVhRGlkSGlkZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xs
ZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIHdpbmRvd09yZGVyZWRPdXRdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFj
OjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19XSVRIX1NUUkVBTShP
dmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3Ig
WyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBkaWRCZWdpblNjcm9sbEdlc3R1cmUiKTsKKwor
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
CisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdl
c3R1cmVdOworCisgICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3Io
KSkKKyAgICAgICAgbW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKK3sKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gZGlkRW5kU2Ny
b2xsR2VzdHVyZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xs
ZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIGVuZFNjcm9sbEdlc3R1cmVdOworCisgICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAgbW9uaXRvci0+cmVtb3ZlRGVmZXJyYWxGb3JSZWFz
b24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVh
SWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbElu
UHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNj
cm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xs
YmFycywgc3RyZWFtIDw8ICJTY3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xs
YWJsZUFyZWEoKSA8PCAiXSBtYXlCZWdpblNjcm9sbEdlc3R1cmUiKTsKKworICAgIGlmIChbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJl
dHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVdOworICAg
IFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVkXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJv
b2wgc2hvdWxkTG9ja1N0YXRlKQoreworICAgIGlmIChzaG91bGRMb2NrU3RhdGUpCisgICAgICAg
IFttX3Njcm9sbGVySW1wUGFpciBsb2NrT3ZlcmxheVNjcm9sbGVyU3RhdGU6TlNPdmVybGF5U2Ny
b2xsZXJTdGF0ZUhpZGRlbl07CisgICAgZWxzZSB7CisgICAgICAgIFttX3Njcm9sbGVySW1wUGFp
ciB1bmxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZV07CisKKyAgICAgICAgLy8gV2UgbmV2ZXIgdXBk
YXRlIHNjcm9sbGVyIHN0eWxlIGZvciBQYWludGVyQ29udHJvbGxlcnMgdGhhdCBhcmUgbG9ja2Vk
LiBJZiB3ZSBoYXZlIGEgcGVuZGluZworICAgICAgICAvLyBuZWVkIHRvIHVwZGF0ZSB0aGUgc3R5
bGUsIGRvIGl0IG9uY2Ugd2UndmUgdW5sb2NrZWQgdGhlIHNjcm9sbGVyIHN0YXRlLgorICAgICAg
ICBpZiAobV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpCisgICAgICAgICAgICB1cGRhdGVTY3Jv
bGxlclN0eWxlKCk7CisgICAgfQorfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpz
Y3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdOworfQorCit2b2lkIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQoIW1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlKTsKKyAgICBtX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcERlbGVnYXRl
IGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKKworICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKKyAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+
cGxhdGZvcm1MYXllcigpXTsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNj
cm9sbGVySW1wOnBhaW50ZXJdOworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6
ZSgpKQorICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBtX3ZlcnRpY2Fs
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0
ZTpuaWxdOworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5p
bF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFp
bnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFp
bnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxl
ckltcERlbGVnYXRlKTsKKyAgICBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlID0gYWRv
cHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNj
cm9sbGJhcl0pOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZS5nZXQoKV07CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQor
ICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKKworICAg
IFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Cisg
ICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCisgICAgICAgIFtwYWludGVy
IHNldEtub2JBbHBoYToxXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAg
TlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxi
YXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
aG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIFttX2hvcml6b250YWxTY3JvbGxl
ckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVs
ZWdhdGUgPSBudWxscHRyOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBb
bV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJz
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBz
Y3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBbcGFpbnRlciBzZXROZWVk
c0Rpc3BsYXk6WUVTXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6dmVydGlj
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBzY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKTsK
KyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTY3JvbGxlcklt
cCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlm
ICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5
ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsXTsKK30KKwordm9pZCBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJl
YSgpLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Ny
b2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDog
bmlsXTsKK30KKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hvdWxkU2Nyb2xsYmFy
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgLy8g
Tm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0
ZXN0aW5nLgorICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUo
KSAhPSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBzaG91bGQgcGFydGljaXBhdGUgaW4gaGl0IHRlc3Rpbmcg
d2hlbmV2ZXIgdGhleSBhcmUgYXQgYWxsIHZpc2libGUuCisgICAgTlNTY3JvbGxlckltcCAqcGFp
bnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFp
bnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbcGFpbnRlciBrbm9iQWxw
aGFdID4gMDsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5Q29udGVu
dEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIGJhY2svZm9yd2Fy
ZCBjYWNoZSwgYnV0IHRoZSBwYWdlCisgICAgLy8gaXNuJ3QgcmVhbGx5IHNjcm9sbGluZyBpbiB0
aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlCisgICAg
Ly8gU2Nyb2xsZXJJbXBQYWlyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBhY3Rp
dmUgcGFnZS4KKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5p
c0hhbmRsaW5nV2hlZWxFdmVudCgpKQorICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChk
ZWx0YSk7CisgICAgZWxzZQorICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oZGVs
dGEpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp1cGRhdGVTY3JvbGxlclN0
eWxlKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKSB7CisgICAgICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIG1hY1RoZW1lID0gbWFjU2Nyb2xs
YmFyVGhlbWUoKTsKKyAgICBpZiAoIW1hY1RoZW1lKSB7CisgICAgICAgIG1fbmVlZHNTY3JvbGxl
clN0eWxlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
bWFjVGhlbWUtPnVzZXNPdmVybGF5U2Nyb2xsYmFyc0NoYW5nZWQoKTsKKworICAgIE5TU2Nyb2xs
ZXJTdHlsZSBuZXdTdHlsZSA9IFttX3Njcm9sbGVySW1wUGFpciBzY3JvbGxlclN0eWxlXTsKKwor
ICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlk
YXRlKCk7CisKKyAgICAgICAgTlNTY3JvbGxlckltcCAqb2xkVmVydGljYWxQYWludGVyID0gW21f
c2Nyb2xsZXJJbXBQYWlyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOworICAgICAgICBhdXRvIG5ld1Zl
cnRpY2FsUGFpbnRlciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhT
dHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSl2ZXJ0aWNhbFNjcm9sbGJh
ci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZFZl
cnRpY2FsUGFpbnRlcl0pOworCisgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRWZXJ0aWNh
bFNjcm9sbGVySW1wOm5ld1ZlcnRpY2FsUGFpbnRlci5nZXQoKV07CisgICAgICAgIG1hY1RoZW1l
LT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCp2ZXJ0aWNhbFNjcm9sbGJhciwgV1RGTW92ZShu
ZXdWZXJ0aWNhbFBhaW50ZXIpKTsKKyAgICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNjcm9sbGVy
SW1wKCp2ZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3Jv
bGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNl
dCB0aGUKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhl
IHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5k
IGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1h
Y1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXpl
KCkpOworICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwg
MCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICBpZiAoU2Nyb2xsYmFyKiBo
b3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworCisgICAg
ICAgIE5TU2Nyb2xsZXJJbXAgKm9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Nyb2xsZXJJbXBQ
YWlyIGhvcml6b250YWxTY3JvbGxlckltcF07CisgICAgICAgIGF1dG8gbmV3SG9yaXpvbnRhbFBh
aW50ZXIgPSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3
U3R5bGUgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29u
dHJvbFNpemUoKSBob3Jpem9udGFsOllFUyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRIb3Jpem9u
dGFsUGFpbnRlcl0pOworCisgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6bmV3SG9yaXpvbnRhbFBhaW50ZXIuZ2V0KCldOworICAgICAgICBtYWNUaGVt
ZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgV1RGTW92
ZShuZXdIb3Jpem9udGFsUGFpbnRlcikpOworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Ny
b2xsZXJJbXAoKmhvcml6b250YWxTY3JvbGxiYXIpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJl
bnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVz
dCByZS1zZXQgdGhlCisgICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywg
YW5kIHRoZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCisgICAgICAg
IC8vIGFuZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCisgICAgICAgIGludCB0aGlja25l
c3MgPSBtYWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKGhvcml6b250YWxTY3JvbGxiYXItPmNv
bnRyb2xTaXplKCkpOworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qo
SW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIC8vIElm
IG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBhZ2UgaXMgcmVz
dG9yaW5nIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgYW5kCisgICAgLy8gYSByZWxheW91
dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSBy
ZS1sYXlvdXQgb3Vyc2VsdmVzLgorICAgIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsYmFyU3R5bGVD
aGFuZ2VkKG5ld1N0eWxlID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkgPyBTY3JvbGxiYXJTdHls
ZTo6T3ZlcmxheSA6IFNjcm9sbGJhclN0eWxlOjpBbHdheXNWaXNpYmxlLCAhbV9uZWVkc1Njcm9s
bGVyU3R5bGVVcGRhdGUpOworCisgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxz
ZTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c3RhcnRTY3JvbGxiYXJQYWlu
dFRpbWVyKCkKK3sKKyAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hv
dCgxMDBfbXMpOworfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzY3JvbGxiYXJQ
YWludFRpbWVySXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCkKK3sKKyAgICBtX2luaXRpYWxTY3JvbGxiYXJQ
YWludFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpCit7CisgICAgLy8gVG8gZm9yY2UgdGhlIHNj
cm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2Us
IHRoZSBTY3JvbGxlckltcFBhaXIKKyAgICAvLyBtaWdodCB0aGluayB0aGF0IHRoZSBzY3JvbGxi
YXJzIGFyZSBhbHJlYWR5IHNob3dpbmcgYW5kIGJhaWwgZWFybHkuCisgICAgW21fc2Nyb2xsZXJJ
bXBQYWlyIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgZmxh
c2hTY3JvbGxlcnNdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29u
dGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQoKQoreworICAgIHNlbmRDb250ZW50QXJlYVNjcm9s
bGVkKG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEpOworICAgIG1fY29udGVu
dEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSB7IH07CisKKyAgICBpZiAoYXV0byogbW9u
aXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5yZW1vdmVE
ZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpD
b250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQor
eworICAgIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGEgPSBkZWx0YTsKKwor
ICAgIGlmICghbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKwor
ICAgIGlmIChhdXRvKiBtb25pdG9yID0gd2hlZWxFdmVudFRlc3RNb25pdG9yKCkpCisgICAgICAg
IG1vbml0b3ItPmRlZmVyRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RN
b25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1v
bml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0
YSkKK3sKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZEluRGlyZWN0
aW9uOk5TTWFrZVBvaW50KGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpKV07Cit9CisKK3N0
YXRpYyBTdHJpbmcgc2Nyb2xsYmFyU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiAibm9uZSJfczsKKworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoc2Nyb2xsYmFyLT5lbmFibGVkKCkgPyAi
ZW5hYmxlZCJfcyA6ICJkaXNhYmxlZCJfcyk7CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKworICAg
IE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVySW1wID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNj
cm9sbGJhcik7CisgICAgaWYgKCFzY3JvbGxlckltcCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOworCisgICAgaWYgKHNjcm9sbGVySW1wLmV4cGFuZGVkKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCIsZXhwYW5kZWQiX3MpOworCisgICAgaWYgKHNjcm9sbGVySW1wLnRyYWNrQWxw
aGEgPiAwKQorICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90cmFjayJfcyk7CisKKyAg
ICBpZiAoc2Nyb2xsZXJJbXAua25vYkFscGhhID4gMCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
LHZpc2libGVfdGh1bWIiX3MpOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQor
CitTdHJpbmcgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJTdGF0
ZUZvclRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShzY3JvbGxh
YmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK1N0cmluZyBTY3JvbGxiYXJz
Q29udHJvbGxlck1hYzo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZShzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Ny
b2xsYmFyKCkpOworfQorCitXaGVlbEV2ZW50VGVzdE1vbml0b3IqIFNjcm9sbGJhcnNDb250cm9s
bGVyTWFjOjp3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSBjb25zdAoreworICAgIHJldHVybiBzY3Jv
bGxhYmxlQXJlYSgpLnNjcm9sbEFuaW1hdG9yKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCk7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1v
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2su
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjYxNThjZmNkNDljNTliMGY4YmQw
NzA0NWJlNTliNDg1OWJmYmUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDE2IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dG9yTW9jay5oIgotCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1TY3JvbGxBbmltYXRvck1vY2s6OlNjcm9sbEFuaW1hdG9yTW9jayhTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcm
KT4mJiBsb2dnZXIpCi0gICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAgICAs
IG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKLXsKLX0KLQotU2Nyb2xsQW5pbWF0b3JNb2NrOjp+
U2Nyb2xsQW5pbWF0b3JNb2NrKCkgPSBkZWZhdWx0OwotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9j
azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
bV92ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBTY3JvbGxBbmltYXRvcjo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ck1vY2s6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17
Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFuaW1h
dG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNb2NrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOwotICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBudWxscHRyOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCkKLXsKLSAgICBtX2xvZ2dlcigibW91c2VFbnRlcmVkQ29udGVudEFyZWEiKTsK
LSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKLXsKLSAgICBt
X2xvZ2dlcigibW91c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6
bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6
Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZUV4aXRlZENv
bnRlbnRBcmVhIik7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEo
KTsKLX0KLQotY29uc3QgY2hhciogU2Nyb2xsQW5pbWF0b3JNb2NrOjpzY3JvbGxiYXJQcmVmaXgo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciA9PSBt
X3ZlcnRpY2FsU2Nyb2xsYmFyID8gIlZlcnRpY2FsIiA6IHNjcm9sbGJhciA9PSBtX2hvcml6b250
YWxTY3JvbGxiYXIgPyAiSG9yaXpvbnRhbCIgOiAiVW5rbm93biI7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFbnRlcmVkIiwgc2Nyb2xs
YmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6
Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTW9jazo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0
Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFeGl0ZWQiLCBzY3JvbGxiYXJQcmVm
aXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VF
eGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgaXNQcmVz
c2VkKSBjb25zdAotewotICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoaXNQcmVzc2VkID8gIm1vdXNl
SXNEb3duSW4iIDogIm1vdXNlSXNVcEluIiwgc2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJT
Y3JvbGxiYXIiKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIo
c2Nyb2xsYmFyLCBpc1ByZXNzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MjFhOGY2MjJjODllNTQ2ZDllYmJhY2Q5ODIx
MGY4MzExYjk5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBBIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgU2Nyb2xsQW5pbWF0
b3IgdXNlZCB0byB0ZXN0IHRoZSBzY3JvbGwgZXZlbnRzCi0vLyByZWNlaXZlZCBieSB0aGUgc2Ny
b2xsIGFuaW1hdG9yLiBUZXN0cyBjYW4gZW5hYmxlIHRoaXMgc2Nyb2xsIGFuaW1hdG9yIHVzaW5n
Ci0vLyB0aGUgaW50ZXJuYWwgc2V0dGluZyBlbmFibGVNb2NrU2Nyb2xsQW5pbWF0b3IuCi1jbGFz
cyBTY3JvbGxBbmltYXRvck1vY2sgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewotcHVi
bGljOgotICAgIFNjcm9sbEFuaW1hdG9yTW9jayhTY3JvbGxhYmxlQXJlYSYsIFdURjo6RnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JN
b2NrKCk7Ci0KLXByaXZhdGU6Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgYm9v
bCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgYWxsb3dzVmVydGljYWxT
dHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAgYm9vbCBpc1Bpbm5lZEZvclNjcm9sbERlbHRhKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgUmVj
dEVkZ2VzPGJvb2w+IGVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHsg
fTsgfQotICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGluZygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5k
SW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0
cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgYWRqdXN0U2Ny
b2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYKLQot
ICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwot
ICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRl
OwotICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAg
IHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNl
RXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9s
bGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRXhpdGVkU2Ny
b2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VJc0Rvd25J
blNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBj
aGFyKiBzY3JvbGxiYXJQcmVmaXgoU2Nyb2xsYmFyKikgY29uc3Q7Ci0KLSAgICBXVEY6OkZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fbG9nZ2VyOwotICAgIFNjcm9sbGJhciogbV92ZXJ0
aWNhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsKLSAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNj
cm9sbGJhciB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJv
bGxlck1vY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2Y2YwMjgyYmJhYmU4OTJhN2M0MDBiNzRkZDhkYTE1
ZTBmZjEzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoYykgMjAyMSBBcHBs
ZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
ay5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jayhT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBT
dHJpbmcmKT4mJiBsb2dnZXIpCisgICAgOiBTY3JvbGxiYXJzQ29udHJvbGxlcihzY3JvbGxhYmxl
QXJlYSkKKyAgICAsIG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKK3sKK30KKworU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNb2NrOjp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKCkgPSBkZWZhdWx0Owor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9s
bGJhcjsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOworICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBudWxscHRyOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXI6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxl
ck1vY2s6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBtX2xvZ2dlcigibW91c2VF
bnRlcmVkQ29udGVudEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1v
dXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKK3sKKyAgICBtX2xvZ2dlcigibW91c2VNb3ZlZEluQ29u
dGVudEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VNb3ZlZEluQ29udGVu
dEFyZWEoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
Q29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZUV4aXRlZENvbnRlbnRBcmVhIik7
CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKK30K
KworY29uc3QgY2hhciogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpzY3JvbGxiYXJQcmVmaXgo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhciA9PSBt
X3ZlcnRpY2FsU2Nyb2xsYmFyID8gIlZlcnRpY2FsIiA6IHNjcm9sbGJhciA9PSBtX2hvcml6b250
YWxTY3JvbGxiYXIgPyAiSG9yaXpvbnRhbCIgOiAiVW5rbm93biI7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFbnRlcmVkIiwg
c2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7CisgICAgU2Nyb2xsYmFy
c0NvbnRyb2xsZXI6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgbV9sb2dnZXIobWFrZVN0cmluZygibW91c2VFeGl0
ZWQiLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBTY3Jv
bGxiYXJzQ29udHJvbGxlcjo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwor
dm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgaXNQcmVzc2VkKSBjb25zdAoreworICAgIG1fbG9nZ2Vy
KG1ha2VTdHJpbmcoaXNQcmVzc2VkID8gIm1vdXNlSXNEb3duSW4iIDogIm1vdXNlSXNVcEluIiwg
c2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7CisgICAgU2Nyb2xsYmFy
c0NvbnRyb2xsZXI6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoc2Nyb2xsYmFyLCBpc1ByZXNzZWQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NDczMzkzMTEyZDg0YWE1M2VkMmI2NzllZmYwODQ2NzMzYjg4MmJmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2su
aApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIE1v
Y2sgaW1wbGVtZW50YXRpb24gb2YgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgdXNlZCB0byB0ZXN0IHRo
ZSBzY3JvbGwgZXZlbnRzCisvLyByZWNlaXZlZCBieSB0aGUgc2Nyb2xsYmFyIGNvbnRyb2xsZXIu
IFRlc3RzIGNhbiBlbmFibGUgdGhpcyBtb2NrIG9iamVjdCB1c2luZworLy8gdGhlIGludGVybmFs
IHNldHRpbmcgc2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcigpLgorLy8gRklYTUU6IHNldFVzZXNN
b2NrU2Nyb2xsQW5pbWF0b3IoKSBuZWVkcyByZW5hbWluZy4KKworY2xhc3MgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNb2NrIGZpbmFsIDogcHVibGljIFNjcm9sbGJhcnNDb250cm9sbGVyIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxi
YXJzQ29udHJvbGxlck1vY2spOworcHVibGljOgorICAgIFNjcm9sbGJhcnNDb250cm9sbGVyTW9j
ayhTY3JvbGxhYmxlQXJlYSYsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJik7
CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKCk7CisKK3ByaXZhdGU6CisK
KyAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAg
IHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAgICB2
b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAgICB2
b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFsOworICAg
IHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29u
c3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiwgYm9v
bCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgY2hhciogc2Nyb2xsYmFyUHJlZml4KFNjcm9sbGJh
ciopIGNvbnN0OworCisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiBtX2xv
Z2dlcjsKKyAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxTY3JvbGxiYXIgeyBudWxscHRyIH07Cisg
ICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxTY3JvbGxiYXIgeyBudWxscHRyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Nj
cm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDYwY2RiNjZjMWYw
YTJiMTA3ZjU4NDE3YjMzMmVmODdmNjE1MWY5NDIuLmRkNGZjMDMzNGViY2JiYzYwNTRiMzM3OTM5
NjQyZGI2ZjM2NWRkM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwt
YW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMSwxMCArMSwxNSBAQAorQ09O
U09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09O
U09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitD
T05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBD
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFy
CiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xs
YmFyCitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRB
cmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YQogQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9s
bGJhcgorQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQogQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRDb250ZW50QXJl
YQogVGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1zZWxlY3QtbGlz
dC1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0
L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itc2VsZWN0LWxpc3QtZXZlbnRzLWV4cGVjdGVkLnR4
dAppbmRleCBlZmEwZTE2MmM0YjM2NDc4NDY2M2NlYjA2NzE3M2I4M2RhMTYxZDc4Li44YjY2YmFl
YmI5ODkwMzU1MzIyZTQzMDhhNjk2NThhMmUxMTE2ZTYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1zZWxlY3Qt
bGlzdC1ldmVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLXNlbGVjdC1saXN0LWV2ZW50cy1leHBl
Y3RlZC50eHQKQEAgLTEsMTAgKzEsMTUgQEAKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmll
dzogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmll
dzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGlzdEJv
eDogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGlzdEJv
eDogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZy
YW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVy
TGlzdEJveDogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVy
TGlzdEJveDogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCiBDT05TT0xFIE1FU1NBR0U6
IFJlbmRlckxpc3RCb3g6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVT
U0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGlzdEJveDogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGlzdEJveDogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09M
RSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09OU09M
RSBNRVNTQUdFOiBSZW5kZXJMaXN0Qm94OiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCiBUZXN0IGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzk4LgogCg==
</data>
<flag name="commit-queue"
          id="461950"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438543</attachid>
            <date>2021-09-17 19:37:20 -0700</date>
            <delta_ts>2021-09-17 20:15:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210917193719.patch</filename>
            <type>text/plain</type>
            <size>193682</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThjMTc5MDJjNGVmZjVi
OWQ5MTI3Yjc0OTM4ZWM2YTIzMTQ0M2UzMC4uYjlmYzg0NjU2NTQyNzlmZjdiYTNmMWY4YTIyOWQ2
MDM0YjVhYmMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IEFzIHRoZSBmaXJzdCBzdGVwIHRvIGNsZWFuaW5nIHVwIFNjcm9sbEFuaW1hdG9yL1Njcm9sbENv
bnRyb2xsZXIsIG1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YKKyAgICAgICAgU2Ny
b2xsQW5pbWF0b3IgYW5kIGludG8gYSBuZXcgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgY2xhc3MsIHdp
dGggcGxhdGZvcm0tc3BlY2lmaWMgc3ViY2xhc3Nlcy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBt
dWNoIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIFNjcm9sbEFu
aW1hdG9yLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OndoZWVsRXZlbnRUZXN0TW9uaXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25J
blNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRI
aWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5oLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnNjcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNh
bmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYVdpbGxQ
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRTaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlcjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlcjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om5vdGlmeUNvbnRlbnRBcmVhU2Ny
b2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9y
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVy
aWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVhc2VPdXRDdWJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpj
b250ZW50QXJlYURpZFNob3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9s
bEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpoYW5k
bGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9s
bGVySW1wUGFpcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6XSk6IERlbGV0ZWQuCisgICAgICAgIChvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBp
bml0V2l0aFNjcm9sbGJhcjpmZWF0dXJlVG9BbmltYXRlOmFuaW1hdGVGcm9tOmFuaW1hdGVUbzpk
dXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24gc2V0RW5kVmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGludmFsaWRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXREdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW5pdFdp
dGhTY3JvbGxiYXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdh
dGUgY2FuY2VsQW5pbWF0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RUb0JhY2tpbmc6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBsYXllcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIG1vdXNlTG9jYXRpb25JblNjcm9s
bGVyRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgY29udmVydFJlY3RUb0xheWVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGVmZmVjdGl2ZUFw
cGVhcmFuY2VGb3JTY3JvbGxlckltcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzZXRVcEFscGhhQW5pbWF0aW9uOnNjcm9sbGVyUGFpbnRlcjpwYXJ0OmFu
aW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDph
bmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDpv
dmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJl
c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudHNSZXNpemVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c3RvcFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNj
cm9sbGVkU29vbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxi
YXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6Cisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0
Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wUGFpckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAg
ICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgICgt
W1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5p
bWF0ZTphbmltYXRlRnJvbTphbmltYXRlVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGluaXRXaXRoU2Nyb2xsYmFyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBzY3JvbGxiYXJzQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgbGF5ZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBtb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKToKKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
c2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDphbmltYXRlQWxwaGFUbzpk
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlcklt
cDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVy
SW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlT
dGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNjcm9sbEdl
c3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hv
dWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50
QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFy
U3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25p
dG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
b2NrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
QW5pbWF0b3JNb2NrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDogQWRkZWQuCisKIDIwMjEtMDktMTcgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ug
T2JqZWN0SWRlbnRpZmllciBmb3IgUmVzb3VyY2VMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzY0
ZjNiMzdjYmVkZWU0OTI0ODBhZjUxY2IxZjk4NzJlMDA0YWQyMi4uNWFhZDBkOTNjMjliZmEzNTE1
ZWVjNTljY2RhOTkxNjkyYzQzOTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4MzEsNiArMTgzMSw3
IEBAIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKIHBs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorcGxhdGZv
cm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5jcHAK
IHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogcGxhdGZvcm0vU2VyaWFsaXpl
ZFBsYXRmb3JtRGF0YUN1ZS5jcHAKQEAgLTIwOTksNyArMjEwMCw3IEBAIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCiBwbGF0Zm9ybS9tb2NrL1BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENEYXRhQ2hhbm5lbEhhbmRsZXJN
b2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENOb3RpZmllcnNNb2NrLmNwcAotcGxhdGZvcm0vbW9j
ay9TY3JvbGxBbmltYXRvck1vY2suY3BwCitwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcAogcGxhdGZv
cm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGVmMjBiZWQzNjE1YmNhODExMDJhMjIwMTA5NDQxYThlMjE5NWU3N2QuLjVjNGFhYzhjMmRi
NDU5YjU2ODI3NjIxZGM2MzMzNGE1ZmMzODY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtNDkxLDYgKzQ5MSw3IEBAIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMu
bW0KK3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
ZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLm1tCiBwbGF0Zm9ybS9tYWMvU3RyaW5nVXRpbGl0
aWVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGNkNzA0N2IxZWNjZTJjMjVkODM3ZjE0ZjM0
ZjRjZDBjODQ5NjViMmYuLjg5NzMwMTIzMzA5NDhkNmVlMDgzNWZlNGY4NjI5MjdkMjY0MzA0Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC03OCw2ICs3OCw3IEBAIHBsYXRmb3JtL2dhbWVwYWQv
bWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAKIHBsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5l
dHRlR2FtZXBhZFByb3ZpZGVyLmNwcAogCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9y
R2VuZXJpYy5jcHAKK3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CmluZGV4
IDhkYWQ4YzcxYzhmZWEyYWJkM2YxOTE5YzA0ZTlkYTI3Njk0ZDgwYjkuLmE5YTI3OTE0MTgwMTY5
OTFkYjI0ZDViZjA5YzllNTEwYzgwMTMzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC02NCw2
ICs2NCw3IEBAIHBsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmNwcAogcGxh
dGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCiAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xs
QW5pbWF0b3JHZW5lcmljLmNwcAorcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxl
ckdlbmVyaWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyNjUwYjQ1ZmY0NzY2ODFlYTMy
YWI5ODdhZDI4ODhkMTIwODFlODAuLjY3MWUzZGEzMDI2YmUzMjFkYzZhYWI3OWM2MTQyNmIyNjI4
YmZiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTM4OSw2ICszODksNyBAQAogCQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUg
LyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTNFODYxOTFCM0JENzAwMEYxQjU1IC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBRjY2QjIzQkZDMzlFMDA0MDMwREEgLyogQ29s
b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUMxMjBDMjJCRjJD
RDIwMDRFOUQzNSAvKiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzEyMDkyMkJGMkNDNzAwNEU5RDM1
IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFRTM3MTEyNkYxOTUyOTAwMUI1MTg0IC8qIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjLm1tICovOyB9OwogCQkwRkYzQjkyOTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYz
QjkyNTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01RdWFkLmggKi87IH07CiAJCTBGRjNCOTJCMUVF
M0I2REUwMEI4NDE0NCAvKiBKU0RPTVF1YWRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYzQjkyNzFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkSW5pdC5oICovOyB9OwogCQkwRkY1MDI2QTEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1l
ZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1
MDI2ODEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1lZGlhLmggKi87IH07CkBAIC0yMDM4LDcg
KzIwMzksNyBAQAogCQk1QzlDMkRCNTIyNDFBNjdCMDA5OTZCMEIgLyogQ29udGVudFJ1bGVMaXN0
UmVzdWx0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM5QzJEQjMyMjQxQTY3MzAwOTk2QjBCIC8qIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QzlFRjJGMzIx
RjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RUYyRjIyMUYwNjE3MTAwM0JEQzU2
IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0ExREVDNjFGNzFGMUM3MDBFNzFCRDMgLyogSFRUUEhl
YWRlckZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0ExREVDNDFGNzFFNjg3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUNCMzdGRkYxQzYyRDJB
MTAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9s
bEFuaW1hdG9yTW9jay5oICovOyB9OworCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmggKi87IH07CiAJCTVDQkM4REFEMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUNCRDU5NTkyMjgwRTkyNjAwMkIyMkFBIC8qIEN1c3RvbUhlYWRlckZpZWxkcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzVEMjM4NjIy
N0EwNzdDMDAwQjlCREEgLyogQ3VzdG9tSGVhZGVyRmllbGRzLmNwcCAqLzsgfTsKIAkJNUNDNzkw
MEUyNjZBRkE4OTAwNjkyNEZFIC8qIFRpbWluZ0FsbG93T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3OTAwQjI2NkFGQTg4MDA2OTI0RkUg
LyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjE3Niw2ICs2MTc3LDEwIEBACiAJCTBDNDUzNDI2MTBDREJCRkEw
MDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9w
dXBNZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJD
NUNDRDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWFyY2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAy
MjQ1MDI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjAyMjQ1MjI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDIyNDU0MjZGMTVENzUw
MDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAz
QzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5
RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODU1LDggKzk4NjAsOCBAQAogCQk1
QzlFRjJGMjIxRjA2MTcxMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBI
VFRQSGVhZGVyRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRUUEhlYWRlckZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURF
QzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVFRQSGVhZGVyRmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvck1v
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0IzN0ZGRDFDNjJEMjc4MDBG
MjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbEFuaW1hdG9yTW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vz
c2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0
TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxp
dHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0M3OTAwQjI2NkFG
QTg4MDA2OTI0RkUgLyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGltaW5nQWxsb3dPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxODExLDggKzIxODE2LDggQEAKIAkJCQkwNzM3OTRGNDE5RjU4NjRFMDBFNUEwNDUg
LyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oICovLAogCQkJCTA3Mzc5NEY3MTlGNTg2NEUw
MEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmNwcCAqLywKIAkJCQkwNzM3OTRGODE5RjU4NjRF
MDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oICovLAotCQkJCTVDQjM3RkZDMUM2MkQyNzgw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3BwICovLAotCQkJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLywKKwkJCQk1Q0IzN0ZGQzFDNjJE
Mjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNwcCAqLywKKwkJCQk1Q0Iz
N0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggKi8sCiAJ
CQkJMEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi8s
CiAJCQkJMEZFNzE0MDQxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oICov
LAogCQkJCTJEN0VEMEE5MUJBRTk5MTcwMDQzQjNFNSAvKiBUaW1lckV2ZW50QmFzZWRNb2NrLmgg
Ki8sCkBAIC0yMjE3MCw2ICsyMjE3NSw4IEBACiAJCQkJMDA4MUZFRkUxNkIwQTJCNjAwOEFBQTdB
IC8qIFB1YmxpY1N1ZmZpeE1hYy5tbSAqLywKIAkJCQlCQ0FFMUZBNTEyOTM5REI3MDA0Q0IwMjYg
LyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAqLywKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBDOTY3NTQg
LyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi8sCisJCQkJMEYwMjI0NTQyNkYxNUQ3NTAwMDI2NUMz
IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmggKi8sCisJCQkJMEYwMjI0NTMyNkYxNUQ3NTAw
MDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3
QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4
NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk1QjFFMEU0MzI1
RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8sCkBAIC0y
ODE0Miw2ICsyODE0OSw4IEBACiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICov
LAorCQkJCTBGMDIyNDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5j
cHAgKi8sCisJCQkJMEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9s
bGVyLmggKi8sCiAJCQkJMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1l
LmNwcCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUu
aCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwICovLApAQCAtMzQ5MjEsOCArMzQ5MzAsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlC
QUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0
ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FFMUZBNzEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRv
ck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBT
Y3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAv
KiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRC
MEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MDgsNiArMzY1MTcsNyBAQAogCQkJCTQxOTI0
MjQ5MjEyN0I5M0UwMDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzUxMTU2RTEyQjE3NDlDMDBD
OTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVFMzcx
MTI2RjE5NTI5MDAxQjUxODQgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI2QUEwRjlFMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRU
eXBlTWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCmluZGV4IDhhNmI2Zjk3NzYxZWIxMTllZTU5Y2VmOWFjZjcxYTQwYzE1ZjMy
NWQuLjg0OGM0NmYyODUwNDk2OWU5MWYwNGVkMWJjNTE1YWViMTAwZDA5YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM1NiwyMiArMzU2LDcgQEAg
dm9pZCBTY3JvbGxBbmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvcjo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBtX3Njcm9s
bEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgbV9zY3JvbGxBbmltYXRpb24tPnVwZGF0
ZVNjcm9sbEV4dGVudHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRl
U2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1Np
emVDaGFuZ2VkKCkgY29uc3QKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xs
RXh0ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggYTExZTkwZTExZDc1OTZmNDFlNjI4ODI5Mjc1NTUxZDcyZGU1YmRhYS4uM2M3NjEwZWVkOThl
YTQzNjEzMjIxZDk3NDgwNjAwMTdhYjZhY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVh
OyB9CiAKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdDsKKworICAgIGJvb2wg
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsgfQorICAgIHZvaWQgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChi
b29sIGhhdmVTY3JvbGxlZCkgeyBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBoYXZlU2Ny
b2xsZWQ7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpOwogCiAgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQpAQCAtOTcsNDkgKzEwMiwxNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciop
IGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihT
Y3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFEaWRTaG93KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlk
SGlkZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbihib29sKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xs
YmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRB
cmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEp
OyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5n
IGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0
eVN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0KICAgICAvLyBTY3Jv
bGxBbmltYXRpb25DbGllbnQKICAgICB2b2lkIHNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3Jv
bGxBbmltYXRpb24mLCBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24pIG92ZXJyaWRl
OwogICAgIHZvaWQgc2Nyb2xsQW5pbWF0aW9uRGlkRW5kKFNjcm9sbEFuaW1hdGlvbiYpIG92ZXJy
aWRlOwogICAgIFNjcm9sbEV4dGVudHMgc2Nyb2xsRXh0ZW50c0ZvckFuaW1hdGlvbihTY3JvbGxB
bmltYXRpb24mKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0V2hlZWxFdmVudFRlc3RNb25pdG9y
KFJlZlB0cjxXaGVlbEV2ZW50VGVzdE1vbml0b3I+JiYgdGVzdE1vbml0b3IpIHsgbV93aGVlbEV2
ZW50VGVzdE1vbml0b3IgPSB0ZXN0TW9uaXRvcjsgfQorICAgIFdoZWVsRXZlbnRUZXN0TW9uaXRv
ciogd2hlZWxFdmVudFRlc3RNb25pdG9yKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGVz
dE1vbml0b3IuZ2V0KCk7IH0KIAogICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9y
U25hcHBpbmdJZk5lZWRlZChjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQsIFNjcm9sbFNuYXBQb2lu
dFNlbGVjdGlvbk1ldGhvZCk7CiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBp
bmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCwg
U2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKQEAgLTE4NCw2ICsxNTcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVy
OwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyOwogICAgIEZsb2F0
UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvblNt
b290aD4gbV9zY3JvbGxBbmltYXRpb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCA0OTkyNDVjYTE0MDdkNDczNzUz
MmNkNGU4NzQ4ODNkMDU0YzMzODZiLi4wM2EwMGMwY2U3M2YzMzYzYTcwMDEzY2FjMDg3NDhhZWQx
YTQxNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBA
IC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcgQEAgc3RydWN0IFNh
bWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIHdl
YWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRocmVhZDsKICNlbmRpZgotICAgIHZvaWQq
IHBvaW50ZXJbMl07CisgICAgdm9pZCogcG9pbnRlclszXTsKICAgICBJbnRQb2ludCBvcmlnaW47
CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CiB9OwpAQCAtNzQsMTcgKzc0LDI1IEBAIFNj
cm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKSA9IGRlZmF1bHQ7CiAKIFNjcm9sbEFuaW1h
dG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAogewotICAgIGlmICgh
bV9zY3JvbGxBbmltYXRvcikgeworICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikKKyAgICAgICAg
bV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoY29uc3RfY2FzdDxTY3Jv
bGxhYmxlQXJlYSY+KCp0aGlzKSk7CisKKyAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFy
c0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXJzQ29udHJvbGxlcikg
eworICAgICAgICAvLyBOb3RlIHRoYXQgbW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCBpcyBhIG1p
c25vbWVyLgogICAgICAgICBpZiAobW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCgpKSB7Ci0gICAg
ICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRvck1vY2s+
KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyksIFt0aGlzXShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBtYWtlVW5p
cXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTW9jaz4oY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+
KCp0aGlzKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgewogICAgICAgICAgICAgICAg
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gU2Nyb2xsQW5p
bWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKKyAgICAg
ICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwogICAgIH0KIAotICAgIEFT
U0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKLSAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7CisgICAgcmV0dXJuICptX3Njcm9sbGJhcnNDb250cm9sbGVyLmdldCgpOwogfQogCiB2b2lk
IFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbikK
QEAgLTIwMSw3ICsyMDksNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nZWQoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIH0KIAogICAgIGlmIChz
Y3JvbGxQb3NpdGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigp
Lm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRpb24oKSAtIG9sZFBvc2l0aW9u
KTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9CiAKIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPikK
QEAgLTI0Miw5MSArMjUwLDg1IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxTdGFydExpdmVS
ZXNpemUoKQogewogICAgIGlmIChtX2luTGl2ZVJlc2l6ZSkKICAgICAgICAgcmV0dXJuOworCiAg
ICAgbV9pbkxpdmVSZXNpemUgPSB0cnVlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT53aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS53
aWxsU3RhcnRMaXZlUmVzaXplKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxFbmRM
aXZlUmVzaXplKCkKIHsKICAgICBpZiAoIW1faW5MaXZlUmVzaXplKQogICAgICAgICByZXR1cm47
CisKICAgICBtX2luTGl2ZVJlc2l6ZSA9IGZhbHNlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciog
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9s
bEFuaW1hdG9yLT53aWxsRW5kTGl2ZVJlc2l6ZSgpOwotfSAgICAKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLndpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250
ZW50c1NpemVDaGFuZ2VkKCk7Cit9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVh
V2lsbFBhaW50KCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZmxhc2ggb3Zlcmxh
eSBzY3JvbGxiYXJzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KLSAgICBpZiAoU2Nyb2xsQW5pbWF0
b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBz
Y3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewotICAgIGlmIChT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAg
ICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJl
ZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIHNj
cm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3Io
KS5tb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgbW91c2VJc0Rvd24pOworICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIG1v
dXNlSXNEb3duKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFy
ZWFEaWRTaG93KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZFNo
b3coKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFEaWRI
aWRlKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZEhpZGUoKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlk
ZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9j
a1N0YXRlKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihzaG91bGRMb2NrU3RhdGUpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkuZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudHNTaXplQ2hhbmdlZCgpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMzUsMjEgKzMzNywyMSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkud2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCkKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29u
dGVudHNSZXNpemVkKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT5jb250ZW50c1Jlc2l6ZWQoKTsgLy8gVGhpcyBmbGFzaGVzIG92ZXJsYXkgc2Nyb2xsYmFy
cy4KKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsgLy8gVGhpcyBmbGFzaGVz
IG92ZXJsYXkgc2Nyb2xsYmFycy4KIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMzc1LDE0ICszNzcsMTIgQEAgdm9pZCBTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMoKQogewogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZhbGlkYXRlU2Nyb2xsYmFy
UGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZh
bGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJz
Q29udHJvbGxlcigpLmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAg
ICAgfQogfQogCkBAIC00MjMsMTIgKzQyMywxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQog
ewotICAgIHNjcm9sbEFuaW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKQEAgLTQ2MCwxMiArNDYwLDEyIEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKIAogU3RyaW5nIFNjcm9sbGFi
bGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCk7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVy
biBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCk7CiB9CiAKIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFy
ZWE6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CkBAIC01MTgsNyArNTE4LDcgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGU6IGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgPDwgIiBp
c1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKTsKIAot
ICAgIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KTsKICAgICBpZiAoIXNjcm9sbEFuaW1hdG9yIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggNGU5ZjY1ZmIxNzcxM2YwN2RjMzYy
ZWU3MmVlMTk1NTczZjM0OWI3MC4uYzEwOTllYzM0MjU2Y2M4NTM3OTRkYmE5YThkOWE0ZWYzYzhl
ODc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC00NSw2
ICs0NSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKK2NsYXNzIFNj
cm9sbGJhcnNDb250cm9sbGVyOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFj
a2luZzsKIApAQCAtMTcyLDEyICsxNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9s
bEFuaW1hdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxs
IGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3Jv
bGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQW5pbWF0b3IuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbGJhcnNDb250
cm9sbGVyJiBzY3JvbGxiYXJzQ29udHJvbGxlcigpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwpAQCAtMzc4LDYgKzM3
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSA9IDA7CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gbV9zY3JvbGxiYXJzQ29udHJvbGxlcjsKIAogICAgIC8vIFRo
ZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVj
dGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwog
ICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2Rl
LiBUaGUgY29tYmluYXRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CmluZGV4IDk2NjU3NzA3ZGNlZjgwZWRiMTJmOTcwZGJjYWVlZWYxZTU0ODczMWYuLmYwYWQyMmE5
MGQ5NjJhNTYzNTA2MGVlNDUwYTRmOTZlMTA0YjBiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBz
aG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyh0aGlzKTsK
IH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OTljZmIyMTQxZmI5ZmVlM2ZhZDk4MDM4YjM4MjVlMTJiMmFhYWRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShX
UEUpICYmICFQTEFURk9STShHVEspCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xs
ZXI+IFNjcm9sbGJhcnNDb250cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyPihz
Y3JvbGxhYmxlQXJlYSk7Cit9CisjZW5kaWYKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9s
bGJhcnNDb250cm9sbGVyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1f
c2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA2NThmZTEzZDMzNDc1NDQwNTIyMjhmNDVlYzM1YWYwNTc5MjM3ZjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVh
OworCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXIpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOworCisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXIoU2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxl
cigpID0gZGVmYXVsdDsKKyAgICAKKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWF5QmVnaW5TY3JvbGxH
ZXN0dXJlKCkgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFp
bnQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CisgICAgdmly
dHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNv
bnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFEaWRTaG93KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFy
KikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKworcHJpdmF0ZToKKyAgICBTY3JvbGxhYmxlQXJl
YSYgbV9zY3JvbGxhYmxlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5l
cmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JH
ZW5lcmljLmNwcAppbmRleCA3ODIzODM1YzQxNTg5N2U5NzUwZmU0MmM3ZGVhYjg1MzYyYWM1M2Yy
Li5iNWZlMjUzZmJiZmVmZTI1N2Q1YmMwNjQzMWRjYTA5ZjA3NjYxMGRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuY3BwCkBAIC0zOCw5ICszOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGNvbnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24geyAxX3Mg
fTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVE
ZWxheSB7IDJfcyB9OwotCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewogICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdG9yR2VuZXJpYz4oc2Nyb2xsYWJsZUFyZWEpOwpA
QCAtNDksNyArNDYsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogU2Nyb2xsQW5pbWF0b3JH
ZW5lcmljOjpTY3JvbGxBbmltYXRvckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2tpbmV0
aWNBbmltYXRpb24obWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPigqdGhpcykpCi0g
ICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CiB9CiAK
QEAgLTkwLDIwOSArODYsNCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3Jv
bGxBbmltYXRvcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlm
ICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIGlmICghbV9ob3Jp
em9udGFsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCA9IDE7Ci0gICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNp
dHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7Ci0gICAgaGlkZU92ZXJsYXlT
Y3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1h
dG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0KLSAgICBpZiAoIXNj
cm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIGlmICghbV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPSAxOwotICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHko
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7Ci0gICAgaGlkZU92ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKG1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPSAwOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6d2lsbFJlbW92ZUhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKG1faG9y
aXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciA9IG51bGxwdHI7Ci0gICAgaWYgKCFtX3Zl
cnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCA9IDA7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp1cGRhdGVP
dmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKQotewotICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhciAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSA9PSBOb1BhcnQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aW52
YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
ICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlT
Y3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7
Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGVhc2VPdXRDdWJp
Yyhkb3VibGUgdCkKLXsKLSAgICBkb3VibGUgcCA9IHQgLSAxOwotICAgIHJldHVybiBwICogcCAq
IHAgKyAxOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
IGRvdWJsZSBwcm9ncmVzcyA9IDE7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIDwgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uRW5kVGltZSkKLSAgICAgICAgcHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUg
LSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUpLnZhbHVlKCkgLyAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSkudmFsdWUoKTsKLSAgICBwcm9ncmVzcyA9IG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblNvdXJjZSArIChlYXNlT3V0Q3ViaWMocHJvZ3Jlc3MpICogKG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRhcmdldCAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSkp
OwotICAgIGlmIChwcm9ncmVzcyAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
KSB7Ci0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSBwcm9ncmVz
czsKLSAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZnJh
bWVSYXRlID0gNjA7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHRpY2tUaW1lID0gMV9z
IC8gZnJhbWVSYXRlOwotICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5pbXVtVGltZXJJ
bnRlcnZhbCA9IDFfbXM7Ci0gICAgICAgIFNlY29uZHMgZGVsdGFUb05leHRGcmFtZSA9IHN0ZDo6
bWF4KHRpY2tUaW1lIC0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gY3VycmVudFRpbWUpLCBtaW5p
bXVtVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChkZWx0YVRvTmV4dEZyYW1lKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmlj
OjpzaG93T3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJz
TG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGltZXIuaXNBY3RpdmUoKSAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJn
ZXQgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyLnN0b3AoKTsKLQotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAm
JiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQ7Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID0gMTsK
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ICE9IG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25T
dGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCkKLXsKLSAgICBpZiAobV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSAmJiAhbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVy
bGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQgPSAwOwotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQg
PT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6
Om5vdygpICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25TdGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbiArIG92ZXJm
bG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheTsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qob3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlk
ZURlbGF5KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCkKLXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQotewotICAgIGhp
ZGVPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6
bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygp
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6Y29udGVudEFyZWFEaWRTaG93KCkK
LXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckdlbmVyaWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9s
bGJhcnNMb2NrZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5zdG9wKCk7Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQpIHsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7
Ci0gICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwotICAgIH0KLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29u
c3QgRmxvYXRTaXplJikKLXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRl
bihib29sIHNob3VsZExvY2tTdGF0ZSkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xv
Y2tlZCA9PSBzaG91bGRMb2NrU3RhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlT
Y3JvbGxiYXJzTG9ja2VkID0gc2hvdWxkTG9ja1N0YXRlOwotCi0gICAgaWYgKCFtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpIHsKLSAgICAg
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAo
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsT3Zl
cmxheVNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5z
ZXRPcGFjaXR5KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25DdXJyZW50ID09IDEpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xs
YmFyc09wYWNpdHkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hvd092ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci0gICAgfQotfQotCi0vLyBGSVhNRTogQ2FuIHdlIGp1c3QgdXNlIHRoZSBiYXNl
IGNsYXNzIGltcGxlbWVudGF0aW9uPwotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNjcm9s
bEFuaW1hdGlvbkRpZFVwZGF0ZShTY3JvbGxBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgaWYgKCZhbmltYXRpb24gPT0gbV9raW5ldGljQW5p
bWF0aW9uLmdldCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDbGFyaWZ5IGhvdyBhbmltYXRpb25z
IGludGVyYWN0LiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSBhY3RpdmUgYXQg
YSB0aW1lLgotICAgICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+c3RvcCgpOwotICAgICAgICB1cGRh
dGVQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3Jv
bGxBbmltYXRvcjo6c2Nyb2xsQW5pbWF0aW9uRGlkVXBkYXRlKGFuaW1hdGlvbiwgcG9zaXRpb24p
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCmluZGV4IGY0ODhm
MmY1YTE5N2I3NDYyNTRiZDIwNzA1ZjhkODRkMjI5MTAyNjQuLjdjMjdiYTYwNDgzNjZiN2UxMDE5
OTdjOWU3NjhhNGE5MDA5MmU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaApAQCAtNDQsMjUgKzQ0LDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckdlbmVyaWMoKTsKIAogcHJpdmF0
ZToKLSAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmLCBTY3JvbGxDbGFtcGluZykgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VNb3ZlZEluQ29u
dGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIG92ZXJy
aWRlOwotICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBu
b3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRl
OwotICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJy
aWRlOworICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYsIFNjcm9sbENsYW1waW5nKSBmaW5hbDsKKyAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAKICAgICAvLyBTY3JvbGxBbmlt
YXRpb25DbGllbnQKLSAgICB2b2lkIHNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3JvbGxBbmlt
YXRpb24mLCBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24pIG92ZXJyaWRlOworICAg
IHZvaWQgc2Nyb2xsQW5pbWF0aW9uRGlkVXBkYXRlKFNjcm9sbEFuaW1hdGlvbiYsIGNvbnN0IEZs
b2F0UG9pbnQmIGN1cnJlbnRQb3NpdGlvbikgZmluYWw7CiAKICAgICB2b2lkIHVwZGF0ZVBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIApAQCAtNzIsMTUgKzU4LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1hdGlvbjsKLSAgICBT
Y3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07Ci0gICAg
U2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKLSAgICBi
b29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxzZSB9OwotICAgIFRpbWVyIG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyOwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25Tb3VyY2UgeyAwIH07Ci0gICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRhcmdldCB7IDAgfTsKLSAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblN0YXJ0VGltZTsKLSAgICBNb25vdG9uaWNUaW1lIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvbkVuZFRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2Vu
ZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250
cm9sbGVyR2VuZXJpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFhNzUyN2E1NGU3MzE1Y2UxMDRlOWI0NWI3
NmFjNTMyOGY0ZDlmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmNwcApAQCAtMCwwICsxLDI0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuaCIKKworI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9vdGgu
aCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFNlY29uZHMgb3ZlcmZs
b3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24geyAxX3MgfTsKK3N0YXRpYyBjb25zdCBTZWNv
bmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheSB7IDJfcyB9OworCitzdGQ6
OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+IFNjcm9sbGJhcnNDb250cm9sbGVyOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIHJldHVybiBtYWtl
VW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYz4oc2Nyb2xsYWJsZUFyZWEpOworfQor
CitTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OlNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJp
YyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxiYXJzQ29udHJv
bGxlcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRp
bWVyKCp0aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
Ojp+U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljKCkgPSBkZWZhdWx0OworCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyR2VuZXJpYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJh
ciA9IHNjcm9sbGJhcjsKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIpCisg
ICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAxOworICAgIG1fdmVy
dGljYWxPdmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQpOworICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNj
cm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisgICAgbV9ob3Jpem9udGFsT3Zlcmxh
eVNjcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Nyb2xs
YmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAg
ICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvbkN1cnJlbnQpOworICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmIChtX3ZlcnRpY2FsT3Zlcmxh
eVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhciA9IG51bGxwdHI7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5
U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MDsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OndpbGxSZW1vdmVIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmIChtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAg
IG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOworICAgIGlmICghbV92ZXJ0
aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
bkN1cnJlbnQgPSAwOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6dXBk
YXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCkKK3sKKyAgICBpZiAobV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX3Zl
cnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7CisgICAgICAgIG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQpOworICAgICAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQ
YXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIt
PmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9s
bGJhciAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXItPm9wYWNpdHkoKSkgeworICAgICAgICBtX2hvcml6b250YWxPdmVy
bGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJl
bnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+aG92ZXJlZFBh
cnQoKSA9PSBOb1BhcnQpCisgICAgICAgICAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
LT5pbnZhbGlkYXRlKCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBlYXNlT3V0
Q3ViaWMoZG91YmxlIHQpCit7CisgICAgZG91YmxlIHAgPSB0IC0gMTsKKyAgICByZXR1cm4gcCAq
IHAgKiBwICsgMTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6Om92ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBpZiAoIW1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAxOworICAgIGlmIChjdXJyZW50VGltZSA8IG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUpCisgICAgICAgIHByb2dyZXNzID0gKGN1
cnJlbnRUaW1lIC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52YWx1ZSgp
IC8gKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgLSBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25TdGFydFRpbWUpLnZhbHVlKCk7CisgICAgcHJvZ3Jlc3MgPSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgKyAoZWFzZU91dEN1YmljKHByb2dyZXNzKSAqIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgLSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25Tb3VyY2UpKTsKKyAgICBpZiAocHJvZ3Jlc3MgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
ID0gcHJvZ3Jlc3M7CisgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwor
ICAgIH0KKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIGZyYW1lUmF0ZSA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyB0aWNr
VGltZSA9IDFfcyAvIGZyYW1lUmF0ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgbWlu
aW11bVRpbWVySW50ZXJ2YWwgPSAxX21zOworICAgICAgICBTZWNvbmRzIGRlbHRhVG9OZXh0RnJh
bWUgPSBzdGQ6Om1heCh0aWNrVGltZSAtIChNb25vdG9uaWNUaW1lOjpub3coKSAtIGN1cnJlbnRU
aW1lKSwgbWluaW11bVRpbWVySW50ZXJ2YWwpOworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoZGVsdGFUb05leHRGcmFtZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKCkKK3sKKyAgICBpZiAobV9v
dmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgJiYgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uVGFyZ2V0ID09IDEpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRhcmdldCA9IDE7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdl
dCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KSB7CisgICAgICAgIG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lID0gbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVy
YXRpb247CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOworICAgIH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmhpZGVPdmVybGF5U2Nyb2xs
YmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLmlzQWN0
aXZlKCkgJiYgIW1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAg
IGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblNvdXJjZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQ7CisgICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID0gMDsKKyAgICBpZiAobV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID09IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJl
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFy
dFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlv
bkhpZGVEZWxheTsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lID0gbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5p
bWF0aW9uRHVyYXRpb24gKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7Cisg
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KG92ZXJmbG93
U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJHZW5lcmljOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgc2hvd092ZXJs
YXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKCkKK3sKKyAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpCit7CisgICAgc2hv
d092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5l
cmljOjpjb250ZW50QXJlYURpZEhpZGUoKQoreworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJz
TG9ja2VkKQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIuc3RvcCgpOworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
KSB7CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAwOworICAg
ICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICB9Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNv
bnN0IEZsb2F0U2l6ZSYpCit7CisgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRl
VG9IaWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9s
bGJhcnNMb2NrZWQgPT0gc2hvdWxkTG9ja1N0YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9v
dmVybGF5U2Nyb2xsYmFyc0xvY2tlZCA9IHNob3VsZExvY2tTdGF0ZTsKKworICAgIGlmICghbV9o
b3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKSB7
CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KDApOworICAgICAgICBpZiAobV92ZXJ0
aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9s
bGJhci0+c2V0T3BhY2l0eSgwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9PSAxKQorICAgICAgICAgICAgdXBkYXRlT3Zlcmxh
eVNjcm9sbGJhcnNPcGFjaXR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNob3dPdmVy
bGF5U2Nyb2xsYmFycygpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250
cm9sbGVyR2VuZXJpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzJjNTFhNzBlNWIyNmM2NjQ3ODE2
NGY4ZGRjM2UxZDg3YzYxYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljIGZp
bmFsIDogcHVibGljIFNjcm9sbGJhcnNDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB2aXJ0
dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2b2lk
IHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2
b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwor
CisgICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZvaWQg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZvaWQgbW91c2VNb3ZlZElu
Q29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIG92
ZXJyaWRlOworICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJy
aWRlOworICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92
ZXJyaWRlOworCisgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgp
OworICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgdm9pZCBoaWRlT3Zlcmxh
eVNjcm9sbGJhcnMoKTsKKyAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgp
OworCisgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0
ciB9OworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRy
IH07CisgICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKKyAgICBU
aW1lciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcjsKKyAgICBkb3VibGUgbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07CisgICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWU7CisgICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25FbmRUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9T
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaAppbmRl
eCBmMGY4ODMzNmZiYmQ3ZGZjNGI1ZDE5YmI0NGI3OWY1NzMwZGE3NTAxLi44YjgxZjkwNGY2ZTI1
ZmZhMWEwZGYyMjZlMWZhZTRmYTUxYTMxZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaApAQCAtNTUsMTYgKzU1LDE2IEBAIHByaXZhdGU6
CiAgICAgICAgIEF4aXNMYXRjaEhvcml6b250YWwsCiAgICAgICAgIEF4aXNMYXRjaFZlcnRpY2Fs
CiAgICAgfTsKLSAgICBBeGlzTGF0Y2ggbV90b3VjaFNjcm9sbEF4aXNMYXRjaDsKLSAgICBib29s
IG1faW5Ub3VjaFNlcXVlbmNlOwotICAgIGJvb2wgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXM7Ci0g
ICAgYm9vbCBtX3N0YXJ0ZWRTY3JvbGw7CisgICAgQXhpc0xhdGNoIG1fdG91Y2hTY3JvbGxBeGlz
TGF0Y2ggeyBBeGlzTGF0Y2hOb3RDb21wdXRlZCB9OworICAgIGJvb2wgbV9pblRvdWNoU2VxdWVu
Y2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9zdGFydGVkU2Nyb2xsIHsgZmFsc2UgfTsKICAgICBJbnRQb2ludCBtX2Zp
cnN0VG91Y2hQb2ludDsKICAgICBJbnRQb2ludCBtX2xhc3RUb3VjaFBvaW50OwogCiAgICAgLy8g
V2hlbiB3ZSdyZSBpbiBhIHRvdWNoIHNlcXVlbmNlLCB0aGlzIHdpbGwgcG9pbnQgdG8gdGhlIHNj
cm9sbGFibGUgYXJlYSB0aGF0CiAgICAgLy8gc2hvdWxkIGFjdHVhbGx5IGJlIHNjcm9sbGVkIGR1
cmluZyB0aGUgc2VxdWVuY2UuCi0gICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWFG
b3JUb3VjaFNlcXVlbmNlOworICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhRm9y
VG91Y2hTZXF1ZW5jZSB7IG51bGxwdHIgfTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCmluZGV4IGNiNGZiNzg4NGM4
NDA2MzUzN2U3NTAyYzYyM2M0NGJlYjM2Y2E3ZjcuLmQ5NzZlNGVhNGNmOWYwZDA4NmJlOWFlMzBh
NzZlNTU4YThhOWM2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9T
Y3JvbGxBbmltYXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MubW0KQEAgLTQ1LDEzICs0NSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxTY3Jv
bGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsCiAKIFNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJl
YSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkK
LSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwgbV90b3VjaFNjcm9sbEF4aXNMYXRjaChB
eGlzTGF0Y2hOb3RDb21wdXRlZCkKLSAgICAsIG1faW5Ub3VjaFNlcXVlbmNlKGZhbHNlKQotICAg
ICwgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMoZmFsc2UpCi0gICAgLCBtX3N0YXJ0ZWRTY3JvbGwo
ZmFsc2UpCi0gICAgLCBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSgwKQotI2VuZGlm
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmgKaW5kZXggNzg5YTU2MzhmYjY2MWQ3Mzk2ZGRkZmM0NzQ5NjFjZjQ4NjQ0N2YyZS4uYjM4
Y2UyYWI0NDVlZDUxMTMyMTFjNWI4NWM0NDExMzkzZjhiMTcyNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKQEAgLTI4LDExOSArMjgsNDcg
QEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNs
dWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogCiBPQkpDX0NMQVNTIFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlOwotT0JKQ19DTEFTUyBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZTsKLU9CSkNfQ0xBU1Mg
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsKLQotdHlwZWRlZiBpZCBTY3JvbGxlckltcFBhaXI7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsYmFyOwogCi1jbGFzcyBTY3JvbGxB
bmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitjbGFzcyBTY3JvbGxBbmltYXRv
ck1hYyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiBwdWJsaWM6CiAgICAgU2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRv
ck1hYygpOwogCiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1Bvc2l0aW9uRm9yU2Nyb2xsQW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKLSAgICBib29sIGhhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQ7IH0KLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwotCi0gICAgYm9vbCBz
Y3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHN0YXJ0U2Nyb2xs
YmFyUGFpbnRUaW1lcigpOwotICAgIHZvaWQgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKLQot
ICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQot
ICAgIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6
Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKLSAgICBSZXRhaW5Q
dHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGU7Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsZXJJbXBQYWlyPiBtX3Njcm9sbGVy
SW1wUGFpcjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+IG1fc2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdh
dGU+IG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPFdlYlNj
cm9sbGVySW1wRGVsZWdhdGU+IG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlOwotCi0gICAg
dm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKCk7Ci0gICAgVGltZXIgbV9pbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLQotICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lckZpcmVkKCk7Ci0gICAgVGltZXIgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVy
OwotICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhOwot
Ci0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+
KSBvdmVycmlkZTsKLSAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZyA9IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkKSBvdmVycmlkZTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIsIE9wdGlvblNldDxTY3JvbGxCZWhhdmlvcj4pIGZpbmFsOworICAgIGJvb2wgc2Nyb2xs
VG9Qb3NpdGlvbldpdGhBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIGJv
b2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24sIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwog
CiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGJvb2wgc2hvdWxkRm9yd2FyZFdoZWVs
RXZlbnRzVG9QYXJlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Q7Ci0gICAgYm9v
bCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5h
bDsKICNlbmRpZgogCi0gICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UpIG92ZXJyaWRlOworICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlKSBmaW5hbDsKIAotICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9u
cygpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIGZpbmFsOwogICAgIAot
ICAgIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92
ZXJyaWRlOwotICAgIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNj
cm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIo
U2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xs
YmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgY29udGVudEFyZWFEaWRTaG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURp
ZEhpZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0
OwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotICAgIHZvaWQgbWF5QmVn
aW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tTdGF0ZSkgZmluYWw7Ci0KLSAgICB2b2lkIGRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotICAgIHZvaWQg
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgdmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIHNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9s
bGJhciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNv
bnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwotCi0gICAgLy8gc2VuZENvbnRlbnRBcmVh
U2Nyb2xsZWRTb29uKCkgd2lsbCBkbyB0aGUgc2FtZSB3b3JrIHRoYXQgc2VuZENvbnRlbnRBcmVh
U2Nyb2xsZWQoKSBkb2VzIGV4Y2VwdAotICAgIC8vIGl0IGRvZXMgaXQgYWZ0ZXIgYSB6ZXJvLWRl
bGF5IHRpbWVyIGZpcmVzLiBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHVwZGF0aW5nIG92ZXJs
YXkgc2Nyb2xsYmFyIAotICAgIC8vIGluZm9ybWF0aW9uIGR1cmluZyBsYXlvdXQuCi0gICAgdm9p
ZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsK
LSAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihjb25zdCBGbG9hdFNpemUmIHNj
cm9sbERlbHRhKTsKKyAgICB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmIGRlbHRhKSBmaW5hbDsKIAogICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25J
Zk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKLSAgICBib29sIGlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzUnViYmVyQmFuZElu
UHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKIAotICAg
IFN0cmluZyBob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgZmluYWw7
Ci0gICAgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QgZmlu
YWw7Ci0KLSAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9y
U2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKIAogICAgIC8vIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50LgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKQEAgLTE1Nyw5ICs4NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxQb3Np
dGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7Ci0gICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OworICAgIFJldGFp
blB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7CisgICAgUmV0YWluUHRyPFdlYlNjcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmluZGV4IDg0Y2NkZTk1YmQ2NGQ4NmUzMjM5
NTgzODdlYTllYmIxYjc4Nzk4ZWIuLmM0NzQ5MGZiN2RmNjg2YjQxNTM4OTQ1N2E0NTdhY2ViYzVh
NmQyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0
b3JNYWMubW0KQEAgLTMxLDQ2ICszMSwyMCBAQAogI2ltcG9ydCAiR3JhZGllbnQuaCIKICNpbXBv
cnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk5TU2Ny
b2xsZXJJbXBEZXRhaWxzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBv
cnQgIlNjcm9sbFZpZXcuaCIKICNpbXBvcnQgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW1wb3J0ICJT
Y3JvbGxiYXJUaGVtZS5oIgotI2ltcG9ydCAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKLSNpbXBvcnQg
PHBhbC9zcGkvbWFjL05TU2Nyb2xsZXJJbXBTUEkuaD4KKyNpbXBvcnQgIlNjcm9sbGJhcnNDb250
cm9sbGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8
d3RmL05ha2VkUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNjcm9sbGJhclRoZW1lTWFjKiBtYWNTY3JvbGxiYXJU
aGVtZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgp
ID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpIDogbnVs
bHB0cjsKLX0KLQotc3RhdGljIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFy
KFNjcm9sbGJhciYgc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZU1hYzo6
cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KIHVzaW5nIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOwogdXNpbmcgV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM7CiB1c2luZyBXZWJDb3JlOjpTY3JvbGxiYXI7Ci11c2luZyBXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZU1hYzsKIHVzaW5nIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI7CiB1c2lu
ZyBXZWJDb3JlOjpWZXJ0aWNhbFNjcm9sbGJhcjsKLXVzaW5nIFdlYkNvcmU6Om1hY1Njcm9sbGJh
clRoZW1lOwogdXNpbmcgV2ViQ29yZTo6SW50UmVjdDsKLXVzaW5nIFdlYkNvcmU6OlRodW1iUGFy
dDsKLXVzaW5nIFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb247Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi11c2luZyBXZWJDb3JlOjpMb2dPdmVybGF5U2Nyb2xsYmFyczsKLSNlbmRpZgog
CiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQogLSAo
aWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CkBAIC0xNzYsNTIyICsxNTAsNiBAQCAt
ICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcwogCiBAZW5kCiAKLUBpbnRlcmZhY2Ug
V2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgOiBOU09iamVjdCA8TlNTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZT4KLXsKLSAgICBTY3JvbGxhYmxlQXJlYSogX3Njcm9sbGFibGVBcmVhOwotfQotLSAo
aWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVh
OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUKLQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTooU2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVB
cmVhCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWE7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9zY3Jv
bGxhYmxlQXJlYSA9IDA7Ci19Ci0KLS0gKE5TUmVjdCljb250ZW50QXJlYVJlY3RGb3JTY3JvbGxl
ckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0g
ICAgICAgIHJldHVybiBOU1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50
c1NpemUgPSBfc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpOwotICAgIHJldHVybiBOU01h
a2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkp
OwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxl
ckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJ
bXBQYWlyKTsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIE5POwot
Ci0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+aW5MaXZlUmVzaXplKCk7Ci19Ci0KLS0gKE5T
UG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KE5TU2Ny
b2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBO
U1plcm9Qb2ludDsKLQotICAgIC8vIEl0J3MgT0sgdGhhdCB0aGlzIHBvc2l0aW9uIGlzbid0IHJl
bGF0aXZlIHRvIHRoaXMgc2Nyb2xsZXIgKHdoaWNoIG1pZ2h0IGJlIGFuIG92ZXJmbG93IHNjcm9s
bGVyKS4KLSAgICAvLyBBcHBLaXQganVzdCB0YWtlcyB0aGUgcmVzdWx0IGFuZCBwYXNzZXMgaXQg
YmFjayB0byAtc2Nyb2xsZXJJbXBQYWlyOmNvbnZlcnRDb250ZW50UG9pbnQ6dG9TY3JvbGxlcklt
cDouCi0gICAgcmV0dXJuIF9zY3JvbGxhYmxlQXJlYS0+bGFzdEtub3duTW91c2VQb3NpdGlvbklu
VmlldygpOwotfQotCi0tIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBh
aXIgKilzY3JvbGxlckltcFBhaXIgY29udmVydENvbnRlbnRQb2ludDooTlNQb2ludClwb2ludElu
Q29udGVudEFyZWEgdG9TY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0KLSAgICBpZiAoIV9zY3JvbGxh
YmxlQXJlYSB8fCAhc2Nyb2xsZXJJbXApCi0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQot
ICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKLSAgICBpZiAoW3Njcm9sbGVy
SW1wIGlzSG9yaXpvbnRhbF0pCi0gICAgICAgIHNjcm9sbGJhciA9IF9zY3JvbGxhYmxlQXJlYS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGVsc2UgCi0gICAgICAgIHNjcm9sbGJhciA9IF9z
Y3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLQotICAgIC8vIEl0IGlzIHBvc3Np
YmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBoZXJlIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZv
ciB0aGlzIGRlbGVnYXRlCi0gICAgLy8gbWV0aG9kIHRvIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBt
b21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVlbiBzZXQgdG8gMCBhbmQgdGhlCi0gICAgLy8g
bW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkLiBXZSBzaG91bGQgcHJv
YmFibHkgZGUtY291cGxlIHNvbWUKLSAgICAvLyBvZiB0aGUgY2xlYW4tdXAgd29yayBpbiBTY3Jv
bGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKLSAgICAv
LyBpc3N1ZS4KLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50
OwotCi0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpz
Y3JvbGxiYXIpKTsKLQotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXcoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvaW50SW5Db250ZW50QXJlYSkpOwotfQot
Ci0tICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlcklt
cFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3Qp
OwotCi0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuY29udGVu
dEFyZWFXaWxsUGFpbnQoKTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xs
ZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9s
bGVyU3R5bGUKLXsKLSAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOm5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZV07Ci0KLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwotfQot
Ci1AZW5kCi0KLWVudW0gRmVhdHVyZVRvQW5pbWF0ZSB7Ci0gICAgVGh1bWJBbHBoYSwKLSAgICBU
cmFja0FscGhhLAotICAgIFVJU3RhdGVUcmFuc2l0aW9uLAotICAgIEV4cGFuc2lvblRyYW5zaXRp
b24KLX07Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgRmVhdHVyZVRvQW5pbWF0ZSBmZWF0dXJlKQotewotICAgIHN3aXRj
aCAoZmVhdHVyZSkgewotICAgIGNhc2UgVGh1bWJBbHBoYTogdHMgPDwgIlRodW1iQWxwaGEiIDsg
YnJlYWs7Ci0gICAgY2FzZSBUcmFja0FscGhhOiB0cyA8PCAiVHJhY2tBbHBoYSIgOyBicmVhazsK
LSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9uOiB0cyA8PCAiVUlTdGF0ZVRyYW5zaXRpb24iIDsg
YnJlYWs7Ci0gICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9uOiB0cyA8PCAiRXhwYW5zaW9uVHJh
bnNpdGlvbiIgOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLUBp
bnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TT2JqZWN0Ci17Ci0gICAgU2Ny
b2xsYmFyKiBfc2Nyb2xsYmFyOwotICAgIFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xs
ZXJJbXA7Ci0gICAgRmVhdHVyZVRvQW5pbWF0ZSBfZmVhdHVyZVRvQW5pbWF0ZTsKLSAgICBDR0Zs
b2F0IF9zdGFydFZhbHVlOwotICAgIENHRmxvYXQgX2VuZFZhbHVlOwotICAgIE5TVGltZUludGVy
dmFsIF9kdXJhdGlvbjsKLSAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3RpbWVyOwotICAgIFJldGFp
blB0cjxOU0RhdGU+IF9zdGFydERhdGU7Ci0gICAgUmVmUHRyPEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb24+IF90aW1pbmdGdW5jdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihTY3Jv
bGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1
cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENH
RmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotLSAodm9p
ZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcjsKLS0gKHZvaWQpc2V0RHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotLSAodm9pZClzdG9wQW5pbWF0aW9uOwotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgotCi0tIChpZClp
bml0V2l0aFNjcm9sbGJhcjooU2Nyb2xsYmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZToo
RmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0
YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGltZUlu
dGVydmFsID0gMC4wMTsKLSAgICBfdGltZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5p
dFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0gaW50
ZXJ2YWw6dGltZUludGVydmFsIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzZXRDdXJy
ZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdKTsKLSAgICBfZHVyYXRpb24g
PSBkdXJhdGlvbjsKLSAgICBfdGltaW5nRnVuY3Rpb24gPSBDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6RWFzZUluT3V0KTsKLQotICAg
IExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJDcmVhdGluZyBX
ZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZlYXR1cmVUb0FuaW1hdGUgPDwgIiBm
cm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5kVmFsdWUpOwotCi0gICAgX3Njcm9s
bGJhciA9IHNjcm9sbGJhcjsKLSAgICBfZmVhdHVyZVRvQW5pbWF0ZSA9IGZlYXR1cmVUb0FuaW1h
dGU7Ci0gICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOwotICAgIF9lbmRWYWx1ZSA9IGVuZFZh
bHVlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc3RhcnRBbmltYXRpb24KLXsK
LSAgICBBU1NFUlQoX3Njcm9sbGJhcik7Ci0KLSAgICBfc2Nyb2xsZXJJbXAgPSBzY3JvbGxlcklt
cEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oT3Zlcmxh
eVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwg
c2VsZiA8PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKLQot
ICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfdGltZXIuZ2V0KCkgZm9yTW9k
ZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgX3N0YXJ0RGF0ZSA9IGFkb3B0TlMoW1tOU0Rh
dGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0pOwotfQotCi0tICh2b2lk
KXNldFN0YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1ZQotewotICAgIF9zdGFydFZhbHVlID0g
c3RhcnRWYWx1ZTsKLX0KLQotLSAodm9pZClzZXRFbmRWYWx1ZTooQ0dGbG9hdCllbmRWYWx1ZQot
ewotICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRQcm9n
cmVzczooTlNUaW1lciAqKXRpbWVyCi17Ci0gICAgQ0dGbG9hdCBwcm9ncmVzcyA9IDA7Ci0gICAg
TlNEYXRlICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF07Ci0g
ICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGltZUludGVydmFsU2luY2VEYXRlOl9z
dGFydERhdGUuZ2V0KCldOwotICAgIGlmIChlbGFwc2VkID4gX2R1cmF0aW9uKSB7Ci0gICAgICAg
IHByb2dyZXNzID0gMTsKLSAgICAgICAgW3RpbWVyIGludmFsaWRhdGVdOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIE5TVGltZUludGVydmFsIHQgPSAxOwotICAgICAgICBpZiAoX2R1cmF0aW9uKQot
ICAgICAgICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRpb247Ci0gICAgICAgIHByb2dyZXNzID0g
X3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9kdXJhdGlvbik7Ci0gICAgfQotICAg
IEFTU0VSVChfc2Nyb2xsYmFyKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xs
YmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gIiA8PCBzZWxmIDw8
ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8PCJdIGZvciAiIDw8IF9mZWF0dXJl
VG9BbmltYXRlKTsKLQotICAgIENHRmxvYXQgY3VycmVudFZhbHVlOwotICAgIGlmIChfc3RhcnRW
YWx1ZSA+IF9lbmRWYWx1ZSkKLSAgICAgICAgY3VycmVudFZhbHVlID0gMSAtIHByb2dyZXNzOwot
ICAgIGVsc2UKLSAgICAgICAgY3VycmVudFZhbHVlID0gcHJvZ3Jlc3M7Ci0KLSAgICBzd2l0Y2gg
KF9mZWF0dXJlVG9BbmltYXRlKSB7Ci0gICAgY2FzZSBUaHVtYkFscGhhOgotICAgICAgICBbX3Nj
cm9sbGVySW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRyYWNrQWxwaGE6Ci0gICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VHJhY2tBbHBoYTpj
dXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVJU3RhdGVUcmFuc2l0aW9u
OgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6Y3Vy
cmVudFZhbHVlXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHBhbnNpb25UcmFuc2l0aW9u
OgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzczpj
dXJyZW50VmFsdWVdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIV9zY3JvbGxi
YXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKLSAgICAgICAgX3Njcm9sbGJh
ci0+aW52YWxpZGF0ZSgpOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKLSAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgX3Njcm9sbGJhciA9IDA7Ci19Ci0KLS0gKHZvaWQp
c2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgX2R1cmF0aW9uID0g
ZHVyYXRpb247Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewotICAgIFtfdGltZXIgaW52
YWxpZGF0ZV07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJTY3JvbGxlckltcERlbGVnYXRl
IDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZSwgTlNTY3JvbGxlckltcERlbGVnYXRlPgot
ewotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogX3Njcm9sbGJhcjsKLQotICAgIFJldGFpblB0cjxX
ZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfa25vYkFscGhhQW5pbWF0aW9uOwotICAgIFJldGFp
blB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdHJhY2tBbHBoYUFuaW1hdGlvbjsKLSAg
ICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3VpU3RhdGVUcmFuc2l0aW9u
QW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfZXhw
YW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihX
ZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcjsKLS0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsK
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1wRGVsZWdhdGUKLQotLSAoaWQp
aW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZCljYW5jZWxBbmltYXRpb25zCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi0gICAgW19rbm9iQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW190
cmFja0FscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIFtfdWlTdGF0ZVRyYW5zaXRp
b25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5p
bWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0K
LQotLSAoTmFrZWRQdHI8U2Nyb2xsQW5pbWF0b3JNYWM+KXNjcm9sbEFuaW1hdG9yCi17Ci0gICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKSk7Ci19Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVj
dFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0tIChO
U1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJu
IGFSZWN0OwotfQotCi0tIChDQUxheWVyICopbGF5ZXIKLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAoIVNjcm9sbGJhclRoZW1lTWFjOjppc0N1
cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyOwotICAgIGlmIChfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGVsc2UKLSAgICAgICAg
bGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpOwotCi0gICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdOwotICAgIHJldHVybiBsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkg
OiBkdW1teUxheWVyOwotfQotCi0tIChOU1BvaW50KW1vdXNlTG9jYXRpb25JblNjcm9sbGVyRm9y
U2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAotewotICAgIGlmICghX3Nj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgQVNTRVJUX1VOVVNF
RChzY3JvbGxlckltcCwgc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9z
Y3JvbGxiYXIpKTsKLQotICAgIGF1dG8gcG9zaXRpb25JblZpZXcgPSBfc2Nyb2xsYmFyLT5zY3Jv
bGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLSAgICByZXR1cm4g
X3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhwb3NpdGlvbkluVmlldyk7Ci19
Ci0KLS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdClyZWN0Ci17Ci0gICAgcmV0
dXJuIHJlY3Q7Ci19Ci0KLS0gKEJPT0wpc2hvdWxkVXNlTGF5ZXJQZXJQYXJ0Rm9yU2Nyb2xsZXJJ
bXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3Jv
bGxlckltcCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFk
KCk7Ci19Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotLSAoTlNBcHBlYXJhbmNl
ICopZWZmZWN0aXZlQXBwZWFyYW5jZUZvclNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Ny
b2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOwotCi0gICAgaWYgKCFf
c2Nyb2xsYmFyKQotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgICAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5jZV07Ci0gICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAgLy8gS2VlcCB0aGlzIGlu
IHN5bmMgd2l0aCBGcmFtZVZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyLgotICAgIC8vIFRoZSBiYXNl
IHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGRhcmsgQXF1YSwgc28gd2UgbWlnaHQgZ2V0IGEgbnVs
bCByZXN1bHQuCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA9IF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCkudXNlRGFya0FwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKCk7Ci0gICAgaWYgKGF1
dG8gKmFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDp1c2VEYXJrQXBw
ZWFyYW5jZSA/IE5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1YSA6IE5TQXBwZWFyYW5jZU5hbWVBcXVh
XSkKLSAgICAgICAgcmV0dXJuIGFwcGVhcmFuY2U7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KLSAgICByZXR1cm4gW05TQXBwZWFyYW5jZSBjdXJyZW50QXBwZWFyYW5j
ZV07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0jZW5kaWYKLQot
LSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFu
aW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihOU1Njcm9s
bGVySW1wICopc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFy
dCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2
YWwpZHVyYXRpb24KLXsKLSAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2Us
IHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBoZXJlLgotICAgIC8vIFRoaXMg
b3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1cm5zLgotICAgIGJvb2wgbXVzdEFuaW1hdGUgPSBbc2Vs
ZiBzY3JvbGxBbmltYXRvcl0tPmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKLQotICAgIGlm
IChbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYm
ICFtdXN0QW5pbWF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9zY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFu
aW1hdGUpIHsKLSAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zdGFydFNjcm9sbGJhclBh
aW50VGltZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHdlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFuaW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0
aW1lci4KLSAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnN0b3BTY3JvbGxiYXJQYWludFRpbWVy
KCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGFuaW1hdGluZywgc3RvcAotICAgIGlm
IChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7Ci0gICAgICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uIHN0b3BBbmltYXRpb25dOwotICAgICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gbmls
OwotICAgIH0KLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBtYWNTY3Jv
bGxiYXJUaGVtZSgpKQotICAgICAgICBtYWNUaGVtZS0+c2V0UGFpbnRDaGFyYWN0ZXJpc3RpY3NG
b3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOwotCi0gICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1
bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIp
IHsKLSAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGh1
bWJSZWN0ID0gSW50UmVjdChbc2Nyb2xsZXJQYWludGVyIHJlY3RGb3JQYXJ0Ok5TU2Nyb2xsZXJL
bm9iXSk7Ci0gICAgICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtz
ZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3Qo
KSk7Ci0gICAgfQotCi0gICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJT
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFy
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6cGFydCA9PSBUaHVtYlBhcnQgPyBUaHVt
YkFscGhhIDogVHJhY2tBbHBoYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVGcm9tOnBhcnQg
PT0gVGh1bWJQYXJ0ID8gW3Njcm9sbGVyUGFpbnRlciBrbm9iQWxwaGFdIDogW3Njcm9sbGVyUGFp
bnRlciB0cmFja0FscGhhXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZVRvOm5ld0FscGhh
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgW3Njcm9s
bGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVy
SW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zs
b2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAg
ICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChzY3JvbGxl
ckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOwotCi0gICAgTlNT
Y3JvbGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlcklt
cDsKLSAgICBpZiAoIVtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkpIHsKLSAgICAgICAgW3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTowXTsKLSAgICAgICAgX3Nj
cm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
SWYgd2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFyIGF3YXksIHRoYXQgaXMgYSBnb29kIGluZGlj
YXRpb24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdvaW5nIHRvCi0gICAgLy8gYmUgbW92aW5nIGl0
IGFyb3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gQ2FsbGluZyBbc2Nyb2xsZXJQYWludGVy
IHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQotICAgIC8vIHdpbGwgcGFzcyB0aGF0IGluZm9y
bWF0aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1wIEFQSS4KLSAgICBpZiAobmV3S25vYkFscGhh
ID09IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQot
ICAgICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKLQot
ICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tub2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxl
clBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVB
bHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Ny
b2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRv
OihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
Ci17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
c2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQot
ICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Ny
b2xsZXJJbXA7Ci0gICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1h
dGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1Ry
YWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsK
LX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFu
aW1hdGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRp
b24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOwot
Ci0gICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2Ug
YW4gYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9u
LgotICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Ny
b2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotCi0gICAgLy8gSWYgdGhlIFVJ
IHN0YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLCB0aGVuIHdlIGFyZSBubyBsb25nZXIgbW92
aW5nIHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgaWYgKF9zY3Jv
bGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKLSAgICAgICAgW3Njcm9s
bGVySW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKLQotICAgIGlmICghX3VpU3RhdGVU
cmFuc2l0aW9uQW5pbWF0aW9uKQotICAgICAgICBfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
PSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3Jv
bGxiYXI6X3Njcm9sbGJhcgotICAgICAgICAgICAgZmVhdHVyZVRvQW5pbWF0ZTpVSVN0YXRlVHJh
bnNpdGlvbgotICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFu
c2l0aW9uUHJvZ3Jlc3NdCi0gICAgICAgICAgICBhbmltYXRlVG86MS4wCi0gICAgICAgICAgICBk
dXJhdGlvbjpkdXJhdGlvbl0pOwotICAgIGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBu
ZWVkIHRvIGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwganVzdCByZXNldCB0aGUgdmFsdWVzIGlu
IGNhc2UgdGhleSBoYXZlIGNoYW5nZWQuCi0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25Bbmlt
YXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVz
c11dOwotICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEu
MF07Ci0gICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVy
YXRpb25dOwotICAgIH0KLSAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5p
bWF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9s
bGVySW1wIGFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Ny
b2xsYmFyKSk7Ci0KLSAgICAvLyBFeHBhbnNpb25UcmFuc2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0
byAxLiBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBwcm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhh
cmQgdHJhbnNpdGlvbi4KLSAgICBbc2Nyb2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNpdGlvblBy
b2dyZXNzOjEgLSBbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzXV07Ci0K
LSAgICBpZiAoIV9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uKSB7Ci0gICAgICAgIF9leHBh
bnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmlt
YXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIKLSAgICAgICAgICAgIGZl
YXR1cmVUb0FuaW1hdGU6RXhwYW5zaW9uVHJhbnNpdGlvbgotICAgICAgICAgICAgYW5pbWF0ZUZy
b206W3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzc10KLSAgICAgICAgICAg
IGFuaW1hdGVUbzoxLjAKLSAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmlt
YXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgot
ICAgICAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Ny
b2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwotICAgICAgICBbX2V4cGFuc2lv
blRyYW5zaXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4wXTsKLSAgICAgICAgW19leHBhbnNp
b25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICB9Ci0gICAg
W19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAo
dm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIG92ZXJsYXlTY3Jv
bGxlclN0YXRlQ2hhbmdlZFRvOihOU092ZXJsYXlTY3JvbGxlclN0YXRlKW5ld092ZXJsYXlTY3Jv
bGxlclN0YXRlCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKLSAgICBVTlVTRURf
UEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUK
LXsKLSAgICBfc2Nyb2xsYmFyID0gMDsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBbX2tub2JBbHBoYUFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKLSAgICBbX3RyYWNrQWxwaGFB
bmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBp
bnZhbGlkYXRlXTsKLSAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0
ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1AZW5kCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmlt
YXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKQEAgLTcwMSwzMCAr
MTU5LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsCiAKIFNjcm9sbEFuaW1hdG9yTWFjOjpT
Y3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBT
Y3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXJGaXJlZCkKLSAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcigqdGhpcywg
JlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpCi0g
ICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpCi0gICAgLCBtX25lZWRzU2Ny
b2xsZXJTdHlsZVVwZGF0ZShmYWxzZSkKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGFsbG9j
XSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhl
bHBlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxl
Z2F0ZS5nZXQoKV0pOwogCi0gICAgbV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJl
YTomc2Nyb2xsYWJsZUFyZWFdKTsKLSAgICBtX3Njcm9sbGVySW1wUGFpciA9IGFkb3B0TlMoW1tO
U1Njcm9sbGVySW1wUGFpciBhbGxvY10gaW5pdF0pOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBz
ZXREZWxlZ2F0ZTptX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlLmdldCgpXTsKLSAgICBbbV9zY3Jv
bGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNj
cm9sbGVyU3R5bGUoKV07CiB9CiAKLVNjcm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JN
YWMoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX3Njcm9sbGVy
SW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRE
ZWxlZ2F0ZTpuaWxdOwotICAgIFttX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGludmFs
aWRhdGVdOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsK
LSAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19CitTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFu
aW1hdG9yTWFjKCkgPSBkZWZhdWx0OwogCiBzdGF0aWMgYm9vbCBzY3JvbGxBbmltYXRpb25FbmFi
bGVkRm9yU3lzdGVtKCkKIHsKQEAgLTc1Myw3ICsxOTQsNyBAQCBzdGF0aWMgYm9vbCBydWJiZXJC
YW5kaW5nRW5hYmxlZEZvclN5c3RlbSgpCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIE9wdGlvblNldDxTY3JvbGxC
ZWhhdmlvcj4gYmVoYXZpb3IpCiB7Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0g
dHJ1ZTsKKyAgICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKHRydWUpOwogCiAgICAgLy8g
VGhpcyBtZXRob2QgZG9lc24ndCBkbyBkaXJlY3Rpb25hbCBzbmFwcGluZywgYnV0IG91ciBiYXNl
IGNsYXNzIGRvZXMuIEl0IHdpbGwgY2FsbCBpbnRvCiAgICAgLy8gU2Nyb2xsQW5pbWF0b3JNYWM6
OnNjcm9sbCBhZ2FpbiB3aXRoIHRoZSBzbmFwcGVkIHBvc2l0aW9ucyBhbmQgU2Nyb2xsQmVoYXZp
b3I6OkRlZmF1bHQuCkBAIC04NDAsNDMgKzI4MSw2IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6
OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAogICAgIHJldHVybiBtX3Njcm9sbENvbnRy
b2xsZXIuaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOwogfQogCi1zdGF0aWMgU3RyaW5nIHNjcm9s
bGJhclN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghc2Nyb2xsYmFyKQot
ICAgICAgICByZXR1cm4gIm5vbmUiX3M7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAg
ICByZXN1bHQuYXBwZW5kKHNjcm9sbGJhci0+ZW5hYmxlZCgpID8gImVuYWJsZWQiX3MgOiAiZGlz
YWJsZWQiX3MpOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0KLSAgICBOU1Njcm9sbGVySW1wICpz
Y3JvbGxlckltcCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOwotICAgIGlm
ICghc2Nyb2xsZXJJbXApCi0gICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQotICAg
IGlmIChzY3JvbGxlckltcC5leHBhbmRlZCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLGV4cGFu
ZGVkIl9zKTsKLQotICAgIGlmIChzY3JvbGxlckltcC50cmFja0FscGhhID4gMCkKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgiLHZpc2libGVfdHJhY2siX3MpOwotCi0gICAgaWYgKHNjcm9sbGVySW1w
Lmtub2JBbHBoYSA+IDApCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RodW1iIl9z
KTsKLQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIFNjcm9sbEFu
aW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUobV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Ny
b2xsYmFyKCkpOwotfQotCi1TdHJpbmcgU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xs
YmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUo
bV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNjcm9sbEFuaW1hdGlvbihj
b25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxBbmlt
YXRpb25IZWxwZXIpOwpAQCAtODg1LDMxOSArMjg5LDE1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb25Gb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxv
YXRQCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewotICAgIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoZGVs
dGEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKICAgICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9z
aXRpb25DaGFuZ2VkKGRlbHRhKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVu
dEFyZWFXaWxsUGFpbnQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Ny
b2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJs
ZUFyZWEoKSA8PCAiXSBjb250ZW50QXJlYVdpbGxQYWludCAoc2Nyb2xsZXJzIGxvY2tlZCAiIDw8
IFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSA8PCAiKSIp
OwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9j
a2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfQkVHSU4KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFXaWxsRHJhd107Ci0g
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkKLXsKLSAgICBMT0dfV0lUSF9TVFJF
QU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsi
IDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VFbnRlcmVkQ29udGVudEFyZWEiKTsKLSAg
ICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFbnRlcmVkQ29u
dGVudEFyZWFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRl
bnRBcmVhKCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVh
bSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0g
bW91c2VFeGl0ZWRDb250ZW50QXJlYSIpOwotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zl
cmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Nj
cm9sbGVySW1wUGFpciBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIExPR19XSVRIX1NU
UkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3Ig
WyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOwot
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYV07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICAvLyBBdCB0aGlzIHRp
bWUsIG9ubHkgbGVnYWN5IHNjcm9sbGJhcnMgbmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhl
cmUuCi0gICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9
IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFttX3Nj
cm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqc2Nyb2xsYmFyKSkKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xs
ZXJdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICAvLyBBdCB0aGlzIHRpbWUsIG9ubHkg
bGVnYWN5IHNjcm9sbGJhcnMgbmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhlcmUuCi0gICAg
aWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xs
ZXJTdHlsZUxlZ2FjeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFttX3Njcm9sbGVySW1w
UGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigq
c2Nyb2xsYmFyKSkKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0Ci17Ci0gICAgaWYgKFttX3Njcm9s
bGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKSkgewotICAgICAgICBbcGFpbnRlciBzZXRUcmFja2luZzptb3VzZUlz
RG93bl07Ci0gICAgICAgIGlmIChtb3VzZUlzRG93bikKLSAgICAgICAgICAgIFttX3Njcm9sbGVy
SW1wUGFpciBiZWdpblNjcm9sbEdlc3R1cmVdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBb
bV9zY3JvbGxlckltcFBhaXIgZW5kU2Nyb2xsR2VzdHVyZV07Ci0gICAgfQotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAoW21fc2Ny
b2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBpZiAo
W21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFEaWRSZXNpemVd
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0g
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZExpdmVSZXNpemVd
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZFNob3coKQotewot
ICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciB3aW5kb3dPcmRlcmVk
SW5dOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKQot
ewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciB3aW5kb3dPcmRl
cmVkT3V0XTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0
dXJlKCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0
cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwg
Il0gZGlkQmVnaW5TY3JvbGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWly
IG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBb
bV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLQotICAgIGlmIChtX3doZWVs
RXZlbnRUZXN0TW9uaXRvcikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPmRlZmVy
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRT
Y3JvbGxJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Ny
b2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxi
YXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJl
YSgpIDw8ICJdIGRpZEVuZFNjcm9sbEdlc3R1cmUiKTsKLQotICAgIGlmIChbbV9zY3JvbGxlcklt
cFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKLQotICAgIGlmIChtX3do
ZWVsRXZlbnRUZXN0TW9uaXRvcikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPnJl
bW92ZURlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25p
dG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0
b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0o
T3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8
IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbWF5QmVnaW5TY3JvbGxHZXN0dXJlIik7Ci0KLSAgICBp
ZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJl
XTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sIHNob3VsZExvY2tTdGF0ZSkKLXsKLSAgICBpZiAoc2hvdWxkTG9ja1N0YXRlKQotICAgICAg
ICBbbV9zY3JvbGxlckltcFBhaXIgbG9ja092ZXJsYXlTY3JvbGxlclN0YXRlOk5TT3ZlcmxheVNj
cm9sbGVyU3RhdGVIaWRkZW5dOwotICAgIGVsc2UgewotICAgICAgICBbbV9zY3JvbGxlckltcFBh
aXIgdW5sb2NrT3ZlcmxheVNjcm9sbGVyU3RhdGVdOwotCi0gICAgICAgIC8vIFdlIG5ldmVyIHVw
ZGF0ZSBzY3JvbGxlciBzdHlsZSBmb3IgUGFpbnRlckNvbnRyb2xsZXJzIHRoYXQgYXJlIGxvY2tl
ZC4gSWYgd2UgaGF2ZSBhIHBlbmRpbmcKLSAgICAgICAgLy8gbmVlZCB0byB1cGRhdGUgdGhlIHN0
eWxlLCBkbyBpdCBvbmNlIHdlJ3ZlIHVubG9ja2VkIHRoZSBzY3JvbGxlciBzdGF0ZS4KLSAgICAg
ICAgaWYgKG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKQotICAgICAgICAgICAgdXBkYXRlU2Ny
b2xsZXJTdHlsZSgpOwotICAgIH0KLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xs
YmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIVttX3Njcm9sbGVySW1wUGFp
ciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KCFtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGVy
SW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpt
X3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKV07Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpw
YWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKLSAgICAg
ICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlKTsKLSAgICBbbV92ZXJ0aWNhbFNjcm9sbGVy
SW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdh
dGUgPSBudWxscHRyOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9z
Y3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpuaWxdOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVCghbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgbV9o
b3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxlckltcERl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKLQotICAgIFtwYWlu
dGVyIHNldERlbGVnYXRlOm1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOwot
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0TGF5
ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0
SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgp
LmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3Jv
bGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRl
KTsKLSAgICBbbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAg
ICBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlID0gbnVsbHB0cjsKLQotICAgIFtwYWlu
dGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250
YWxTY3JvbGxlckltcDpuaWxdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7
Ci0gICAgW3BhaW50ZXIgc2V0TmVlZHNEaXNwbGF5OllFU107Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQotewotICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Ny
b2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtwYWlu
dGVyIHNldExheWVyOmxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbF07Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5n
ZSgpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgaWYgKCFzY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxl
ckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtwYWludGVyIHNldExheWVyOmxheWVyID8gbGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSA6IG5pbF07Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFNjcm9s
bGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IC8vIE5vbi1vdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBpbiBo
aXQgdGVzdGluZy4KLSAgICBpZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0
eWxlKCkgIT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0
aW5nIHdoZW5ldmVyIHRoZXkgYXJlIGF0IGFsbCB2aXNpYmxlLgotICAgIE5TU2Nyb2xsZXJJbXAg
KnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKLSAgICBpZiAo
IXBhaW50ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gW3BhaW50ZXIga25v
YkFscGhhXSA+IDA7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRB
cmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBiYWNrL2ZvcndhcmQg
Y2FjaGUsIGJ1dCB0aGUgcGFnZQotICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhh
dCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQotICAgIC8v
IFNjcm9sbGVySW1wUGFpciB3aGVuIHdlJ3JlIHJlYWxseSBzY3JvbGxpbmcgb24gYW4gYWN0aXZl
IHBhZ2UuCi0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlz
TG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuaXNI
YW5kbGluZ1doZWVsRXZlbnQoKSkKLSAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoZGVs
dGEpOwotICAgIGVsc2UKLSAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGRlbHRh
KTsKLX0KLQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCiB7CiAg
ICAgU2Nyb2xsQW5pbWF0b3I6OmNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKLQotICAgIGlmIChzY3JvbGxiYXJQYWludFRpbWVySXNB
Y3RpdmUoKSkKLSAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICBbbV9ob3Jp
em9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICBbbV92ZXJ0
aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107CisgICAgc2V0SGF2ZVNj
cm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxi
YXJzQ29udHJvbGxlcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBo
YXNlKQpAQCAtMTIwNiwxNSArMzA2LDE1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRs
ZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKIAogICAgIC8v
IFRoaXMgbWF5IG5vdCBoYXZlIGJlZW4gc2V0IHRvIHRydWUgeWV0IGlmIHRoZSB3aGVlbCBldmVu
dCB3YXMgaGFuZGxlZCBieSB0aGUgU2Nyb2xsaW5nVHJlZSwKICAgICAvLyBTbyBzZXQgaXQgdG8g
dHJ1ZSBoZXJlLgotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisgICAg
c2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGVuc3VyZSB3ZSBnZXQgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkLgogICAgIGlm
IChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pCi0gICAgICAgIGRpZEJl
Z2luU2Nyb2xsR2VzdHVyZSgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnND
b250cm9sbGVyKCkuZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7CiAgICAgZWxzZSBpZiAocGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkIHx8IHBoYXNlID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpDYW5jZWxsZWQpCi0gICAgICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEVuZFNj
cm9sbEdlc3R1cmUoKTsKICAgICBlbHNlIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZTo6TWF5QmVnaW4pCi0gICAgICAgIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCkubWF5QmVnaW5TY3JvbGxH
ZXN0dXJlKCk7CiB9CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC0xMjI5LDcgKzMy
OSw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZEZvcndhcmRXaGVlbEV2ZW50c1Rv
UGFyZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVuCiAgICAgCiBib29sIFNjcm9sbEFuaW1hdG9y
TWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKIHsKLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIHNldEhh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQodHJ1ZSk7CiAKICAgICBpZiAoIXdoZWVsRXZlbnQuaGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIHx8ICFydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3Rl
bSgpKQogICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CkBAIC0xMzcwLDEyNSArNDcwLDYgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIH0KICNlbmRpZgogCi12
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkKLXsKLSAgICBpZiAo
W21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKSB7Ci0gICAg
ICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFNjcm9sbGJhclRoZW1lTWFjKiBtYWNUaGVtZSA9IG1hY1Njcm9sbGJhclRo
ZW1lKCk7Ci0gICAgaWYgKCFtYWNUaGVtZSkgewotICAgICAgICBtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1hY1Ro
ZW1lLT51c2VzT3ZlcmxheVNjcm9sbGJhcnNDaGFuZ2VkKCk7Ci0KLSAgICBOU1Njcm9sbGVyU3R5
bGUgbmV3U3R5bGUgPSBbbV9zY3JvbGxlckltcFBhaXIgc2Nyb2xsZXJTdHlsZV07Ci0KLSAgICBp
ZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGlj
YWxTY3JvbGxiYXIoKSkgewotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgp
OwotCi0gICAgICAgIE5TU2Nyb2xsZXJJbXAgKm9sZFZlcnRpY2FsUGFpbnRlciA9IFttX3Njcm9s
bGVySW1wUGFpciB2ZXJ0aWNhbFNjcm9sbGVySW1wXTsKLSAgICAgICAgYXV0byBuZXdWZXJ0aWNh
bFBhaW50ZXIgPSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6
bmV3U3R5bGUgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpdmVydGljYWxTY3JvbGxiYXItPmNv
bnRyb2xTaXplKCkgaG9yaXpvbnRhbDpOTyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRWZXJ0aWNh
bFBhaW50ZXJdKTsKLQotICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3Jv
bGxlckltcDpuZXdWZXJ0aWNhbFBhaW50ZXIuZ2V0KCldOwotICAgICAgICBtYWNUaGVtZS0+c2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcigqdmVydGljYWxTY3JvbGxiYXIsIFdURk1vdmUobmV3VmVy
dGljYWxQYWludGVyKSk7Ci0gICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxlckltcCgq
dmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFy
IHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhl
IAotICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUt
bGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBhbmQgbGVu
Z3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhl
bWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7
Ci0gICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0
aGlja25lc3MsIHRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIGlmIChTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkg
ewotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAg
TlNTY3JvbGxlckltcCAqb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIg
aG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKLSAgICAgICAgYXV0byBuZXdIb3Jpem9udGFsUGFpbnRl
ciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHls
ZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpIGhvcml6b250YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZEhvcml6b250YWxQ
YWludGVyXSk7Ci0KLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3Jv
bGxlckltcDpuZXdIb3Jpem9udGFsUGFpbnRlci5nZXQoKV07Ci0gICAgICAgIG1hY1RoZW1lLT5z
ZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFyLCBXVEZNb3ZlKG5l
d0hvcml6b250YWxQYWludGVyKSk7Ci0gICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxl
ckltcCgqaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0KLSAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBz
Y3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJl
LXNldCB0aGUgCi0gICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5k
IHRoZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCi0gICAgICAgIC8v
IGFuZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCi0gICAgICAgIGludCB0aGlja25lc3Mg
PSBtYWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRy
b2xTaXplKCkpOwotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50
UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIC8vIElmIG1f
bmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBhZ2UgaXMgcmVzdG9y
aW5nIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgYW5kCi0gICAgLy8gYSByZWxheW91dCB3
aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1s
YXlvdXQgb3Vyc2VsdmVzLgotICAgIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKG5ld1N0eWxlID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkgPyBTY3JvbGxiYXJTdHlsZTo6
T3ZlcmxheSA6IFNjcm9sbGJhclN0eWxlOjpBbHdheXNWaXNpYmxlLCAhbV9uZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGUpOwotCi0gICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkK
LXsKLSAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMp
OwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlz
QWN0aXZlKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0b3BTY3JvbGxiYXJQYWlu
dFRpbWVyKCkKLXsKLSAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0b3AoKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJl
ZCgpCi17Ci0gICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUg
dG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxlckltcFBhaXIKLSAgICAv
LyBtaWdodCB0aGluayB0aGF0IHRoZSBzY3JvbGxiYXJzIGFyZSBhbHJlYWR5IHNob3dpbmcgYW5k
IGJhaWwgZWFybHkuCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGhpZGVPdmVybGF5U2Nyb2xsZXJz
XTsKLSAgICBbbV9zY3JvbGxlckltcFBhaXIgZmxhc2hTY3JvbGxlcnNdOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRT
aXplJiBkZWx0YSkKLXsKLSAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRh
ID0gZGVsdGE7Ci0KLSAgICBpZiAoIW1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1f
d2hlZWxFdmVudFRlc3RNb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdo
ZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hl
ZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6
ZSYgZGVsdGEpCi17Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRJ
bkRpcmVjdGlvbjpOU01ha2VQb2ludChkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSldOwot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVy
RmlyZWQoKQotewotICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKG1fY29udGVudEFyZWFTY3Jv
bGxlZFRpbWVyU2Nyb2xsRGVsdGEpOwotICAgIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Ny
b2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQotICAgIGlmIChtX3doZWVsRXZlbnRUZXN0TW9uaXRv
cikKLSAgICAgICAgbV93aGVlbEV2ZW50VGVzdE1vbml0b3ItPnJlbW92ZURlZmVycmFsRm9yUmVh
c29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJ
blByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCi17Ci0gICAgSW50UmVj
dCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzY3JvbGxlclRodW1iOwotICAgIGlmIChTY3JvbGxi
YXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJh
cigpKQotICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7Ci0KLSAgICBpZiAocmVjdElu
Vmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Njcm9sbGFibGVBcmVhLnNldFZpc2libGVTY3JvbGxlclRodW1iUmVj
dChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwotfQotCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpw
cm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQogewogICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIucHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDQz
NDAwZTgzNTU3OTI0NDI3NmRiNjZiODIyYzAyZDE3ZTViMDkwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmgKQEAg
LTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JN
KE1BQykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK09CSkNfQ0xBU1MgV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CitPQkpDX0NM
QVNTIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlOworT0JKQ19DTEFTUyBXZWJTY3JvbGxlcklt
cERlbGVnYXRlOworCit0eXBlZGVmIGlkIFNjcm9sbGVySW1wUGFpcjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7CisKK2NsYXNzIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjIDogcHVibGljIFNjcm9sbGJhcnNDb250cm9sbGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxiYXJz
Q29udHJvbGxlck1hYyk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWMoU2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMoKTsK
KworICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRl
bHRhKSBmaW5hbDsKKworICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIGZpbmFsOworCisgICAg
dm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGRpZEVu
ZFNjcm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1heUJlZ2luU2Nyb2xsR2Vz
dHVyZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjb250ZW50QXJlYVdpbGxQYWludCgpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAg
ICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIo
U2Nyb2xsYmFyKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIo
U2Nyb2xsYmFyKiwgYm9vbCkgY29uc3QgZmluYWw7CisgICAgdm9pZCB3aWxsU3RhcnRMaXZlUmVz
aXplKCkgZmluYWw7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIGZpbmFsOworICAgIHZvaWQgY29udGVudEFy
ZWFEaWRTaG93KCkgZmluYWw7CisgICAgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBmaW5hbDsK
KworICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxk
TG9ja1N0YXRlKSBmaW5hbDsKKyAgICBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0
IGZpbmFsOworCisgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBm
aW5hbDsKKyAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBm
aW5hbDsKKyAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisgICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBm
aW5hbDsKKworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFy
KikgZmluYWw7CisKKyAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBm
aW5hbDsKKyAgICB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIGZpbmFs
OworCisgICAgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3Jv
bGxiYXIqKSBmaW5hbDsKKworICAgIFN0cmluZyBob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JU
ZXN0aW5nKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIHZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVG
b3JUZXN0aW5nKCkgY29uc3QgZmluYWw7CisKKworICAgIC8vIFB1YmxpYyB0byBiZSBjYWxsYWJs
ZSBmcm9tIE9iai1DLgorICAgIHZvaWQgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAgIGJvb2wg
c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBzdGFydFNjcm9s
bGJhclBhaW50VGltZXIoKTsKKyAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Cisg
ICAgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOworICAg
IGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0OworCitwcml2YXRlOgorCisg
ICAgLy8gc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKCkgd2lsbCBkbyB0aGUgc2FtZSB3b3Jr
IHRoYXQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoKSBkb2VzIGV4Y2VwdAorICAgIC8vIGl0IGRv
ZXMgaXQgYWZ0ZXIgYSB6ZXJvLWRlbGF5IHRpbWVyIGZpcmVzLiBUaGlzIHdpbGwgcHJldmVudCB1
cyBmcm9tIHVwZGF0aW5nIG92ZXJsYXkgc2Nyb2xsYmFyCisgICAgLy8gaW5mb3JtYXRpb24gZHVy
aW5nIGxheW91dC4KKyAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0
U2l6ZSYgc2Nyb2xsRGVsdGEpOworICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29u
KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsRGVsdGEpOworCisgICAgdm9pZCBpbml0aWFsU2Nyb2xs
YmFyUGFpbnRUaW1lckZpcmVkKCk7CisgICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRp
bWVyRmlyZWQoKTsKKworICAgIFdoZWVsRXZlbnRUZXN0TW9uaXRvciogd2hlZWxFdmVudFRlc3RN
b25pdG9yKCkgY29uc3Q7CisKKyAgICBUaW1lciBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVy
OworICAgIFRpbWVyIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcjsKKworICAgIFJldGFp
blB0cjxTY3JvbGxlckltcFBhaXI+IG1fc2Nyb2xsZXJJbXBQYWlyOworICAgIFJldGFpblB0cjxX
ZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4gbV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZTsKKyAg
ICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZT4gbV9ob3Jpem9udGFsU2Nyb2xsZXJJ
bXBEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZT4gbV92ZXJ0
aWNhbFNjcm9sbGVySW1wRGVsZWdhdGU7CisKKyAgICBGbG9hdFNpemUgbV9jb250ZW50QXJlYVNj
cm9sbGVkVGltZXJTY3JvbGxEZWx0YTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0OworCisgICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSB7IGZhbHNlIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y5ZWRiNGYzMTJhMDg3ODg4NjU2YmY2NjgwN2JlYWM3
MzkwOTczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbQpAQCAtMCwwICsxLDEwODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMu
aCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgorI2lt
cG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTlNTY3JvbGxlckltcERldGFpbHMuaCIKKyNpbXBv
cnQgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW1wb3J0ICJTY3JvbGxhYmxlQXJlYS5oIgorI2ltcG9y
dCAiU2Nyb2xsYmFyLmgiCisjaW1wb3J0ICJTY3JvbGxiYXJUaGVtZU1hYy5oIgorI2ltcG9ydCAi
VGltaW5nRnVuY3Rpb24uaCIKKyNpbXBvcnQgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIiAvLyBG
SVhNRTogVGhpcyBpcyAgbGF5ZXJpbmcgdmlvbGF0aW9uLgorCisjaW1wb3J0IDxwYWwvc3BpL21h
Yy9OU1Njcm9sbGVySW1wU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNjcm9sbGJhclRoZW1lTWFjKiBt
YWNTY3JvbGxiYXJUaGVtZSgpCit7CisgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1l
ID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS5p
c01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFy
VGhlbWUpIDogbnVsbHB0cjsKK30KKworc3RhdGljIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVySW1w
Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBTY3JvbGxi
YXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK0BpbnRlcmZhY2UgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUg
OiBOU09iamVjdCA8TlNTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZT4geworICAgIFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhKiBfc2Nyb2xsYWJsZUFyZWE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGFi
bGVBcmVhOihXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopc2Nyb2xsYWJsZUFyZWE7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlCisKKy0gKGlkKWlu
aXRXaXRoU2Nyb2xsYWJsZUFyZWE6KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKilzY3JvbGxhYmxl
QXJlYQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVh
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfc2Ny
b2xsYWJsZUFyZWEgPSBudWxscHRyOworfQorCistIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9y
U2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgorewor
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplID0gX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKTsKKyAgICByZXR1
cm4gTlNNYWtlUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhl
aWdodCgpKTsKK30KKworLSAoQk9PTClpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6KE5T
U2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCit7CisgICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVy
biBOTzsKKworICAgIHJldHVybiBfc2Nyb2xsYWJsZUFyZWEtPmluTGl2ZVJlc2l6ZSgpOworfQor
CistIChOU1BvaW50KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWly
OihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICAvLyBJdCdzIE9LIHRoYXQgdGhpcyBwb3NpdGlvbiBp
c24ndCByZWxhdGl2ZSB0byB0aGlzIHNjcm9sbGVyICh3aGljaCBtaWdodCBiZSBhbiBvdmVyZmxv
dyBzY3JvbGxlcikuCisgICAgLy8gQXBwS2l0IGp1c3QgdGFrZXMgdGhlIHJlc3VsdCBhbmQgcGFz
c2VzIGl0IGJhY2sgdG8gLXNjcm9sbGVySW1wUGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Ny
b2xsZXJJbXA6LgorICAgIHJldHVybiBfc2Nyb2xsYWJsZUFyZWEtPmxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKTsKK30KKworLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xs
ZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQp
cG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxl
ckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworCisgICAgaWYgKCFf
c2Nyb2xsYWJsZUFyZWEgfHwgIXNjcm9sbGVySW1wKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9p
bnQ7CisKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7CisgICAgaWYgKFtz
Y3JvbGxlckltcCBpc0hvcml6b250YWxdKQorICAgICAgICBzY3JvbGxiYXIgPSBfc2Nyb2xsYWJs
ZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbGJh
ciA9IF9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKworICAgIC8vIEl0IGlz
IHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBoZXJlIHNpbmNlIGl0IGlzIHBvc3Np
YmxlIGZvciB0aGlzIGRlbGVnYXRlCisgICAgLy8gbWV0aG9kIHRvIGJlIGNhbGxlZCBiZXR3ZWVu
IHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVlbiBzZXQgdG8gMCBhbmQgdGhlCisg
ICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkLiBXZSBzaG91
bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKKyAgICAvLyBvZiB0aGUgY2xlYW4tdXAgd29yayBp
biBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMK
KyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1BvaW50OworCisgICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xs
YmFyKCpzY3JvbGxiYXIpKTsKKworICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvaW50SW5Db250ZW50QXJlYSkp
OworfQorCistICh2b2lkKXNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3Jv
bGxlckltcFBhaXIgc2V0Q29udGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgVU5VU0VEX1BBUkFN
KHJlY3QpOworCisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhcnNDb250cm9s
bGVyKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBh
aXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5
bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUKK3sKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOm5ld1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07CisKKyAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYyY+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyc0NvbnRyb2xs
ZXIoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworfQorCitAZW5kCisKK2VudW0gRmVhdHVyZVRv
QW5pbWF0ZSB7CisgICAgVGh1bWJBbHBoYSwKKyAgICBUcmFja0FscGhhLAorICAgIFVJU3RhdGVU
cmFuc2l0aW9uLAorICAgIEV4cGFuc2lvblRyYW5zaXRpb24KK307CisKKyNpZiAhTE9HX0RJU0FC
TEVECitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRmVhdHVy
ZVRvQW5pbWF0ZSBmZWF0dXJlKQoreworICAgIHN3aXRjaCAoZmVhdHVyZSkgeworICAgIGNhc2Ug
VGh1bWJBbHBoYTogdHMgPDwgIlRodW1iQWxwaGEiIDsgYnJlYWs7CisgICAgY2FzZSBUcmFja0Fs
cGhhOiB0cyA8PCAiVHJhY2tBbHBoYSIgOyBicmVhazsKKyAgICBjYXNlIFVJU3RhdGVUcmFuc2l0
aW9uOiB0cyA8PCAiVUlTdGF0ZVRyYW5zaXRpb24iIDsgYnJlYWs7CisgICAgY2FzZSBFeHBhbnNp
b25UcmFuc2l0aW9uOiB0cyA8PCAiRXhwYW5zaW9uVHJhbnNpdGlvbiIgOyBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHRzOworfQorCit1c2luZyBXZWJDb3JlOjpMb2dPdmVybGF5U2Nyb2xsYmFy
czsKKworI2VuZGlmCisKK0BpbnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5T
T2JqZWN0IHsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIF9zY3JvbGxiYXI7CisgICAgUmV0YWlu
UHRyPE5TU2Nyb2xsZXJJbXA+IF9zY3JvbGxlckltcDsKKyAgICBGZWF0dXJlVG9BbmltYXRlIF9m
ZWF0dXJlVG9BbmltYXRlOworICAgIENHRmxvYXQgX3N0YXJ0VmFsdWU7CisgICAgQ0dGbG9hdCBf
ZW5kVmFsdWU7CisgICAgTlNUaW1lSW50ZXJ2YWwgX2R1cmF0aW9uOworICAgIFJldGFpblB0cjxO
U1RpbWVyPiBfdGltZXI7CisgICAgUmV0YWluUHRyPE5TRGF0ZT4gX3N0YXJ0RGF0ZTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbj4gX3RpbWluZ0Z1bmN0aW9u
OworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xs
YmFyIGZlYXR1cmVUb0FuaW1hdGU6KEZlYXR1cmVUb0FuaW1hdGUpZmVhdHVyZVRvQW5pbWF0ZSBh
bmltYXRlRnJvbTooQ0dGbG9hdClzdGFydFZhbHVlIGFuaW1hdGVUbzooQ0dGbG9hdCllbmRWYWx1
ZSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CistICh2b2lkKXNldEN1cnJlbnRQ
cm9ncmVzczooTlNUaW1lciAqKXRpbWVyOworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb247CistICh2b2lkKXN0b3BBbmltYXRpb247CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xs
YmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihGZWF0
dXJlVG9BbmltYXRlKWZlYXR1cmVUb0FuaW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3RhcnRW
YWx1ZSBhbmltYXRlVG86KENHRmxvYXQpZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVydmFs
KWR1cmF0aW9uCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBjb25zdCBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2
YWwgPSAwLjAxOworICAgIF90aW1lciA9IGFkb3B0TlMoW1tOU1RpbWVyIGFsbG9jXSBpbml0V2l0
aEZpcmVEYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXSBpbnRlcnZh
bDp0aW1lSW50ZXJ2YWwgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHNldEN1cnJlbnRQ
cm9ncmVzczopIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10pOworICAgIF9kdXJhdGlvbiA9IGR1
cmF0aW9uOworICAgIF90aW1pbmdGdW5jdGlvbiA9IFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZShXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNl
SW5PdXQpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0g
PDwgIkNyZWF0aW5nIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gZm9yICIgPDwgZmVhdHVyZVRv
QW5pbWF0ZSA8PCAiIGZyb20gIiA8PCBzdGFydFZhbHVlIDw8ICIgdG8gIiA8PCBlbmRWYWx1ZSk7
CisKKyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIF9mZWF0dXJlVG9BbmltYXRlID0g
ZmVhdHVyZVRvQW5pbWF0ZTsKKyAgICBfc3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7CisgICAgX2Vu
ZFZhbHVlID0gZW5kVmFsdWU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzdGFy
dEFuaW1hdGlvbgoreworICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKKworICAgIF9zY3JvbGxlcklt
cCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKKworICAgIExPR19XSVRI
X1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRB
bmltYXRpb24gIiA8PCBzZWxmIDw8ICJzdGFydEFuaW1hdGlvbl0gZm9yICIgPDwgX2ZlYXR1cmVU
b0FuaW1hdGUpOworCisgICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGFkZFRpbWVyOl90aW1l
ci5nZXQoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKKyAgICBfc3RhcnREYXRlID0g
YWRvcHROUyhbW05TRGF0ZSBhbGxvY10gaW5pdFdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzowXSk7
Cit9CisKKy0gKHZvaWQpc2V0U3RhcnRWYWx1ZTooQ0dGbG9hdClzdGFydFZhbHVlCit7CisgICAg
X3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworfQorCistICh2b2lkKXNldEVuZFZhbHVlOihDR0Zs
b2F0KWVuZFZhbHVlCit7CisgICAgX2VuZFZhbHVlID0gZW5kVmFsdWU7Cit9CisKKy0gKHZvaWQp
c2V0Q3VycmVudFByb2dyZXNzOihOU1RpbWVyICopdGltZXIKK3sKKyAgICBDR0Zsb2F0IHByb2dy
ZXNzID0gMDsKKyAgICBOU0RhdGUgKm5vdyA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxT
aW5jZU5vdzowXTsKKyAgICBOU1RpbWVJbnRlcnZhbCBlbGFwc2VkID0gW25vdyB0aW1lSW50ZXJ2
YWxTaW5jZURhdGU6X3N0YXJ0RGF0ZS5nZXQoKV07CisgICAgaWYgKGVsYXBzZWQgPiBfZHVyYXRp
b24pIHsKKyAgICAgICAgcHJvZ3Jlc3MgPSAxOworICAgICAgICBbdGltZXIgaW52YWxpZGF0ZV07
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNUaW1lSW50ZXJ2YWwgdCA9IDE7CisgICAgICAgIGlm
IChfZHVyYXRpb24pCisgICAgICAgICAgICB0ID0gZWxhcHNlZCAvIF9kdXJhdGlvbjsKKyAgICAg
ICAgcHJvZ3Jlc3MgPSBfdGltaW5nRnVuY3Rpb24tPnRyYW5zZm9ybVRpbWUodCwgX2R1cmF0aW9u
KTsKKyAgICB9CisgICAgQVNTRVJUKF9zY3JvbGxiYXIpOworCisgICAgTE9HX1dJVEhfU1RSRUFN
KE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIi1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biAiIDw8IHNlbGYgPDwgInNldEN1cnJlbnRQcm9ncmVzczoiIDw8IHByb2dyZXNzIDw8Il0gZm9y
ICIgPDwgX2ZlYXR1cmVUb0FuaW1hdGUpOworCisgICAgQ0dGbG9hdCBjdXJyZW50VmFsdWU7Cisg
ICAgaWYgKF9zdGFydFZhbHVlID4gX2VuZFZhbHVlKQorICAgICAgICBjdXJyZW50VmFsdWUgPSAx
IC0gcHJvZ3Jlc3M7CisgICAgZWxzZQorICAgICAgICBjdXJyZW50VmFsdWUgPSBwcm9ncmVzczsK
KworICAgIHN3aXRjaCAoX2ZlYXR1cmVUb0FuaW1hdGUpIHsKKyAgICBjYXNlIFRodW1iQWxwaGE6
CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOmN1cnJlbnRWYWx1ZV07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tBbHBoYToKKyAgICAgICAgW19zY3JvbGxlckltcCBz
ZXRUcmFja0FscGhhOmN1cnJlbnRWYWx1ZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVUlT
dGF0ZVRyYW5zaXRpb246CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0VWlTdGF0ZVRyYW5zaXRp
b25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4cGFu
c2lvblRyYW5zaXRpb246CisgICAgICAgIFtfc2Nyb2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNp
dGlvblByb2dyZXNzOmN1cnJlbnRWYWx1ZV07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGlmICghX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAg
ICAgICBfc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtzZWxmIHN0b3BBbmltYXRp
b25dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBfc2Nyb2xsYmFyID0gbnVs
bHB0cjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24K
K3sKKyAgICBfZHVyYXRpb24gPSBkdXJhdGlvbjsKK30KKworLSAodm9pZClzdG9wQW5pbWF0aW9u
Cit7CisgICAgW190aW1lciBpbnZhbGlkYXRlXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdl
YlNjcm9sbGVySW1wRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRlbGVnYXRlLCBOU1Nj
cm9sbGVySW1wRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIF9zY3JvbGxiYXI7
CisKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2tub2JBbHBoYUFu
aW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3RyYWNr
QWxwaGFBbmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+
IF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4gX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb247Cit9CistIChpZClp
bml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXI7CistICh2b2lk
KWNhbmNlbEFuaW1hdGlvbnM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlcklt
cERlbGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIq
KXNjcm9sbGJhcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9ucworeworICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtfa25vYkFscGhhQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dOworICAgIFtfdHJhY2tBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAg
ICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgIFtfZXhw
YW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCit9CisKKy0gKE5ha2VkUHRyPFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjPilzY3JvbGxiYXJzQ29udHJvbGxlcgoreworICAgIHJldHVybiAmc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMmPihfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLnNjcm9sbGJhcnNDb250cm9sbGVyKCkpOworfQorCistIChOU1JlY3QpY29udmVy
dFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdAoreworICAgIHJldHVybiBhUmVjdDsKK30KKwor
LSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6KE5TUmVjdClhUmVjdAoreworICAgIHJl
dHVybiBhUmVjdDsKK30KKworLSAoQ0FMYXllciAqKWxheWVyCit7CisgICAgaWYgKCFfc2Nyb2xs
YmFyKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKCFXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZU1hYzo6aXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKCkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcjsKKyAgICBpZiAoX3Njcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAg
ICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKKworICAgIHN0YXRpYyBD
QUxheWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4g
bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogZHVtbXlMYXllcjsKK30KKworLSAoTlNQ
b2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1w
ICopc2Nyb2xsZXJJbXAKK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBO
U1plcm9Qb2ludDsKKworICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsZXJJbXAsIHNjcm9sbGVySW1w
ID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAgICBhdXRvIHBv
c2l0aW9uSW5WaWV3ID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uSW5WaWV3KCk7CisgICAgcmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcocG9zaXRpb25JblZpZXcpOworfQorCistIChOU1JlY3QpY29udmVydFJlY3RU
b0xheWVyOihOU1JlY3QpcmVjdAoreworICAgIHJldHVybiByZWN0OworfQorCistIChCT09MKXNo
b3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xs
ZXJJbXAKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOworCisgICAgaWYgKCFfc2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gX3Njcm9sbGJhci0+
c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpOworfQorCisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKy0gKE5TQXBwZWFyYW5jZSAqKWVmZmVjdGl2ZUFwcGVhcmFuY2VGb3JT
Y3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BB
UkFNKHNjcm9sbGVySW1wKTsKKworICAgIGlmICghX3Njcm9sbGJhcikgeworICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICByZXR1cm4gW05TQXBwZWFy
YW5jZSBjdXJyZW50QXBwZWFyYW5jZV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAorICAgIH0KKworICAgIC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggRnJhbWVW
aWV3OjpwYWludFNjcm9sbENvcm5lci4KKyAgICAvLyBUaGUgYmFzZSBzeXN0ZW0gZG9lcyBub3Qg
c3VwcG9ydCBkYXJrIEFxdWEsIHNvIHdlIG1pZ2h0IGdldCBhIG51bGwgcmVzdWx0LgorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLnVzZURh
cmtBcHBlYXJhbmNlRm9yU2Nyb2xsYmFycygpOworICAgIGlmIChhdXRvICphcHBlYXJhbmNlID0g
W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6dXNlRGFya0FwcGVhcmFuY2UgPyBOU0FwcGVh
cmFuY2VOYW1lRGFya0FxdWEgOiBOU0FwcGVhcmFuY2VOYW1lQXF1YV0pCisgICAgICAgIHJldHVy
biBhcHBlYXJhbmNlOworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisg
ICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFwcGVhcmFuY2VdOworICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorfQorI2VuZGlmCisKKy0gKHZvaWQpc2V0VXBBbHBo
YUFuaW1hdGlvbjooUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+JilzY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVy
UGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQgYW5pbWF0ZUFscGhhVG86
KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7Cisg
ICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBwYWdlLCB0aGVuIHRoZSBzY3JvbGxi
YXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4KKyAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFy
bHkgcmV0dXJucy4KKyAgICBib29sIG11c3RBbmltYXRlID0gW3NlbGYgc2Nyb2xsYmFyc0NvbnRy
b2xsZXJdLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CisKKyAgICBpZiAoW3NlbGYgc2Ny
b2xsYmFyc0NvbnRyb2xsZXJdLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVz
dEFuaW1hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRl
KSB7CisgICAgICAgIFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBv
aW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUg
dGltZXIuCisgICAgW3NlbGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zdG9wU2Nyb2xsYmFyUGFp
bnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AK
KyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgeworICAgICAgICBbc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlv
biA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAoYXV0byogbWFjVGhlbWUgPSBXZWJDb3JlOjptYWNT
Y3JvbGxiYXJUaGVtZSgpKQorICAgICAgICBtYWNUaGVtZS0+c2V0UGFpbnRDaGFyYWN0ZXJpc3Rp
Y3NGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOworCisgICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6
VGh1bWJQYXJ0ICYmIF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6VmVydGlj
YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKKyAgICAgICAgICAg
IGF1dG8gdGh1bWJSZWN0ID0gV2ViQ29yZTo6SW50UmVjdChbc2Nyb2xsZXJQYWludGVyIHJlY3RG
b3JQYXJ0Ok5TU2Nyb2xsZXJLbm9iXSk7CisgICAgICAgICAgICBbc2VsZiBzY3JvbGxiYXJzQ29u
dHJvbGxlcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c2V0Vmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0KHsgfSk7CisgICAgfQorCisgICAgc2Nyb2xsYmFyUGFydEFu
aW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6
cGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgPyBUaHVtYkFscGhhIDogVHJhY2tBbHBoYQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGVGcm9tOnBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8g
W3Njcm9sbGVyUGFpbnRlciBrbm9iQWxwaGFdIDogW3Njcm9sbGVyUGFpbnRlciB0cmFja0FscGhh
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZVRvOm5ld0FscGhhCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKKyAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJ
bXAgKilzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhhVG86KENHRmxvYXQpbmV3S25vYkFscGhh
IGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIGlmICghX3Njcm9sbGJh
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVy
SW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAgICBOU1Njcm9sbGVySW1wICpzY3Jv
bGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wOworICAgIGlmICghW3Nl
bGYgc2Nyb2xsYmFyc0NvbnRyb2xsZXJdLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSkgeworICAg
ICAgICBbc2Nyb2xsZXJJbXAgc2V0S25vYkFscGhhOjBdOworICAgICAgICBfc2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUg
ZmFkaW5nIHRoZSBzY3JvbGxiYXIgYXdheSwgdGhhdCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0
IHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8KKyAgICAvLyBiZSBtb3ZpbmcgaXQgYXJvdW5kIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBDYWxsaW5nIFtzY3JvbGxlclBhaW50ZXIgc2V0VXNlUHJl
c2VudGF0aW9uVmFsdWU6Tk9dCisgICAgLy8gd2lsbCBwYXNzIHRoYXQgaW5mb3JtYXRpb24gb24g
dG8gdGhlIE5TU2Nyb2xsZXJJbXAgQVBJLgorICAgIGlmIChuZXdLbm9iQWxwaGEgPT0gMCAmJiBf
c2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCisgICAgICAgIFtz
Y3JvbGxlclBhaW50ZXIgc2V0VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOworCisgICAgW3NlbGYg
c2V0VXBBbHBoYUFuaW1hdGlvbjpfa25vYkFscGhhQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpz
Y3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3
S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDoo
TlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVUcmFja0FscGhhVG86KENHRmxvYXQp
bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBp
ZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlcklt
cCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgTlNTY3Jv
bGxlckltcCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcDsK
KyAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl90cmFja0FscGhhQW5pbWF0aW9uIHNjcm9s
bGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFu
aW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQorCistICh2
b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZVVJU3Rh
dGVUcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAg
IGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHNjcm9sbGVy
SW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKSk7CisKKyAgICAvLyBV
SVN0YXRlVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMgdG8gMS4gSW4gY2FzZSBhbiBhbmltYXRp
b24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBoYXJkIHRyYW5zaXRpb24uCisgICAgW3Nj
cm9sbGVySW1wIHNldFVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M6MSAtIFtzY3JvbGxlckltcCB1
aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzXV07CisKKyAgICAvLyBJZiB0aGUgVUkgc3RhdGUgdHJh
bnNpdGlvbiBpcyBoYXBwZW5pbmcsIHRoZW4gd2UgYXJlIG5vIGxvbmdlciBtb3ZpbmcgdGhlIHNj
cm9sbGJhciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICBpZiAoX3Njcm9sbGJhci0+c3Vw
cG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAgICAgICBbc2Nyb2xsZXJJbXAgc2V0
VXNlUHJlc2VudGF0aW9uVmFsdWU6Tk9dOworCisgICAgaWYgKCFfdWlTdGF0ZVRyYW5zaXRpb25B
bmltYXRpb24pIHsKKyAgICAgICAgX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHRO
UyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9z
Y3JvbGxiYXIKKyAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6VUlTdGF0ZVRyYW5zaXRpb24K
KyAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3JvbGxlckltcCB1aVN0YXRlVHJhbnNpdGlvblBy
b2dyZXNzXQorICAgICAgICAgICAgYW5pbWF0ZVRvOjEuMAorICAgICAgICAgICAgZHVyYXRpb246
ZHVyYXRpb25dKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRv
IGluaXRpYWxpemUgdGhlIGFuaW1hdGlvbiwganVzdCByZXNldCB0aGUgdmFsdWVzIGluIGNhc2Ug
dGhleSBoYXZlIGNoYW5nZWQuCisgICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
c2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOwor
ICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07Cisg
ICAgICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25d
OworICAgIH0KKyAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9u
XTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1w
IGFuaW1hdGVFeHBhbnNpb25UcmFuc2l0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgoreworICAgIGlmICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFy
KSk7CisKKyAgICAvLyBFeHBhbnNpb25UcmFuc2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0byAxLiBJ
biBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBwcm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhhcmQgdHJh
bnNpdGlvbi4KKyAgICBbc2Nyb2xsZXJJbXAgc2V0RXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNz
OjEgLSBbc2Nyb2xsZXJJbXAgZXhwYW5zaW9uVHJhbnNpdGlvblByb2dyZXNzXV07CisKKyAgICBp
ZiAoIV9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uKSB7CisgICAgICAgIF9leHBhbnNpb25U
cmFuc2l0aW9uQW5pbWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24g
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIKKyAgICAgICAgICAgIGZlYXR1cmVU
b0FuaW1hdGU6RXhwYW5zaW9uVHJhbnNpdGlvbgorICAgICAgICAgICAgYW5pbWF0ZUZyb206W3Nj
cm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzc10KKyAgICAgICAgICAgIGFuaW1h
dGVUbzoxLjAKKyAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24s
IGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgorICAgICAg
ICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc2V0U3RhcnRWYWx1ZTpbc2Nyb2xsZXJJ
bXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOworICAgICAgICBbX2V4cGFuc2lvblRyYW5z
aXRpb25BbmltYXRpb24gc2V0RW5kVmFsdWU6MS4wXTsKKyAgICAgICAgW19leHBhbnNpb25UcmFu
c2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICB9CisgICAgW19leHBh
bnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClz
Y3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIG92ZXJsYXlTY3JvbGxlclN0
YXRlQ2hhbmdlZFRvOihOU092ZXJsYXlTY3JvbGxlclN0YXRlKW5ld092ZXJsYXlTY3JvbGxlclN0
YXRlCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKKyAgICBVTlVTRURfUEFSQU0o
bmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAg
ICBfc2Nyb2xsYmFyID0gMDsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBb
X2tub2JBbHBoYUFuaW1hdGlvbiBpbnZhbGlkYXRlXTsKKyAgICBbX3RyYWNrQWxwaGFBbmltYXRp
b24gaW52YWxpZGF0ZV07CisgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBpbnZhbGlk
YXRlXTsKKyAgICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gaW52YWxpZGF0ZV07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJhcnNDb250cm9sbGVyPiBTY3JvbGxiYXJz
Q29udHJvbGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJvbGxlck1hYz4oc2Nyb2xsYWJsZUFy
ZWEpOworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJN
YWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsYmFyc0NvbnRy
b2xsZXIoc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVy
KCp0aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRp
bWVyRmlyZWQpCisgICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIoKnRoaXMsICZT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVk
KQoreworICAgIG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xs
ZXJJbXBQYWlyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6JnNjcm9sbGFi
bGVBcmVhXSk7CisgICAgbV9zY3JvbGxlckltcFBhaXIgPSBhZG9wdE5TKFtbTlNTY3JvbGxlcklt
cFBhaXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0RGVsZWdhdGU6
bV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWly
IHNldFNjcm9sbGVyU3R5bGU6U2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxl
KCldOworfQorCitTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6flNjcm9sbGJhcnNDb250cm9sbGVy
TWFjKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV9zY3JvbGxl
ckltcFBhaXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0
RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZh
bGlkYXRlXTsKKyAgICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKK3sKKyAgICBpZiAoc2Nyb2xsYmFyUGFpbnRU
aW1lcklzQWN0aXZlKCkpCisgICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAg
W21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107CisgICAg
W21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
Y29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKK3sKKyAgICBhdXRvIHJlY3RJblZpZXdDb29y
ZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7CisgICAgaWYgKGF1dG8qIHZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFpbmluZ1Zp
ZXcoc2Nyb2xsZXJUaHVtYik7CisKKyAgICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1f
dmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxh
YmxlQXJlYSgpLnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0
ZXMpOworICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5h
dGVzOworfQorCisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYSgpLnNjcm9s
bEFuaW1hdG9yKCkuaGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Cit7CisgICAg
aWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
KyAgICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFXaWxsRHJhd107CisgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0o
T3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9y
IFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VFbnRlcmVkQ29udGVudEFyZWEiKTsK
KyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFbnRlcmVk
Q29udGVudEFyZWFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUV4
aXRlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJh
cnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFi
bGVBcmVhKCkgPDwgIl0gbW91c2VFeGl0ZWRDb250ZW50QXJlYSIpOworICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVy
bjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKK30K
Kwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KQoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zl
cmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Nj
cm9sbGVySW1wUGFpciBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKK3sKKyAgICAvLyBBdCB0aGlzIHRpbWUsIG9ubHkgbGVnYWN5IHNjcm9sbGJh
cnMgbmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhlcmUuCisgICAgaWYgKFNjcm9sbGVyU3R5
bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE5TU2Nyb2xs
ZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKSkKKyAg
ICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOworfQorCit2b2lkIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikgY29uc3QKK3sKKyAgICAvLyBBdCB0aGlzIHRpbWUsIG9ubHkgbGVnYWN5IHNjcm9sbGJhcnMg
bmVlZHMgdG8gc2VuZCBub3RpZmljYXRpb25zIGhlcmUuCisgICAgaWYgKFNjcm9sbGVyU3R5bGU6
OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xs
ZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE5TU2Nyb2xsZXJJ
bXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKSkKKyAgICAg
ICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0Cit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKSkgeworICAgICAgICBbcGFpbnRlciBzZXRUcmFja2luZzptb3VzZUlzRG93bl07CisgICAg
ICAgIGlmIChtb3VzZUlzRG93bikKKyAgICAgICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBiZWdp
blNjcm9sbEdlc3R1cmVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9zY3JvbGxlcklt
cFBhaXIgZW5kU2Nyb2xsR2VzdHVyZV07CisgICAgfQorfQorCit2b2lkIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJ
bXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBbbV9zY3JvbGxlckltcFBhaXIgc3RhcnRMaXZlUmVzaXplXTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudHNTaXplQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAg
aWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhRGlkUmVz
aXplXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2lsbEVuZExpdmVSZXNp
emUoKQoreworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpOwor
CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2Vk
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZExpdmVSZXNp
emVdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50QXJlYURpZFNo
b3coKQoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciB3aW5k
b3dPcmRlcmVkSW5dOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZEhpZGUoKQoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1w
UGFpciB3aW5kb3dPcmRlcmVkT3V0XTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0o
T3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9y
IFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gZGlkQmVnaW5TY3JvbGxHZXN0dXJlIik7CisK
KyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRd
KQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxH
ZXN0dXJlXTsKKworICAgIGlmIChhdXRvKiBtb25pdG9yID0gd2hlZWxFdmVudFRlc3RNb25pdG9y
KCkpCisgICAgICAgIG1vbml0b3ItPmRlZmVyRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hl
ZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7Cisg
ICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJh
cnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEVuZFNj
cm9sbEdlc3R1cmUiKTsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1w
UGFpciBlbmRTY3JvbGxHZXN0dXJlXTsKKworICAgIGlmIChhdXRvKiBtb25pdG9yID0gd2hlZWxF
dmVudFRlc3RNb25pdG9yKCkpCisgICAgICAgIG1vbml0b3ItPnJlbW92ZURlZmVycmFsRm9yUmVh
c29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkNvbnRlbnRTY3JvbGxJ
blByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bWF5QmVnaW5T
Y3JvbGxHZXN0dXJlKCkgY29uc3QKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9s
bGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9s
bGFibGVBcmVhKCkgPDwgIl0gbWF5QmVnaW5TY3JvbGxHZXN0dXJlIik7CisKKyAgICBpZiAoW21f
c2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKKyAg
ICBbbV9zY3JvbGxlckltcFBhaXIgY29udGVudEFyZWFTY3JvbGxlZF07Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sIHNob3VsZExvY2tTdGF0ZSkKK3sKKyAgICBpZiAoc2hvdWxkTG9ja1N0YXRlKQorICAgICAg
ICBbbV9zY3JvbGxlckltcFBhaXIgbG9ja092ZXJsYXlTY3JvbGxlclN0YXRlOk5TT3ZlcmxheVNj
cm9sbGVyU3RhdGVIaWRkZW5dOworICAgIGVsc2UgeworICAgICAgICBbbV9zY3JvbGxlckltcFBh
aXIgdW5sb2NrT3ZlcmxheVNjcm9sbGVyU3RhdGVdOworCisgICAgICAgIC8vIFdlIG5ldmVyIHVw
ZGF0ZSBzY3JvbGxlciBzdHlsZSBmb3IgUGFpbnRlckNvbnRyb2xsZXJzIHRoYXQgYXJlIGxvY2tl
ZC4gSWYgd2UgaGF2ZSBhIHBlbmRpbmcKKyAgICAgICAgLy8gbmVlZCB0byB1cGRhdGUgdGhlIHN0
eWxlLCBkbyBpdCBvbmNlIHdlJ3ZlIHVubG9ja2VkIHRoZSBzY3JvbGxlciBzdGF0ZS4KKyAgICAg
ICAgaWYgKG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKQorICAgICAgICAgICAgdXBkYXRlU2Ny
b2xsZXJTdHlsZSgpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIVttX3Njcm9sbGVy
SW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXTsKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Ny
b2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgbV92ZXJ0
aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CisKKyAgICBbcGFpbnRlciBz
ZXREZWxlZ2F0ZTptX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZS5nZXQoKV07CisgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKV07CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxT
Y3JvbGxlckltcDpwYWludGVyXTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNp
emUoKSkKKyAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1w
Rm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlKTsKKyAgICBb
bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgbV92ZXJ0aWNh
bFNjcm9sbGVySW1wRGVsZWdhdGUgPSBudWxscHRyOworCisgICAgW3BhaW50ZXIgc2V0RGVsZWdh
dGU6bmlsXTsKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpu
aWxdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBh
aW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBh
aW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSk7CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tXZWJTY3JvbGxlckltcERlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpz
Y3JvbGxiYXJdKTsKKworICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1faG9yaXpvbnRhbFNjcm9s
bGVySW1wRGVsZWdhdGUuZ2V0KCldOworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkK
KyAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07CisKKyAg
ICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwor
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQorICAgICAgICBbcGFpbnRl
ciBzZXRLbm9iQWxwaGE6MV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Ondp
bGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAg
IE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xs
YmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlKTsKKyAgICBbbV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBtX2hvcml6b250YWxTY3JvbGxlckltcERl
bGVnYXRlID0gbnVsbHB0cjsKKworICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07CisgICAg
W21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpuaWxdOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbnZhbGlkYXRlU2Nyb2xsYmFyUGFydExheWVy
cyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0g
c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgW3BhaW50ZXIgc2V0TmVl
ZHNEaXNwbGF5OllFU107Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gc2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCk7
CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU2Nyb2xsZXJJ
bXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBp
ZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtwYWludGVyIHNldExheWVyOmxh
eWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCit7Cisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFy
ZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNj
cm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtwYWludGVyIHNldExheWVyOmxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IG5pbF07Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNob3VsZFNjcm9sbGJh
clBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIC8v
IE5vbi1vdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBpbiBoaXQg
dGVzdGluZy4KKyAgICBpZiAoU2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxl
KCkgIT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5n
IHdoZW5ldmVyIHRoZXkgYXJlIGF0IGFsbCB2aXNpYmxlLgorICAgIE5TU2Nyb2xsZXJJbXAgKnBh
aW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBh
aW50ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW3BhaW50ZXIga25vYkFs
cGhhXSA+IDA7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRl
bnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKK3sKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBiYWNrL2Zvcndh
cmQgY2FjaGUsIGJ1dCB0aGUgcGFnZQorICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4g
dGhhdCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQorICAg
IC8vIFNjcm9sbGVySW1wUGFpciB3aGVuIHdlJ3JlIHJlYWxseSBzY3JvbGxpbmcgb24gYW4gYWN0
aXZlIHBhZ2UuCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCku
aXNIYW5kbGluZ1doZWVsRXZlbnQoKSkKKyAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQo
ZGVsdGEpOworICAgIGVsc2UKKyAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGRl
bHRhKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6dXBkYXRlU2Nyb2xsZXJT
dHlsZSgpCit7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0
ZUlzTG9ja2VkXSkgeworICAgICAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IHRydWU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBtYWNUaGVtZSA9IG1hY1Njcm9s
bGJhclRoZW1lKCk7CisgICAgaWYgKCFtYWNUaGVtZSkgeworICAgICAgICBtX25lZWRzU2Nyb2xs
ZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1hY1RoZW1lLT51c2VzT3ZlcmxheVNjcm9sbGJhcnNDaGFuZ2VkKCk7CisKKyAgICBOU1Njcm9s
bGVyU3R5bGUgbmV3U3R5bGUgPSBbbV9zY3JvbGxlckltcFBhaXIgc2Nyb2xsZXJTdHlsZV07CisK
KyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCku
dmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxp
ZGF0ZSgpOworCisgICAgICAgIE5TU2Nyb2xsZXJJbXAgKm9sZFZlcnRpY2FsUGFpbnRlciA9IFtt
X3Njcm9sbGVySW1wUGFpciB2ZXJ0aWNhbFNjcm9sbGVySW1wXTsKKyAgICAgICAgYXV0byBuZXdW
ZXJ0aWNhbFBhaW50ZXIgPSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRo
U3R5bGU6bmV3U3R5bGUgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpdmVydGljYWxTY3JvbGxi
YXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDpOTyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRW
ZXJ0aWNhbFBhaW50ZXJdKTsKKworICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0VmVydGlj
YWxTY3JvbGxlckltcDpuZXdWZXJ0aWNhbFBhaW50ZXIuZ2V0KCldOworICAgICAgICBtYWNUaGVt
ZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcigqdmVydGljYWxTY3JvbGxiYXIsIFdURk1vdmUo
bmV3VmVydGljYWxQYWludGVyKSk7CisgICAgICAgIG1hY1RoZW1lLT5kaWRDcmVhdGVTY3JvbGxl
ckltcCgqdmVydGljYWxTY3JvbGxiYXIpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Ny
b2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1z
ZXQgdGhlCisgICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRo
ZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCisgICAgICAgIC8vIGFu
ZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCisgICAgICAgIGludCB0aGlja25lc3MgPSBt
YWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpKTsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAs
IDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJh
cigpKSB7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKworICAg
ICAgICBOU1Njcm9sbGVySW1wICpvbGRIb3Jpem9udGFsUGFpbnRlciA9IFttX3Njcm9sbGVySW1w
UGFpciBob3Jpem9udGFsU2Nyb2xsZXJJbXBdOworICAgICAgICBhdXRvIG5ld0hvcml6b250YWxQ
YWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5l
d1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKWhvcml6b250YWxTY3JvbGxiYXItPmNv
bnRyb2xTaXplKCkgaG9yaXpvbnRhbDpZRVMgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkSG9yaXpv
bnRhbFBhaW50ZXJdKTsKKworICAgICAgICBbbV9zY3JvbGxlckltcFBhaXIgc2V0SG9yaXpvbnRh
bFNjcm9sbGVySW1wOm5ld0hvcml6b250YWxQYWludGVyLmdldCgpXTsKKyAgICAgICAgbWFjVGhl
bWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoKmhvcml6b250YWxTY3JvbGxiYXIsIFdURk1v
dmUobmV3SG9yaXpvbnRhbFBhaW50ZXIpKTsKKyAgICAgICAgbWFjVGhlbWUtPmRpZENyZWF0ZVNj
cm9sbGVySW1wKCpob3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVy
ZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11
c3QgcmUtc2V0IHRoZQorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3Ms
IGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAg
ICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tu
ZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0
KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICAvLyBJ
ZiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJl
c3RvcmluZyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGFuZAorICAgIC8vIGEgcmVsYXlv
dXQgd2lsbCBoYXBwZW4gb24gaXRzIG93bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEg
cmUtbGF5b3V0IG91cnNlbHZlcy4KKyAgICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0eWxl
Q2hhbmdlZChuZXdTdHlsZSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ID8gU2Nyb2xsYmFyU3R5
bGU6Ok92ZXJsYXkgOiBTY3JvbGxiYXJTdHlsZTo6QWx3YXlzVmlzaWJsZSwgIW1fbmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlKTsKKworICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFs
c2U7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Nyb2xsYmFyUGFp
bnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNo
b3QoMTAwX21zKTsKK30KKworYm9vbCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFy
UGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbml0aWFsU2Nyb2xs
YmFyUGFpbnRUaW1lci5pc0FjdGl2ZSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFy
UGFpbnRUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omlu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoKQoreworICAgIC8vIFRvIGZvcmNlIHRoZSBz
Y3JvbGxiYXJzIHRvIGZsYXNoLCB3ZSBoYXZlIHRvIGNhbGwgaGlkZSBmaXJzdC4gT3RoZXJ3aXNl
LCB0aGUgU2Nyb2xsZXJJbXBQYWlyCisgICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xs
YmFycyBhcmUgYWxyZWFkeSBzaG93aW5nIGFuZCBiYWlsIGVhcmx5LgorICAgIFttX3Njcm9sbGVy
SW1wUGFpciBoaWRlT3ZlcmxheVNjcm9sbGVyc107CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGZs
YXNoU2Nyb2xsZXJzXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKCkKK3sKKyAgICBzZW5kQ29udGVudEFyZWFTY3Jv
bGxlZChtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhKTsKKyAgICBtX2NvbnRl
bnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0geyB9OworCisgICAgaWYgKGF1dG8qIG1v
bml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSkKKyAgICAgICAgbW9uaXRvci0+cmVtb3Zl
RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6
OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkK
K3sKKyAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhID0gZGVsdGE7CisK
KyAgICBpZiAoIW1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisK
KyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAgICAg
ICBtb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0
TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RN
b25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0Nv
bnRyb2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCit7CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRJbkRpcmVj
dGlvbjpOU01ha2VQb2ludChkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSldOworfQorCitz
dGF0aWMgU3RyaW5nIHNjcm9sbGJhclN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAg
IGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gIm5vbmUiX3M7CisKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKHNjcm9sbGJhci0+ZW5hYmxlZCgpID8g
ImVuYWJsZWQiX3MgOiAiZGlzYWJsZWQiX3MpOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisKKyAg
ICBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcCA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpz
Y3JvbGxiYXIpOworICAgIGlmICghc2Nyb2xsZXJJbXApCisgICAgICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKKworICAgIGlmIChzY3JvbGxlckltcC5leHBhbmRlZCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiLGV4cGFuZGVkIl9zKTsKKworICAgIGlmIChzY3JvbGxlckltcC50cmFja0Fs
cGhhID4gMCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLHZpc2libGVfdHJhY2siX3MpOworCisg
ICAgaWYgKHNjcm9sbGVySW1wLmtub2JBbHBoYSA+IDApCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Iix2aXNpYmxlX3RodW1iIl9zKTsKKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30K
KworU3RyaW5nIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3Rh
dGVGb3JUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUoc2Nyb2xs
YWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCitTdHJpbmcgU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKK30KKworV2hlZWxFdmVudFRlc3RNb25pdG9yKiBTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25pdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JN
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2Nr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2MTU4Y2ZjZDQ5YzU5YjBmOGJk
MDcwNDViZTU5YjQ4NTliZmJlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9j
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxNiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvck1vY2suaCIKLQotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU2Nyb2xsQW5pbWF0b3JNb2NrOjpTY3JvbGxBbmltYXRvck1vY2soU2Nyb2xs
YWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiYgbG9nZ2VyKQotICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0gICAg
LCBtX2xvZ2dlcihXVEZNb3ZlKGxvZ2dlcikpCi17Ci19Ci0KLVNjcm9sbEFuaW1hdG9yTW9jazo6
flNjcm9sbEFuaW1hdG9yTW9jaygpID0gZGVmYXVsdDsKLQotdm9pZCBTY3JvbGxBbmltYXRvck1v
Y2s6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IG1fdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OmRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGJhcjsKLSAgICBTY3JvbGxBbmlt
YXRvcjo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTW9jazo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gbnVsbHB0cjsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvck1vY2s6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1hdG9yOjp3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpCi17Ci0gICAgbV9sb2dnZXIoIm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhIik7
Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCi17Ci0gICAg
bV9sb2dnZXIoIm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhIik7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6
Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2Nr
Ojptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkKLXsKLSAgICBtX2xvZ2dlcigibW91c2VFeGl0ZWRD
b250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCk7Ci19Ci0KLWNvbnN0IGNoYXIqIFNjcm9sbEFuaW1hdG9yTW9jazo6c2Nyb2xsYmFyUHJlZml4
KFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXIgPT0g
bV92ZXJ0aWNhbFNjcm9sbGJhciA/ICJWZXJ0aWNhbCIgOiBzY3JvbGxiYXIgPT0gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID8gIkhvcml6b250YWwiIDogIlVua25vd24iOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yTW9jazo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KSBjb25zdAotewotICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoIm1vdXNlRW50ZXJlZCIsIHNjcm9s
bGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9y
Ojptb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1vY2s6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25z
dAotewotICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoIm1vdXNlRXhpdGVkIiwgc2Nyb2xsYmFyUHJl
Zml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6Om1vdXNl
RXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2Nr
Ojptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIGlzUHJl
c3NlZCkgY29uc3QKLXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKGlzUHJlc3NlZCA/ICJtb3Vz
ZUlzRG93bkluIiA6ICJtb3VzZUlzVXBJbiIsIHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAi
U2Nyb2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUlzRG93bkluU2Nyb2xsYmFy
KHNjcm9sbGJhciwgaXNQcmVzc2VkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2NrLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NzIxYThmNjIyYzg5ZTU0NmQ5ZWJiYWNkOTgy
MTBmODMxMWI5OWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmltYXRvck1vY2suaAorKysg
L2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdh
bGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gQSBNb2NrIGltcGxlbWVudGF0aW9uIG9mIFNjcm9sbEFuaW1h
dG9yIHVzZWQgdG8gdGVzdCB0aGUgc2Nyb2xsIGV2ZW50cwotLy8gcmVjZWl2ZWQgYnkgdGhlIHNj
cm9sbCBhbmltYXRvci4gVGVzdHMgY2FuIGVuYWJsZSB0aGlzIHNjcm9sbCBhbmltYXRvciB1c2lu
ZwotLy8gdGhlIGludGVybmFsIHNldHRpbmcgZW5hYmxlTW9ja1Njcm9sbEFuaW1hdG9yLgotY2xh
c3MgU2Nyb2xsQW5pbWF0b3JNb2NrIGZpbmFsIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKLXB1
YmxpYzoKLSAgICBTY3JvbGxBbmltYXRvck1vY2soU2Nyb2xsYWJsZUFyZWEmLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOwotICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9y
TW9jaygpOwotCi1wcml2YXRlOgotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGJv
b2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93c1ZlcnRpY2Fs
U3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIEludFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEludFNpemUoKTsgfQotICAgIGJvb2wgaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShj
b25zdCBGbG9hdFNpemUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIFJl
Y3RFZGdlczxib29sPiBlZGdlUGlubmVkU3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7
IH07IH0KLSAgICBib29sIGFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgYWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkUnViYmVyQmFu
ZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJy
aWRlIHsgfQotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGFkanVzdFNj
cm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpIG92ZXJyaWRlIHsgfQotI2VuZGlmCi0K
LSAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsK
LSAgICB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92
ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3VzZUV4aXRlZFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlSXNEb3du
SW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgY29uc3Qg
Y2hhciogc2Nyb2xsYmFyUHJlZml4KFNjcm9sbGJhciopIGNvbnN0OwotCi0gICAgV1RGOjpGdW5j
dGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiBtX2xvZ2dlcjsKLSAgICBTY3JvbGxiYXIqIG1fdmVy
dGljYWxTY3JvbGxiYXIgeyBudWxscHRyIH07Ci0gICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxT
Y3JvbGxiYXIgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmNmMDI4MmJiYWJlODkyYTdjNDAwYjc0ZGQ4ZGEx
NWUwZmYxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE2IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBw
bGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlck1v
Y2suaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2so
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgbG9nZ2VyKQorICAgIDogU2Nyb2xsYmFyc0NvbnRyb2xsZXIoc2Nyb2xsYWJs
ZUFyZWEpCisgICAgLCBtX2xvZ2dlcihXVEZNb3ZlKGxvZ2dlcikpCit7Cit9CisKK1Njcm9sbGJh
cnNDb250cm9sbGVyTW9jazo6flNjcm9sbGJhcnNDb250cm9sbGVyTW9jaygpID0gZGVmYXVsdDsK
Kwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBzY3Jv
bGxiYXI7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6ZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyTW9jazo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQoreworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gbnVsbHB0cjsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OndpbGxSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIFNjcm9sbGJhcnNDb250cm9s
bGVyOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgbV9sb2dnZXIoIm1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhIik7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7CisgICAgbV9sb2dnZXIoIm1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhIik7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4aXRl
ZENvbnRlbnRBcmVhKCkKK3sKKyAgICBtX2xvZ2dlcigibW91c2VFeGl0ZWRDb250ZW50QXJlYSIp
OworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7Cit9
CisKK2NvbnN0IGNoYXIqIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6c2Nyb2xsYmFyUHJlZml4
KFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXIgPT0g
bV92ZXJ0aWNhbFNjcm9sbGJhciA/ICJWZXJ0aWNhbCIgOiBzY3JvbGxiYXIgPT0gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyID8gIkhvcml6b250YWwiIDogIlVua25vd24iOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKSBjb25zdAoreworICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoIm1vdXNlRW50ZXJlZCIs
IHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOworICAgIFNjcm9sbGJh
cnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIG1fbG9nZ2VyKG1ha2VTdHJpbmcoIm1vdXNlRXhp
dGVkIiwgc2Nyb2xsYmFyUHJlZml4KHNjcm9sbGJhciksICJTY3JvbGxiYXIiKSk7CisgICAgU2Ny
b2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBib29sIGlzUHJlc3NlZCkgY29uc3QKK3sKKyAgICBtX2xvZ2dl
cihtYWtlU3RyaW5nKGlzUHJlc3NlZCA/ICJtb3VzZUlzRG93bkluIiA6ICJtb3VzZUlzVXBJbiIs
IHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOworICAgIFNjcm9sbGJh
cnNDb250cm9sbGVyOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgaXNQcmVzc2Vk
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTQ3MzM5MzExMmQ4NGFhNTNlZDJiNjc5ZWZmMDg0NjczM2I4ODJiZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2Nr
LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlNjcm9sbGJhcnNDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBN
b2NrIGltcGxlbWVudGF0aW9uIG9mIFNjcm9sbGJhcnNDb250cm9sbGVyIHVzZWQgdG8gdGVzdCB0
aGUgc2Nyb2xsIGV2ZW50cworLy8gcmVjZWl2ZWQgYnkgdGhlIHNjcm9sbGJhciBjb250cm9sbGVy
LiBUZXN0cyBjYW4gZW5hYmxlIHRoaXMgbW9jayBvYmplY3QgdXNpbmcKKy8vIHRoZSBpbnRlcm5h
bCBzZXR0aW5nIHNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKS4KKy8vIEZJWE1FOiBzZXRVc2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCkgbmVlZHMgcmVuYW1pbmcuCisKK2NsYXNzIFNjcm9sbGJhcnND
b250cm9sbGVyTW9jayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNb2NrKTsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlck1v
Y2soU2Nyb2xsYWJsZUFyZWEmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYp
OworICAgIHZpcnR1YWwgflNjcm9sbGJhcnNDb250cm9sbGVyTW9jaygpOworCitwcml2YXRlOgor
CisgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAg
dm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmluYWw7CisgICAg
dm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBmaW5hbDsKKyAg
ICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBtb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJl
YSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29u
c3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJv
b2wpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IGNoYXIqIHNjcm9sbGJhclByZWZpeChTY3JvbGxi
YXIqKSBjb25zdDsKKworICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9s
b2dnZXI7CisgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9Owor
ICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9z
Y3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dAppbmRleCA2MGNkYjY2YzFm
MGEyYjEwN2Y1ODQxN2IzMzJlZjg3ZjYxNTFmOTQyLi5kZDRmYzAzMzRlYmNiYmM2MDU0YjMzNzkz
OTY0MmRiNmYzNjVkZDNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sx
L2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xs
LWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTEsMTAgKzEsMTUgQEAKK0NP
TlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKK0NP
TlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCiBDT05T
T0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgor
Q09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQog
Q09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJh
cgogQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9s
bGJhcgorQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQogQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3Jv
bGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVu
dEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFy
ZWEKIFRoaXMgaXMgYSBzY3JvbGxhYmxlIGRpdi4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itc2VsZWN0LWxp
c3QtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFz
dC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLXNlbGVjdC1saXN0LWV2ZW50cy1leHBlY3RlZC50
eHQKaW5kZXggZWZhMGUxNjJjNGIzNjQ3ODQ2NjNjZWIwNjcxNzNiODNkYTE2MWQ3OC4uOGI2NmJh
ZWJiOTg5MDM1NTMyMmU0MzA4YTY5NjU4YTJlMTExNmU2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itc2VsZWN0
LWxpc3QtZXZlbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1zZWxlY3QtbGlzdC1ldmVudHMtZXhw
ZWN0ZWQudHh0CkBAIC0xLDEwICsxLDE1IEBACitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZp
ZXc6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZp
ZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxpc3RC
b3g6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxpc3RC
b3g6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IE1haW5G
cmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxpc3RCb3g6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxpc3RCb3g6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgogQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMaXN0Qm94OiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1F
U1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBDT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxpc3RCb3g6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCiBDT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxpc3RCb3g6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKK0NPTlNP
TEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKIENPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGlzdEJveDogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGVzdCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzM5OC4KIAo=
</data>
<flag name="commit-queue"
          id="461953"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438545</attachid>
            <date>2021-09-17 20:15:22 -0700</date>
            <delta_ts>2021-09-17 21:25:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230295-20210917201521.patch</filename>
            <type>text/plain</type>
            <size>193461</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThjMTc5MDJjNGVmZjVi
OWQ5MTI3Yjc0OTM4ZWM2YTIzMTQ0M2UzMC4uYjlmYzg0NjU2NTQyNzlmZjdiYTNmMWY4YTIyOWQ2
MDM0YjVhYmMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMCBAQAorMjAyMS0wOS0xNyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9s
bGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9sbEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJh
cnNDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IEFzIHRoZSBmaXJzdCBzdGVwIHRvIGNsZWFuaW5nIHVwIFNjcm9sbEFuaW1hdG9yL1Njcm9sbENv
bnRyb2xsZXIsIG1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YKKyAgICAgICAgU2Ny
b2xsQW5pbWF0b3IgYW5kIGludG8gYSBuZXcgU2Nyb2xsYmFyc0NvbnRyb2xsZXIgY2xhc3MsIHdp
dGggcGxhdGZvcm0tc3BlY2lmaWMgc3ViY2xhc3Nlcy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBt
dWNoIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIFNjcm9sbEFu
aW1hdG9yLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRzUmVzaXplZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6d2lsbEVuZExpdmVSZXNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OndoZWVsRXZlbnRUZXN0TW9uaXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZENv
bnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25J
blNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUGFydExheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
aG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbEVuZExpdmVSZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRI
aWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5oLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnNjcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmNh
bmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6
OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYVdpbGxQ
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUVudGVyZWRTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjptb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyOjp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y29udGVudEFyZWFEaWRTaG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlcjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyOjp3
aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlcjo6aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlcjo6c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Om5vdGlmeUNvbnRlbnRBcmVhU2Ny
b2xsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXI6Omhvcml6b250
YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9y
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVy
aWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVhc2VPdXRDdWJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91
c2VFbnRlcmVkQ29udGVudEFyZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpj
b250ZW50QXJlYURpZFNob3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9s
bEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpoYW5k
bGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJhclRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGUgaW52YWxpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJE
ZWxlZ2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9s
bGVySW1wUGFpcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVs
ZWdhdGUgbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Ny
b2xsZXJJbXBQYWlyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6XSk6IERlbGV0ZWQuCisgICAgICAgIChvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBp
bml0V2l0aFNjcm9sbGJhcjpmZWF0dXJlVG9BbmltYXRlOmFuaW1hdGVGcm9tOmFuaW1hdGVUbzpk
dXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBzdGFydEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGJhclBhcnRBbmltYXRpb24gc2V0RW5kVmFsdWU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGludmFsaWRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXREdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgaW5pdFdp
dGhTY3JvbGxiYXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdh
dGUgY2FuY2VsQW5pbWF0aW9uc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RUb0JhY2tpbmc6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBsYXllcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIG1vdXNlTG9jYXRpb25JblNjcm9s
bGVyRm9yU2Nyb2xsZXJJbXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgY29udmVydFJlY3RUb0xheWVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNob3VsZFVzZUxheWVyUGVyUGFydEZvclNjcm9sbGVySW1wOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERlbGVnYXRlIGVmZmVjdGl2ZUFw
cGVhcmFuY2VGb3JTY3JvbGxlckltcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBzZXRVcEFscGhhQW5pbWF0aW9uOnNjcm9sbGVyUGFpbnRlcjpwYXJ0OmFu
aW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJTY3JvbGxl
ckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDph
bmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJT
Y3JvbGxlckltcERlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVVSVN0YXRlVHJhbnNpdGlvbldp
dGhEdXJhdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBzY3JvbGxlckltcDphbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDpv
dmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
U2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xs
YmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUV4aXRlZFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJl
c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudHNSZXNpemVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bWF5QmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmludmFs
aWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6OnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJl
YVNjcm9sbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
c3RvcFNjcm9sbGJhclBhaW50VGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNj
cm9sbGVkU29vbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9s
bGJhcnNDb250cm9sbGVyTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjptYWNTY3JvbGxi
YXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxlckltcEZvclNjcm9sbGJhcik6Cisg
ICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0
Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxl
Z2F0ZSBpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGVySW1wUGFpckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3Jv
bGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAg
ICAoLVtXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6c2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wUGFp
ckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgICgt
W1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gaW5pdFdpdGhTY3JvbGxiYXI6ZmVhdHVyZVRvQW5p
bWF0ZTphbmltYXRlRnJvbTphbmltYXRlVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBzZXRTdGFydFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uIHNldEVuZFZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bV2ViU2Ny
b2xsYmFyUGFydEFuaW1hdGlvbiBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGluaXRXaXRoU2Nyb2xsYmFyOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxl
Z2F0ZSBzY3JvbGxiYXJzQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlckltcERl
bGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxlcklt
cERlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1dlYlNjcm9s
bGVySW1wRGVsZWdhdGUgbGF5ZXJdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBtb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtX
ZWJTY3JvbGxlckltcERlbGVnYXRlIGNvbnZlcnRSZWN0VG9MYXllcjpdKToKKyAgICAgICAgKC1b
V2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlcklt
cDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBlZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUg
c2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFydDphbmltYXRlQWxwaGFUbzpk
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlcklt
cDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVy
SW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZVRyYWNrQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVUlT
dGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgc2Nyb2xsZXJJbXA6YW5pbWF0ZUV4cGFuc2lvblRyYW5zaXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgtW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgaW52YWxpZGF0ZV0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1h
Yzo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29udHJvbGxlck1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRD
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyc0NvbnRyb2xsZXJNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRMaXZlUmVz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpjb250ZW50
QXJlYURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJv
bGxlck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptYXlCZWdpblNjcm9sbEdl
c3R1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2ls
bFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0
ZVNjcm9sbGJhclBhcnRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2hv
dWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxl
ck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50
QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFy
U3RhdGVGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2hlZWxFdmVudFRlc3RNb25p
dG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9jay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJN
b2NrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
QW5pbWF0b3JNb2NrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcnNDb250cm9sbGVyTW9jazo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250
cm9sbGVyTW9jazo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTW9j
azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJz
Q29udHJvbGxlck1vY2s6OnNjcm9sbGJhclByZWZpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaDogQWRkZWQuCisKIDIwMjEtMDktMTcgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ug
T2JqZWN0SWRlbnRpZmllciBmb3IgUmVzb3VyY2VMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzY0
ZjNiMzdjYmVkZWU0OTI0ODBhZjUxY2IxZjk4NzJlMDA0YWQyMi4uNWFhZDBkOTNjMjliZmEzNTE1
ZWVjNTljY2RhOTkxNjkyYzQzOTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4MzEsNiArMTgzMSw3
IEBAIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKIHBs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorcGxhdGZv
cm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5jcHAK
IHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogcGxhdGZvcm0vU2VyaWFsaXpl
ZFBsYXRmb3JtRGF0YUN1ZS5jcHAKQEAgLTIwOTksNyArMjEwMCw3IEBAIHBsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCiBwbGF0Zm9ybS9tb2NrL1BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJNb2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENEYXRhQ2hhbm5lbEhhbmRsZXJN
b2NrLmNwcAogcGxhdGZvcm0vbW9jay9SVENOb3RpZmllcnNNb2NrLmNwcAotcGxhdGZvcm0vbW9j
ay9TY3JvbGxBbmltYXRvck1vY2suY3BwCitwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcAogcGxhdGZv
cm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGVmMjBiZWQzNjE1YmNhODExMDJhMjIwMTA5NDQxYThlMjE5NWU3N2QuLjVjNGFhYzhjMmRi
NDU5YjU2ODI3NjIxZGM2MzMzNGE1ZmMzODY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtNDkxLDYgKzQ5MSw3IEBAIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMu
bW0KK3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9T
ZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLm1tCiBwbGF0Zm9ybS9tYWMvU3RyaW5nVXRpbGl0
aWVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGNkNzA0N2IxZWNjZTJjMjVkODM3ZjE0ZjM0
ZjRjZDBjODQ5NjViMmYuLjg5NzMwMTIzMzA5NDhkNmVlMDgzNWZlNGY4NjI5MjdkMjY0MzA0Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC03OCw2ICs3OCw3IEBAIHBsYXRmb3JtL2dhbWVwYWQv
bWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAKIHBsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5l
dHRlR2FtZXBhZFByb3ZpZGVyLmNwcAogCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9y
R2VuZXJpYy5jcHAKK3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CmluZGV4
IDhkYWQ4YzcxYzhmZWEyYWJkM2YxOTE5YzA0ZTlkYTI3Njk0ZDgwYjkuLmE5YTI3OTE0MTgwMTY5
OTFkYjI0ZDViZjA5YzllNTEwYzgwMTMzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC02NCw2
ICs2NCw3IEBAIHBsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmNwcAogcGxh
dGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCiAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xs
QW5pbWF0b3JHZW5lcmljLmNwcAorcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJvbGxl
ckdlbmVyaWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyNjUwYjQ1ZmY0NzY2ODFlYTMy
YWI5ODdhZDI4ODhkMTIwODFlODAuLjY3MWUzZGEzMDI2YmUzMjFkYzZhYWI3OWM2MTQyNmIyNjI4
YmZiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTM4OSw2ICszODksNyBAQAogCQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUg
LyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTNFODYxOTFCM0JENzAwMEYxQjU1IC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBRjY2QjIzQkZDMzlFMDA0MDMwREEgLyogQ29s
b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUMxMjBDMjJCRjJD
RDIwMDRFOUQzNSAvKiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzEyMDkyMkJGMkNDNzAwNEU5RDM1
IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFRTM3MTEyNkYxOTUyOTAwMUI1MTg0IC8qIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250
cm9sbGVyTWFjLm1tICovOyB9OwogCQkwRkYzQjkyOTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYz
QjkyNTFFRTNCNkRFMDBCODQxNDQgLyogSlNET01RdWFkLmggKi87IH07CiAJCTBGRjNCOTJCMUVF
M0I2REUwMEI4NDE0NCAvKiBKU0RPTVF1YWRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYzQjkyNzFFRTNCNkRFMDBCODQxNDQgLyogSlNET01R
dWFkSW5pdC5oICovOyB9OwogCQkwRkY1MDI2QTEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1l
ZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1
MDI2ODEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1lZGlhLmggKi87IH07CkBAIC0yMDM4LDcg
KzIwMzksNyBAQAogCQk1QzlDMkRCNTIyNDFBNjdCMDA5OTZCMEIgLyogQ29udGVudFJ1bGVMaXN0
UmVzdWx0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM5QzJEQjMyMjQxQTY3MzAwOTk2QjBCIC8qIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QzlFRjJGMzIx
RjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RUYyRjIyMUYwNjE3MTAwM0JEQzU2
IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0ExREVDNjFGNzFGMUM3MDBFNzFCRDMgLyogSFRUUEhl
YWRlckZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0ExREVDNDFGNzFFNjg3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNUNCMzdGRkYxQzYyRDJB
MTAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9s
bEFuaW1hdG9yTW9jay5oICovOyB9OworCQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmggKi87IH07CiAJCTVDQkM4REFEMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUNCRDU5NTkyMjgwRTkyNjAwMkIyMkFBIC8qIEN1c3RvbUhlYWRlckZpZWxkcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzVEMjM4NjIy
N0EwNzdDMDAwQjlCREEgLyogQ3VzdG9tSGVhZGVyRmllbGRzLmNwcCAqLzsgfTsKIAkJNUNDNzkw
MEUyNjZBRkE4OTAwNjkyNEZFIC8qIFRpbWluZ0FsbG93T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3OTAwQjI2NkFGQTg4MDA2OTI0RkUg
LyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjE3Niw2ICs2MTc3LDEwIEBACiAJCTBDNDUzNDI2MTBDREJCRkEw
MDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9w
dXBNZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJD
NUNDRDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWFyY2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAy
MjQ1MDI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjAyMjQ1MjI2RjE1RDVGMDAwMjY1QzMgLyogU2Nyb2xsYmFyc0NvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDIyNDU0MjZGMTVENzUw
MDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAz
QzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5
RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODU1LDggKzk4NjAsOCBAQAogCQk1
QzlFRjJGMjIxRjA2MTcxMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBI
VFRQSGVhZGVyRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRUUEhlYWRlckZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURF
QzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVFRQSGVhZGVyRmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvck1v
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0IzN0ZGRDFDNjJEMjc4MDBG
MjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbEFuaW1hdG9yTW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhcnNDb250cm9s
bGVyTW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vz
c2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0
TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxp
dHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0M3OTAwQjI2NkFG
QTg4MDA2OTI0RkUgLyogVGltaW5nQWxsb3dPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGltaW5nQWxsb3dPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxODExLDggKzIxODE2LDggQEAKIAkJCQkwNzM3OTRGNDE5RjU4NjRFMDBFNUEwNDUg
LyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oICovLAogCQkJCTA3Mzc5NEY3MTlGNTg2NEUw
MEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmNwcCAqLywKIAkJCQkwNzM3OTRGODE5RjU4NjRF
MDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oICovLAotCQkJCTVDQjM3RkZDMUM2MkQyNzgw
MEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3BwICovLAotCQkJCTVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLywKKwkJCQk1Q0IzN0ZGQzFDNjJE
Mjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNwcCAqLywKKwkJCQk1Q0Iz
N0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggKi8sCiAJ
CQkJMEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi8s
CiAJCQkJMEZFNzE0MDQxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oICov
LAogCQkJCTJEN0VEMEE5MUJBRTk5MTcwMDQzQjNFNSAvKiBUaW1lckV2ZW50QmFzZWRNb2NrLmgg
Ki8sCkBAIC0yMjE3MCw2ICsyMjE3NSw4IEBACiAJCQkJMDA4MUZFRkUxNkIwQTJCNjAwOEFBQTdB
IC8qIFB1YmxpY1N1ZmZpeE1hYy5tbSAqLywKIAkJCQlCQ0FFMUZBNTEyOTM5REI3MDA0Q0IwMjYg
LyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAqLywKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBDOTY3NTQg
LyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi8sCisJCQkJMEYwMjI0NTQyNkYxNUQ3NTAwMDI2NUMz
IC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLmggKi8sCisJCQkJMEYwMjI0NTMyNkYxNUQ3NTAw
MDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3
QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4
NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk1QjFFMEU0MzI1
RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8sCkBAIC0y
ODE0Miw2ICsyODE0OSw4IEBACiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICov
LAorCQkJCTBGMDIyNDUwMjZGMTVENUYwMDAyNjVDMyAvKiBTY3JvbGxiYXJzQ29udHJvbGxlci5j
cHAgKi8sCisJCQkJMEYwMjI0NTIyNkYxNUQ1RjAwMDI2NUMzIC8qIFNjcm9sbGJhcnNDb250cm9s
bGVyLmggKi8sCiAJCQkJMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1l
LmNwcCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUu
aCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwICovLApAQCAtMzQ5MjEsOCArMzQ5MzAsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlC
QUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0
ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FFMUZBNzEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRv
ck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBT
Y3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAv
KiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRC
MEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MDgsNiArMzY1MTcsNyBAQAogCQkJCTQxOTI0
MjQ5MjEyN0I5M0UwMDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzUxMTU2RTEyQjE3NDlDMDBD
OTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVFMzcx
MTI2RjE5NTI5MDAxQjUxODQgLyogU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyogU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI2QUEwRjlFMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRU
eXBlTWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCmluZGV4IDhhNmI2Zjk3NzYxZWIxMTllZTU5Y2VmOWFjZjcxYTQwYzE1ZjMy
NWQuLjg0OGM0NmYyODUwNDk2OWU5MWYwNGVkMWJjNTE1YWViMTAwZDA5YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM1NiwyMiArMzU2LDcgQEAg
dm9pZCBTY3JvbGxBbmltYXRvcjo6Y2FuY2VsQW5pbWF0aW9ucygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvcjo6Y29udGVudHNSZXNpemVkKCkgY29uc3QKLXsKLSAgICBtX3Njcm9s
bEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgbV9zY3JvbGxBbmltYXRpb24tPnVwZGF0
ZVNjcm9sbEV4dGVudHMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRl
U2Nyb2xsRXh0ZW50cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpjb250ZW50c1Np
emVDaGFuZ2VkKCkgY29uc3QKIHsKICAgICBtX3Njcm9sbEFuaW1hdGlvbi0+dXBkYXRlU2Nyb2xs
RXh0ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggYTExZTkwZTExZDc1OTZmNDFlNjI4ODI5Mjc1NTUxZDcyZGU1YmRhYS4uM2M3NjEwZWVkOThl
YTQzNjEzMjIxZDk3NDgwNjAwMTdhYjZhY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVh
OyB9CiAKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdDsKKworICAgIGJvb2wg
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsgfQorICAgIHZvaWQgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChi
b29sIGhhdmVTY3JvbGxlZCkgeyBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBoYXZlU2Ny
b2xsZWQ7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpOwogCiAgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQpAQCAtOTcsNDkgKzEwMiwxNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciop
IGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihT
Y3JvbGxiYXIqLCBib29sKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFEaWRTaG93KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlk
SGlkZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVU
b0hpZGRlbihib29sKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xs
YmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRB
cmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEp
OyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5n
IGhvcml6b250YWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0
eVN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVydGljYWxTY3JvbGxiYXJTdGF0ZUZv
clRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0KICAgICAvLyBTY3Jv
bGxBbmltYXRpb25DbGllbnQKICAgICB2b2lkIHNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3Jv
bGxBbmltYXRpb24mLCBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24pIG92ZXJyaWRl
OwogICAgIHZvaWQgc2Nyb2xsQW5pbWF0aW9uRGlkRW5kKFNjcm9sbEFuaW1hdGlvbiYpIG92ZXJy
aWRlOwogICAgIFNjcm9sbEV4dGVudHMgc2Nyb2xsRXh0ZW50c0ZvckFuaW1hdGlvbihTY3JvbGxB
bmltYXRpb24mKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0V2hlZWxFdmVudFRlc3RNb25pdG9y
KFJlZlB0cjxXaGVlbEV2ZW50VGVzdE1vbml0b3I+JiYgdGVzdE1vbml0b3IpIHsgbV93aGVlbEV2
ZW50VGVzdE1vbml0b3IgPSB0ZXN0TW9uaXRvcjsgfQorICAgIFdoZWVsRXZlbnRUZXN0TW9uaXRv
ciogd2hlZWxFdmVudFRlc3RNb25pdG9yKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGVz
dE1vbml0b3IuZ2V0KCk7IH0KIAogICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9y
U25hcHBpbmdJZk5lZWRlZChjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQsIFNjcm9sbFNuYXBQb2lu
dFNlbGVjdGlvbk1ldGhvZCk7CiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBp
bmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCwg
U2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKQEAgLTE4NCw2ICsxNTcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVy
OwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyOwogICAgIEZsb2F0
UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvblNt
b290aD4gbV9zY3JvbGxBbmltYXRpb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCA0OTkyNDVjYTE0MDdkNDczNzUz
MmNkNGU4NzQ4ODNkMDU0YzMzODZiLi4wM2EwMGMwY2U3M2YzMzYzYTcwMDEzY2FjMDg3NDhhZWQx
YTQxNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBA
IC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JNb2NrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXJzQ29udHJvbGxlck1vY2suaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcgQEAgc3RydWN0IFNh
bWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIHdl
YWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRocmVhZDsKICNlbmRpZgotICAgIHZvaWQq
IHBvaW50ZXJbMl07CisgICAgdm9pZCogcG9pbnRlclszXTsKICAgICBJbnRQb2ludCBvcmlnaW47
CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CiB9OwpAQCAtNzQsMTcgKzc0LDI1IEBAIFNj
cm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKSA9IGRlZmF1bHQ7CiAKIFNjcm9sbEFuaW1h
dG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAogewotICAgIGlmICgh
bV9zY3JvbGxBbmltYXRvcikgeworICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikKKyAgICAgICAg
bV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoY29uc3RfY2FzdDxTY3Jv
bGxhYmxlQXJlYSY+KCp0aGlzKSk7CisKKyAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVyJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFy
c0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxiYXJzQ29udHJvbGxlcikg
eworICAgICAgICAvLyBOb3RlIHRoYXQgbW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCBpcyBhIG1p
c25vbWVyLgogICAgICAgICBpZiAobW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCgpKSB7Ci0gICAg
ICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRvck1vY2s+
KGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcyksIFt0aGlzXShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBtYWtlVW5p
cXVlPFNjcm9sbGJhcnNDb250cm9sbGVyTW9jaz4oY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+
KCp0aGlzKSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgewogICAgICAgICAgICAgICAg
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gU2Nyb2xsQW5p
bWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKKyAgICAg
ICAgICAgIG1fc2Nyb2xsYmFyc0NvbnRyb2xsZXIgPSBTY3JvbGxiYXJzQ29udHJvbGxlcjo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwogICAgIH0KIAotICAgIEFT
U0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKLSAgICByZXR1cm4gKm1fc2Nyb2xsQW5pbWF0b3IuZ2V0
KCk7CisgICAgcmV0dXJuICptX3Njcm9sbGJhcnNDb250cm9sbGVyLmdldCgpOwogfQogCiB2b2lk
IFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbikK
QEAgLTIwMSw3ICsyMDksNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nZWQoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIH0KIAogICAgIGlmIChz
Y3JvbGxQb3NpdGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigp
Lm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRpb24oKSAtIG9sZFBvc2l0aW9u
KTsKKyAgICAgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9CiAKIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPikK
QEAgLTI0Miw5MSArMjUwLDg1IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxTdGFydExpdmVS
ZXNpemUoKQogewogICAgIGlmIChtX2luTGl2ZVJlc2l6ZSkKICAgICAgICAgcmV0dXJuOworCiAg
ICAgbV9pbkxpdmVSZXNpemUgPSB0cnVlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT53aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS53
aWxsU3RhcnRMaXZlUmVzaXplKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxFbmRM
aXZlUmVzaXplKCkKIHsKICAgICBpZiAoIW1faW5MaXZlUmVzaXplKQogICAgICAgICByZXR1cm47
CisKICAgICBtX2luTGl2ZVJlc2l6ZSA9IGZhbHNlOwotICAgIGlmIChTY3JvbGxBbmltYXRvciog
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9s
bEFuaW1hdG9yLT53aWxsRW5kTGl2ZVJlc2l6ZSgpOwotfSAgICAKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLndpbGxFbmRMaXZlUmVzaXplKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250
ZW50c1NpemVDaGFuZ2VkKCk7Cit9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVh
V2lsbFBhaW50KCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZmxhc2ggb3Zlcmxh
eSBzY3JvbGxiYXJzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KLSAgICBpZiAoU2Nyb2xsQW5pbWF0
b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBz
Y3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBzY3JvbGxiYXJzQ29u
dHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICBzY3JvbGxBbmltYXRvci0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICBzY3JvbGxi
YXJzQ29udHJvbGxlcigpLm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewotICAgIGlmIChT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAg
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKLSAg
ICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEo
KTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJl
ZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1v
dXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIHNj
cm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wgbW91c2VJc0Rvd24pIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3Io
KS5tb3VzZUlzRG93bkluU2Nyb2xsYmFyKHNjcm9sbGJhciwgbW91c2VJc0Rvd24pOworICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkubW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIG1v
dXNlSXNEb3duKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFy
ZWFEaWRTaG93KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZFNo
b3coKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3QKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29udGVudEFyZWFEaWRI
aWRlKCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50QXJlYURpZEhpZGUoKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlk
ZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oc2hvdWxkTG9j
a1N0YXRlKTsKKyAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihzaG91bGRMb2NrU3RhdGUpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAogewotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuc2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNj
cm9sbGJhcnNDb250cm9sbGVyKCkuZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIHNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudHNTaXplQ2hhbmdlZCgpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMzUsMjEgKzMzNywyMSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9s
bGVyKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQot
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIHNjcm9sbGJhcnNDb250cm9sbGVyKCkud2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCkKIHsKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+Y29u
dGVudHNSZXNpemVkKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yLT5jb250ZW50c1Jlc2l6ZWQoKTsgLy8gVGhpcyBmbGFzaGVzIG92ZXJsYXkgc2Nyb2xsYmFy
cy4KKyAgICBzY3JvbGxBbmltYXRvcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICBzY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsgLy8gVGhpcyBmbGFzaGVz
IG92ZXJsYXkgc2Nyb2xsYmFycy4KIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMzc1LDE0ICszNzcsMTIgQEAgdm9pZCBTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcnMoKQogewogICAgIGlmIChhdXRvKiBzY3JvbGxiYXIg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZhbGlkYXRlU2Nyb2xsYmFy
UGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJzQ29udHJvbGxlcigpLmlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5pbnZh
bGlkYXRlU2Nyb2xsYmFyUGFydExheWVycyhzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxiYXJz
Q29udHJvbGxlcigpLmludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKHNjcm9sbGJhcik7CiAg
ICAgfQogfQogCkBAIC00MjMsMTIgKzQyMywxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbGJh
cnNDb250cm9sbGVyKCkudmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQog
ewotICAgIHNjcm9sbEFuaW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCk7CisgICAgc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKQEAgLTQ2MCwxMiArNDYwLDEyIEBAIGJvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKIAogU3RyaW5nIFNjcm9sbGFi
bGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0
aW5nKCk7CisgICAgcmV0dXJuIHNjcm9sbGJhcnNDb250cm9sbGVyKCkuaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpOwogfQogCiBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpOworICAgIHJldHVy
biBzY3JvbGxiYXJzQ29udHJvbGxlcigpLnZlcnRpY2FsU2Nyb2xsYmFyU3RhdGVGb3JUZXN0aW5n
KCk7CiB9CiAKIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFy
ZWE6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CkBAIC01MTgsNyArNTE4LDcgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGU6IGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgPDwgIiBp
c1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKTsKIAot
ICAgIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KTsKICAgICBpZiAoIXNjcm9sbEFuaW1hdG9yIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggNGU5ZjY1ZmIxNzcxM2YwN2RjMzYy
ZWU3MmVlMTk1NTczZjM0OWI3MC4uYzEwOTllYzM0MjU2Y2M4NTM3OTRkYmE5YThkOWE0ZWYzYzhl
ODc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC00NSw2
ICs0NSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKK2NsYXNzIFNj
cm9sbGJhcnNDb250cm9sbGVyOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFj
a2luZzsKIApAQCAtMTcyLDEyICsxNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
Ly8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9s
bEFuaW1hdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxs
IGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3Jv
bGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQW5pbWF0b3IuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbGJhcnNDb250
cm9sbGVyJiBzY3JvbGxiYXJzQ29udHJvbGxlcigpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwpAQCAtMzc4LDYgKzM3
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSA9IDA7CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxB
bmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
Y3JvbGxiYXJzQ29udHJvbGxlcj4gbV9zY3JvbGxiYXJzQ29udHJvbGxlcjsKIAogICAgIC8vIFRo
ZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVj
dGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcwog
ICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2Rl
LiBUaGUgY29tYmluYXRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CmluZGV4IDk2NjU3NzA3ZGNlZjgwZWRiMTJmOTcwZGJjYWVlZWYxZTU0ODczMWYuLmYwYWQyMmE5
MGQ5NjJhNTYzNTA2MGVlNDUwYTRmOTZlMTA0YjBiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFycyBz
aG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNPdmVy
bGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0Nv
bnRyb2xsZXIoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyh0aGlzKTsK
IH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OTljZmIyMTQxZmI5ZmVlM2ZhZDk4MDM4YjM4MjVlMTJiMmFhYWRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyc0NvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShX
UEUpICYmICFQTEFURk9STShHVEspCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xs
ZXI+IFNjcm9sbGJhcnNDb250cm9sbGVyOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPFNjcm9sbGJhcnNDb250cm9sbGVyPihz
Y3JvbGxhYmxlQXJlYSk7Cit9CisjZW5kaWYKKworU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OlNjcm9s
bGJhcnNDb250cm9sbGVyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1f
c2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhcnNDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA2NThmZTEzZDMzNDc1NDQwNTIyMjhmNDVlYzM1YWYwNTc5MjM3ZjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJzQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVh
OworCitjbGFzcyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyc0NvbnRyb2xsZXIpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYmFyc0NvbnRyb2xsZXI+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOworCisgICAgZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXIoU2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxl
cigpID0gZGVmYXVsdDsKKyAgICAKKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
QmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWF5QmVnaW5TY3JvbGxH
ZXN0dXJlKCkgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFp
bnQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CisgICAgdmly
dHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNv
bnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFEaWRTaG93KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNjcm9sbGJhciopIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFy
KikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgaG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKworcHJpdmF0ZToKKyAgICBTY3JvbGxhYmxlQXJl
YSYgbV9zY3JvbGxhYmxlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5l
cmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JH
ZW5lcmljLmNwcAppbmRleCA3ODIzODM1YzQxNTg5N2U5NzUwZmU0MmM3ZGVhYjg1MzYyYWM1M2Yy
Li5iNjBjZDZiMWEwOTFmM2Y2YjMwYzkyN2ZjMzcxYTVlNTkxYWU2NGVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuY3BwCkBAIC0zOCw5ICszOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGNvbnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24geyAxX3Mg
fTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVE
ZWxheSB7IDJfcyB9OwotCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewogICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdG9yR2VuZXJpYz4oc2Nyb2xsYWJsZUFyZWEpOwpA
QCAtNDksNyArNDYsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogU2Nyb2xsQW5pbWF0b3JH
ZW5lcmljOjpTY3JvbGxBbmltYXRvckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2tpbmV0
aWNBbmltYXRpb24obWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPigqdGhpcykpCi0g
ICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CiB9CiAK
QEAgLTkwLDE5NyArODYsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6dXBkYXRlUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3Jv
bGxBbmltYXRvcjo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLQotICAgIGlm
ICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIGlmICghbV9ob3Jp
em9udGFsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCA9IDE7Ci0gICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNp
dHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7Ci0gICAgaGlkZU92ZXJsYXlT
Y3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIFNjcm9sbEFuaW1h
dG9yOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0KLSAgICBpZiAoIXNj
cm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIGlmICghbV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPSAxOwotICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHko
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7Ci0gICAgaGlkZU92ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKG1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICBpZiAoIW1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQgPSAwOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6d2lsbFJlbW92ZUhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKG1faG9y
aXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciA9IG51bGxwdHI7Ci0gICAgaWYgKCFtX3Zl
cnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCA9IDA7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjp1cGRhdGVP
dmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKQotewotICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNj
cm9sbGJhciAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKLSAgICAgICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSA9PSBOb1BhcnQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aW52
YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
ICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlT
Y3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7
Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IE5vUGFydCkKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGVhc2VPdXRDdWJp
Yyhkb3VibGUgdCkKLXsKLSAgICBkb3VibGUgcCA9IHQgLSAxOwotICAgIHJldHVybiBwICogcCAq
IHAgKyAxOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6b3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
IGRvdWJsZSBwcm9ncmVzcyA9IDE7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIDwgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uRW5kVGltZSkKLSAgICAgICAgcHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUg
LSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUpLnZhbHVlKCkgLyAobV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSkudmFsdWUoKTsKLSAgICBwcm9ncmVzcyA9IG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblNvdXJjZSArIChlYXNlT3V0Q3ViaWMocHJvZ3Jlc3MpICogKG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRhcmdldCAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSkp
OwotICAgIGlmIChwcm9ncmVzcyAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
KSB7Ci0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSBwcm9ncmVz
czsKLSAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZnJh
bWVSYXRlID0gNjA7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHRpY2tUaW1lID0gMV9z
IC8gZnJhbWVSYXRlOwotICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5pbXVtVGltZXJJ
bnRlcnZhbCA9IDFfbXM7Ci0gICAgICAgIFNlY29uZHMgZGVsdGFUb05leHRGcmFtZSA9IHN0ZDo6
bWF4KHRpY2tUaW1lIC0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gY3VycmVudFRpbWUpLCBtaW5p
bXVtVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChkZWx0YVRvTmV4dEZyYW1lKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmlj
OjpzaG93T3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJz
TG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGltZXIuaXNBY3RpdmUoKSAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJn
ZXQgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyLnN0b3AoKTsKLQotICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAm
JiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQ7Ci0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID0gMTsK
LSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ICE9IG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25T
dGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCkKLXsKLSAgICBpZiAobV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSAmJiAhbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKCFtX2hvcml6b250YWxPdmVy
bGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQgPSAwOwotICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQg
PT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6
Om5vdygpICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OwotICAgIG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25TdGFydFRpbWUgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbiArIG92ZXJm
bG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheTsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qob3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlk
ZURlbGF5KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCkKLXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckdlbmVyaWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQotewotICAgIGhp
ZGVPdmVybGF5U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6
bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQotewotICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygp
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6Y29udGVudEFyZWFEaWRTaG93KCkK
LXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckdlbmVyaWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCi17Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9s
bGJhcnNMb2NrZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5zdG9wKCk7Ci0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQpIHsKLSAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7
Ci0gICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwotICAgIH0KLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29u
c3QgRmxvYXRTaXplJikKLXsKLSAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRl
bihib29sIHNob3VsZExvY2tTdGF0ZSkKLXsKLSAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xv
Y2tlZCA9PSBzaG91bGRMb2NrU3RhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX292ZXJsYXlT
Y3JvbGxiYXJzTG9ja2VkID0gc2hvdWxkTG9ja1N0YXRlOwotCi0gICAgaWYgKCFtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpIHsKLSAgICAg
ICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAo
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhcikKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsT3Zl
cmxheVNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5z
ZXRPcGFjaXR5KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25DdXJyZW50ID09IDEpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xs
YmFyc09wYWNpdHkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hvd092ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci0gICAgfQotfQotCiAvLyBGSVhNRTogQ2FuIHdlIGp1c3QgdXNlIHRoZSBiYXNl
IGNsYXNzIGltcGxlbWVudGF0aW9uPwogdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNjcm9s
bEFuaW1hdGlvbkRpZFVwZGF0ZShTY3JvbGxBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24pCiB7CkBAIC0yOTUsNCArMTAwLDMgQEAgdm9pZCBTY3JvbGxBbmlt
YXRvckdlbmVyaWM6OnNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3JvbGxBbmltYXRpb24mIGFu
aW1hdGlvbiwKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaAppbmRl
eCBmNDg4ZjJmNWExOTdiNzQ2MjU0YmQyMDcwNWY4ZDg0ZDIyOTEwMjY0Li43YzI3YmE2MDQ4MzY2
YjdlMTAxOTk3YzllNzY4YTRhOTAwOTJlNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKQEAgLTQ0LDI1ICs0
NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHZW5lcmljKCk7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2
b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb250ZW50QXJlYURpZFNob3co
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIG92ZXJyaWRlOwotICAg
IHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBv
dmVycmlkZTsKLSAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29s
KSBvdmVycmlkZTsKKyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmLCBTY3JvbGxDbGFtcGluZykgZmluYWw7CisgICAgYm9vbCBoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwogCiAgICAgLy8gU2Ny
b2xsQW5pbWF0aW9uQ2xpZW50Ci0gICAgdm9pZCBzY3JvbGxBbmltYXRpb25EaWRVcGRhdGUoU2Ny
b2xsQW5pbWF0aW9uJiwgY29uc3QgRmxvYXRQb2ludCYgY3VycmVudFBvc2l0aW9uKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNjcm9sbEFuaW1hdGlvbkRpZFVwZGF0ZShTY3JvbGxBbmltYXRpb24mLCBj
b25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24pIGZpbmFsOwogCiAgICAgdm9pZCB1cGRh
dGVQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKQEAgLTcyLDE1ICs1OCw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2tpbmV0aWNBbmltYXRpb247
Ci0gICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9
OwotICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07
Ci0gICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKLSAgICBUaW1l
ciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcjsKLSAgICBkb3VibGUgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9OwotICAgIGRvdWJsZSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07Ci0gICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgTW9ub3RvbmljVGltZSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25FbmRUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxiYXJzQ29udHJv
bGxlckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxYTc1MjdhNTRlNzMxNWNlMTA0
ZTliNDViNzZhYzUzMjhmNGQ5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5jcHAKQEAgLTAsMCAr
MSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgiCisKKyNpbmNs
dWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9u
U21vb3RoLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBTZWNvbmRz
IG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uIHsgMV9zIH07CitzdGF0aWMgY29u
c3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgeyAyX3MgfTsK
Kworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGJhcnNDb250cm9sbGVyPiBTY3JvbGxiYXJzQ29udHJv
bGxlcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZTxTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM+KHNjcm9sbGFibGVBcmVh
KTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpTY3JvbGxiYXJzQ29udHJvbGxl
ckdlbmVyaWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsYmFy
c0NvbnRyb2xsZXIoc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lcigqdGhpcywgJlNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6b3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Njcm9sbGJhcnNDb250cm9sbGVy
R2VuZXJpYzo6flNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYygpID0gZGVmYXVsdDsKKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlT
Y3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xs
YmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAg
ICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwor
dm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xsZXI6OmRp
ZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKworICAgIGlmICghc2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faG9yaXpvbnRh
bE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgaWYgKCFtX3ZlcnRpY2FsT3Zlcmxh
eVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9
IDE7CisgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMo
KTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OndpbGxSZW1vdmVWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisgICAgbV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOworICAgIGlmICghbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3Vy
cmVudCA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjp3aWxsUmVt
b3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAo
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAo
IW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50ID0gMDsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlckdlbmVy
aWM6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpCit7CisgICAgaWYgKG1fdmVydGlj
YWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQg
IT0gbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPm9wYWNpdHkoKSkgeworICAgICAgICBtX3Zl
cnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKKyAgICAgICAgbV9ob3Jpem9u
dGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBkb3VibGUg
ZWFzZU91dEN1YmljKGRvdWJsZSB0KQoreworICAgIGRvdWJsZSBwID0gdCAtIDE7CisgICAgcmV0
dXJuIHAgKiBwICogcCArIDE7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmlj
OjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCFtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgZG91YmxlIHByb2dyZXNzID0gMTsKKyAgICBpZiAoY3VycmVudFRp
bWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lKQorICAgICAgICBwcm9ncmVz
cyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSku
dmFsdWUoKSAvIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lIC0gbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lKS52YWx1ZSgpOworICAgIHByb2dyZXNzID0gbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykg
KiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uU291cmNlKSk7CisgICAgaWYgKHByb2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQpIHsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
Q3VycmVudCA9IHByb2dyZXNzOworICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNp
dHkoKTsKKyAgICB9CisKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCAhPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQpIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFNlY29u
ZHMgdGlja1RpbWUgPSAxX3MgLyBmcmFtZVJhdGU7CisgICAgICAgIHN0YXRpYyBjb25zdCBTZWNv
bmRzIG1pbmltdW1UaW1lckludGVydmFsID0gMV9tczsKKyAgICAgICAgU2Vjb25kcyBkZWx0YVRv
TmV4dEZyYW1lID0gc3RkOjptYXgodGlja1RpbWUgLSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBj
dXJyZW50VGltZSksIG1pbmltdW1UaW1lckludGVydmFsKTsKKyAgICAgICAgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOworICAg
IH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlckdlbmVyaWM6OnNob3dPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAg
aWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgaWYgKCFtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0g
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKKyAgICBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQgPSAxOworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UYXJnZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1h
dGlvbkR1cmF0aW9uOworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxi
YXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpoaWRlT3Zlcmxh
eVNjcm9sbGJhcnMoKQoreworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7
CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50Owor
ICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9IDA7CisgICAgaWYgKG1fb3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9PSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNB
bmltYXRpb25IaWRlRGVsYXk7CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGlt
ZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xs
YmFyc0FuaW1hdGlvbkR1cmF0aW9uICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURl
bGF5OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChv
dmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOworfQorCit2b2lkIFNjcm9sbGJh
cnNDb250cm9sbGVyR2VuZXJpYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIHNo
b3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2Vu
ZXJpYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxi
YXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjptb3VzZU1vdmVk
SW5Db250ZW50QXJlYSgpCit7CisgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljOjpjb250ZW50QXJlYURpZFNob3coKQorewor
ICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9s
bGVyR2VuZXJpYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Ny
b2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
Q3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0g
MDsKKyAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CisgICAgfQorfQor
Cit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bm90aWZ5Q29udGVudEFyZWFTY3Jv
bGxlZChjb25zdCBGbG9hdFNpemUmKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwor
fQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYzo6bG9ja092ZXJsYXlTY3JvbGxi
YXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKQoreworICAgIGlmIChtX292ZXJs
YXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgPSBzaG91bGRMb2NrU3RhdGU7CisKKyAgICBp
ZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xv
Y2tlZCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7
CisgICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAg
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKKyAgICAgICAgaWYg
KG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPT0gMSkKKyAgICAgICAgICAgIHVwZGF0
ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
aG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxi
YXJzQ29udHJvbGxlckdlbmVyaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMv
U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcyYzUxYTcwZTViMjZj
NjY0NzgxNjRmOGRkYzNlMWQ4N2M2MWJmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmgKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcnNDb250cm9sbGVyR2Vu
ZXJpYyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljKFNjcm9sbGFibGVBcmVhJik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljKCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7
CisgICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb250ZW50QXJlYURpZFNo
b3coKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRh
KSBvdmVycmlkZTsKKyAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihi
b29sKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
RmlyZWQoKTsKKyAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHZvaWQgaGlk
ZU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09w
YWNpdHkoKTsKKworICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7
IG51bGxwdHIgfTsKKyAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsg
bnVsbHB0ciB9OworICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07
CisgICAgVGltZXIgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXI7CisgICAgZG91Ymxl
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSB7IDAgfTsKKyAgICBkb3VibGUgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0IHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50IHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIE1vbm90b25pY1RpbWUgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9T
LmgKaW5kZXggZjBmODgzMzZmYmJkN2RmYzRiNWQxOWJiNDRiNzlmNTczMGRhNzUwMS4uOGI4MWY5
MDRmNmUyNWZmYTFhMGRmMjI2ZTFmYWU0ZmE1MWEzMWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKQEAgLTU1LDE2ICs1NSwxNiBAQCBw
cml2YXRlOgogICAgICAgICBBeGlzTGF0Y2hIb3Jpem9udGFsLAogICAgICAgICBBeGlzTGF0Y2hW
ZXJ0aWNhbAogICAgIH07Ci0gICAgQXhpc0xhdGNoIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2g7Ci0g
ICAgYm9vbCBtX2luVG91Y2hTZXF1ZW5jZTsKLSAgICBib29sIG1fY29tbWl0dGVkVG9TY3JvbGxB
eGlzOwotICAgIGJvb2wgbV9zdGFydGVkU2Nyb2xsOworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Ny
b2xsQXhpc0xhdGNoIHsgQXhpc0xhdGNoTm90Q29tcHV0ZWQgfTsKKyAgICBib29sIG1faW5Ub3Vj
aFNlcXVlbmNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fc3RhcnRlZFNjcm9sbCB7IGZhbHNlIH07CiAgICAgSW50UG9p
bnQgbV9maXJzdFRvdWNoUG9pbnQ7CiAgICAgSW50UG9pbnQgbV9sYXN0VG91Y2hQb2ludDsKIAog
ICAgIC8vIFdoZW4gd2UncmUgaW4gYSB0b3VjaCBzZXF1ZW5jZSwgdGhpcyB3aWxsIHBvaW50IHRv
IHRoZSBzY3JvbGxhYmxlIGFyZWEgdGhhdAogICAgIC8vIHNob3VsZCBhY3R1YWxseSBiZSBzY3Jv
bGxlZCBkdXJpbmcgdGhlIHNlcXVlbmNlLgotICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFi
bGVBcmVhRm9yVG91Y2hTZXF1ZW5jZTsKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxl
QXJlYUZvclRvdWNoU2VxdWVuY2UgeyBudWxscHRyIH07CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQppbmRleCBjYjRm
Yjc4ODRjODQwNjM1MzdlNzUwMmM2MjNjNDRiZWIzNmNhN2Y3Li5kOTc2ZTRlYTRjZjlmMGQwODZi
ZTlhZTMwYTc2ZTU1OGE4YTljNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCkBAIC00NSwxMyArNDUsNiBAQCBzdGQ6OnVuaXF1ZV9w
dHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibAogCiBTY3JvbGxBbmltYXRvcklPUzo6U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xs
YWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJs
ZUFyZWEpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAsIG1fdG91Y2hTY3JvbGxBeGlz
TGF0Y2goQXhpc0xhdGNoTm90Q29tcHV0ZWQpCi0gICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxz
ZSkKLSAgICAsIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKGZhbHNlKQotICAgICwgbV9zdGFydGVk
U2Nyb2xsKGZhbHNlKQotICAgICwgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkK
LSNlbmRpZgogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCmluZGV4IDc4OWE1NjM4ZmI2NjFkNzM5NmRkZGZjNDc0OTYxY2Y0ODY0NDdm
MmUuLmIzOGNlMmFiNDQ1ZWQ1MTEzMjExYzViODVjNDQxMTM5M2Y4YjE3MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCkBAIC0yOCwxMTkg
KzI4LDQ3IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIAotI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZTsKLU9CSkNfQ0xBU1MgV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU7Ci1PQkpD
X0NMQVNTIFdlYlNjcm9sbGVySW1wRGVsZWdhdGU7Ci0KLXR5cGVkZWYgaWQgU2Nyb2xsZXJJbXBQ
YWlyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGJhcjsKIAotY2xhc3Mg
U2Nyb2xsQW5pbWF0b3JNYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xs
QW5pbWF0b3JNYWMgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgogICAg
IFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xs
QW5pbWF0b3JNYWMoKTsKIAogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb3NpdGlvbkZvclNj
cm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7Ci0gICAgYm9vbCBo
YXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLQotICAg
IGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzdGFy
dFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVy
KCk7Ci0KLSAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0
Jik7Ci0KLSAgICBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IGZpbmFsOwogCiBw
cml2YXRlOgotICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7Ci0gICAg
UmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlOwotCi0gICAgUmV0YWluUHRyPFNjcm9sbGVySW1wUGFpcj4gbV9z
Y3JvbGxlckltcFBhaXI7Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRl
PiBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlOwotICAgIFJldGFpblB0cjxXZWJTY3JvbGxlcklt
cERlbGVnYXRlPiBtX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlOwotICAgIFJldGFpblB0
cjxXZWJTY3JvbGxlckltcERlbGVnYXRlPiBtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZTsK
LQotICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpOwotICAgIFRpbWVy
IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7Ci0KLSAgICB2b2lkIHNlbmRDb250ZW50QXJl
YVNjcm9sbGVkVGltZXJGaXJlZCgpOwotICAgIFRpbWVyIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lcjsKLSAgICBGbG9hdFNpemUgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxE
ZWx0YTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgT3B0aW9uU2V0PFNjcm9sbEJl
aGF2aW9yPikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlv
bihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzY3JvbGxUb1Bvc2l0aW9u
V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzY3JvbGwo
U2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9h
dCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8U2Nyb2xsQmVoYXZpb3I+KSBmaW5hbDsKKyAgICBib29s
IHNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICBib29sIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBm
aW5hbDsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBib29sIHNob3VsZEZvcndh
cmRXaGVlbEV2ZW50c1RvUGFyZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0Owot
ICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVy
cmlkZTsKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQ
aGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgZmluYWw7CiAKLSAgICB2b2lkIGNhbmNlbEFu
aW1hdGlvbnMoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsK
ICAgICAKLSAgICB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRl
bHRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAg
IHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VN
b3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9s
bGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRXhpdGVkU2Ny
b2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VJc0Rvd25J
blNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbnRlbnRzUmVzaXplZCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgY29udGVu
dEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUo
KSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lk
IG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotCi0gICAgdm9pZCBsb2NrT3ZlcmxheVNj
cm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUpIGZpbmFsOwotCi0gICAg
dm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpIG92
ZXJyaWRlOwotCi0gICAgYm9vbCBzaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGlu
ZyhTY3JvbGxiYXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3Jv
bGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKLQotICAgIC8vIHNlbmRDb250
ZW50QXJlYVNjcm9sbGVkU29vbigpIHdpbGwgZG8gdGhlIHNhbWUgd29yayB0aGF0IHNlbmRDb250
ZW50QXJlYVNjcm9sbGVkKCkgZG9lcyBleGNlcHQKLSAgICAvLyBpdCBkb2VzIGl0IGFmdGVyIGEg
emVyby1kZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSB1cGRhdGlu
ZyBvdmVybGF5IHNjcm9sbGJhciAKLSAgICAvLyBpbmZvcm1hdGlvbiBkdXJpbmcgbGF5b3V0Lgot
ICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBzY3JvbGxE
ZWx0YSk7Ci0gICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oY29uc3QgRmxvYXRT
aXplJiBzY3JvbGxEZWx0YSk7CisgICAgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3Qg
RmxvYXRTaXplJiBkZWx0YSkgZmluYWw7CiAKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBv
c2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCi0gICAgYm9vbCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7
CiAKLSAgICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0
IGZpbmFsOwotICAgIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNv
bnN0IGZpbmFsOwotCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBwcm9jZXNzV2hlZWxF
dmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAKICAg
ICAvLyBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlckNsaWVudC4KICNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCkBAIC0xNTcsOSArODUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0U2Ny
b2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgZmluYWw7CiAjZW5kaWYKIAotICAgIGJv
b2wgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOwotICAgIGJvb2wgbV9uZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGU7Ci0gICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKKyAg
ICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOworICAgIFJldGFpblB0cjxX
ZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCA4NGNjZGU5NWJkNjRk
ODZlMzIzOTU4Mzg3ZWE5ZWJiMWI3ODc5OGViLi5jNDc0OTBmYjdkZjY4NmI0MTUzODk0NTdhNDU3
YWNlYmM1YTZkMjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLm1tCkBAIC0zMSw0NiArMzEsMjAgQEAKICNpbXBvcnQgIkdyYWRpZW50Lmgi
CiAjaW1wb3J0ICJHcmFwaGljc0xheWVyLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgogI2ltcG9ydCAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAjaW1wb3J0ICJTY3JvbGxhYmxlQXJlYS5oIgotI2lt
cG9ydCAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbXBvcnQgIlNjcm9sbGJhclRoZW1lTWFjLmgiCi0j
aW1wb3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CisjaW1wb3J0ICJTY3JvbGxi
YXJzQ29udHJvbGxlci5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNp
bXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTY3JvbGxiYXJUaGVtZU1hYyogbWFjU2Ny
b2xsYmFyVGhlbWUoKQotewotICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUuaXNNb2Nr
VGhlbWUoKSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1l
KSA6IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBOU1Njcm9sbGVySW1wICpzY3JvbGxlckltcEZvclNj
cm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gU2Nyb2xsYmFyVGhl
bWVNYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCiB1c2luZyBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTsKIHVzaW5nIFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOwogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsYmFyOwotdXNpbmcg
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM7CiB1c2luZyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
OwogdXNpbmcgV2ViQ29yZTo6VmVydGljYWxTY3JvbGxiYXI7Ci11c2luZyBXZWJDb3JlOjptYWNT
Y3JvbGxiYXJUaGVtZTsKIHVzaW5nIFdlYkNvcmU6OkludFJlY3Q7Ci11c2luZyBXZWJDb3JlOjpU
aHVtYlBhcnQ7Ci11c2luZyBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOwotCi0j
aWYgIUxPR19ESVNBQkxFRAotdXNpbmcgV2ViQ29yZTo6TG9nT3ZlcmxheVNjcm9sbGJhcnM7Ci0j
ZW5kaWYKIAogQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWls
cykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRlbGVnYXRlOwpAQCAtMTc2LDUyMiArMTUw
LDYgQEAgLSAodm9pZClfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKIAogQGVuZAogCi1AaW50
ZXJmYWNlIFdlYlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIDogTlNPYmplY3QgPE5TU2Nyb2xsZXJJ
bXBQYWlyRGVsZWdhdGU+Ci17Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIF9zY3JvbGxhYmxlQXJlYTsK
LX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6KFNjcm9sbGFibGVBcmVhKilzY3JvbGxh
YmxlQXJlYTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGVySW1wUGFpckRlbGVn
YXRlCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6KFNjcm9sbGFibGVBcmVhKilzY3Jv
bGxhYmxlQXJlYQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFi
bGVBcmVhOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAg
ICBfc2Nyb2xsYWJsZUFyZWEgPSAwOwotfQotCi0tIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9y
U2Nyb2xsZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgotewot
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX3Njcm9sbGFibGVB
cmVhKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplID0gX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKTsKLSAgICByZXR1
cm4gTlNNYWtlUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhl
aWdodCgpKTsKLX0KLQotLSAoQk9PTClpbkxpdmVSZXNpemVGb3JTY3JvbGxlckltcFBhaXI6KE5T
U2Nyb2xsZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVy
biBOTzsKLQotICAgIHJldHVybiBfc2Nyb2xsYWJsZUFyZWEtPmluTGl2ZVJlc2l6ZSgpOwotfQot
Ci0tIChOU1BvaW50KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWly
OihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICAvLyBJdCdzIE9LIHRoYXQgdGhpcyBwb3NpdGlvbiBp
c24ndCByZWxhdGl2ZSB0byB0aGlzIHNjcm9sbGVyICh3aGljaCBtaWdodCBiZSBhbiBvdmVyZmxv
dyBzY3JvbGxlcikuCi0gICAgLy8gQXBwS2l0IGp1c3QgdGFrZXMgdGhlIHJlc3VsdCBhbmQgcGFz
c2VzIGl0IGJhY2sgdG8gLXNjcm9sbGVySW1wUGFpcjpjb252ZXJ0Q29udGVudFBvaW50OnRvU2Ny
b2xsZXJJbXA6LgotICAgIHJldHVybiBfc2Nyb2xsYWJsZUFyZWEtPmxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKTsKLX0KLQotLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xs
ZXJJbXBQYWlyICopc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQp
cG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxl
ckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotCi0gICAgaWYgKCFf
c2Nyb2xsYWJsZUFyZWEgfHwgIXNjcm9sbGVySW1wKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9p
bnQ7Ci0KLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7Ci0gICAgaWYgKFtz
Y3JvbGxlckltcCBpc0hvcml6b250YWxdKQotICAgICAgICBzY3JvbGxiYXIgPSBfc2Nyb2xsYWJs
ZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBlbHNlIAotICAgICAgICBzY3JvbGxi
YXIgPSBfc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICAvLyBJdCBp
cyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3Nz
aWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQotICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2Vl
biB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQot
ICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hv
dWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCi0gICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsg
aW4gU2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlz
Ci0gICAgLy8gaXNzdWUuCi0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBOU1pl
cm9Qb2ludDsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEp
KTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWlyICopc2Ny
b2xsZXJJbXBQYWlyIHNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVj
dAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIFVOVVNFRF9QQVJB
TShyZWN0KTsKLQotICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoW3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigp
LmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihO
U1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxlRm9y
TmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlCi17Ci0gICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFtzY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGVdOwotCi0gICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMm
Pihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKLX0KLQotQGVuZAotCi1lbnVtIEZlYXR1cmVUb0FuaW1hdGUgewotICAgIFRodW1iQWxwaGEs
Ci0gICAgVHJhY2tBbHBoYSwKLSAgICBVSVN0YXRlVHJhbnNpdGlvbiwKLSAgICBFeHBhbnNpb25U
cmFuc2l0aW9uCi19OwotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEZlYXR1cmVUb0FuaW1hdGUgZmVhdHVyZSkKLXsKLSAg
ICBzd2l0Y2ggKGZlYXR1cmUpIHsKLSAgICBjYXNlIFRodW1iQWxwaGE6IHRzIDw8ICJUaHVtYkFs
cGhhIiA7IGJyZWFrOwotICAgIGNhc2UgVHJhY2tBbHBoYTogdHMgPDwgIlRyYWNrQWxwaGEiIDsg
YnJlYWs7Ci0gICAgY2FzZSBVSVN0YXRlVHJhbnNpdGlvbjogdHMgPDwgIlVJU3RhdGVUcmFuc2l0
aW9uIiA7IGJyZWFrOwotICAgIGNhc2UgRXhwYW5zaW9uVHJhbnNpdGlvbjogdHMgPDwgIkV4cGFu
c2lvblRyYW5zaXRpb24iIDsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLSNlbmRp
ZgotCi1AaW50ZXJmYWNlIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU09iamVjdAotewot
ICAgIFNjcm9sbGJhciogX3Njcm9sbGJhcjsKLSAgICBSZXRhaW5QdHI8TlNTY3JvbGxlckltcD4g
X3Njcm9sbGVySW1wOwotICAgIEZlYXR1cmVUb0FuaW1hdGUgX2ZlYXR1cmVUb0FuaW1hdGU7Ci0g
ICAgQ0dGbG9hdCBfc3RhcnRWYWx1ZTsKLSAgICBDR0Zsb2F0IF9lbmRWYWx1ZTsKLSAgICBOU1Rp
bWVJbnRlcnZhbCBfZHVyYXRpb247Ci0gICAgUmV0YWluUHRyPE5TVGltZXI+IF90aW1lcjsKLSAg
ICBSZXRhaW5QdHI8TlNEYXRlPiBfc3RhcnREYXRlOwotICAgIFJlZlB0cjxDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uPiBfdGltaW5nRnVuY3Rpb247Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbGJh
cjooU2Nyb2xsYmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0ZTooRmVhdHVyZVRvQW5pbWF0
ZSlmZWF0dXJlVG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0KXN0YXJ0VmFsdWUgYW5pbWF0
ZVRvOihDR0Zsb2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbjsK
LS0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU1RpbWVyICopdGltZXI7Ci0tICh2b2lkKXNl
dER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbjsKLS0gKHZvaWQpc3RvcEFuaW1hdGlv
bjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24KLQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFNjcm9sbGJhciopc2Nyb2xsYmFyIGZlYXR1cmVUb0Fu
aW1hdGU6KEZlYXR1cmVUb0FuaW1hdGUpZmVhdHVyZVRvQW5pbWF0ZSBhbmltYXRlRnJvbTooQ0dG
bG9hdClzdGFydFZhbHVlIGFuaW1hdGVUbzooQ0dGbG9hdCllbmRWYWx1ZSBkdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGNvbnN0IE5TVGltZUludGVydmFs
IHRpbWVJbnRlcnZhbCA9IDAuMDE7Ci0gICAgX3RpbWVyID0gYWRvcHROUyhbW05TVGltZXIgYWxs
b2NdIGluaXRXaXRoRmlyZURhdGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93
OjBdIGludGVydmFsOnRpbWVJbnRlcnZhbCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
c2V0Q3VycmVudFByb2dyZXNzOikgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSk7Ci0gICAgX2R1
cmF0aW9uID0gZHVyYXRpb247Ci0gICAgX3RpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VJbk91dCk7
Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiQ3Jl
YXRpbmcgV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBmb3IgIiA8PCBmZWF0dXJlVG9BbmltYXRl
IDw8ICIgZnJvbSAiIDw8IHN0YXJ0VmFsdWUgPDwgIiB0byAiIDw8IGVuZFZhbHVlKTsKLQotICAg
IF9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgX2ZlYXR1cmVUb0FuaW1hdGUgPSBmZWF0dXJl
VG9BbmltYXRlOwotICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKLSAgICBfZW5kVmFsdWUg
PSBlbmRWYWx1ZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXN0YXJ0QW5pbWF0
aW9uCi17Ci0gICAgQVNTRVJUKF9zY3JvbGxiYXIpOwotCi0gICAgX3Njcm9sbGVySW1wID0gc2Ny
b2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIi1bV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biAiIDw8IHNlbGYgPDwgInN0YXJ0QW5pbWF0aW9uXSBmb3IgIiA8PCBfZmVhdHVyZVRvQW5pbWF0
ZSk7Ci0KLSAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gYWRkVGltZXI6X3RpbWVyLmdldCgp
IGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIF9zdGFydERhdGUgPSBhZG9wdE5T
KFtbTlNEYXRlIGFsbG9jXSBpbml0V2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93OjBdKTsKLX0KLQot
LSAodm9pZClzZXRTdGFydFZhbHVlOihDR0Zsb2F0KXN0YXJ0VmFsdWUKLXsKLSAgICBfc3RhcnRW
YWx1ZSA9IHN0YXJ0VmFsdWU7Ci19Ci0KLS0gKHZvaWQpc2V0RW5kVmFsdWU6KENHRmxvYXQpZW5k
VmFsdWUKLXsKLSAgICBfZW5kVmFsdWUgPSBlbmRWYWx1ZTsKLX0KLQotLSAodm9pZClzZXRDdXJy
ZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcgotewotICAgIENHRmxvYXQgcHJvZ3Jlc3MgPSAw
OwotICAgIE5TRGF0ZSAqbm93ID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93
OjBdOwotICAgIE5TVGltZUludGVydmFsIGVsYXBzZWQgPSBbbm93IHRpbWVJbnRlcnZhbFNpbmNl
RGF0ZTpfc3RhcnREYXRlLmdldCgpXTsKLSAgICBpZiAoZWxhcHNlZCA+IF9kdXJhdGlvbikgewot
ICAgICAgICBwcm9ncmVzcyA9IDE7Ci0gICAgICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKLSAgICB9
IGVsc2UgewotICAgICAgICBOU1RpbWVJbnRlcnZhbCB0ID0gMTsKLSAgICAgICAgaWYgKF9kdXJh
dGlvbikKLSAgICAgICAgICAgIHQgPSBlbGFwc2VkIC8gX2R1cmF0aW9uOwotICAgICAgICBwcm9n
cmVzcyA9IF90aW1pbmdGdW5jdGlvbi0+dHJhbnNmb3JtVGltZSh0LCBfZHVyYXRpb24pOwotICAg
IH0KLSAgICBBU1NFUlQoX3Njcm9sbGJhcik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oT3Zlcmxh
eVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uICIgPDwg
c2VsZiA8PCAic2V0Q3VycmVudFByb2dyZXNzOiIgPDwgcHJvZ3Jlc3MgPDwiXSBmb3IgIiA8PCBf
ZmVhdHVyZVRvQW5pbWF0ZSk7Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnRWYWx1ZTsKLSAgICBpZiAo
X3N0YXJ0VmFsdWUgPiBfZW5kVmFsdWUpCi0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IDEgLSBwcm9n
cmVzczsKLSAgICBlbHNlCi0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IHByb2dyZXNzOwotCi0gICAg
c3dpdGNoIChfZmVhdHVyZVRvQW5pbWF0ZSkgewotICAgIGNhc2UgVGh1bWJBbHBoYToKLSAgICAg
ICAgW19zY3JvbGxlckltcCBzZXRLbm9iQWxwaGE6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUcmFja0FscGhhOgotICAgICAgICBbX3Njcm9sbGVySW1wIHNldFRyYWNr
QWxwaGE6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVSVN0YXRlVHJh
bnNpdGlvbjoKLSAgICAgICAgW19zY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlvblByb2dy
ZXNzOmN1cnJlbnRWYWx1ZV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXhwYW5zaW9uVHJh
bnNpdGlvbjoKLSAgICAgICAgW19zY3JvbGxlckltcCBzZXRFeHBhbnNpb25UcmFuc2l0aW9uUHJv
Z3Jlc3M6Y3VycmVudFZhbHVlXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFf
c2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCi0gICAgICAgIF9z
Y3JvbGxiYXItPmludmFsaWRhdGUoKTsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW3NlbGYgc3RvcEFuaW1hdGlvbl07Ci0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIF9zY3JvbGxiYXIgPSAwOwotfQotCi0t
ICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIF9kdXJh
dGlvbiA9IGR1cmF0aW9uOwotfQotCi0tICh2b2lkKXN0b3BBbmltYXRpb24KLXsKLSAgICBbX3Rp
bWVyIGludmFsaWRhdGVdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViU2Nyb2xsZXJJbXBE
ZWxlZ2F0ZSA6IE5TT2JqZWN0PE5TQW5pbWF0aW9uRGVsZWdhdGUsIE5TU2Nyb2xsZXJJbXBEZWxl
Z2F0ZT4KLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIF9zY3JvbGxiYXI7Ci0KLSAgICBSZXRh
aW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2tub2JBbHBoYUFuaW1hdGlvbjsKLSAg
ICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX3RyYWNrQWxwaGFBbmltYXRp
b247Ci0gICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF91aVN0YXRlVHJh
bnNpdGlvbkFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlv
bj4gX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb247Ci19Ci0tIChpZClpbml0V2l0aFNjcm9s
bGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXI7Ci0tICh2b2lkKWNhbmNlbEFuaW1h
dGlvbnM7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlckltcERlbGVnYXRlCi0K
LS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIqKXNjcm9sbGJhcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIF9zY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpY2FuY2VsQW5pbWF0aW9ucwotewotICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwotICAgIFtfa25vYkFscGhhQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwot
ICAgIFtfdHJhY2tBbHBoYUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX3VpU3RhdGVU
cmFuc2l0aW9uQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgIFtfZXhwYW5zaW9uVHJhbnNp
dGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi19Ci0KLS0gKE5ha2VkUHRyPFNjcm9sbEFuaW1hdG9yTWFjPilzY3JvbGxBbmltYXRvcgot
ewotICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMmPihfc2Nyb2xsYmFy
LT5zY3JvbGxhYmxlQXJlYSgpLnNjcm9sbEFuaW1hdG9yKCkpOwotfQotCi0tIChOU1JlY3QpY29u
dmVydFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdAotewotICAgIHJldHVybiBhUmVjdDsKLX0K
LQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6KE5TUmVjdClhUmVjdAotewotICAg
IHJldHVybiBhUmVjdDsKLX0KLQotLSAoQ0FMYXllciAqKWxheWVyCi17Ci0gICAgaWYgKCFfc2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgaWYgKCFTY3JvbGxiYXJUaGVtZU1h
Yzo6aXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBHcmFwaGljc0xheWVyKiBsYXllcjsKLSAgICBpZiAoX3Njcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBlbHNlCi0g
ICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKTsKLQotICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0gW1tD
QUxheWVyIGFsbG9jXSBpbml0XTsKLSAgICByZXR1cm4gbGF5ZXIgPyBsYXllci0+cGxhdGZvcm1M
YXllcigpIDogZHVtbXlMYXllcjsKLX0KLQotLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3Jv
bGxlckZvclNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsKLSAgICBp
ZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIEFTU0VS
VF9VTlVTRUQoc2Nyb2xsZXJJbXAsIHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xs
YmFyKCpfc2Nyb2xsYmFyKSk7Ci0KLSAgICBhdXRvIHBvc2l0aW9uSW5WaWV3ID0gX3Njcm9sbGJh
ci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Ci0gICAg
cmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocG9zaXRpb25JblZp
ZXcpOwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RUb0xheWVyOihOU1JlY3QpcmVjdAotewot
ICAgIHJldHVybiByZWN0OwotfQotCi0tIChCT09MKXNob3VsZFVzZUxheWVyUGVyUGFydEZvclNj
cm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFS
QU0oc2Nyb2xsZXJJbXApOwotCi0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFy
eVRocmVhZCgpOwotfQotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLS0gKE5TQXBw
ZWFyYW5jZSAqKWVmZmVjdGl2ZUFwcGVhcmFuY2VGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlcklt
cCAqKXNjcm9sbGVySW1wCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKLQotICAg
IGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KLSAgICAgICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFwcGVhcmFuY2VdOwot
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIC8vIEtlZXAg
dGhpcyBpbiBzeW5jIHdpdGggRnJhbWVWaWV3OjpwYWludFNjcm9sbENvcm5lci4KLSAgICAvLyBU
aGUgYmFzZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBkYXJrIEFxdWEsIHNvIHdlIG1pZ2h0IGdl
dCBhIG51bGwgcmVzdWx0LgotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBfc2Nyb2xsYmFy
LT5zY3JvbGxhYmxlQXJlYSgpLnVzZURhcmtBcHBlYXJhbmNlRm9yU2Nyb2xsYmFycygpOwotICAg
IGlmIChhdXRvICphcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6dXNl
RGFya0FwcGVhcmFuY2UgPyBOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWEgOiBOU0FwcGVhcmFuY2VO
YW1lQXF1YV0pCi0gICAgICAgIHJldHVybiBhcHBlYXJhbmNlOwotICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgcmV0dXJuIFtOU0FwcGVhcmFuY2UgY3VycmVudEFw
cGVhcmFuY2VdOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotfQotI2Vu
ZGlmCi0KLS0gKHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWluUHRyPFdlYlNjcm9sbGJh
clBhcnRBbmltYXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjoo
TlNTY3JvbGxlckltcCAqKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0KXBhcnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRo
ZSBwYWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4KLSAgICAv
LyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KLSAgICBib29sIG11c3RBbmltYXRl
ID0gW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7Ci0K
LSAgICBpZiAoW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3Rp
dmUoKSAmJiAhbXVzdEFuaW1hdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChfc2Nyb2xs
YmFyLT5zY3JvbGxhYmxlQXJlYSgpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYg
IW11c3RBbmltYXRlKSB7Ci0gICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c3RhcnRTY3Jv
bGxiYXJQYWludFRpbWVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBdCB0
aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3Rv
cCB0aGUgdGltZXIuCi0gICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zdG9wU2Nyb2xsYmFyUGFp
bnRUaW1lcigpOwotCi0gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AK
LSAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgewotICAgICAgICBbc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKLSAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlv
biA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIG1hY1RoZW1lID0g
bWFjU2Nyb2xsYmFyVGhlbWUoKSkKLSAgICAgICAgbWFjVGhlbWUtPnNldFBhaW50Q2hhcmFjdGVy
aXN0aWNzRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKLQotICAgIGlmIChwYXJ0ID09IFdlYkNv
cmU6OlRodW1iUGFydCAmJiBfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKSB7Ci0gICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7Ci0gICAgICAgICAgICBJbnRS
ZWN0IHRodW1iUmVjdCA9IEludFJlY3QoW3Njcm9sbGVyUGFpbnRlciByZWN0Rm9yUGFydDpOU1Nj
cm9sbGVyS25vYl0pOwotICAgICAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zZXRWaXNp
YmxlU2Nyb2xsZXJUaHVtYlJlY3QodGh1bWJSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChJ
bnRSZWN0KCkpOwotICAgIH0KLQotICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24gPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6X3Nj
cm9sbGJhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOnBhcnQgPT0gVGh1bWJQYXJ0
ID8gVGh1bWJBbHBoYSA6IFRyYWNrQWxwaGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlRnJv
bTpwYXJ0ID09IFRodW1iUGFydCA/IFtzY3JvbGxlclBhaW50ZXIga25vYkFscGhhXSA6IFtzY3Jv
bGxlclBhaW50ZXIgdHJhY2tBbHBoYV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVUbzpu
ZXdBbHBoYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAg
IFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClz
Y3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFU
bzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
Ci17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
c2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKLQot
ICAgIE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Ny
b2xsZXJJbXA7Ci0gICAgaWYgKCFbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNjcm9sbGJhcnNDYW5C
ZUFjdGl2ZSgpKSB7Ci0gICAgICAgIFtzY3JvbGxlckltcCBzZXRLbm9iQWxwaGE6MF07Ci0gICAg
ICAgIF9zY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGFyZSBmYWRpbmcgdGhlIHNjcm9sbGJhciBhd2F5LCB0aGF0IGlzIGEgZ29v
ZCBpbmRpY2F0aW9uIHRoYXQgd2UgYXJlIG5vIGxvbmdlciBnb2luZyB0bwotICAgIC8vIGJlIG1v
dmluZyBpdCBhcm91bmQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuIENhbGxpbmcgW3Njcm9sbGVy
UGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpOT10KLSAgICAvLyB3aWxsIHBhc3MgdGhh
dCBpbmZvcm1hdGlvbiBvbiB0byB0aGUgTlNTY3JvbGxlckltcCBBUEkuCi0gICAgaWYgKG5ld0tu
b2JBbHBoYSA9PSAwICYmIF9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJl
YWQoKSkKLSAgICAgICAgW3Njcm9sbGVyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpO
T107Ci0KLSAgICBbc2VsZiBzZXRVcEFscGhhQW5pbWF0aW9uOl9rbm9iQWxwaGFBbmltYXRpb24g
c2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBh
bmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwotfQotCi0tICh2
b2lkKXNjcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNr
QWxwaGFUbzooQ0dGbG9hdCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgotewotICAgIGlmICghX3Njcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKHNjcm9sbGVySW1wID09IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFy
KSk7Ci0KLSAgICBOU1Njcm9sbGVySW1wICpzY3JvbGxlclBhaW50ZXIgPSAoTlNTY3JvbGxlcklt
cCAqKXNjcm9sbGVySW1wOwotICAgIFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X3RyYWNrQWxw
aGFBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6
OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxl
ckltcCBhbmltYXRlVUlTdGF0ZVRyYW5zaXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFs
KWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxi
YXIpKTsKLQotICAgIC8vIFVJU3RhdGVUcmFuc2l0aW9uIGFsd2F5cyBhbmltYXRlcyB0byAxLiBJ
biBjYXNlIGFuIGFuaW1hdGlvbiBpcyBpbiBwcm9ncmVzcyB0aGlzIGF2b2lkcyBhIGhhcmQgdHJh
bnNpdGlvbi4KLSAgICBbc2Nyb2xsZXJJbXAgc2V0VWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzczox
IC0gW3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKLQotICAgIC8vIElm
IHRoZSBVSSBzdGF0ZSB0cmFuc2l0aW9uIGlzIGhhcHBlbmluZywgdGhlbiB3ZSBhcmUgbm8gbG9u
Z2VyIG1vdmluZyB0aGUgc2Nyb2xsYmFyIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgotICAgIGlm
IChfc2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkpCi0gICAgICAg
IFtzY3JvbGxlckltcCBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpOT107Ci0KLSAgICBpZiAoIV91
aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbikKLSAgICAgICAgX3VpU3RhdGVUcmFuc2l0aW9uQW5p
bWF0aW9uID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRX
aXRoU2Nyb2xsYmFyOl9zY3JvbGxiYXIKLSAgICAgICAgICAgIGZlYXR1cmVUb0FuaW1hdGU6VUlT
dGF0ZVRyYW5zaXRpb24KLSAgICAgICAgICAgIGFuaW1hdGVGcm9tOltzY3JvbGxlckltcCB1aVN0
YXRlVHJhbnNpdGlvblByb2dyZXNzXQotICAgICAgICAgICAgYW5pbWF0ZVRvOjEuMAotICAgICAg
ICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2Ug
ZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZh
bHVlcyBpbiBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICBbX3VpU3RhdGVUcmFuc2l0
aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9u
UHJvZ3Jlc3NdXTsKLSAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRW
YWx1ZToxLjBdOwotICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0
aW9uOmR1cmF0aW9uXTsKLSAgICB9Ci0gICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBz
dGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAg
KilzY3JvbGxlckltcCBhbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9zY3JvbGxiYXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqX3Njcm9sbGJhcikpOwotCi0gICAgLy8gRXhwYW5zaW9uVHJhbnNpdGlvbiBhbHdheXMgYW5p
bWF0ZXMgdG8gMS4gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9p
ZHMgYSBoYXJkIHRyYW5zaXRpb24uCi0gICAgW3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5z
aXRpb25Qcm9ncmVzczoxIC0gW3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVz
c11dOwotCi0gICAgaWYgKCFfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbikgewotICAgICAg
ICBfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCi0gICAgICAg
ICAgICBmZWF0dXJlVG9BbmltYXRlOkV4cGFuc2lvblRyYW5zaXRpb24KLSAgICAgICAgICAgIGFu
aW1hdGVGcm9tOltzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3NdCi0gICAg
ICAgICAgICBhbmltYXRlVG86MS4wCi0gICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0
aGUgYW5pbWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4gY2FzZSB0aGV5IGhhdmUgY2hh
bmdlZC4KLSAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFs
dWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKLSAgICAgICAgW19l
eHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07Ci0gICAgICAgIFtf
ZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07Ci0gICAg
fQotICAgIFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19
Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNPdmVybGF5U2Nyb2xsZXJTdGF0ZSluZXdPdmVy
bGF5U2Nyb2xsZXJTdGF0ZQotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7Ci0gICAg
VU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKLX0KLQotLSAodm9pZClpbnZh
bGlkYXRlCi17Ci0gICAgX3Njcm9sbGJhciA9IDA7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi0gICAgW19rbm9iQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07Ci0gICAgW190cmFj
a0FscGhhQW5pbWF0aW9uIGludmFsaWRhdGVdOwotICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25Bbmlt
YXRpb24gaW52YWxpZGF0ZV07Ci0gICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIGlu
dmFsaWRhdGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotQGVuZAotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gU2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCkBAIC03
MDEsMzAgKzE1OSwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibAogCiBTY3JvbGxBbmltYXRv
ck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQog
ICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0gICAgLCBtX2luaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyRmlyZWQpCi0gICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIo
KnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZp
cmVkKQotICAgICwgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKGZhbHNlKQotICAgICwgbV9u
ZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoZmFsc2UpCiB7CiAgICAgbV9zY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CiAgICAgbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXIgPSBhZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFuaW1h
dGlvbkhlbHBlciIpIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUuZ2V0KCldKTsKIAotICAgIG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgPSBh
ZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xs
YWJsZUFyZWE6JnNjcm9sbGFibGVBcmVhXSk7Ci0gICAgbV9zY3JvbGxlckltcFBhaXIgPSBhZG9w
dE5TKFtbTlNTY3JvbGxlckltcFBhaXIgYWxsb2NdIGluaXRdKTsKLSAgICBbbV9zY3JvbGxlcklt
cFBhaXIgc2V0RGVsZWdhdGU6bV9zY3JvbGxlckltcFBhaXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAg
W21fc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6U2Nyb2xsZXJTdHlsZTo6cmVjb21t
ZW5kZWRTY3JvbGxlclN0eWxlKCldOwogfQogCi1TY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFu
aW1hdG9yTWFjKCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbbV9z
Y3JvbGxlckltcFBhaXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBbbV9zY3JvbGxlckltcFBh
aXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0
ZSBpbnZhbGlkYXRlXTsKLSAgICBbbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxp
ZGF0ZV07Ci0gICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgaW52YWxpZGF0ZV07
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQorU2Nyb2xsQW5pbWF0b3JNYWM6On5T
Y3JvbGxBbmltYXRvck1hYygpID0gZGVmYXVsdDsKIAogc3RhdGljIGJvb2wgc2Nyb2xsQW5pbWF0
aW9uRW5hYmxlZEZvclN5c3RlbSgpCiB7CkBAIC03NTMsNyArMTk0LDcgQEAgc3RhdGljIGJvb2wg
cnViYmVyQmFuZGluZ0VuYWJsZWRGb3JTeXN0ZW0oKQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBPcHRpb25TZXQ8
U2Nyb2xsQmVoYXZpb3I+IGJlaGF2aW9yKQogewotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCA9IHRydWU7CisgICAgc2V0SGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCh0cnVlKTsKIAog
ICAgIC8vIFRoaXMgbWV0aG9kIGRvZXNuJ3QgZG8gZGlyZWN0aW9uYWwgc25hcHBpbmcsIGJ1dCBv
dXIgYmFzZSBjbGFzcyBkb2VzLiBJdCB3aWxsIGNhbGwgaW50bwogICAgIC8vIFNjcm9sbEFuaW1h
dG9yTWFjOjpzY3JvbGwgYWdhaW4gd2l0aCB0aGUgc25hcHBlZCBwb3NpdGlvbnMgYW5kIFNjcm9s
bEJlaGF2aW9yOjpEZWZhdWx0LgpAQCAtODQwLDQzICsyODEsNiBAQCBib29sIFNjcm9sbEFuaW1h
dG9yTWFjOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKICAgICByZXR1cm4gbV9zY3Jv
bGxDb250cm9sbGVyLmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKIH0KIAotc3RhdGljIFN0cmlu
ZyBzY3JvbGxiYXJTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIXNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuICJub25lIl9zOwotCi0gICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7Ci0gICAgcmVzdWx0LmFwcGVuZChzY3JvbGxiYXItPmVuYWJsZWQoKSA/ICJlbmFibGVkIl9z
IDogImRpc2FibGVkIl9zKTsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxi
YXIoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCi0gICAgTlNTY3JvbGxl
ckltcCAqc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsK
LSAgICBpZiAoIXNjcm9sbGVySW1wKQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Ci0KLSAgICBpZiAoc2Nyb2xsZXJJbXAuZXhwYW5kZWQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
IixleHBhbmRlZCJfcyk7Ci0KLSAgICBpZiAoc2Nyb2xsZXJJbXAudHJhY2tBbHBoYSA+IDApCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RyYWNrIl9zKTsKLQotICAgIGlmIChzY3Jv
bGxlckltcC5rbm9iQWxwaGEgPiAwKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIsdmlzaWJsZV90
aHVtYiJfcyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBT
Y3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKLX0KLQotU3RyaW5nIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNh
bFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
clN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb25Gb3JTY3JvbGxBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1fc2Ny
b2xsQW5pbWF0aW9uSGVscGVyKTsKQEAgLTg4NSwzMTkgKzI4OSwxNSBAQCB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUb1Bvc2l0aW9uRm9yU2Nyb2xsQW5pbWF0aW9uKGNv
bnN0IEZsb2F0UAogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQb3NpdGlvbkNoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIHsKLSAgICBub3RpZnlDb250ZW50QXJlYVNjcm9s
bGVkKGRlbHRhKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhcnNDb250cm9sbGVyKCku
bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChkZWx0YSk7CiAgICAgU2Nyb2xsQW5pbWF0b3I6Om5v
dGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oT3Zl
cmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JNYWMgZm9yIFsiIDw8IHNj
cm9sbGFibGVBcmVhKCkgPDwgIl0gY29udGVudEFyZWFXaWxsUGFpbnQgKHNjcm9sbGVycyBsb2Nr
ZWQgIiA8PCBbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0g
PDwgIikiKTsKLQotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3Rh
dGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERy
YXddOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJ
VEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFj
IGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVh
Iik7Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9j
a2VkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJz
LCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgp
IDw8ICJdIG1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKLXsKLSAgICBMT0df
V0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiU2Nyb2xsQW5pbWF0b3JN
YWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkgPDwgIl0gbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEiKTsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VN
b3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVu
dGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgLy8gQXQg
dGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0
aW9ucyBoZXJlLgotICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5
bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpCi0gICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJl
ZFNjcm9sbGVyXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgLy8gQXQgdGhpcyB0aW1l
LCBvbmx5IGxlZ2FjeSBzY3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJl
LgotICAgIGlmIChTY3JvbGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBO
U1Njcm9sbGVyU3R5bGVMZWdhY3kpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbbV9zY3Jv
bGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3Jv
bGxiYXIoKnNjcm9sbGJhcikpCi0gICAgICAgIFtwYWludGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJd
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBib29sIG1vdXNlSXNEb3duKSBjb25zdAotewotICAgIGlmIChb
bV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBG
b3JTY3JvbGxiYXIoKnNjcm9sbGJhcikpIHsKLSAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6
bW91c2VJc0Rvd25dOwotICAgICAgICBpZiAobW91c2VJc0Rvd24pCi0gICAgICAgICAgICBbbV9z
Y3JvbGxlckltcFBhaXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGVuZFNjcm9sbEdlc3R1cmVdOwotICAgIH0KLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYg
KFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhRGlk
UmVzaXplXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUo
KQotewotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRMaXZl
UmVzaXplXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93
KCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2luZG93
T3JkZXJlZEluXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRI
aWRlKCkKLXsKLSAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgd2lu
ZG93T3JkZXJlZE91dF07Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Ny
b2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlTY3JvbGxi
YXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJl
YSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSIpOwotCi0gICAgaWYgKFttX3Njcm9sbGVy
SW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBpZiAo
bV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9y
LT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpD
b250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRp
ZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5
U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJTY3JvbGxBbmltYXRvck1hYyBmb3IgWyIgPDwgc2Nyb2xs
YWJsZUFyZWEoKSA8PCAiXSBkaWRFbmRTY3JvbGxHZXN0dXJlIik7Ci0KLSAgICBpZiAoW21fc2Ny
b2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBbbV9zY3JvbGxlckltcFBhaXIgZW5kU2Nyb2xsR2VzdHVyZV07Ci0KLSAgICBp
ZiAobV93aGVlbEV2ZW50VGVzdE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25p
dG9yLT5yZW1vdmVEZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRl
c3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgTE9HX1dJVEhf
U1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbEFuaW1hdG9yTWFjIGZv
ciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOwot
Ci0gICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2Vk
XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xs
R2VzdHVyZV07Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOwot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9I
aWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUpCi17Ci0gICAgaWYgKHNob3VsZExvY2tTdGF0ZSkK
LSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092
ZXJsYXlTY3JvbGxlclN0YXRlSGlkZGVuXTsKLSAgICBlbHNlIHsKLSAgICAgICAgW21fc2Nyb2xs
ZXJJbXBQYWlyIHVubG9ja092ZXJsYXlTY3JvbGxlclN0YXRlXTsKLQotICAgICAgICAvLyBXZSBu
ZXZlciB1cGRhdGUgc2Nyb2xsZXIgc3R5bGUgZm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFy
ZSBsb2NrZWQuIElmIHdlIGhhdmUgYSBwZW5kaW5nCi0gICAgICAgIC8vIG5lZWQgdG8gdXBkYXRl
IHRoZSBzdHlsZSwgZG8gaXQgb25jZSB3ZSd2ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUu
Ci0gICAgICAgIGlmIChtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSkKLSAgICAgICAgICAgIHVw
ZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6
OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFbbV9zY3JvbGxl
ckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF07Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwotICAgIG1fdmVydGljYWxT
Y3JvbGxlckltcERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1wRGVsZWdhdGUgYWxs
b2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwotCi0gICAgW3BhaW50ZXIgc2V0RGVs
ZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0
Zm9ybUxheWVyKCldOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xs
ZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkp
Ci0gICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQotewotICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlckltcEZvclNjcm9sbGJh
cigqc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7Ci0gICAgW21fdmVydGljYWxT
Y3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOwotICAgIG1fdmVydGljYWxTY3JvbGxlcklt
cERlbGVnYXRlID0gbnVsbHB0cjsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUpOwot
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7Ci0KLSAg
ICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlLmdl
dCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFtwYWludGVy
IHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwotCi0gICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJs
ZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFd
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVy
ID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBE
ZWxlZ2F0ZSk7Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0
ZV07Ci0gICAgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAg
ICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRI
b3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aW52YWxpZGF0ZVNjcm9sbGJhclBhcnRMYXllcnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgTlNTY3JvbGxlckltcCAqcGFpbnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3Jv
bGxiYXIpOwotICAgIFtwYWludGVyIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKLXsKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJl
YS52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxi
YXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxd
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJl
YS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJh
ciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGlmICghc2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0g
c2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5w
bGF0Zm9ybUxheWVyKCkgOiBuaWxdOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91
bGRTY3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikK
LXsKLSAgICAvLyBOb24tb3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBh
dGUgaW4gaGl0IHRlc3RpbmcuCi0gICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBo
aXQgdGVzdGluZyB3aGVuZXZlciB0aGV5IGFyZSBhdCBhbGwgdmlzaWJsZS4KLSAgICBOU1Njcm9s
bGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7Ci0g
ICAgaWYgKCFwYWludGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFtwYWlu
dGVyIGtub2JBbHBoYV0gPiAwOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9m
b3J3YXJkIGNhY2hlLCBidXQgdGhlIHBhZ2UKLSAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5n
IGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUK
LSAgICAvLyBTY3JvbGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFu
IGFjdGl2ZSBwYWdlLgotICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVy
U3RhdGVJc0xvY2tlZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkpCi0gICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9s
bGVkKGRlbHRhKTsKLSAgICBlbHNlCi0gICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29v
bihkZWx0YSk7Ci19Ci0KIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMo
KQogewogICAgIFNjcm9sbEFuaW1hdG9yOjpjYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgbV9oYXZl
U2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyUGFpbnRU
aW1lcklzQWN0aXZlKCkpCi0gICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAg
W21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdhdGUgY2FuY2VsQW5pbWF0aW9uc107Ci0gICAg
W21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIHNl
dEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5jYW5jZWxBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZSBwaGFzZSkKQEAgLTEyMDYsMTUgKzMwNiwxNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCiAK
ICAgICAvLyBUaGlzIG1heSBub3QgaGF2ZSBiZWVuIHNldCB0byB0cnVlIHlldCBpZiB0aGUgd2hl
ZWwgZXZlbnQgd2FzIGhhbmRsZWQgYnkgdGhlIFNjcm9sbGluZ1RyZWUsCiAgICAgLy8gU28gc2V0
IGl0IHRvIHRydWUgaGVyZS4KLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVl
OworICAgIHNldEhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQodHJ1ZSk7CiAKICAgICAvLyBGSVhN
RTogTmVlZCB0byBlbnN1cmUgd2UgZ2V0IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZC4K
ICAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuKQotICAgICAg
ICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3Jv
bGxiYXJzQ29udHJvbGxlcigpLmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpOwogICAgIGVsc2UgaWYg
KHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCB8fCBwaGFzZSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkKQotICAgICAgICBkaWRFbmRTY3JvbGxHZXN0
dXJlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyc0NvbnRyb2xsZXIoKS5k
aWRFbmRTY3JvbGxHZXN0dXJlKCk7CiAgICAgZWxzZSBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6Ok1heUJlZ2luKQotICAgICAgICBtYXlCZWdpblNjcm9sbEdlc3R1cmUoKTsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxiYXJzQ29udHJvbGxlcigpLm1heUJlZ2lu
U2Nyb2xsR2VzdHVyZSgpOwogfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMTIy
OSw3ICszMjksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRGb3J3YXJkV2hlZWxF
dmVudHNUb1BhcmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbgogICAgIAogYm9vbCBTY3JvbGxB
bmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiB7Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKyAg
ICBzZXRIYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKHRydWUpOwogCiAgICAgaWYgKCF3aGVlbEV2
ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSB8fCAhcnViYmVyQmFuZGluZ0VuYWJsZWRG
b3JTeXN0ZW0oKSkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwpAQCAtMTM3MCwxMjUgKzQ3MCw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiB9CiAjZW5k
aWYKIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCi17Ci0g
ICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkg
ewotICAgICAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IHRydWU7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJUaGVtZU1hYyogbWFjVGhlbWUgPSBtYWNTY3Jv
bGxiYXJUaGVtZSgpOwotICAgIGlmICghbWFjVGhlbWUpIHsKLSAgICAgICAgbV9uZWVkc1Njcm9s
bGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBtYWNUaGVtZS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzQ2hhbmdlZCgpOwotCi0gICAgTlNTY3Jv
bGxlclN0eWxlIG5ld1N0eWxlID0gW21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5bGVdOwot
Ci0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgp
LnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFs
aWRhdGUoKTsKLQotICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50ZXIgPSBb
bV9zY3JvbGxlckltcFBhaXIgdmVydGljYWxTY3JvbGxlckltcF07Ci0gICAgICAgIGF1dG8gbmV3
VmVydGljYWxQYWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVySW1wV2l0
aFN0eWxlOm5ld1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2FsU2Nyb2xs
YmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xk
VmVydGljYWxQYWludGVyXSk7Ci0KLSAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRp
Y2FsU2Nyb2xsZXJJbXA6bmV3VmVydGljYWxQYWludGVyLmdldCgpXTsKLSAgICAgICAgbWFjVGhl
bWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBXVEZNb3Zl
KG5ld1ZlcnRpY2FsUGFpbnRlcikpOwotICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRlU2Nyb2xs
ZXJJbXAoKnZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUt
c2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
MCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHsKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0g
ICAgICAgIE5TU2Nyb2xsZXJJbXAgKm9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Nyb2xsZXJJ
bXBQYWlyIGhvcml6b250YWxTY3JvbGxlckltcF07Ci0gICAgICAgIGF1dG8gbmV3SG9yaXpvbnRh
bFBhaW50ZXIgPSByZXRhaW5QdHIoW05TU2Nyb2xsZXJJbXAgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6
bmV3U3R5bGUgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpaG9yaXpvbnRhbFNjcm9sbGJhci0+
Y29udHJvbFNpemUoKSBob3Jpem9udGFsOllFUyByZXBsYWNpbmdTY3JvbGxlckltcDpvbGRIb3Jp
em9udGFsUGFpbnRlcl0pOwotCi0gICAgICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9u
dGFsU2Nyb2xsZXJJbXA6bmV3SG9yaXpvbnRhbFBhaW50ZXIuZ2V0KCldOwotICAgICAgICBtYWNU
aGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgV1RG
TW92ZShuZXdIb3Jpem9udGFsUGFpbnRlcikpOwotICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRl
U2Nyb2xsZXJJbXAoKmhvcml6b250YWxTY3JvbGxiYXIpOwotCi0gICAgICAgIC8vIFRoZSBkaWZm
ZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2Ug
bXVzdCByZS1zZXQgdGhlIAotICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25l
c3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAg
ICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhp
Y2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlz
IHJlc3RvcmluZyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGFuZAotICAgIC8vIGEgcmVs
YXlvdXQgd2lsbCBoYXBwZW4gb24gaXRzIG93bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRl
IGEgcmUtbGF5b3V0IG91cnNlbHZlcy4KLSAgICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0
eWxlQ2hhbmdlZChuZXdTdHlsZSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ID8gU2Nyb2xsYmFy
U3R5bGU6Ok92ZXJsYXkgOiBTY3JvbGxiYXJTdHlsZTo6QWx3YXlzVmlzaWJsZSwgIW1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlKTsKLQotICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRU
aW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3Qo
MTAwX21zKTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1l
cklzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lci5pc0FjdGl2ZSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xs
YmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9w
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRp
bWVyRmlyZWQoKQotewotICAgIC8vIFRvIGZvcmNlIHRoZSBzY3JvbGxiYXJzIHRvIGZsYXNoLCB3
ZSBoYXZlIHRvIGNhbGwgaGlkZSBmaXJzdC4gT3RoZXJ3aXNlLCB0aGUgU2Nyb2xsZXJJbXBQYWly
Ci0gICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93
aW5nIGFuZCBiYWlsIGVhcmx5LgotICAgIFttX3Njcm9sbGVySW1wUGFpciBoaWRlT3ZlcmxheVNj
cm9sbGVyc107Ci0gICAgW21fc2Nyb2xsZXJJbXBQYWlyIGZsYXNoU2Nyb2xsZXJzXTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3Jv
bGxEZWx0YSA9IGRlbHRhOwotCi0gICAgaWYgKCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwotCi0gICAgaWYgKG1fd2hlZWxFdmVudFRlc3RNb25pdG9yKQotICAg
ICAgICBtX3doZWVsRXZlbnRUZXN0TW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRf
Y2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhp
cyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBG
bG9hdFNpemUmIGRlbHRhKQotewotICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNj
cm9sbGVkSW5EaXJlY3Rpb246TlNNYWtlUG9pbnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0
KCkpXTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWRUaW1lckZpcmVkKCkKLXsKLSAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChtX2NvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhKTsKLSAgICBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRU
aW1lclNjcm9sbERlbHRhID0gRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAobV93aGVlbEV2ZW50VGVz
dE1vbml0b3IpCi0gICAgICAgIG1fd2hlZWxFdmVudFRlc3RNb25pdG9yLT5yZW1vdmVEZWZlcnJh
bEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50
U2Nyb2xsSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2li
bGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQotewotICAg
IEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAo
U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxT
Y3JvbGxiYXIoKSkKLSAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3Jv
bGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOwotCi0gICAgaWYg
KHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICBtX3Zpc2libGVTY3JvbGxlclRo
dW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKLX0KLQogYm9vbCBTY3JvbGxBbmltYXRv
ck1hYzo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZWxFdmVudCkKIHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnByb2Nl
c3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDA0MzQwMGU4MzU1NzkyNDQyNzZkYjY2YjgyMmMwMmQxN2U1YjA5MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJzQ29udHJvbGxlck1h
Yy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShNQUMpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitPQkpDX0NMQVNTIFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwor
T0JKQ19DTEFTUyBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV2ViU2Ny
b2xsZXJJbXBEZWxlZ2F0ZTsKKwordHlwZWRlZiBpZCBTY3JvbGxlckltcFBhaXI7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOworCitjbGFzcyBT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYyA6IHB1YmxpYyBTY3JvbGxiYXJzQ29udHJvbGxlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Ny
b2xsYmFyc0NvbnRyb2xsZXJNYWMpOworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGJhcnND
b250cm9sbGVyTWFjKFNjcm9sbGFibGVBcmVhJik7CisgICAgflNjcm9sbGJhcnNDb250cm9sbGVy
TWFjKCk7CisKKyAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRT
aXplJiBkZWx0YSkgZmluYWw7CisKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBmaW5hbDsK
KworICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBtYXlCZWdpblNj
cm9sbEdlc3R1cmUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29udGVudEFyZWFXaWxsUGFp
bnQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgZmlu
YWw7CisgICAgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgZmluYWw7CisgICAgdm9pZCBt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQgbW91c2VFbnRlcmVkU2Ny
b2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VFeGl0ZWRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3VzZUlzRG93bkluU2Ny
b2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgd2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpIGZpbmFsOworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZCgpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBmaW5hbDsKKyAgICB2b2lkIGNv
bnRlbnRBcmVhRGlkU2hvdygpIGZpbmFsOworICAgIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkg
ZmluYWw7CisKKyAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29s
IHNob3VsZExvY2tTdGF0ZSkgZmluYWw7CisgICAgYm9vbCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUo
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgZmluYWw7CisgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJh
ciopIGZpbmFsOworICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgZmluYWw7CisKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJQYXJ0TGF5ZXJzKFNj
cm9sbGJhciopIGZpbmFsOworCisgICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCkgZmluYWw7CisgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
KSBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoU2Nyb2xsYmFyKikgZmluYWw7CisKKyAgICBTdHJpbmcgaG9yaXpvbnRhbFNjcm9sbGJhclN0
YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyB2ZXJ0aWNhbFNjcm9sbGJh
clN0YXRlRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsOworCisKKyAgICAvLyBQdWJsaWMgdG8gYmUg
Y2FsbGFibGUgZnJvbSBPYmotQy4KKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAg
ICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc3Rh
cnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1l
cigpOworICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3Qm
KTsKKyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdDsKKworcHJpdmF0
ZToKKworICAgIC8vIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbigpIHdpbGwgZG8gdGhlIHNh
bWUgd29yayB0aGF0IHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKCkgZG9lcyBleGNlcHQKKyAgICAv
LyBpdCBkb2VzIGl0IGFmdGVyIGEgemVyby1kZWxheSB0aW1lciBmaXJlcy4gVGhpcyB3aWxsIHBy
ZXZlbnQgdXMgZnJvbSB1cGRhdGluZyBvdmVybGF5IHNjcm9sbGJhcgorICAgIC8vIGluZm9ybWF0
aW9uIGR1cmluZyBsYXlvdXQuCisgICAgdm9pZCBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25z
dCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsKKyAgICB2b2lkIHNlbmRDb250ZW50QXJlYVNjcm9s
bGVkU29vbihjb25zdCBGbG9hdFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZvaWQgaW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCgpOworICAgIHZvaWQgc2VuZENvbnRlbnRBcmVhU2Ny
b2xsZWRUaW1lckZpcmVkKCk7CisKKyAgICBXaGVlbEV2ZW50VGVzdE1vbml0b3IqIHdoZWVsRXZl
bnRUZXN0TW9uaXRvcigpIGNvbnN0OworCisgICAgVGltZXIgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcjsKKyAgICBUaW1lciBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXI7CisKKyAg
ICBSZXRhaW5QdHI8U2Nyb2xsZXJJbXBQYWlyPiBtX3Njcm9sbGVySW1wUGFpcjsKKyAgICBSZXRh
aW5QdHI8V2ViU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+IG1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdh
dGU7CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+IG1faG9yaXpvbnRhbFNj
cm9sbGVySW1wRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGVySW1wRGVsZWdhdGU+
IG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlOworCisgICAgRmxvYXRTaXplIG1fY29udGVu
dEFyZWFTY3JvbGxlZFRpbWVyU2Nyb2xsRGVsdGE7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3Jv
bGxlclRodW1iUmVjdDsKKworICAgIGJvb2wgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgeyBm
YWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
cnNDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
cnNDb250cm9sbGVyTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOWVkYjRmMzEyYTA4Nzg4ODY1NmJmNjY4
MDdiZWFjNzM5MDk3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0KQEAgLTAsMCArMSwxMDg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhcnNDb250cm9s
bGVyTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgi
CisjaW1wb3J0ICJTY3JvbGxBbmltYXRvci5oIgorI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIK
KyNpbXBvcnQgIlNjcm9sbGJhci5oIgorI2ltcG9ydCAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKKyNp
bXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCisjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3Iu
aCIgLy8gRklYTUU6IFRoaXMgaXMgIGxheWVyaW5nIHZpb2xhdGlvbi4KKworI2ltcG9ydCA8cGFs
L3NwaS9tYWMvTlNTY3JvbGxlckltcFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2Vw
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxiYXJUaGVt
ZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQoreworICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxi
YXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOworICAgIHJldHVybiAhc2Nyb2xsYmFy
VGhlbWUuaXNNb2NrVGhlbWUoKSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNj
cm9sbGJhclRoZW1lKSA6IG51bGxwdHI7Cit9CisKK3N0YXRpYyBOU1Njcm9sbGVySW1wICpzY3Jv
bGxlckltcEZvclNjcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4g
U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW50ZXJmYWNlIFdlYlNjcm9sbGVySW1wUGFpckRl
bGVnYXRlIDogTlNPYmplY3QgPE5TU2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGU+IHsKKyAgICBXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYSogX3Njcm9sbGFibGVBcmVhOworfQorLSAoaWQpaW5pdFdpdGhT
Y3JvbGxhYmxlQXJlYTooV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqKXNjcm9sbGFibGVBcmVhOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTY3JvbGxlckltcFBhaXJEZWxlZ2F0ZQorCist
IChpZClpbml0V2l0aFNjcm9sbGFibGVBcmVhOihXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSopc2Ny
b2xsYWJsZUFyZWEKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxh
YmxlQXJlYTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7Cisg
ICAgX3Njcm9sbGFibGVBcmVhID0gbnVsbHB0cjsKK30KKworLSAoTlNSZWN0KWNvbnRlbnRBcmVh
UmVjdEZvclNjcm9sbGVySW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBh
aXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3Jv
bGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCk7Cisg
ICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRz
U2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQ
YWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9Q
QVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5pbkxpdmVSZXNpemUo
KTsKK30KKworLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVy
SW1wUGFpcjooTlNTY3JvbGxlckltcFBhaXIgKilzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgLy8gSXQncyBPSyB0aGF0IHRoaXMgcG9z
aXRpb24gaXNuJ3QgcmVsYXRpdmUgdG8gdGhpcyBzY3JvbGxlciAod2hpY2ggbWlnaHQgYmUgYW4g
b3ZlcmZsb3cgc2Nyb2xsZXIpLgorICAgIC8vIEFwcEtpdCBqdXN0IHRha2VzIHRoZSByZXN1bHQg
YW5kIHBhc3NlcyBpdCBiYWNrIHRvIC1zY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2lu
dDp0b1Njcm9sbGVySW1wOi4KKyAgICByZXR1cm4gX3Njcm9sbGFibGVBcmVhLT5sYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKKy0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihO
U1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihO
U1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihOU1Njcm9sbGVySW1wICop
c2Nyb2xsZXJJbXAKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKworICAg
IGlmICghX3Njcm9sbGFibGVBcmVhIHx8ICFzY3JvbGxlckltcCkKKyAgICAgICAgcmV0dXJuIE5T
WmVyb1BvaW50OworCisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAg
IGlmIChbc2Nyb2xsZXJJbXAgaXNIb3Jpem9udGFsXSkKKyAgICAgICAgc2Nyb2xsYmFyID0gX3Nj
cm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgZWxzZQorICAgICAgICBz
Y3JvbGxiYXIgPSBfc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAv
LyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBp
cyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQg
YmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5k
IHRoZQorICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4g
V2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVw
IHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9p
ZCB0aGlzCisgICAgLy8gaXNzdWUuCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVy
biBOU1plcm9Qb2ludDsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZv
clNjcm9sbGJhcigqc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGVu
dEFyZWEpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KE5TU2Nyb2xsZXJJbXBQYWly
ICopc2Nyb2xsZXJJbXBQYWlyIHNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1Jl
Y3QpcmVjdAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIFVOVVNF
RF9QQVJBTShyZWN0KTsKKworICAgIGlmICghX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoW3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9j
a2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJz
Q29udHJvbGxlcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xs
ZXJJbXBQYWlyOihOU1Njcm9sbGVySW1wUGFpciAqKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3Jv
bGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUp
bmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlCit7CisgICAgaWYgKCFfc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybjsKKworICAgIFtzY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHls
ZTpuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGVdOworCisgICAgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMmPihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhcnND
b250cm9sbGVyKCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKK30KKworQGVuZAorCitlbnVtIEZl
YXR1cmVUb0FuaW1hdGUgeworICAgIFRodW1iQWxwaGEsCisgICAgVHJhY2tBbHBoYSwKKyAgICBV
SVN0YXRlVHJhbnNpdGlvbiwKKyAgICBFeHBhbnNpb25UcmFuc2l0aW9uCit9OworCisjaWYgIUxP
R19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEZlYXR1cmVUb0FuaW1hdGUgZmVhdHVyZSkKK3sKKyAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKKyAg
ICBjYXNlIFRodW1iQWxwaGE6IHRzIDw8ICJUaHVtYkFscGhhIiA7IGJyZWFrOworICAgIGNhc2Ug
VHJhY2tBbHBoYTogdHMgPDwgIlRyYWNrQWxwaGEiIDsgYnJlYWs7CisgICAgY2FzZSBVSVN0YXRl
VHJhbnNpdGlvbjogdHMgPDwgIlVJU3RhdGVUcmFuc2l0aW9uIiA7IGJyZWFrOworICAgIGNhc2Ug
RXhwYW5zaW9uVHJhbnNpdGlvbjogdHMgPDwgIkV4cGFuc2lvblRyYW5zaXRpb24iIDsgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiB0czsKK30KKwordXNpbmcgV2ViQ29yZTo6TG9nT3ZlcmxheVNj
cm9sbGJhcnM7CisKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24gOiBOU09iamVjdCB7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Nyb2xsYmFyOworICAg
IFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBfc2Nyb2xsZXJJbXA7CisgICAgRmVhdHVyZVRvQW5p
bWF0ZSBfZmVhdHVyZVRvQW5pbWF0ZTsKKyAgICBDR0Zsb2F0IF9zdGFydFZhbHVlOworICAgIENH
RmxvYXQgX2VuZFZhbHVlOworICAgIE5TVGltZUludGVydmFsIF9kdXJhdGlvbjsKKyAgICBSZXRh
aW5QdHI8TlNUaW1lcj4gX3RpbWVyOworICAgIFJldGFpblB0cjxOU0RhdGU+IF9zdGFydERhdGU7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24+IF90aW1pbmdG
dW5jdGlvbjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyOihXZWJDb3JlOjpTY3JvbGxiYXIq
KXNjcm9sbGJhciBmZWF0dXJlVG9BbmltYXRlOihGZWF0dXJlVG9BbmltYXRlKWZlYXR1cmVUb0Fu
aW1hdGUgYW5pbWF0ZUZyb206KENHRmxvYXQpc3RhcnRWYWx1ZSBhbmltYXRlVG86KENHRmxvYXQp
ZW5kVmFsdWUgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOworLSAodm9pZClzZXRD
dXJyZW50UHJvZ3Jlc3M6KE5TVGltZXIgKil0aW1lcjsKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5T
VGltZUludGVydmFsKWR1cmF0aW9uOworLSAodm9pZClzdG9wQW5pbWF0aW9uOworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgorCistIChpZClpbml0V2l0
aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Nyb2xsYmFyKilzY3JvbGxiYXIgZmVhdHVyZVRvQW5pbWF0
ZTooRmVhdHVyZVRvQW5pbWF0ZSlmZWF0dXJlVG9BbmltYXRlIGFuaW1hdGVGcm9tOihDR0Zsb2F0
KXN0YXJ0VmFsdWUgYW5pbWF0ZVRvOihDR0Zsb2F0KWVuZFZhbHVlIGR1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGlt
ZUludGVydmFsID0gMC4wMTsKKyAgICBfdGltZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10g
aW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6MF0g
aW50ZXJ2YWw6dGltZUludGVydmFsIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihzZXRD
dXJyZW50UHJvZ3Jlc3M6KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdKTsKKyAgICBfZHVyYXRp
b24gPSBkdXJhdGlvbjsKKyAgICBfdGltaW5nRnVuY3Rpb24gPSBXZWJDb3JlOjpDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6RWFzZUluT3V0KTsKKworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywg
c3RyZWFtIDw8ICJDcmVhdGluZyBXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGZvciAiIDw8IGZl
YXR1cmVUb0FuaW1hdGUgPDwgIiBmcm9tICIgPDwgc3RhcnRWYWx1ZSA8PCAiIHRvICIgPDwgZW5k
VmFsdWUpOworCisgICAgX3Njcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBfZmVhdHVyZVRvQW5p
bWF0ZSA9IGZlYXR1cmVUb0FuaW1hdGU7CisgICAgX3N0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOwor
ICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICBBU1NFUlQoX3Njcm9sbGJhcik7CisKKyAgICBfc2Ny
b2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcik7CisKKyAgICBM
T0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVhbSA8PCAiLVtXZWJTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uICIgPDwgc2VsZiA8PCAic3RhcnRBbmltYXRpb25dIGZvciAiIDw8IF9m
ZWF0dXJlVG9BbmltYXRlKTsKKworICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1l
cjpfdGltZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgX3N0YXJ0
RGF0ZSA9IGFkb3B0TlMoW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VO
b3c6MF0pOworfQorCistICh2b2lkKXNldFN0YXJ0VmFsdWU6KENHRmxvYXQpc3RhcnRWYWx1ZQor
eworICAgIF9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTsKK30KKworLSAodm9pZClzZXRFbmRWYWx1
ZTooQ0dGbG9hdCllbmRWYWx1ZQoreworICAgIF9lbmRWYWx1ZSA9IGVuZFZhbHVlOworfQorCist
ICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNUaW1lciAqKXRpbWVyCit7CisgICAgQ0dGbG9h
dCBwcm9ncmVzcyA9IDA7CisgICAgTlNEYXRlICpub3cgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2VOb3c6MF07CisgICAgTlNUaW1lSW50ZXJ2YWwgZWxhcHNlZCA9IFtub3cgdGlt
ZUludGVydmFsU2luY2VEYXRlOl9zdGFydERhdGUuZ2V0KCldOworICAgIGlmIChlbGFwc2VkID4g
X2R1cmF0aW9uKSB7CisgICAgICAgIHByb2dyZXNzID0gMTsKKyAgICAgICAgW3RpbWVyIGludmFs
aWRhdGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TVGltZUludGVydmFsIHQgPSAxOworICAg
ICAgICBpZiAoX2R1cmF0aW9uKQorICAgICAgICAgICAgdCA9IGVsYXBzZWQgLyBfZHVyYXRpb247
CisgICAgICAgIHByb2dyZXNzID0gX3RpbWluZ0Z1bmN0aW9uLT50cmFuc2Zvcm1UaW1lKHQsIF9k
dXJhdGlvbik7CisgICAgfQorICAgIEFTU0VSVChfc2Nyb2xsYmFyKTsKKworICAgIExPR19XSVRI
X1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICItW1dlYlNjcm9sbGJhclBhcnRB
bmltYXRpb24gIiA8PCBzZWxmIDw8ICJzZXRDdXJyZW50UHJvZ3Jlc3M6IiA8PCBwcm9ncmVzcyA8
PCJdIGZvciAiIDw8IF9mZWF0dXJlVG9BbmltYXRlKTsKKworICAgIENHRmxvYXQgY3VycmVudFZh
bHVlOworICAgIGlmIChfc3RhcnRWYWx1ZSA+IF9lbmRWYWx1ZSkKKyAgICAgICAgY3VycmVudFZh
bHVlID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVudFZhbHVlID0gcHJv
Z3Jlc3M7CisKKyAgICBzd2l0Y2ggKF9mZWF0dXJlVG9BbmltYXRlKSB7CisgICAgY2FzZSBUaHVt
YkFscGhhOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTpjdXJyZW50VmFsdWVd
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNrQWxwaGE6CisgICAgICAgIFtfc2Nyb2xs
ZXJJbXAgc2V0VHJhY2tBbHBoYTpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFVJU3RhdGVUcmFuc2l0aW9uOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNldFVpU3RhdGVU
cmFuc2l0aW9uUHJvZ3Jlc3M6Y3VycmVudFZhbHVlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFeHBhbnNpb25UcmFuc2l0aW9uOgorICAgICAgICBbX3Njcm9sbGVySW1wIHNldEV4cGFuc2lv
blRyYW5zaXRpb25Qcm9ncmVzczpjdXJyZW50VmFsdWVdOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBpZiAoIV9zY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQo
KSkKKyAgICAgICAgX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworfQorCistICh2b2lkKWludmFs
aWRhdGUKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbc2VsZiBzdG9w
QW5pbWF0aW9uXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgX3Njcm9sbGJh
ciA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uCit7CisgICAgX2R1cmF0aW9uID0gZHVyYXRpb247Cit9CisKKy0gKHZvaWQpc3RvcEFu
aW1hdGlvbgoreworICAgIFtfdGltZXIgaW52YWxpZGF0ZV07Cit9CisKK0BlbmQKKworQGludGVy
ZmFjZSBXZWJTY3JvbGxlckltcERlbGVnYXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0
ZSwgTlNTY3JvbGxlckltcERlbGVnYXRlPiB7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBfc2Ny
b2xsYmFyOworCisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9rbm9i
QWxwaGFBbmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhcnRBbmltYXRpb24+
IF90cmFja0FscGhhQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uPiBfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb247CisgICAgUmV0YWluUHRyPFdlYlNj
cm9sbGJhclBhcnRBbmltYXRpb24+IF9leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uOworfQor
LSAoaWQpaW5pdFdpdGhTY3JvbGxiYXI6KFdlYkNvcmU6OlNjcm9sbGJhciopc2Nyb2xsYmFyOwor
LSAodm9pZCljYW5jZWxBbmltYXRpb25zOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2Ny
b2xsZXJJbXBEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbGJhcjooV2ViQ29yZTo6U2Ny
b2xsYmFyKilzY3JvbGxiYXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfc2Nyb2xsYmFyID0gc2Nyb2xs
YmFyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbX2tub2JBbHBoYUFuaW1hdGlv
biBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3RyYWNrQWxwaGFBbmltYXRpb24gc3RvcEFuaW1hdGlv
bl07CisgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAg
ICBbX2V4cGFuc2lvblRyYW5zaXRpb25BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCistIChOYWtlZFB0cjxXZWJDb3JlOjpTY3JvbGxi
YXJzQ29udHJvbGxlck1hYz4pc2Nyb2xsYmFyc0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gJnN0
YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhcnNDb250cm9sbGVyTWFjJj4oX3Njcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJzQ29udHJvbGxlcigpKTsKK30KKworLSAoTlNSZWN0
KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7
Cit9CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sK
KyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICgh
X3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVNYWM6OmlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcigpKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXI7CisgICAgaWYg
KF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6VmVydGljYWxTY3JvbGxiYXIp
CisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgZWxzZQorICAgICAgICBsYXllciA9IF9zY3JvbGxiYXIt
PnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAgICBz
dGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CisgICAg
cmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7Cit9CisK
Ky0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooTlNTY3Jv
bGxlckltcCAqKXNjcm9sbGVySW1wCit7CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3Jv
bGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAg
YXV0byBwb3NpdGlvbkluVmlldyA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFzdEtu
b3duTW91c2VQb3NpdGlvbkluVmlldygpOworICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KHBvc2l0aW9uSW5WaWV3KTsKK30KKworLSAoTlNSZWN0KWNvbnZl
cnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QKK3sKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAo
Qk9PTClzaG91bGRVc2VMYXllclBlclBhcnRGb3JTY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAq
KXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKKworICAgIGlm
ICghX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIF9zY3Jv
bGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKTsKK30KKworI2lmIEhBVkUo
T1NfREFSS19NT0RFX1NVUFBPUlQpCistIChOU0FwcGVhcmFuY2UgKillZmZlY3RpdmVBcHBlYXJh
bmNlRm9yU2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcAoreworICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisKKyAgICBpZiAoIV9zY3JvbGxiYXIpIHsKKyAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgcmV0dXJuIFtO
U0FwcGVhcmFuY2UgY3VycmVudEFwcGVhcmFuY2VdOworICAgICAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9CisKKyAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRo
IEZyYW1lVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIuCisgICAgLy8gVGhlIGJhc2Ugc3lzdGVtIGRv
ZXMgbm90IHN1cHBvcnQgZGFyayBBcXVhLCBzbyB3ZSBtaWdodCBnZXQgYSBudWxsIHJlc3VsdC4K
KyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS51c2VEYXJrQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMoKTsKKyAgICBpZiAoYXV0byAqYXBwZWFy
YW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOnVzZURhcmtBcHBlYXJhbmNlID8g
TlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhIDogTlNBcHBlYXJhbmNlTmFtZUFxdWFdKQorICAgICAg
ICByZXR1cm4gYXBwZWFyYW5jZTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgorICAgIHJldHVybiBbTlNBcHBlYXJhbmNlIGN1cnJlbnRBcHBlYXJhbmNlXTsKKyAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKK30KKyNlbmRpZgorCistICh2b2lkKXNl
dFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiYp
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6KE5TU2Nyb2xsZXJJbXAgKilz
Y3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IGFuaW1hdGVB
bHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgoreworICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUg
c2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUuCisgICAgLy8gVGhpcyBvdmVycmlkZXMg
dGhlIGVhcmx5IHJldHVybnMuCisgICAgYm9vbCBtdXN0QW5pbWF0ZSA9IFtzZWxmIHNjcm9sbGJh
cnNDb250cm9sbGVyXS0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOworCisgICAgaWYgKFtz
ZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkg
JiYgIW11c3RBbmltYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX3Njcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0
QW5pbWF0ZSkgeworICAgICAgICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0tPnN0YXJ0U2Ny
b2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQXQg
dGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5pbWF0ZSBub3csIHNvIHN0
b3AgdGhlIHRpbWVyLgorICAgIFtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c3RvcFNjcm9s
bGJhclBhaW50VGltZXIoKTsKKworICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5n
LCBzdG9wCisgICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKKyAgICAgICAgW3Njcm9s
bGJhclBhcnRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgICAgIHNjcm9sbGJhclBhcnRB
bmltYXRpb24gPSBuaWw7CisgICAgfQorCisgICAgaWYgKGF1dG8qIG1hY1RoZW1lID0gV2ViQ29y
ZTo6bWFjU2Nyb2xsYmFyVGhlbWUoKSkKKyAgICAgICAgbWFjVGhlbWUtPnNldFBhaW50Q2hhcmFj
dGVyaXN0aWNzRm9yU2Nyb2xsYmFyKCpfc2Nyb2xsYmFyKTsKKworICAgIGlmIChwYXJ0ID09IFdl
YkNvcmU6OlRodW1iUGFydCAmJiBfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFdlYkNvcmU6
OlZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAg
ICAgICAgICBhdXRvIHRodW1iUmVjdCA9IFdlYkNvcmU6OkludFJlY3QoW3Njcm9sbGVyUGFpbnRl
ciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOworICAgICAgICAgICAgW3NlbGYgc2Nyb2xs
YmFyc0NvbnRyb2xsZXJdLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QodGh1bWJSZWN0KTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbc2VsZiBzY3JvbGxiYXJzQ29udHJvbGxlcl0t
PnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh7IH0pOworICAgIH0KKworICAgIHNjcm9sbGJh
clBhcnRBbmltYXRpb24gPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxiYXI6X3Njcm9sbGJhcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVG9B
bmltYXRlOnBhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gVGh1bWJBbHBoYSA6IFRyYWNrQWxw
aGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlRnJvbTpwYXJ0ID09IFdlYkNvcmU6OlRodW1i
UGFydCA/IFtzY3JvbGxlclBhaW50ZXIga25vYkFscGhhXSA6IFtzY3JvbGxlclBhaW50ZXIgdHJh
Y2tBbHBoYV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVUbzpuZXdBbHBoYQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgW3Njcm9sbGJhclBhcnRB
bmltYXRpb24gc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihOU1Nj
cm9sbGVySW1wICopc2Nyb2xsZXJJbXAgYW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tu
b2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9z
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBz
Y3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisgICAgTlNTY3JvbGxlcklt
cCAqc2Nyb2xsZXJQYWludGVyID0gKE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcDsKKyAgICBp
ZiAoIVtzZWxmIHNjcm9sbGJhcnNDb250cm9sbGVyXS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkp
IHsKKyAgICAgICAgW3Njcm9sbGVySW1wIHNldEtub2JBbHBoYTowXTsKKyAgICAgICAgX3Njcm9s
bGJhci0+aW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYg
d2UgYXJlIGZhZGluZyB0aGUgc2Nyb2xsYmFyIGF3YXksIHRoYXQgaXMgYSBnb29kIGluZGljYXRp
b24gdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGdvaW5nIHRvCisgICAgLy8gYmUgbW92aW5nIGl0IGFy
b3VuZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gQ2FsbGluZyBbc2Nyb2xsZXJQYWludGVyIHNl
dFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXQorICAgIC8vIHdpbGwgcGFzcyB0aGF0IGluZm9ybWF0
aW9uIG9uIHRvIHRoZSBOU1Njcm9sbGVySW1wIEFQSS4KKyAgICBpZiAobmV3S25vYkFscGhhID09
IDAgJiYgX3Njcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpKQorICAg
ICAgICBbc2Nyb2xsZXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKKworICAg
IFtzZWxmIHNldFVwQWxwaGFBbmltYXRpb246X2tub2JBbHBoYUFuaW1hdGlvbiBzY3JvbGxlclBh
aW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBo
YVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xs
ZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihD
R0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7
CisgICAgaWYgKCFfc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc2Ny
b2xsZXJJbXAgPT0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKl9zY3JvbGxiYXIpKTsKKworICAg
IE5TU2Nyb2xsZXJJbXAgKnNjcm9sbGVyUGFpbnRlciA9IChOU1Njcm9sbGVySW1wICopc2Nyb2xs
ZXJJbXA7CisgICAgW3NlbGYgc2V0VXBBbHBoYUFuaW1hdGlvbjpfdHJhY2tBbHBoYUFuaW1hdGlv
biBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNr
UGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKK30K
KworLSAodm9pZClzY3JvbGxlckltcDooTlNTY3JvbGxlckltcCAqKXNjcm9sbGVySW1wIGFuaW1h
dGVVSVN0YXRlVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24K
K3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChz
Y3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Njcm9sbGJhcikpOworCisg
ICAgLy8gVUlTdGF0ZVRyYW5zaXRpb24gYWx3YXlzIGFuaW1hdGVzIHRvIDEuIEluIGNhc2UgYW4g
YW5pbWF0aW9uIGlzIGluIHByb2dyZXNzIHRoaXMgYXZvaWRzIGEgaGFyZCB0cmFuc2l0aW9uLgor
ICAgIFtzY3JvbGxlckltcCBzZXRVaVN0YXRlVHJhbnNpdGlvblByb2dyZXNzOjEgLSBbc2Nyb2xs
ZXJJbXAgdWlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzc11dOworCisgICAgLy8gSWYgdGhlIFVJIHN0
YXRlIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLCB0aGVuIHdlIGFyZSBubyBsb25nZXIgbW92aW5n
IHRoZSBzY3JvbGxiYXIgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgaWYgKF9zY3JvbGxi
YXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSkKKyAgICAgICAgW3Njcm9sbGVy
SW1wIHNldFVzZVByZXNlbnRhdGlvblZhbHVlOk5PXTsKKworICAgIGlmICghX3VpU3RhdGVUcmFu
c2l0aW9uQW5pbWF0aW9uKSB7CisgICAgICAgIF91aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiA9
IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICBmZWF0dXJlVG9BbmltYXRlOlVJU3RhdGVUcmFu
c2l0aW9uCisgICAgICAgICAgICBhbmltYXRlRnJvbTpbc2Nyb2xsZXJJbXAgdWlTdGF0ZVRyYW5z
aXRpb25Qcm9ncmVzc10KKyAgICAgICAgICAgIGFuaW1hdGVUbzoxLjAKKyAgICAgICAgICAgIGR1
cmF0aW9uOmR1cmF0aW9uXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3Qg
bmVlZCB0byBpbml0aWFsaXplIHRoZSBhbmltYXRpb24sIGp1c3QgcmVzZXQgdGhlIHZhbHVlcyBp
biBjYXNlIHRoZXkgaGF2ZSBjaGFuZ2VkLgorICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5p
bWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Njcm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jl
c3NdXTsKKyAgICAgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRFbmRWYWx1ZTox
LjBdOworICAgICAgICBbX3VpU3RhdGVUcmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1
cmF0aW9uXTsKKyAgICB9CisgICAgW191aVN0YXRlVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFu
aW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3Jv
bGxlckltcCBhbmltYXRlRXhwYW5zaW9uVHJhbnNpdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChzY3JvbGxlckltcCA9PSBzY3JvbGxlckltcEZvclNjcm9sbGJhcigqX3Nj
cm9sbGJhcikpOworCisgICAgLy8gRXhwYW5zaW9uVHJhbnNpdGlvbiBhbHdheXMgYW5pbWF0ZXMg
dG8gMS4gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MgdGhpcyBhdm9pZHMgYSBo
YXJkIHRyYW5zaXRpb24uCisgICAgW3Njcm9sbGVySW1wIHNldEV4cGFuc2lvblRyYW5zaXRpb25Q
cm9ncmVzczoxIC0gW3Njcm9sbGVySW1wIGV4cGFuc2lvblRyYW5zaXRpb25Qcm9ncmVzc11dOwor
CisgICAgaWYgKCFfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbikgeworICAgICAgICBfZXhw
YW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpfc2Nyb2xsYmFyCisgICAgICAgICAgICBm
ZWF0dXJlVG9BbmltYXRlOkV4cGFuc2lvblRyYW5zaXRpb24KKyAgICAgICAgICAgIGFuaW1hdGVG
cm9tOltzY3JvbGxlckltcCBleHBhbnNpb25UcmFuc2l0aW9uUHJvZ3Jlc3NdCisgICAgICAgICAg
ICBhbmltYXRlVG86MS4wCisgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYW5p
bWF0aW9uLCBqdXN0IHJlc2V0IHRoZSB2YWx1ZXMgaW4gY2FzZSB0aGV5IGhhdmUgY2hhbmdlZC4K
KyAgICAgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldFN0YXJ0VmFsdWU6W3Nj
cm9sbGVySW1wIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3NdXTsKKyAgICAgICAgW19leHBhbnNp
b25UcmFuc2l0aW9uQW5pbWF0aW9uIHNldEVuZFZhbHVlOjEuMF07CisgICAgICAgIFtfZXhwYW5z
aW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgfQorICAg
IFtfZXhwYW5zaW9uVHJhbnNpdGlvbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0g
KHZvaWQpc2Nyb2xsZXJJbXA6KE5TU2Nyb2xsZXJJbXAgKilzY3JvbGxlckltcCBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNPdmVybGF5U2Nyb2xsZXJTdGF0ZSluZXdPdmVybGF5U2Ny
b2xsZXJTdGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisgICAgVU5VU0VE
X1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClpbnZhbGlkYXRl
Cit7CisgICAgX3Njcm9sbGJhciA9IDA7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgW19rbm9iQWxwaGFBbmltYXRpb24gaW52YWxpZGF0ZV07CisgICAgW190cmFja0FscGhh
QW5pbWF0aW9uIGludmFsaWRhdGVdOworICAgIFtfdWlTdGF0ZVRyYW5zaXRpb25BbmltYXRpb24g
aW52YWxpZGF0ZV07CisgICAgW19leHBhbnNpb25UcmFuc2l0aW9uQW5pbWF0aW9uIGludmFsaWRh
dGVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworQGVuZAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxTY3JvbGxiYXJzQ29udHJvbGxlcj4gU2Ny
b2xsYmFyc0NvbnRyb2xsZXI6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEp
Cit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM+KHNjcm9s
bGFibGVBcmVhKTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OlNjcm9sbGJhcnNDb250
cm9sbGVyTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbGJh
cnNDb250cm9sbGVyKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcigqdGhpcywgJlNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjppbml0aWFsU2Nyb2xsYmFy
UGFpbnRUaW1lckZpcmVkKQorICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0
aGlzLCAmU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGlt
ZXJGaXJlZCkKK3sKKyAgICBtX3Njcm9sbGVySW1wUGFpckRlbGVnYXRlID0gYWRvcHROUyhbW1dl
YlNjcm9sbGVySW1wUGFpckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOiZz
Y3JvbGxhYmxlQXJlYV0pOworICAgIG1fc2Nyb2xsZXJJbXBQYWlyID0gYWRvcHROUyhbW05TU2Ny
b2xsZXJJbXBQYWlyIGFsbG9jXSBpbml0XSk7CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldERl
bGVnYXRlOm1fc2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3Njcm9sbGVy
SW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOlNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xs
ZXJTdHlsZSgpXTsKK30KKworU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6On5TY3JvbGxiYXJzQ29u
dHJvbGxlck1hYygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21f
c2Nyb2xsZXJJbXBQYWlyRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgW21fc2Nyb2xsZXJJbXBQ
YWlyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdh
dGUgaW52YWxpZGF0ZV07CisgICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFs
aWRhdGVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgaWYgKHNjcm9sbGJh
clBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigp
OworICAgIFttX2hvcml6b250YWxTY3JvbGxlckltcERlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNd
OworICAgIFttX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXTsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCit7CisgICAgYXV0byByZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgPSBzY3JvbGxlclRodW1iOworICAgIGlmIChhdXRvKiB2ZXJ0aWNhbFNj
cm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAg
cmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOworCisgICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRl
cyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2Nyb2xsYWJsZUFyZWEoKS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nv
b3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdD
b29yZGluYXRlczsKK30KKworCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpoYXZlU2Ny
b2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWEo
KS5zY3JvbGxBbmltYXRvcigpLmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAor
eworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCisgICAgICAgIHJldHVybjsKKworICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhV2lsbERyYXddOworICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhf
U1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRW50ZXJlZENvbnRlbnRB
cmVhIik7CisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlz
TG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIG1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJsYXlT
Y3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8PCBz
Y3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1vdXNlRXhpdGVkQ29udGVudEFyZWEiKTsKKyAgICBpZiAo
W21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VFeGl0ZWRDb250ZW50QXJl
YV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oT3ZlcmxheVNjcm9sbGJhcnMsIHN0cmVh
bSA8PCAiU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMgZm9yIFsiIDw8IHNjcm9sbGFibGVBcmVhKCkg
PDwgIl0gbW91c2VNb3ZlZEluQ29udGVudEFyZWEiKTsKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQ
YWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbbV9zY3JvbGxlckltcFBhaXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOworfQorCit2b2lk
IFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBz
Y3JvbGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3Jv
bGxlclN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVM
ZWdhY3kpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zl
cmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChO
U1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJh
cikpCisgICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKK30KKwordm9pZCBT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0Cit7CisgICAgLy8gQXQgdGhpcyB0aW1lLCBvbmx5IGxlZ2FjeSBzY3Jv
bGxiYXJzIG5lZWRzIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBoZXJlLgorICAgIGlmIChTY3JvbGxl
clN0eWxlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSAhPSBOU1Njcm9sbGVyU3R5bGVMZWdh
Y3kpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcikp
CisgICAgICAgIFtwYWludGVyIG1vdXNlRXhpdGVkU2Nyb2xsZXJdOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjptb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBib29sIG1vdXNlSXNEb3duKSBjb25zdAoreworICAgIGlmIChbbV9zY3JvbGxlcklt
cFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
KnNjcm9sbGJhcikpIHsKKyAgICAgICAgW3BhaW50ZXIgc2V0VHJhY2tpbmc6bW91c2VJc0Rvd25d
OworICAgICAgICBpZiAobW91c2VJc0Rvd24pCisgICAgICAgICAgICBbbV9zY3JvbGxlckltcFBh
aXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fc2Ny
b2xsZXJJbXBQYWlyIGVuZFNjcm9sbEdlc3R1cmVdOworICAgIH0KK30KKwordm9pZCBTY3JvbGxi
YXJzQ29udHJvbGxlck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKFttX3Nj
cm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHN0YXJ0TGl2ZVJlc2l6ZV07Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoKSBjb25zdAor
eworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJl
YURpZFJlc2l6ZV07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OndpbGxFbmRM
aXZlUmVzaXplKCkKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbEVuZExpdmVSZXNp
emUoKTsKKworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIFttX3Njcm9sbGVySW1wUGFpciBlbmRM
aXZlUmVzaXplXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6Y29udGVudEFy
ZWFEaWRTaG93KCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxl
clN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3JvbGxlckltcFBh
aXIgd2luZG93T3JkZXJlZEluXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6
Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJs
YXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3Jv
bGxlckltcFBhaXIgd2luZG93T3JkZXJlZE91dF07Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhf
U1RSRUFNKE92ZXJsYXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVy
TWFjIGZvciBbIiA8PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIGRpZEJlZ2luU2Nyb2xsR2VzdHVy
ZSIpOworCisgICAgaWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlz
TG9ja2VkXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2lu
U2Nyb2xsR2VzdHVyZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9IHdoZWVsRXZlbnRUZXN0
TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5kZWZlckZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlz
KSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25z
dAoreworICAgIExPR19XSVRIX1NUUkVBTShPdmVybGF5U2Nyb2xsYmFycywgc3RyZWFtIDw8ICJT
Y3JvbGxiYXJzQ29udHJvbGxlck1hYyBmb3IgWyIgPDwgc2Nyb2xsYWJsZUFyZWEoKSA8PCAiXSBk
aWRFbmRTY3JvbGxHZXN0dXJlIik7CisKKyAgICBpZiAoW21fc2Nyb2xsZXJJbXBQYWlyIG92ZXJs
YXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zY3Jv
bGxlckltcFBhaXIgZW5kU2Nyb2xsR2VzdHVyZV07CisKKyAgICBpZiAoYXV0byogbW9uaXRvciA9
IHdoZWVsRXZlbnRUZXN0TW9uaXRvcigpKQorICAgICAgICBtb25pdG9yLT5yZW1vdmVEZWZlcnJh
bEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpDb250ZW50
U2Nyb2xsSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6Om1h
eUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Cit7CisgICAgTE9HX1dJVEhfU1RSRUFNKE92ZXJs
YXlTY3JvbGxiYXJzLCBzdHJlYW0gPDwgIlNjcm9sbGJhcnNDb250cm9sbGVyTWFjIGZvciBbIiA8
PCBzY3JvbGxhYmxlQXJlYSgpIDw8ICJdIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSIpOworCisgICAg
aWYgKFttX3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGJlZ2luU2Nyb2xsR2VzdHVy
ZV07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworfQorCit2
b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9I
aWRkZW4oYm9vbCBzaG91bGRMb2NrU3RhdGUpCit7CisgICAgaWYgKHNob3VsZExvY2tTdGF0ZSkK
KyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIGxvY2tPdmVybGF5U2Nyb2xsZXJTdGF0ZTpOU092
ZXJsYXlTY3JvbGxlclN0YXRlSGlkZGVuXTsKKyAgICBlbHNlIHsKKyAgICAgICAgW21fc2Nyb2xs
ZXJJbXBQYWlyIHVubG9ja092ZXJsYXlTY3JvbGxlclN0YXRlXTsKKworICAgICAgICAvLyBXZSBu
ZXZlciB1cGRhdGUgc2Nyb2xsZXIgc3R5bGUgZm9yIFBhaW50ZXJDb250cm9sbGVycyB0aGF0IGFy
ZSBsb2NrZWQuIElmIHdlIGhhdmUgYSBwZW5kaW5nCisgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRl
IHRoZSBzdHlsZSwgZG8gaXQgb25jZSB3ZSd2ZSB1bmxvY2tlZCB0aGUgc2Nyb2xsZXIgc3RhdGUu
CisgICAgICAgIGlmIChtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSkKKyAgICAgICAgICAgIHVw
ZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNYWM6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFbbV9z
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF07Cit9CisKK3ZvaWQg
U2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3JvbGxlcklt
cEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAg
IG1fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGVySW1w
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgW3Bh
aW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGVySW1wRGVsZWdhdGUuZ2V0KCldOwor
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVy
OmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZl
cnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5M
aXZlUmVzaXplKCkpCisgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIE5TU2Nyb2xsZXJJbXAgKnBhaW50ZXIgPSBzY3Jv
bGxlckltcEZvclNjcm9sbGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXBhaW50ZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7
CisgICAgW21fdmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1f
dmVydGljYWxTY3JvbGxlckltcERlbGVnYXRlID0gbnVsbHB0cjsKKworICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOm5pbF07CisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldFZlcnRpY2FsU2Nyb2xs
ZXJJbXA6bmlsXTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBOU1Njcm9sbGVy
SW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAg
aWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1faG9yaXpvbnRh
bFNjcm9sbGVySW1wRGVsZWdhdGUpOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGVySW1wRGVsZWdh
dGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3Jv
bGxiYXI6c2Nyb2xsYmFyXSk7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250
YWxTY3JvbGxlckltcERlbGVnYXRlLmdldCgpXTsKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpCisgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCld
OworCisgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWlu
dGVyXTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAg
W3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIo
KnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9ob3Jpem9udGFsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSk7CisgICAgW21faG9yaXpvbnRh
bFNjcm9sbGVySW1wRGVsZWdhdGUgaW52YWxpZGF0ZV07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xs
ZXJJbXBEZWxlZ2F0ZSA9IG51bGxwdHI7CisKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxd
OworICAgIFttX3Njcm9sbGVySW1wUGFpciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsK
K30KKwordm9pZCBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aW52YWxpZGF0ZVNjcm9sbGJhclBh
cnRMYXllcnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgTlNTY3JvbGxlckltcCAqcGFp
bnRlciA9IHNjcm9sbGVySW1wRm9yU2Nyb2xsYmFyKCpzY3JvbGxiYXIpOworICAgIFtwYWludGVy
IHNldE5lZWRzRGlzcGxheTpZRVNdOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFj
Ojp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKK3sKKyAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IHNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9s
bGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Nj
cm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7
CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRM
YXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWxdOworfQorCit2b2lkIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYWJsZUFyZWEoKS5sYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9s
bGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBOU1Njcm9sbGVySW1wICpwYWludGVyID0gc2Nyb2xsZXJJ
bXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxh
eWVyKCkgOiBuaWxdOworfQorCitib29sIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzaG91bGRT
Y3JvbGxiYXJQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sK
KyAgICAvLyBOb24tb3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUg
aW4gaGl0IHRlc3RpbmcuCisgICAgaWYgKFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xs
ZXJTdHlsZSgpICE9IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBwYXJ0aWNpcGF0ZSBpbiBoaXQg
dGVzdGluZyB3aGVuZXZlciB0aGV5IGFyZSBhdCBhbGwgdmlzaWJsZS4KKyAgICBOU1Njcm9sbGVy
SW1wICpwYWludGVyID0gc2Nyb2xsZXJJbXBGb3JTY3JvbGxiYXIoKnNjcm9sbGJhcik7CisgICAg
aWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFtwYWludGVy
IGtub2JBbHBoYV0gPiAwOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCit7CisgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFj
ay9mb3J3YXJkIGNhY2hlLCBidXQgdGhlIHBhZ2UKKyAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xs
aW5nIGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0
aGUKKyAgICAvLyBTY3JvbGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9u
IGFuIGFjdGl2ZSBwYWdlLgorICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxl
QXJlYSgpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkpCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNj
cm9sbGVkKGRlbHRhKTsKKyAgICBlbHNlCisgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVk
U29vbihkZWx0YSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnVwZGF0ZVNj
cm9sbGVyU3R5bGUoKQoreworICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9s
bGVyU3RhdGVJc0xvY2tlZF0pIHsKKyAgICAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUg
PSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogbWFjVGhlbWUgPSBt
YWNTY3JvbGxiYXJUaGVtZSgpOworICAgIGlmICghbWFjVGhlbWUpIHsKKyAgICAgICAgbV9uZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtYWNUaGVtZS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzQ2hhbmdlZCgpOworCisgICAg
TlNTY3JvbGxlclN0eWxlIG5ld1N0eWxlID0gW21fc2Nyb2xsZXJJbXBQYWlyIHNjcm9sbGVyU3R5
bGVdOworCisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxl
QXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXIt
PmludmFsaWRhdGUoKTsKKworICAgICAgICBOU1Njcm9sbGVySW1wICpvbGRWZXJ0aWNhbFBhaW50
ZXIgPSBbbV9zY3JvbGxlckltcFBhaXIgdmVydGljYWxTY3JvbGxlckltcF07CisgICAgICAgIGF1
dG8gbmV3VmVydGljYWxQYWludGVyID0gcmV0YWluUHRyKFtOU1Njcm9sbGVySW1wIHNjcm9sbGVy
SW1wV2l0aFN0eWxlOm5ld1N0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXZlcnRpY2Fs
U2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJ
bXA6b2xkVmVydGljYWxQYWludGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNl
dFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmV3VmVydGljYWxQYWludGVyLmdldCgpXTsKKyAgICAgICAg
bWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoKnZlcnRpY2FsU2Nyb2xsYmFyLCBX
VEZNb3ZlKG5ld1ZlcnRpY2FsUGFpbnRlcikpOworICAgICAgICBtYWNUaGVtZS0+ZGlkQ3JlYXRl
U2Nyb2xsZXJJbXAoKnZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVy
ZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11
c3QgcmUtc2V0IHRoZQorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3Ms
IGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAg
ICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tu
ZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29u
dHJvbFNpemUoKSk7CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50
UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIGlmIChTY3Jv
bGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxT
Y3JvbGxiYXIoKSkgeworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7
CisKKyAgICAgICAgTlNTY3JvbGxlckltcCAqb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3Jv
bGxlckltcFBhaXIgaG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKKyAgICAgICAgYXV0byBuZXdIb3Jp
em9udGFsUGFpbnRlciA9IHJldGFpblB0cihbTlNTY3JvbGxlckltcCBzY3JvbGxlckltcFdpdGhT
dHlsZTpuZXdTdHlsZSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlob3Jpem9udGFsU2Nyb2xs
YmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6WUVTIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9s
ZEhvcml6b250YWxQYWludGVyXSk7CisKKyAgICAgICAgW21fc2Nyb2xsZXJJbXBQYWlyIHNldEhv
cml6b250YWxTY3JvbGxlckltcDpuZXdIb3Jpem9udGFsUGFpbnRlci5nZXQoKV07CisgICAgICAg
IG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKCpob3Jpem9udGFsU2Nyb2xsYmFy
LCBXVEZNb3ZlKG5ld0hvcml6b250YWxQYWludGVyKSk7CisgICAgICAgIG1hY1RoZW1lLT5kaWRD
cmVhdGVTY3JvbGxlckltcCgqaG9yaXpvbnRhbFNjcm9sbGJhcik7CisKKyAgICAgICAgLy8gVGhl
IGRpZmZlcmVudCBzY3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBz
byB3ZSBtdXN0IHJlLXNldCB0aGUKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhp
Y2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24K
KyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50
IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9s
bGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZy
YW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisg
ICAgLy8gSWYgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFn
ZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQKKyAgICAvLyBh
IHJlbGF5b3V0IHdpbGwgaGFwcGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0
aWF0ZSBhIHJlLWxheW91dCBvdXJzZWx2ZXMuCisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxi
YXJTdHlsZUNoYW5nZWQobmV3U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9s
bGJhclN0eWxlOjpPdmVybGF5IDogU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7CisKKyAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0
ZSA9IGZhbHNlOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTWFjOjpzdGFydFNjcm9s
bGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3Rh
cnRPbmVTaG90KDEwMF9tcyk7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6OnNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUoKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNj
cm9sbGJhclBhaW50VGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUbyBmb3Jj
ZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90
aGVyd2lzZSwgdGhlIFNjcm9sbGVySW1wUGFpcgorICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhl
IHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICBbbV9z
Y3JvbGxlckltcFBhaXIgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAgIFttX3Njcm9sbGVySW1w
UGFpciBmbGFzaFNjcm9sbGVyc107Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWM6
OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCgpCit7CisgICAgc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWQobV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSk7CisgICAg
bV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IHsgfTsKKworICAgIGlmIChh
dXRvKiBtb25pdG9yID0gd2hlZWxFdmVudFRlc3RNb25pdG9yKCkpCisgICAgICAgIG1vbml0b3It
PnJlbW92ZURlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RN
b25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1v
bml0b3I6OkNvbnRlbnRTY3JvbGxJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxiYXJzQ29u
dHJvbGxlck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGNvbnN0IEZsb2F0U2l6ZSYg
ZGVsdGEpCit7CisgICAgbV9jb250ZW50QXJlYVNjcm9sbGVkVGltZXJTY3JvbGxEZWx0YSA9IGRl
bHRhOworCisgICAgaWYgKCFtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyLnN0YXJ0T25lU2hvdCgw
X3MpOworCisgICAgaWYgKGF1dG8qIG1vbml0b3IgPSB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKSkK
KyAgICAgICAgbW9uaXRvci0+ZGVmZXJGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2
ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZl
bnRUZXN0TW9uaXRvcjo6Q29udGVudFNjcm9sbEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9s
bGJhcnNDb250cm9sbGVyTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNp
emUmIGRlbHRhKQoreworICAgIFttX3Njcm9sbGVySW1wUGFpciBjb250ZW50QXJlYVNjcm9sbGVk
SW5EaXJlY3Rpb246TlNNYWtlUG9pbnQoZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpXTsK
K30KKworc3RhdGljIFN0cmluZyBzY3JvbGxiYXJTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuICJub25lIl9zOworCisgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChzY3JvbGxiYXItPmVuYWJs
ZWQoKSA/ICJlbmFibGVkIl9zIDogImRpc2FibGVkIl9zKTsKKworICAgIGlmICghc2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OworCisgICAgTlNTY3JvbGxlckltcCAqc2Nyb2xsZXJJbXAgPSBzY3JvbGxlckltcEZvclNjcm9s
bGJhcigqc2Nyb2xsYmFyKTsKKyAgICBpZiAoIXNjcm9sbGVySW1wKQorICAgICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAuZXhwYW5kZWQpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIixleHBhbmRlZCJfcyk7CisKKyAgICBpZiAoc2Nyb2xsZXJJbXAu
dHJhY2tBbHBoYSA+IDApCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIix2aXNpYmxlX3RyYWNrIl9z
KTsKKworICAgIGlmIChzY3JvbGxlckltcC5rbm9iQWxwaGEgPiAwKQorICAgICAgICByZXN1bHQu
YXBwZW5kKCIsdmlzaWJsZV90aHVtYiJfcyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBTY3JvbGxiYXJzQ29udHJvbGxlck1hYzo6aG9yaXpvbnRhbFNjcm9s
bGJhclN0YXRlRm9yVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRl
KHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworU3RyaW5nIFNj
cm9sbGJhcnNDb250cm9sbGVyTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhclN0YXRlRm9yVGVzdGluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlKHNjcm9sbGFibGVBcmVhKCkudmVy
dGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK1doZWVsRXZlbnRUZXN0TW9uaXRvciogU2Nyb2xsYmFy
c0NvbnRyb2xsZXJNYWM6OndoZWVsRXZlbnRUZXN0TW9uaXRvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKS53aGVlbEV2ZW50VGVzdE1vbml0
b3IoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFu
aW1hdG9yTW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1h
dG9yTW9jay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjE1OGNmY2Q0OWM1
OWIwZjhiZDA3MDQ1YmU1OWI0ODU5YmZiZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxBbmlt
YXRvck1vY2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JNb2NrLmgiCi0KLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVNjcm9sbEFuaW1hdG9yTW9jazo6U2Nyb2xsQW5pbWF0b3JNb2Nr
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIGxvZ2dlcikKLSAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KQotICAgICwgbV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQotewotfQotCi1TY3JvbGxBbmltYXRv
ck1vY2s6On5TY3JvbGxBbmltYXRvck1vY2soKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JNb2NrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
LXsKLSAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOwotICAgIFNjcm9sbEFuaW1h
dG9yOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yTW9jazo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKLXsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7Ci0gICAgU2Ny
b2xsQW5pbWF0b3I6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQot
dm9pZCBTY3JvbGxBbmltYXRvck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2lsbFJlbW92ZVZlcnRp
Y2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JNb2NrOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBTY3JvbGxBbmltYXRvcjo6d2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXIgPSBudWxscHRyOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VF
bnRlcmVkQ29udGVudEFyZWEoKQotewotICAgIG1fbG9nZ2VyKCJtb3VzZUVudGVyZWRDb250ZW50
QXJlYSIpOwotICAgIFNjcm9sbEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTW9jazo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQot
ewotICAgIG1fbG9nZ2VyKCJtb3VzZU1vdmVkSW5Db250ZW50QXJlYSIpOwotICAgIFNjcm9sbEFu
aW1hdG9yOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTW9jazo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCi17Ci0gICAgbV9sb2dnZXIoIm1vdXNl
RXhpdGVkQ29udGVudEFyZWEiKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpOwotfQotCi1jb25zdCBjaGFyKiBTY3JvbGxBbmltYXRvck1vY2s6OnNjcm9sbGJh
clByZWZpeChTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xs
YmFyID09IG1fdmVydGljYWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikgY29uc3QKLXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVudGVyZWQi
LCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxB
bmltYXRvcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikgY29uc3QKLXsKLSAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUV4aXRlZCIsIHNjcm9s
bGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOwotICAgIFNjcm9sbEFuaW1hdG9y
Ojptb3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTW9jazo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9v
bCBpc1ByZXNzZWQpIGNvbnN0Ci17Ci0gICAgbV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNzZWQg
PyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJc1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xs
YmFyKSwgIlNjcm9sbGJhciIpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bW91c2VJc0Rvd25JblNj
cm9sbGJhcihzY3JvbGxiYXIsIGlzUHJlc3NlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0
b3JNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbEFuaW1hdG9yTW9j
ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTcyMWE4ZjYyMmM4OWU1NDZkOWVi
YmFjZDk4MjEwZjgzMTFiOTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsQW5pbWF0b3JNb2Nr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDE2IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEEgTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBTY3Jv
bGxBbmltYXRvciB1c2VkIHRvIHRlc3QgdGhlIHNjcm9sbCBldmVudHMKLS8vIHJlY2VpdmVkIGJ5
IHRoZSBzY3JvbGwgYW5pbWF0b3IuIFRlc3RzIGNhbiBlbmFibGUgdGhpcyBzY3JvbGwgYW5pbWF0
b3IgdXNpbmcKLS8vIHRoZSBpbnRlcm5hbCBzZXR0aW5nIGVuYWJsZU1vY2tTY3JvbGxBbmltYXRv
ci4KLWNsYXNzIFNjcm9sbEFuaW1hdG9yTW9jayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsQW5pbWF0b3JNb2NrKFNjcm9sbGFibGVBcmVhJiwgV1RG
OjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxB
bmltYXRvck1vY2soKTsKLQotcHJpdmF0ZToKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
LSAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBhbGxvd3NW
ZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBJbnRTaXplKCk7IH0KLSAgICBib29sIGlzUGlubmVkRm9yU2Nyb2xs
RGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4geyB9OyB9Ci0gICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xs
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUm
KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRF
ZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBh
ZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KLSNl
bmRpZgotCi0gICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VFbnRl
cmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbW91c2VF
eGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGNvbnN0IGNoYXIqIHNjcm9sbGJhclByZWZpeChTY3JvbGxiYXIqKSBjb25zdDsKLQotICAgIFdU
Rjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9sb2dnZXI7Ci0gICAgU2Nyb2xsYmFy
KiBtX3ZlcnRpY2FsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotICAgIFNjcm9sbGJhciogbV9ob3Jp
em9udGFsU2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnND
b250cm9sbGVyTW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJh
cnNDb250cm9sbGVyTW9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZjZjAyODJiYmFiZTg5MmE3YzQwMGI3
NGRkOGRhMTVlMGZmMTNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmNwcApAQCAtMCwwICsxLDExMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChjKSAy
MDIxIEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrLmgiCisKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Njcm9sbGJhcnNDb250cm9sbGVyTW9jazo6U2Nyb2xsYmFyc0NvbnRyb2xs
ZXJNb2NrKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgV1RGOjpGdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGxvZ2dlcikKKyAgICA6IFNjcm9sbGJhcnNDb250cm9sbGVyKHNj
cm9sbGFibGVBcmVhKQorICAgICwgbV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQoreworfQorCitT
Y3JvbGxiYXJzQ29udHJvbGxlck1vY2s6On5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKSA9IGRl
ZmF1bHQ7CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsYmFyOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBt
X2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyc0NvbnRyb2xs
ZXI6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2s6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6d2lsbFJlbW92ZVZl
cnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjp3aWxsUmVtb3ZlSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJz
Q29udHJvbGxlcjo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lkIFNjcm9sbGJhcnND
b250cm9sbGVyTW9jazo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2Vy
KCJtb3VzZUVudGVyZWRDb250ZW50QXJlYSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjpt
b3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVy
TW9jazo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQoreworICAgIG1fbG9nZ2VyKCJtb3VzZU1v
dmVkSW5Db250ZW50QXJlYSIpOworICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZU1vdmVk
SW5Db250ZW50QXJlYSgpOworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAgbV9sb2dnZXIoIm1vdXNlRXhpdGVkQ29udGVu
dEFyZWEiKTsKKyAgICBTY3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFeGl0ZWRDb250ZW50QXJl
YSgpOworfQorCitjb25zdCBjaGFyKiBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6OnNjcm9sbGJh
clByZWZpeChTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xs
YmFyID09IG1fdmVydGljYWxTY3JvbGxiYXIgPyAiVmVydGljYWwiIDogc2Nyb2xsYmFyID09IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA/ICJIb3Jpem9udGFsIiA6ICJVbmtub3duIjsKK30KKwordm9p
ZCBTY3JvbGxiYXJzQ29udHJvbGxlck1vY2s6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJtb3VzZUVu
dGVyZWQiLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrOjptb3VzZUV4aXRlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBtX2xvZ2dlcihtYWtlU3RyaW5nKCJt
b3VzZUV4aXRlZCIsIHNjcm9sbGJhclByZWZpeChzY3JvbGxiYXIpLCAiU2Nyb2xsYmFyIikpOwor
ICAgIFNjcm9sbGJhcnNDb250cm9sbGVyOjptb3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIp
OworfQorCit2b2lkIFNjcm9sbGJhcnNDb250cm9sbGVyTW9jazo6bW91c2VJc0Rvd25JblNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBpc1ByZXNzZWQpIGNvbnN0Cit7CisgICAg
bV9sb2dnZXIobWFrZVN0cmluZyhpc1ByZXNzZWQgPyAibW91c2VJc0Rvd25JbiIgOiAibW91c2VJ
c1VwSW4iLCBzY3JvbGxiYXJQcmVmaXgoc2Nyb2xsYmFyKSwgIlNjcm9sbGJhciIpKTsKKyAgICBT
Y3JvbGxiYXJzQ29udHJvbGxlcjo6bW91c2VJc0Rvd25JblNjcm9sbGJhcihzY3JvbGxiYXIsIGlz
UHJlc3NlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyc0NvbnRyb2xsZXJNb2NrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9sbGVyTW9jay5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE0NzMzOTMxMTJkODRhYTUzZWQyYjY3OWVmZjA4NDY3MzNiODgyYmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhcnNDb250cm9s
bGVyTW9jay5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdh
bGlhIFMuTC4KKyAqIENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJTY3JvbGxiYXJzQ29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEEgTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBTY3JvbGxiYXJzQ29udHJvbGxlciB1c2VkIHRv
IHRlc3QgdGhlIHNjcm9sbCBldmVudHMKKy8vIHJlY2VpdmVkIGJ5IHRoZSBzY3JvbGxiYXIgY29u
dHJvbGxlci4gVGVzdHMgY2FuIGVuYWJsZSB0aGlzIG1vY2sgb2JqZWN0IHVzaW5nCisvLyB0aGUg
aW50ZXJuYWwgc2V0dGluZyBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkuCisvLyBGSVhNRTog
c2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcigpIG5lZWRzIHJlbmFtaW5nLgorCitjbGFzcyBTY3Jv
bGxiYXJzQ29udHJvbGxlck1vY2sgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyc0NvbnRyb2xsZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNjcm9sbGJhcnNDb250cm9sbGVyTW9jayk7CitwdWJsaWM6CisgICAgU2Nyb2xsYmFyc0NvbnRy
b2xsZXJNb2NrKFNjcm9sbGFibGVBcmVhJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJzQ29udHJvbGxlck1vY2soKTsKKworcHJp
dmF0ZToKKworICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFs
OworICAgIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIGZpbmFs
OworICAgIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgZmlu
YWw7CisgICAgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGZpbmFsOworICAgIHZvaWQg
bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEoKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJh
ciopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxi
YXIqLCBib29sKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBjaGFyKiBzY3JvbGxiYXJQcmVmaXgo
U2Nyb2xsYmFyKikgY29uc3Q7CisKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5n
Jik+IG1fbG9nZ2VyOworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhciB7IG51bGxw
dHIgfTsKKyAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhciB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZl
bnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3Jv
bGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggNjBj
ZGI2NmMxZjBhMmIxMDdmNTg0MTdiMzMyZWY4N2Y2MTUxZjk0Mi4uZGQ0ZmMwMzM0ZWJjYmJjNjA1
NGIzMzc5Mzk2NDJkYjZmMzY1ZGQzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC0xLDEwICsxLDE1
IEBACitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlRW50ZXJlZENvbnRlbnRB
cmVhCitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRB
cmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRDb250ZW50QXJl
YQogQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkVmVydGljYWxTY3Jv
bGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVu
dEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRB
cmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxT
Y3JvbGxiYXIKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGlj
YWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZElu
Q29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZFZlcnRp
Y2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhCiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLXNl
bGVjdC1saXN0LWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1zZWxlY3QtbGlzdC1ldmVudHMtZXhw
ZWN0ZWQudHh0CmluZGV4IGVmYTBlMTYyYzRiMzY0Nzg0NjYzY2ViMDY3MTczYjgzZGExNjFkNzgu
LjhiNjZiYWViYjk4OTAzNTUzMjJlNDMwOGE2OTY1OGEyZTExMTZlNjIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9y
LXNlbGVjdC1saXN0LWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itc2VsZWN0LWxpc3QtZXZl
bnRzLWV4cGVjdGVkLnR4dApAQCAtMSwxMCArMSwxNSBAQAorQ09OU09MRSBNRVNTQUdFOiBNYWlu
RnJhbWVWaWV3OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBNYWlu
RnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdFOiBSZW5k
ZXJMaXN0Qm94OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdFOiBSZW5k
ZXJMaXN0Qm94OiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdF
OiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMaXN0Qm94OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMaXN0Qm94OiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKIENPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGlzdEJveDogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09O
U09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMaXN0Qm94OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQogQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMaXN0Qm94OiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFy
CitDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
CiBDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxpc3RCb3g6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEK
IFRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzOTgu
CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>