<?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>59728</bug_id>
          
          <creation_ts>2011-04-28 12:46:02 -0700</creation_ts>
          <short_desc>Add overlay scrollbar support to Chromium Mac</short_desc>
          <delta_ts>2011-08-18 12:15:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59741</dependson>
    
    <dependson>59753</dependson>
    
    <dependson>59756</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Sailesh Agrawal">sail</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>jamesr</cc>
    
    <cc>mihaip</cc>
    
    <cc>rsesek</cc>
    
    <cc>sam</cc>
    
    <cc>thakis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>394671</commentid>
    <comment_count>0</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 12:46:02 -0700</bug_when>
    <thetext>Add overlay scrollbar support to Chromium Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394676</commentid>
    <comment_count>1</comment_count>
      <attachid>91540</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 12:48:12 -0700</bug_when>
    <thetext>Created attachment 91540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394684</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 12:51:10 -0700</bug_when>
    <thetext>Attachment 91540 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesMac.h:65:  The parameter name &quot;painter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 6 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394692</commentid>
    <comment_count>3</comment_count>
      <attachid>91540</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-04-28 13:07:45 -0700</bug_when>
    <thetext>Comment on attachment 91540
Patch

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

This CL does too many things at once.

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Reviewed by NOBODY (OOPS!).

why are you changing an existing an existing changelog entry instead of adding a new one? (Tools/Scripts/webkit-patch should do this automatically for you)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394694</commentid>
    <comment_count>4</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 13:11:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 91540 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91540&amp;action=review
&gt; 
&gt; This CL does too many things at once.

There are basically 4 parts:
 - enable WTF_USE_WK_SCROLLBAR_PAINTER
 - update ScrollbarThemeChromiumMac.mm
 - fork ScrollAnimatorMac.mm
 - add the ScrollbarOverlayUtilities

Should I split it that way? Does each part get its own bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394697</commentid>
    <comment_count>5</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-04-28 13:12:50 -0700</bug_when>
    <thetext>sgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394770</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-04-28 14:47:11 -0700</bug_when>
    <thetext>This seems to copy a lot of code without refactoring or attribution.  This is not acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394772</commentid>
    <comment_count>7</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-04-28 14:48:53 -0700</bug_when>
    <thetext>sam: you probably want bug 59741</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394773</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-04-28 14:49:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; sam: you probably want bug 59741

No, this patch contains code copied from ScrollbarAnimatorMac.mm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394776</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-04-28 14:51:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This seems to copy a lot of code without refactoring or attribution.  This is not acceptable.

Sorry, the attribution is there, but this a simply silly amount of copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394778</commentid>
    <comment_count>10</comment_count>
      <attachid>91540</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-04-28 14:53:04 -0700</bug_when>
    <thetext>Comment on attachment 91540
Patch

Yeah, this is v1. It&apos;ll get prettier before it&apos;s checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394779</commentid>
    <comment_count>11</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 14:53:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; This seems to copy a lot of code without refactoring or attribution.  This is not acceptable.
&gt; 
&gt; Sorry, the attribution is there, but this a simply silly amount of copying.

I&apos;ll work on trying to use ScrollAnimatorMac.* without forking. Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394883</commentid>
    <comment_count>12</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-04-28 16:19:24 -0700</bug_when>
    <thetext>I&apos;ve split this into three separate reviews. I&apos;ve also removed the forking of ScrollAnimatorMac.mm.
https://bugs.webkit.org/show_bug.cgi?id=59741
https://bugs.webkit.org/show_bug.cgi?id=59753
https://bugs.webkit.org/show_bug.cgi?id=59756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453234</commentid>
    <comment_count>13</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-08-18 12:15:21 -0700</bug_when>
    <thetext>Marking this as fixed since the various sub patches all landed a while ago.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91540</attachid>
            <date>2011-04-28 12:48:12 -0700</date>
            <delta_ts>2011-04-28 14:53:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59728-20110428124811.patch</filename>
            <type>text/plain</type>
            <size>87416</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODUyMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1ICsxLDEzIEBA
Ci0yMDExLTA0LTI4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisyMDExLTA0LTI4
ICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KIAotICAgICAgICBSZXZpZXdl
ZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCiAKLSAgICAgICAgT25seSBuZWVkIGEgc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIHRlc3RQ
cm90b3R5cGUKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU5NzI0CisgICAgICAgIEFkZCBvdmVybGF5IHNjcm9sbGJhciBzdXBwb3J0IHRvIENocm9taXVt
IE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3
MjgKIAotICAgICAgICBSZW1vdmUgZXhjZXNzIGNvcHkgb2YgaWRlbnRpY2FsIHRlc3RQcm90b3R5
cGUoKSBjb2RlCisgICAgICAgIEVuYWJsZSBXVEZfVVNFX1dLX1NDUk9MTEJBUl9QQUlOVEVSLCBF
TkFCTEVfR0VTVFVSRV9FVkVOVFMsIGFuZCBFTkFCTEVfUlVCQkVSX0JBTkRJTkcgZm9yIE1hYyBD
aHJvbWl1bS4KIAotICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Ci0gICAgICAg
IChKU0M6OkpJVDo6dGVzdFByb3RvdHlwZSk6Ci0gICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgogCiAyMDExLTA0LTI4ICBY
YW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gODUyMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0MCw2ICs2NDAsMTAgQEAKICNkZWZp
bmUgV1RGX1VTRV9DRiAxCiAjZGVmaW5lIFdURl9VU0VfUFRIUkVBRFMgMQogI2RlZmluZSBIQVZF
X1BUSFJFQURfUldMT0NLIDEKKworI2RlZmluZSBFTkFCTEVfR0VTVFVSRV9FVkVOVFMgMQorI2Rl
ZmluZSBFTkFCTEVfUlVCQkVSX0JBTkRJTkcgMQorI2RlZmluZSBXVEZfVVNFX1dLX1NDUk9MTEJB
Ul9QQUlOVEVSIDEKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQlJFV01QKQpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gODUyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNjIgQEAKKzIwMTEtMDQtMjggIFNhaWxlc2ggQWdyYXdhbCAgPHNh
aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFN5bmMgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbS8uaCB3aXRoIFNjcm9s
bGJhclRoZW1lTWFjLm1tIHRvIHBpY2sgdXAgc3VwcG9ydCBmb3Igb3ZlcmxheSBzY3JvbGxiYXJz
LiBUaGVyZSBhcmUgc3RpbGwgc2VydmVyIG91dHN0YW5kaW5nIFRPRE9zIHNvIHRoaXMgZmVhdHVy
ZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBub3cuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c2V0SXNEcmF3aW5nSW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2Fk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Lm1tOiBBZGRlZC4KKyAgICAgICAgKEludFBvaW50VG9OU1BvaW50KToKKyAgICAgICAgKE5TUG9p
bnRUb0ludFBvaW50KToKKyAgICAgICAgKGFicyk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAg
ICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkXSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGJvdW5kc10p
OgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfaW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludDpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
X3BpeGVsQWxpZ25Qcm9wb3NlZFNjcm9sbFBvc2l0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6ZVRvQmFzZTpdKToKKyAgICAgICAgKC1b
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVydFNpemVGcm9tQmFzZTpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVydFNpemVUb0JhY2tp
bmc6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRT
aXplRnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlIHN1cGVydmlld10pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZSBkb2N1bWVudFZpZXddKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUgd2luZG93XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9y
ZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwc10pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6Cisg
ICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZSBjb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJ
bXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
IG1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAg
ICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpj
b252ZXJ0Q29udGVudFBvaW50OnRvU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVh
TmVlZHNEaXNwbGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpwYXJ0OldlYkNvcmU6OnNjcm9sbEFuaW1hdG9y
OldlYkNvcmU6OmFuaW1hdGVBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxBbmltYXRvcjpXZWJDb3JlOjpd
KToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNd
KToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNr
aW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgY29udmVydFJlY3RG
cm9tQmFja2luZzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxheWVy
XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzZXRVcEFuaW1hdGlvbjpz
Y3JvbGxlclBhaW50ZXI6cGFydDpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVL
bm9iQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIHNjcm9sbGVySW1wOmFuaW1hdGVUcmFja0FscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAg
ICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDpvdmVybGF5U2Nyb2xsZXJT
dGF0ZUNoYW5nZWRUbzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNj
cm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjph
ZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3Jv
bGxQb3NpdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xs
QnlEZWx0YVkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
bm90aXR5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVu
dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91
c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRB
cmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpkaWRCZWdpblNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OmVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5E
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjplbmRTY3JvbGxHZXN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBS
dWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kVG93YXJkWmVybyk6CisgICAgICAg
IChXZWJDb3JlOjpyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdGFydFNjcm9s
bGJhclBhaW50VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQ
YWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW06IEFkZGVk
LgorICAgICAgICAoTG9va1VwTlNTY3JvbGxlckltcENsYXNzKToKKyAgICAgICAgKExvb2tVcE5T
U2Nyb2xsZXJJbXBQYWlyQ2xhc3MpOgorICAgICAgICAoU2Nyb2xsYmFyQ29udHJvbFNpemVUb05T
Q29udHJvbFNpemUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3Jv
bGxlcnMpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKToKKyAgICAg
ICAgKHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYSk6CisgICAgICAgICh3a1Njcm9sbGJhclBh
aW50ZXJTZXRPdmVybGF5U3RhdGUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyUGFpbnQp
OgorICAgICAgICAod2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAgICAod2tT
Y3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVy
VHJhY2tBbHBoYSk6CisgICAgICAgICh3a01ha2VTY3JvbGxiYXJQYWludGVyKToKKyAgICAgICAg
KHdrU2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKHdrU2Nyb2xsYmFyTWluaW11bVRvdGFs
TGVuZ3RoTmVlZGVkRm9yVGh1bWIpOgorICAgICAgICAod2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50
ZXJGb3JDb250cm9sbGVyKToKKyAgICAgICAgKHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJG
b3JDb250cm9sbGVyKToKKyAgICAgICAgKHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRl
cik6CisgICAgICAgICh3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcik6CisgICAgICAg
ICh3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUpOgorICAgICAgICAod2tTY3Jv
bGxiYXJQYWludGVyS25vYlJlY3QpOgorICAgICAgICAod2tTZXRTY3JvbGxiYXJQYWludGVyS25v
YkFscGhhKToKKyAgICAgICAgKHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEpOgorICAg
ICAgICAod2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKToKKyAgICAgICAgKHdrTWFrZVNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyKToKKyAgICAgICAgKHdrQ29udGVudEFyZWFTY3JvbGxl
ZCk6CisgICAgICAgICh3a0NvbnRlbnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKHdrTW91c2VF
bnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAod2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKToK
KyAgICAgICAgKHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAod2tXaWxsU3Rh
cnRMaXZlUmVzaXplKToKKyAgICAgICAgKHdrQ29udGVudEFyZWFSZXNpemVkKToKKyAgICAgICAg
KHdrV2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAod2tDb250ZW50QXJlYURpZFNob3cpOgor
ICAgICAgICAod2tDb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAod2tEaWRCZWdpblNjcm9s
bEdlc3R1cmUpOgorICAgICAgICAod2tEaWRFbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKHdr
U2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMpOgorICAgICAgICAoSXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1h
cCk6CisgICAgICAgICgrW1Njcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hh
bmdlZDpdKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUFycm93UGxhY2VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnJlZ2lzdGVyU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0
ZXJTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1c2VzT3ZlcmxheVNjcm9s
bGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFz
QnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpo
YXNUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpidXR0b25SZXBhaW50UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpiYWNrQnV0dG9uUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpmb3J3YXJkQnV0dG9u
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp0cmFj
a1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6bWlu
aW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvU2Nyb2xsYmFyUGFpbnRlcktub2JTdHlsZSk6CisKIDIwMTEtMDQtMjggIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4
IGZvciBXZWIgQXVkaW8gd2l0aCBzdHJpY3QgT3duUHRyLgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gODUyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTM3NzgsNiArMzc3OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc01hYy5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLm1tJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXgu
Y3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJ
KHJldmlzaW9uIDg1MjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKKyNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpICYmICEoUExBVEZPUk0oQ0hST01JVU0p
ICYmIE9TKERBUldJTikpCiBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc01hYy5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworQGNsYXNz
IFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlOworI2Vsc2UKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK2NsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3Mg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJs
aWM6CisgICAgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSopOworICAg
IHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKKworICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBz
dGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVs
RXZlbnQmKTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisj
ZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICB2b2lk
IGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwor
ICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKKyAgICB2b2lk
IGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CisKKyAgICB2b2lkIHNldElz
RHJhd2luZ0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAg
IGJvb2wgaXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xh
eWVyOyB9CisKKyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJl
dHVybiBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KKworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0
OworICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFZpc2libGVTY3JvbGxl
clRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlk
PiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CisKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CisgICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlOworCisgICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRp
bWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+Kik7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNlbmRpZgorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7
CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURp
ZFNob3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29u
c3Q7CisgICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKworICAgIGZsb2F0IGFkanVzdFNjcm9s
bFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBhZGp1c3RTY3Jv
bGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRj
aGluZygpIGNvbnN0OworICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25z
dDsKKyAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZ
KTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRp
bWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICB2b2lkIGJl
Z2luU2Nyb2xsR2VzdHVyZSgpOworICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAg
Ym9vbCBtX2luU2Nyb2xsR2VzdHVyZTsKKyAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dy
ZXNzOworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7CisgICAgCisgICAgQ0ZUaW1l
SW50ZXJ2YWwgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7
CisgICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIC8vIFJ1YmJlciBiYW5k
IHN0YXRlLgorICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBt
X3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBGbG9hdFNp
emUgbV9vcmlnVmVsb2NpdHk7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4g
bV9zbmFwUnViYmVyQmFuZFRpbWVyOworI2VuZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5
ZXI7CisgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50UmVjdCBt
X3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0JKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCIKKworI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGlzIGZp
bGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxlKSBpcyBhIGNsb25lIG9mIFNjcm9sbEFuaW1h
dG9yTWFjLm1tLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgTlNQb2ludCBJbnRQb2ludFRv
TlNQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkgeworICAgIHJldHVybiBOU01ha2VQb2lu
dChwb2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpJbnRQb2ludCBO
U1BvaW50VG9JbnRQb2ludChOU1BvaW50IHBvaW50KSB7CisgICAgcmV0dXJuIFdlYkNvcmU6Oklu
dFBvaW50KHBvaW50LngsIHBvaW50LnkpOworfQorCitAaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8g
KE5TT2JqZWN0KQorLSAoTlNUaW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1lOworQGVuZAorCitAaW50
ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQorLSAoaWQpaW5p
dFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CistICh2b2lkKV9zdG9wUnVuOworLSAoQk9PTClf
aXNBbmltYXRpbmc7CistIChOU1BvaW50KXRhcmdldE9yaWdpbjsKK0BlbmQKKworQGludGVyZmFj
ZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdp
dGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Ny
b2xsQW5pbWF0b3I7CitAZW5kCisKK3N0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQorewor
ICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOworICAgIGlmIChmaW5hbFNpemUud2lkdGggPCAw
KQorICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOworICAgIGlmIChm
aW5hbFNpemUuaGVpZ2h0IDwgMCkKKyAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5hbFNp
emUuaGVpZ2h0OworICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAorfQorCitAaW1wbGVtZW50YXRp
b24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0
b3IKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCit7CisgICAgX2Fu
aW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWJvdW5kcworeworICAgIGlmICghX2FuaW1hdG9y
KQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
Y3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICByZXR1
cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgpLCAw
LCAwKTsKK30KKworLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludCluZXdQ
b3NpdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisgICAgX2Fu
aW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bvc2l0aW9uKTsKK30KKworLSAoTlNQ
b2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRpb246KE5TUG9pbnQpbmV3T3JpZ2lu
Cit7CisgICAgcmV0dXJuIG5ld09yaWdpbjsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplVG9C
YXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6
ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6
ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFja2luZzooTlNTaXplKXNpemUKK3sK
KyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVydFNpemVGcm9tQmFj
a2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChpZClz
dXBlcnZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZClkb2N1bWVudFZpZXcKK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistIChpZCl3aW5kb3cKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcworeworfQorCitAZW5kCisK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0
b3I7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2Fu
aW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCistIChO
U1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBh
aXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmlt
YXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y29udGVudHNTaXpl
KCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNv
bnRlbnRzU2l6ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xs
ZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xs
ZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5POworCisg
ICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCk7Cit9
CisKKy0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBh
aXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisK
KyAgICByZXR1cm4gSW50UG9pbnRUb05TUG9pbnQoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgp
LT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKK30KKworLSAoTlNQb2ludClzY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50
SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClzY3JvbGxlckltcAoreworICAgIFVOVVNF
RF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IDA7CisgICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbCgoV0tTY3JvbGxiYXJQ
YWludGVyUmVmKXNjcm9sbGVySW1wKSkKKyAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5z
Y3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgZWxzZSAKKyAgICAg
ICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9s
bGJhcigpOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFy
IGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9yIHRoaXMgZGVsZWdhdGUKKyAgICAvLyBtZXRo
b2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1vbWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBi
ZWVuIHNldCB0byAwIGFuZCB0aGUKKyAgICAvLyBtb21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBo
YXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9iYWJseSBkZS1jb3VwbGUgc29tZQorICAgIC8v
IG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVucmVn
aXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCisgICAgLy8gaXNzdWUuCisgICAgaWYgKCFz
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRQb2ludFRvTlNQb2ludChXZWJDb3JlOjpJbnRQ
b2ludCgpKTsKKyAgICAKKyAgICByZXR1cm4gSW50UG9pbnRUb05TUG9pbnQoc2Nyb2xsYmFyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KE5TUG9pbnRUb0ludFBvaW50KHBvaW50SW5Db250ZW50
QXJlYSkpKTsKK30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFp
ciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Ny
b2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxl
KW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2FuaW1hdG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50
ZXJDb250cm9sbGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Nyb2xsZXJJ
bXBQYWlyOworICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIG1hY1RoZW1l
ID0gKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFZl
cnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihw
YWludGVyQ29udHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRlcikgeworICAgICAg
ICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9sbGJhclBh
aW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQ
YWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJh
cih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAgd2tTZXRQ
YWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIsIG5ld1ZlcnRpY2Fs
UGFpbnRlciwgZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0
eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAor
ICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5
b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3Ro
IGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUt
PnNjcm9sbGJhclRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Cisg
ICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgw
LCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBvbGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50
ZXJGb3JDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAob2xkSG9yaXpvbnRh
bFBhaW50ZXIpIHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHdr
TWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFsUGFpbnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRy
b2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAg
bWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhciwg
bmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29u
dHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOwor
CisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVu
dCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJl
Y3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5z
dXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRh
dGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVz
cyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNz
LCB0aGlja25lc3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7
CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91dCwg
c28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5kCisKK0BpbnRlcmZh
Y2UgU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7CisgICAgUmV0YWluUHRy
PFdLU2Nyb2xsYmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAgICBXZWJDb3JlOjpT
Y3JvbGxiYXJQYXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqIF9hbmltYXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7CisgICAgQ0dGbG9hdCBf
bmV3QWxwaGE7Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFy
UGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClw
YXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilz
Y3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3Jv
bGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhEdXJhdGlvbjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxl
clBhaW50ZXIgPSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0OworICAgIF9hbmlt
YXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJD
b3JlOjpUaHVtYlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFp
bnRlci5nZXQoKSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50
ZXIuZ2V0KCkpOworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAorICAgIHJldHVybiBz
ZWxmOyAgICAKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJv
Z3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNz
XTsKKworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0Zsb2F0
IGN1cnJlbnRBbHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKKyAgICAg
ICAgY3VycmVudEFscGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVu
dEFscGhhID0gcHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1i
UGFydCkKKyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBh
aW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAgICB3a1NldFNjcm9s
bGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBo
YSk7CisKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWlu
dCB0aGUgYW5pbWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkp
CisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRS
ZWN0KDAsIDAsIHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+
aGVpZ2h0KCkpKTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6Oklu
dFJlY3QoMCwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAor
eworICAgIFtzZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9IDA7Cit9CisKK0Bl
bmQKKworQGludGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdCAvKjxO
U0FuaW1hdGlvbkRlbGVnYXRlPiovCit7CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyogX2FuaW1hdG9yOworCisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRp
b24+IF92ZXJ0aWNhbEtub2JBbmltYXRpb247CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhcnRB
bmltYXRpb24+IF9ob3Jpem9udGFsS25vYkFuaW1hdGlvbjsKKworICAgIFJldGFpblB0cjxTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxUcmFja0FuaW1hdGlvbjsKKyAgICBSZXRhaW5Q
dHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxUcmFja0FuaW1hdGlvbjsKK30K
Ky0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOworLSAodm9pZCljYW5jZWxBbmltYXRpb25zOworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlCisKKy0gKGlkKWlu
aXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMq
KXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5p
bWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9ucwor
eworICAgIFtfdmVydGljYWxLbm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAg
IFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07CisgICAgW192
ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgIFtfaG9yaXpv
bnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworfQorCistIChOU1JlY3Qp
Y29udmVydFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdAoreworICAgIHJldHVybiBhUmVjdDsK
K30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6KE5TUmVjdClhUmVjdAorewor
ICAgIHJldHVybiBhUmVjdDsKK30KKworLSAoQ0FMYXllciAqKWxheWVyCit7CisgICAgaWYgKCFf
YW5pbWF0b3IpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKCFfYW5pbWF0b3ItPmlzRHJh
d2luZ0ludG9MYXllcigpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGF0dGVtcHQgdG8gcmV0dXJuIGFuIGFjdHVhbCBsYXllci4KKyAgICBzdGF0aWMg
Q0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJu
IGR1bW15TGF5ZXI7Cit9CisKKy0gKHZvaWQpc2V0VXBBbmltYXRpb246KFJldGFpblB0cjxTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBhaW50
ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6
U2Nyb2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIC8vIElmIHRoZSB1c2VyIGhhcyBz
Y3JvbGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhl
cmUuIAorICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1cm5zLgorICAgIGJvb2wg
bXVzdEFuaW1hdGUgPSBfYW5pbWF0b3ItPmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKKwor
ICAgIGlmIChfYW5pbWF0b3ItPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0
QW5pbWF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9hbmltYXRvci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUp
IHsKKyAgICAgICAgX2FuaW1hdG9yLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBkZWZpbml0
ZWx5IGdvaW5nIHRvIGFuaW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0aW1lci4KKyAgICBfYW5pbWF0
b3ItPnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisKKyAgICAvLyBJZiB3ZSBhcmUgY3VycmVu
dGx5IGFuaW1hdGluZywgc3RvcAorICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7Cisg
ICAgICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAg
ICAgICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gbmlsOworICAgIH0KKworICAgIGlmIChwYXJ0
ID09IFdlYkNvcmU6OlRodW1iUGFydCAmJiAhd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFs
KHNjcm9sbGVyUGFpbnRlcikpIHsKKyAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKKyAgICAg
ICAgICAgIEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdCh3a1Njcm9sbGJhclBhaW50ZXJLbm9i
UmVjdChzY3JvbGxlclBhaW50ZXIpKTsKKyAgICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJs
ZVNjcm9sbGVyVGh1bWJSZWN0KHRodW1iUmVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoSW50UmVjdCgpKTsKKyAg
ICB9CisKKyAgICBbTlNBbmltYXRpb25Db250ZXh0IGJlZ2luR3JvdXBpbmddOworICAgIFtbTlNB
bmltYXRpb25Db250ZXh0IGN1cnJlbnRDb250ZXh0XSBzZXREdXJhdGlvbjpkdXJhdGlvbl07Cisg
ICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFydEFuaW1hdGlv
biBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydDpwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yOl9hbmltYXRvciAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0ZUFscGhhVG86bmV3QWxwaGEgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1
cmF0aW9uXSk7CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkgc2V0QW5pbWF0aW9u
QmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmddOworICAgIFtzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uLmdldCgpIHN0YXJ0QW5pbWF0aW9uXTsKKyAgICBbTlNBbmltYXRpb25Db250ZXh0
IGVuZEdyb3VwaW5nXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAg
YW5pbWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGVyUGFpbnRlciA9IChXS1Njcm9s
bGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJJbXA7CisgICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklz
SG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlv
bjpfaG9yaXpvbnRhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRl
ciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVy
YXRpb246ZHVyYXRpb25dOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246
X3ZlcnRpY2FsS25vYkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBh
cnQ6V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlv
bjpkdXJhdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wIGFu
aW1hdGVUcmFja0FscGhhVG86KENHRmxvYXQpbmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGVyUGFpbnRlciA9IChXS1Njcm9s
bGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJJbXA7CisgICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklz
SG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlv
bjpfaG9yaXpvbnRhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50
ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxw
aGEgZHVyYXRpb246ZHVyYXRpb25dOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgc2V0VXBBbmlt
YXRpb246X3ZlcnRpY2FsVHJhY2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFp
bnRlciBwYXJ0OldlYkNvcmU6OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tB
bHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNj
cm9sbGVySW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU1VJbnRlZ2VyKW5ld092
ZXJsYXlTY3JvbGxlclN0YXRlCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKKyAg
ICBVTlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOworfQorCistICh2b2lkKXNj
cm9sbEFuaW1hdG9yRGVzdHJveWVkCit7CisgICAgX2FuaW1hdG9yID0gMDsKKyAgICBbX3ZlcnRp
Y2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgW19o
b3Jpem9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Cisg
ICAgW192ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVk
XTsKKyAgICBbX2hvcml6b250YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRl
c3Ryb3llZF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFVTRShXS19TQ1JPTExCQVJfUEFJTlRF
UikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBT
Y3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sK
KyAgICBpZiAoSXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcihz
Y3JvbGxhYmxlQXJlYSkpOworfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6
IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJ
TlRFUikKKyAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCisjZW5k
aWYKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgLCBtX2luU2Nyb2xsR2VzdHVyZShm
YWxzZSkKKyAgICAsIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMoZmFsc2UpCisgICAgLCBtX2xhc3RNb21lbXR1bVNjcm9sbFRp
bWVzdGFtcCgwKQorICAgICwgbV9zdGFydFRpbWUoMCkKKyAgICAsIG1fc25hcFJ1YmJlckJhbmRU
aW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1l
ckZpcmVkKQorI2VuZGlmCisgICAgLCBtX2RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpCisgICAgLCBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpCit7CisgICAgbV9zY3JvbGxBbmltYXRp
b25IZWxwZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOworICAgIG1fc2Nyb2xsQW5pbWF0
aW9uSGVscGVyLmFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9u
SGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZS5nZXQoKV0pOworCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlz
XSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQo
KSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuYWRvcHROUyhbW1Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisjZW5k
aWYKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMoKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBbbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVk
XTsKKyAgICBbKGlkKW1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdh
dGU6bmlsXTsKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWRdOworICAgIFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdl
dCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyNlbmRpZgorfQorCitib29sIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKworICAg
IGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpA
IkFwcGxlU2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCJdKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIp
OworCisgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCisgICAgICAgIHJldHVy
biBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7CisKKyAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOworICAgIGZs
b2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyAr
IChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKKyAgICBpZiAoY3VycmVudFBvcyA9PSBu
ZXdQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5TUG9pbnQgbmV3UG9pbnQ7Cisg
ICAgaWYgKFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7Cisg
ICAgICAgIE5TUG9pbnQgdGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdl
dCgpIHRhcmdldE9yaWdpbl07CisgICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDog
TlNNYWtlUG9pbnQodGFyZ2V0T3JpZ2luLngsIG5ld1Bvcyk7CisgICAgfSBlbHNlCisgICAgICAg
IG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBv
aW50KG5ld1BvcywgbV9jdXJyZW50UG9zWSkgOiBOU01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBu
ZXdQb3MpOworCisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRvUG9p
bnQ6bmV3UG9pbnRdOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBv
aW50JiBvZmZzZXQpCit7CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9w
UnVuXTsKKyAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Cit9CisKK2Zsb2F0IFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5
KGZsb2F0IHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9u
OworCisgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxh
YmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVXaWR0aCgpKSwgMCk7Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFk
anVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAorewor
ICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0dXJuIG1heDxmbG9hdD4o
bWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVp
Z2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKK30KKworRmxv
YXRQb2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklm
TmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICgh
bV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4obWlu
PGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworICAgIGZsb2F0
IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVB
cmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVI
ZWlnaHQoKSksIDApOworCisgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChj
b25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IGFkanVzdGVk
UG9zaXRpb24gPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsK
KyAKKyAgICBpZiAoYWRqdXN0ZWRQb3NpdGlvbi54KCkgPT0gbV9jdXJyZW50UG9zWCAmJiBhZGp1
c3RlZFBvc2l0aW9uLnkoKSA9PSBtX2N1cnJlbnRQb3NZKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jdXJyZW50UG9zWCA9IGFkanVzdGVkUG9zaXRpb24ueCgpOworICAgIG1fY3VycmVu
dFBvc1kgPSBhZGp1c3RlZFBvc2l0aW9uLnkoKTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQo
KTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxC
eURlbHRhWChmbG9hdCBkZWx0YVgpCit7CisgICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9s
bFhQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBvc1ggKyBkZWx0YVgpOworICAgIAorICAg
IGlmIChuZXdQb3NYID09IG1fY3VycmVudFBvc1gpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zWDsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
K30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURl
bHRhWShmbG9hdCBkZWx0YVkpCit7CisgICAgZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQ
b3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBvc1kgKyBkZWx0YVkpOworICAgIAorICAgIGlm
IChuZXdQb3NZID09IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2N1cnJlbnRQb3NZID0gbmV3UG9zWTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQo
KQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhU2Ny
b2xsZWQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKKyAgICBT
Y3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworI2lm
IFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhV2lsbFBhaW50KG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNlRW50ZXJlZENvbnRl
bnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
IGNvbnN0Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFeGl0
ZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tN
b3VzZU1vdmVkSW5Db250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFy
dExpdmVSZXNpemUoKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dp
bGxTdGFydExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cisj
ZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6
ZWQoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRl
bnRBcmVhUmVzaXplZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXpl
KCkKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tXaWxsRW5kTGl2ZVJl
c2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0
Cit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFEaWRT
aG93KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QK
K3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURpZEhp
ZGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25z
dAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEJlZ2luU2Nyb2xs
R2VzdHVyZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBj
b25zdAoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEVuZFNjcm9s
bEdlc3R1cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIp
CisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuZ2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKKyAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFp
bnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGJhcik7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOworICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5p
bCk7CisgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSwgbmlsLCBmYWxzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNp
ZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4o
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xs
YmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRl
ciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZv
clBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBh
aW50ZXIsIHRydWUpOworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkK
KyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKSktPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBh
aW50ZXJTZXREZWxlZ2F0ZShwYWludGVyLCBuaWwpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50
ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgdHJ1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAg
bV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7CisKKyNpZiBVU0UoV0tfU0NST0xM
QkFSX1BBSU5URVIpCisgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAg
ICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQorCitzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJv
aW5nVGltZW91dCA9IDAuMTBmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5l
c3MgPSAyMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0
Y2hSYXRpbyA9IDE7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJl
ZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRB
bXBsaXR1ZGUgPSAwLjMxZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kUGVyaW9kID0g
MS42ZjsKKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0
aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgZWxhcHNlZFRpbWUpCit7
CisgICAgZmxvYXQgYW1wbGl0dWRlID0gcnViYmVyYmFuZEFtcGxpdHVkZTsKKyAgICBmbG9hdCBw
ZXJpb2QgPSBydWJiZXJiYW5kUGVyaW9kOworICAgIGZsb2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFj
dG9yID0gZXhwZigoLWVsYXBzZWRUaW1lICogcnViYmVyYmFuZFN0aWZmbmVzcykgLyBwZXJpb2Qp
OworICAgICAgICAgICAgIAorICAgIHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFs
VmVsb2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdG
YWN0b3I7Cit9CisKK3N0YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxv
YXQgZGVsdGEpCit7CisgICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQgPSB0cnVlOworCisgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVy
ZUV2ZW50KQoreworICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpTY3JvbGxCZWdpblR5cGUpCisgICAgICAgIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOwor
ICAgIGVsc2UKKyAgICAgICAgZW5kU2Nyb2xsR2VzdHVyZSgpOworfQorCitib29sIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQg
ZGVsdGFZKQoreworICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworICAgIGlmIChmYWJzZihkZWx0
YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKKyAgICAg
ICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBu
b3QgcGlubmVkIHRvIHRoZSB0b3AKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArICsgbV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBw
aW5uZWQgdG8gdGhlIGJvdHRvbQorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9z
Y3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
T3JpZ2luKCkueSgpKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7
CisgICAgICAgIGlmIChkZWx0YVggPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5n
IHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0
CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngo
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNj
cm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKKyAg
ICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNT
aXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5t
YXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAmJiAo
bGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1pdERlbHRhLmhlaWdodCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdAoreworICAg
IHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsK
KyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFy
KiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Cisg
ICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVu
YWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAg
IH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9z
Y3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKGhT
Y3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3Jv
bGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25l
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dl
ZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSgpCit7CisgICAgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7
CisKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIG1faW5TY3Jv
bGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNl
OworICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgbV9sYXN0TW9tZW10
dW1TY3JvbGxUaW1lc3RhbXAgPSAwOworICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6
ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3Zl
cmhhbmdBbW91bnQoKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5k
RGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0aCgpKSk7CisgICAgbV9zdHJl
dGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJl
dGNoQW1vdW50LmhlaWdodCgpKSk7CisKKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9h
dFNpemUoKTsKKyAgICAKKyAgICBpZiAobV9zbmFwUnViYmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSgpCit7CisgICAgZGlkRW5kU2Ny
b2xsR2VzdHVyZSgpOworCisgICAgc25hcFJ1YmJlckJhbmQoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCgpCit7CisgICAgQ0ZUaW1lSW50ZXJ2
YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVd
IC0gbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgaWYgKG1fbGFzdE1vbWVtdHVt
U2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1l
b3V0KQorICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKworICAgIG1f
aW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CisKKyAgICBpZiAobV9zbmFwUnViYmVyQmFuZFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhcnRUaW1lID0gW05TRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOworICAgIG1fc3RhcnRTdHJldGNoID0g
RmxvYXRTaXplKCk7CisgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOworICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3Rh
cnRSZXBlYXRpbmcoMS4wLzYwLjApOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG93
YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgcmV0dXJuIG51bSA+IDAgPyBjZWlsZihudW0gLSAw
LjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sKKyAgICBmbG9hdCByb3VuZGVk
TnVtID0gcm91bmRmKG51bSk7CisgICAgaWYgKGZhYnMobnVtIC0gcm91bmRlZE51bSkgPCAwLjEy
NSkKKyAgICAgICAgbnVtID0gcm91bmRlZE51bTsKKworICAgIHJldHVybiByb3VuZFRvd2FyZFpl
cm8obnVtKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVy
QmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAg
IGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CisKKyAgICAgICAgaWYgKG1f
c3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgICAgICBtX3N0YXJ0U3RyZXRj
aCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICBpZiAo
bV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsgICAgCisgICAgICAgICAgICAgICAgbV9z
bmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3Jv
bGxGb3JjZSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsK
KyAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgICAgICAg
ICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgICAgICAgICBtX29y
aWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNoOworICAgICAgICAgICAgbV9vcmlnVmVsb2Np
dHkgPSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3Jt
YWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZworICAgICAgICAgICAg
aWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0
eS53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRh
bGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKKyAgICAgICAg
ICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5h
YmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlm
IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKKyAgICAgICAgICAgIFNj
cm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIo
KTsKKyAgICAgICAgICAgIGlmICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkK
KyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7CisgICAgICAgIH0K
KworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8o
ZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdW
ZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVs
dGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZs
b2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBpZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwg
ZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2lu
ID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAg
IGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKKyAgICAgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisg
ICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJo
YW5nQW1vdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRo
KCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5k
RGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChtX29yaWdPcmlnaW4pOwor
CisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1YmJlckJhbmQocm91
bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKKworICAgICAgICAgICAgbV9zbmFwUnViYmVy
QmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxv
YXRTaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAg
ICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX29y
aWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZs
b2F0U2l6ZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9zdGFydFRpbWUg
PSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgICAgIG1fc3Rh
cnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0YXJ0
U2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1l
ci5zdGFydE9uZVNob3QoMC4xKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2lu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAgIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxh
c2hTY3JvbGxlcnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cit9CisjZW5k
aWYKKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKK3sKKyAgICBJbnRSZWN0IHJl
Y3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7CisgICAgaWYgKFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigp
KQorICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CisKKyAgICBpZiAocmVjdEluVmll
d0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
cmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9
IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYy5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJP
dmVybGF5VXRpbGl0aWVzTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc01hYy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxp
dGllc01hYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2Nyb2xsYmFyT3Zl
cmxheVV0aWxpdGllc01hY19oCisjZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWNf
aAorCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorCisvLyBQdWJsaWMgQVBJcyBub3Qg
YXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBvbiB3aGljaCB3ZSBidWlsZAorI2lmIChkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKSkKK2VudW0geworICAgIE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSAgICAgICA9IDAsCisgICAg
TlNTY3JvbGxlclN0eWxlT3ZlcmxheSAgICAgID0gMQorfTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5T
U2Nyb2xsZXJTdHlsZTsKKyNlbmRpZgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBOU1Njcm9s
bGVySW1wOworQGNsYXNzIE5TU2Nyb2xsZXJJbXBQYWlyOworI2Vsc2UKK2NsYXNzIE5TU2Nyb2xs
ZXJJbXA7CitjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKKyNlbmRpZgorCit0eXBlZGVmIE5TU2Ny
b2xsZXJJbXAqIFdLU2Nyb2xsYmFyUGFpbnRlclJlZjsKK3R5cGVkZWYgTlNTY3JvbGxlckltcFBh
aXIqIFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWY7CisKK2Jvb2wgSXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCk7CisKKy8vIFNjcm9sbGJhciBQYWludGVyCitib29sIHdrU2Ny
b2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKHZvaWQpOworYm9vbCB3a1Njcm9sbGJh
clBhaW50ZXJJc0hvcml6b250YWwoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKK0NHRmxvYXQgd2tT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Cit2b2lkIHdr
U2Nyb2xsYmFyUGFpbnRlclNldE92ZXJsYXlTdGF0ZShXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGlu
dCBvdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Cit2b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQg
cHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7CitpbnQgd2tTY3JvbGxiYXJNaW5pbXVtVGh1
bWJMZW5ndGgoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKK3ZvaWQgd2tTY3JvbGxiYXJQYWludGVy
U2V0RGVsZWdhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBpZCBzY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUpOworQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xsYmFy
UGFpbnRlclJlZik7CitXS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRl
cihpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKTsKK2ludCB3a1Njcm9sbGJhclRo
aWNrbmVzcyhpbnQgY29udHJvbFNpemUpOworaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFsTGVu
Z3RoTmVlZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpOworQ0dSZWN0
IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7CitXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBvbGRQYWludGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6
ZSwgYm9vbCBpc0hvcml6b250YWwpOwordm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxw
aGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zsb2F0KTsKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQ
YWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYsIENHRmxvYXQpOworCitlbnVt
IHsKKyAgICB3a1Njcm9sbGVyS25vYlN0eWxlRGVmYXVsdCA9IDAsCisgICAgd2tTY3JvbGxlcktu
b2JTdHlsZURhcmsgPSAxLAorICAgIHdrU2Nyb2xsZXJLbm9iU3R5bGVMaWdodCA9IDIKK307Cit0
eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyS25vYlN0eWxlOworZXh0ZXJuIHZvaWQgd2tTZXRTY3Jv
bGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktu
b2JTdHlsZSk7CisKKy8vIFNjcm9sbGJhciBQYWludGVyIENvbnRyb2xsZXIKK1dLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQg
cGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSk7Cit2b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQgd2tDb250ZW50QXJlYVdpbGxQ
YWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQgd2tNb3VzZUVudGVy
ZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQgd2tN
b3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwor
dm9pZCB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJSZWYpOwordm9pZCB3a1dpbGxTdGFydExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlclJlZik7Cit2b2lkIHdrQ29udGVudEFyZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a1dpbGxFbmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a0NvbnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQgd2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit2b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJl
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a0RpZEVuZFNjcm9sbEdl
c3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit2b2lkIHdrU2Nyb2xsYmFy
UGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7Cit2b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmLCBpbnQgbmV3U3R5bGUpOwordm9pZCB3a1NldFBhaW50ZXJG
b3JQYWludGVyQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgaXNIb3Jpem9udGFsKTsKK1dLU2Nyb2xsYmFyUGFpbnRl
clJlZiB3a1ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZik7CitXS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZik7CisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKKyNlbmRpZiAv
LyBTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNN
YWMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzTWFjLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShXS19T
Q1JPTExCQVJfUEFJTlRFUikKKworI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNN
YWMuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgPENvY29hL0NvY29hLmg+
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdXRpbGl0
aWVzIHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJzLiBUaGVyZSBhcmUgbm8gcGx1YmxpYworLy8g
QVBJcyB5ZXQgb24gdGhlIE1hYyB0byBkcmF3IG92ZXJsYXkgc2Nyb2xsYmFycyBzbyB3ZSB1c2Ug
cHJpdmF0ZSBBUElzIHRoYXQKKy8vIHdlIGxvb2t1cCBhdCBydW50aW1lLiBJZiB0aGUgcHJpdmF0
ZSBBUElzIGRvbid0IGV4aXN0IHRoZW4gdGhlIHdrTWFrZSoKKy8vIGZ1bmN0aW9ucyB3aWxsIHJl
dHVybiBuaWwuCisvLworLy8gTm90ZSwgdGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBjb3Bp
ZWQgZnJvbSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmguCisvLyBVc2luZyB0aGUgc2FtZSBuYW1l
cyBtYWtlcyB0aGUgY29kZSBlYXNpZXIgdG8gbWFpbnRhaW4uCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisvLyBQdWJsaWMgQVBJcyBub3QgYXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBv
biB3aGljaCB3ZSBidWlsZAorI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKK0BpbnRlcmZhY2UgTlNTY3JvbGxlciAo
TlNPYmplY3QpCisrIChOU1Njcm9sbGVyU3R5bGUpcHJlZmVycmVkU2Nyb2xsZXJTdHlsZTsKK0Bl
bmQKKyNlbmRpZgorCisvLyBUaGVzZSBhcmUgcHJpdmF0ZSBBUElzIHRvIGRyYXcgb3ZlcmxheSBz
Y3JvbGxiYXJzLgorQGludGVyZmFjZSBOU1Njcm9sbGVySW1wIDogTlNPYmplY3QKKworKyAoaWQp
c2Nyb2xsZXJJbXBXaXRoU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSlzdHlsZQorICAgICAgICAgICAg
ICAgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpc2l6ZQorICAgICAgICAgICAgICAgIGhvcml6
b250YWw6KEJPT0wpaG9yaXpvbnRhbAorICAgICAgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6KGlkKXNj
cm9sbGVyOworCitAcHJvcGVydHkgQ0dGbG9hdCBrbm9iQWxwaGE7CitAcHJvcGVydHkgQ0dGbG9h
dCB0cmFja0FscGhhOworQHByb3BlcnR5IENHRmxvYXQga25vYlByb3BvcnRpb247CitAcHJvcGVy
dHkoZ2V0dGVyPWlzRW5hYmxlZCkgQk9PTCBlbmFibGVkOworQHByb3BlcnR5KGdldHRlcj1pc0hv
cml6b250YWwpIEJPT0wgaG9yaXpvbnRhbDsKK0Bwcm9wZXJ0eSBkb3VibGUgZG91YmxlVmFsdWU7
CitAcHJvcGVydHkoYXNzaWduKSBpZCBkZWxlZ2F0ZTsKKworLSAoQ0dGbG9hdClrbm9iTWluTGVu
Z3RoOworLSAoQ0dGbG9hdCl0cmFja0JveFdpZHRoOworLSAoQ0dGbG9hdCl0cmFja1dpZHRoOwor
LSAodm9pZClzZXRCb3VuZHNTaXplOihOU1NpemUpc2l6ZTsKKy0gKHZvaWQpZHJhd0tub2JTbG90
SW5SZWN0OihOU1JlY3QpcmVjdAorICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6KEJPT0wpZmxh
ZzsKKy0gKHZvaWQpZHJhd0tub2I7CistICh2b2lkKXNldE92ZXJsYXlTY3JvbGxlclN0YXRlOihO
U1Njcm9sbGVyU3R5bGUpc3RhdGUKKyAgICAgICAgICAgICAgIGZvcmNlSW1tZWRpYXRlbHk6KEJP
T0wpZmxhZzsKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkKWRlbGVnYXRlOworCitAZW5kCisKKy8v
IFRoZXNlIGFyZSBwcml2YXRlIEFQSXMgdG8gbWFuYWdlIG92ZXJsYXkgc2Nyb2xsYmFycy4KK0Bp
bnRlcmZhY2UgTlNTY3JvbGxlckltcFBhaXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgTlNTY3Jv
bGxlclN0eWxlIHNjcm9sbGVyU3R5bGU7CitAcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1w
ICpob3Jpem9udGFsU2Nyb2xsZXJJbXA7CitAcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1w
ICp2ZXJ0aWNhbFNjcm9sbGVySW1wOworQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7CisK
Ky0gKHZvaWQpZmxhc2hTY3JvbGxlcnM7CistICh2b2lkKWNvbnRlbnRBcmVhU2Nyb2xsZWQ7Cist
ICh2b2lkKWNvbnRlbnRBcmVhV2lsbERyYXc7CistICh2b2lkKWNvbnRlbnRBcmVhRGlkSGlkZTsK
Ky0gKHZvaWQpd2luZG93T3JkZXJlZE91dDsKKy0gKHZvaWQpd2luZG93T3JkZXJlZEluOworLSAo
dm9pZCltb3VzZUVudGVyZWRDb250ZW50QXJlYTsKKy0gKHZvaWQpbW91c2VNb3ZlZEluQ29udGVu
dEFyZWE7CistICh2b2lkKW1vdXNlRXhpdGVkQ29udGVudEFyZWE7CistICh2b2lkKXN0YXJ0TGl2
ZVJlc2l6ZTsKKy0gKHZvaWQpY29udGVudEFyZWFEaWRSZXNpemU7CistICh2b2lkKWVuZExpdmVS
ZXNpemU7CistICh2b2lkKWJlZ2luU2Nyb2xsR2VzdHVyZTsKKy0gKHZvaWQpZW5kU2Nyb2xsR2Vz
dHVyZTsKKworQGVuZAorCitzdGF0aWMgQ2xhc3MgTG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkg
eworICBzdGF0aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVy
SW1wIik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDbGFzcyBMb29rVXBOU1Njcm9s
bGVySW1wUGFpckNsYXNzKCkgeworICBzdGF0aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21T
dHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgTlNDb250cm9sU2l6ZSBTY3JvbGxiYXJDb250cm9sU2l6ZVRvTlNDb250cm9sU2l6ZShpbnQg
Y29udHJvbFNpemUpIHsKKyAgICByZXR1cm4gY29udHJvbFNpemUgPT0gV2ViQ29yZTo6UmVndWxh
clNjcm9sbGJhciA/IE5TUmVndWxhckNvbnRyb2xTaXplIDogTlNTbWFsbENvbnRyb2xTaXplOwor
fQorCitib29sIHdrU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKHZvaWQpIHsK
KyAgICBpZiAoW05TU2Nyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwcmVmZXJy
ZWRTY3JvbGxlclN0eWxlKV0pCisgICAgICAgIHJldHVybiBbTlNTY3JvbGxlciBwcmVmZXJyZWRT
Y3JvbGxlclN0eWxlXTsKKyAgICByZXR1cm4gTlNTY3JvbGxlclN0eWxlTGVnYWN5OworfQorCiti
b29sIHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlcikgeworICAgIHJldHVybiBbcGFpbnRlciBpc0hvcml6b250YWxdOworfQorCitDR0Zs
b2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlcikgeworICAgIHJldHVybiBbcGFpbnRlciBrbm9iQWxwaGFdOworfQorCit2b2lkIHdrU2Ny
b2xsYmFyUGFpbnRlclNldE92ZXJsYXlTdGF0ZShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciwgaW50IG92ZXJsYXlTY3JvbGxlclN0YXRlKSB7CisgICAgW3BhaW50ZXIgc2V0T3ZlcmxheVNj
cm9sbGVyU3RhdGU6b3ZlcmxheVNjcm9sbGVyU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgZm9y
Y2VJbW1lZGlhdGVseTpZRVNdOworfQorCit2b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwg
Q0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3QgZnJhbWVSZWN0KSB7CisgICAgW3BhaW50ZXIgc2V0
RW5hYmxlZDplbmFibGVkXTsKKyAgICBbcGFpbnRlciBzZXRCb3VuZHNTaXplOmZyYW1lUmVjdC5z
aXplXTsKKyAgICBbcGFpbnRlciBzZXREb3VibGVWYWx1ZTp2YWx1ZV07CisgICAgW3BhaW50ZXIg
c2V0S25vYlByb3BvcnRpb246cHJvcG9ydGlvbl07CisKKyAgICBpZiAoW3BhaW50ZXIgaXNIb3Jp
em9udGFsXSkKKyAgICAgICAgZnJhbWVSZWN0LnNpemUuaGVpZ2h0ID0gW3BhaW50ZXIgdHJhY2tX
aWR0aF07CisgICAgZWxzZQorICAgICAgICBmcmFtZVJlY3Quc2l6ZS53aWR0aCA9IFtwYWludGVy
IHRyYWNrV2lkdGhdOworCisgICAgW3BhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OmZyYW1lUmVj
dCBoaWdobGlnaHQ6Tk9dOworICAgIFtwYWludGVyIGRyYXdLbm9iXTsKK30KKworaW50IHdrU2Ny
b2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKSB7
CisgICAgcmV0dXJuIFtwYWludGVyIGtub2JNaW5MZW5ndGhdOworfQorCit2b2lkIHdrU2Nyb2xs
YmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBpZCBz
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUpIHsKKyAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpzY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGVdOworfQorCitDR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlclRy
YWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpIHsKKyAgICByZXR1cm4gW3Bh
aW50ZXIgdHJhY2tBbHBoYV07Cit9CisKK1dLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a01ha2VTY3Jv
bGxiYXJQYWludGVyKGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpIHsKKyAgICBy
ZXR1cm4gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG5pbCwgd2tTY3JvbGxiYXJQ
YWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnMoKSwgY29udHJvbFNpemUsIGlzSG9yaXpvbnRhbCk7
Cit9CisKK2ludCB3a1Njcm9sbGJhclRoaWNrbmVzcyhpbnQgY29udHJvbFNpemUpIHsKKyAgICBy
ZXR1cm4gW3drTWFrZVNjcm9sbGJhclBhaW50ZXIoY29udHJvbFNpemUsIGZhbHNlKSB0cmFja0Jv
eFdpZHRoXTsKK30KKworaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFsTGVuZ3RoTmVlZGVkRm9y
VGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpIHsKKyAgICAvLyBUT0RPKHNhaWwp
OiBUaGlzIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcGxlbWVudGF0aW9uIGluIFdlYktpdFN5c3RlbUlu
dGVyZmFjZS4KKyAgICByZXR1cm4gd2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5ndGgocGFpbnRl
cik7Cit9CisKK1dLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
ckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVy
KSB7CisgICAgcmV0dXJuIFtjb250cm9sbGVyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOworfQorCitX
S1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRy
b2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKSB7CisgICAg
cmV0dXJuIFtjb250cm9sbGVyIGhvcml6b250YWxTY3JvbGxlckltcF07Cit9CisKK1dLU2Nyb2xs
YmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50ZXIoV0tTY3JvbGxi
YXJQYWludGVyUmVmIG9sZFBhaW50ZXIsIGludCBuZXdTdHlsZSwgaW50IGNvbnRyb2xTaXplLCBi
b29sIGlzSG9yaXpvbnRhbCkgeworICAgIGlmICghSXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtMb29rVXBOU1Njcm9sbGVy
SW1wQ2xhc3MoKSBzY3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFNpemU6U2Nyb2xsYmFyQ29u
dHJvbFNpemVUb05TQ29udHJvbFNpemUoY29udHJvbFNpemUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDppc0hvcml6b250YWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2luZ1Njcm9sbGVySW1w
Om9sZFBhaW50ZXJdOworfQorCit2b2lkIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVy
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlciwgV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHBhaW50ZXIsIGJvb2wgaXNIb3Jpem9udGFsKSB7CisgICAgaWYgKGlzSG9yaXpv
bnRhbCkKKyAgICAgICAgW2NvbnRyb2xsZXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50
ZXJdOworICAgIGVsc2UKKyAgICAgICAgW2NvbnRyb2xsZXIgc2V0VmVydGljYWxTY3JvbGxlcklt
cDpwYWludGVyXTsKK30KKwordm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5
bGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBwYWludGVyLCBpbnQgbmV3U3R5bGUp
IHsKKyAgICBbcGFpbnRlciBzZXRTY3JvbGxlclN0eWxlOm5ld1N0eWxlXTsKK30KKworQ0dSZWN0
IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
KSB7CisgICAgcmV0dXJuIE5TUmVjdFRvQ0dSZWN0KE5TWmVyb1JlY3QpOworfQorCit2b2lkIHdr
U2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciwgQ0dGbG9hdCBhbHBoYSkgeworICAgIFtwYWludGVyIHNldEtub2JBbHBoYTphbHBoYV07Cit9
CisKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBhaW50
ZXJSZWYgcGFpbnRlciwgQ0dGbG9hdCBhbHBoYSkgeworICAgIFtwYWludGVyIHNldFRyYWNrQWxw
aGE6YWxwaGFdOworfQorCit2b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JTdHlsZShXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgd2tTY3JvbGxlcktub2JTdHlsZSBzdHlsZSkgewor
ICAgIC8vIFRPRE8oc2FpbCk6IEEga25vYiBzdHlsZSBBUEkgZG9lc24ndCBleGlzdCBpbiB0aGUg
c2VlZHMgY3VycmVudGx5IGF2YWlsYWJsZS4gCit9CisKK1dLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZSkgeworICAgIGlmICghSXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgTlNTY3JvbGxlckltcFBhaXIqIGNvbnRyb2xs
ZXIgPSBbW1tMb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICBbY29udHJvbGxlciBzZXREZWxlZ2F0ZTpwYWludGVyQ29udHJvbGxlckRl
bGVnYXRlXTsKKyAgICBbY29udHJvbGxlciBzZXRTY3JvbGxlclN0eWxlOndrU2Nyb2xsYmFyUGFp
bnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKCldOworICAgIHJldHVybiBjb250cm9sbGVyOworfQor
Cit2b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
UmVmIGNvbnRyb2xsZXIpIHsKKyAgICBbY29udHJvbGxlciBjb250ZW50QXJlYVNjcm9sbGVkXTsK
K30KKwordm9pZCB3a0NvbnRlbnRBcmVhV2lsbFBhaW50KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYgY29udHJvbGxlcikgeworICAgIFtjb250cm9sbGVyIGNvbnRlbnRBcmVhV2lsbERy
YXddOworfQorCit2b2lkIHdrTW91c2VFbnRlcmVkQ29udGVudEFyZWEoV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKSB7CisgICAgW2NvbnRyb2xsZXIgbW91c2VFbnRl
cmVkQ29udGVudEFyZWFdOworfQorCit2b2lkIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpIHsKKyAgICBbY29udHJvbGxl
ciBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKK30KKwordm9pZCB3a01vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikgeworICAg
IFtjb250cm9sbGVyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKK30KKwordm9pZCB3a1dpbGxT
dGFydExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVy
KSB7CisgICAgW2NvbnRyb2xsZXIgc3RhcnRMaXZlUmVzaXplXTsKK30KKwordm9pZCB3a0NvbnRl
bnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
IHsKKyAgICBbY29udHJvbGxlciBjb250ZW50QXJlYURpZFJlc2l6ZV07Cit9CisKK3ZvaWQgd2tX
aWxsRW5kTGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xs
ZXIpIHsKKyAgICBbY29udHJvbGxlciBlbmRMaXZlUmVzaXplXTsKK30KKwordm9pZCB3a0NvbnRl
bnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
IHsKKyAgICBbY29udHJvbGxlciB3aW5kb3dPcmRlcmVkSW5dOworfQorCit2b2lkIHdrQ29udGVu
dEFyZWFEaWRIaWRlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikg
eworICAgIFtjb250cm9sbGVyIHdpbmRvd09yZGVyZWRPdXRdOworfQorCit2b2lkIHdrRGlkQmVn
aW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikgeworICAgIFtjb250cm9sbGVyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Cit9CisKK3ZvaWQgd2tE
aWRFbmRTY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJv
bGxlcikgeworICAgIFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVdOworfQorCit2b2lkIHdr
U2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlclJlZiBjb250cm9sbGVyKSB7CisgICAgW2NvbnRyb2xsZXIgZmxhc2hTY3JvbGxlcnNd
OworfQorCitib29sIElzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpIHsKKyAgICAvLyBU
T0RPKHNhaWwpOiBEaXNhYmxlIG92ZXJsYXkgc2Nyb2xsYmFycyBmb3Igbm93IHVudGlsIHRoZSBm
b2xsb3dpbmcgaXNzdWVzIGFyZSBmaXhlZDoKKyAgICAvLyAjMTogSW52YWxpZGF0aW9uIGlzc3Vl
cyBjYXVzZXMgdGhlIHNjcm9sbGJhciB0byBsZWF2ZSB0cmFpbGluZyBhcnRpZmFjdHMuCisgICAg
Ly8gIzI6IFZhcmlvdXMgbWVzc2FnZXMgc3VjaCBhcyBsaXZlIHJlc2l6ZSBzdGFydGVkL2VuZGVk
IG5lZWQgdG8gYmUgcGlwZWQgZnJvbSB0aGUgVUkuCisgICAgLy8gIzM6IEZpbmQgdGljayBtYXJr
cyBuZWVkIHRvIGJlIGRyYXduIG9uIHRoZSBzY3JvbGxiYXIgdHJhY2suCisgICAgLy8gIzQ6IE5l
ZWQgdG8gaGF2ZSB0aGUgdGhlbWUgZW5naW5lIGRyYXcgdGhlIHRodW1iLgorICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRpYyBib29sIGFwaUF2YWlsYWJsZSA9IFtMb29rVXBOU1Njcm9sbGVy
SW1wQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNjcm9sbGVySW1wV2l0aFN0
eWxlOmNvbnRyb2xTaXplOmhvcml6b250YWw6cmVwbGFjaW5nU2Nyb2xsZXJJbXA6KV0gJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFz
cygpIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxlclN0eWxlKV07
CisgICAgcmV0dXJuIGFwaUF2YWlsYWJsZTsKK30KKworI2VuZGlmIC8vIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNNYWMubW0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaAko
cmV2aXNpb24gODUyMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAKICNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNN
YWMuaCIKIAogLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEg
Y2xvbmUgb2YgU2Nyb2xsYmFyVGhlbWVNYWMuaC4KIC8vIFNlZSB0aGUgLm1tIGZpbGUgZm9yIGRl
dGFpbHMuCkBAIC00NCw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzY3JvbGxi
YXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKICAgICB2
aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpOwpAQCAtNTMsNiArNTUsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwog
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCisgICAg
dm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciosIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZik7CisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhT
Y3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7CkBAIC02
NCw2ICs2OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5n
dGgoU2Nyb2xsYmFyKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50Jik7CiAKIHB1YmxpYzoKICAgICB2b2lkIHByZWZlcmVuY2VzQ2hhbmdlZCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA4NTIxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIC8vIC0gVGhlIGNsYXNzbmFtZSBjaGFuZ2UgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyB0
byBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLgogLy8gLSBJbiBwYWludCgpIHRoZSBjb2RlIHRv
IHBhaW50IHRoZSB0cmFjaywgdGlja21hcmtzLCBhbmQgdGh1bWIgc2VwYXJhdGVseS4KIC8vIC0g
SW4gcGFpbnQoKSB0aGUgdGh1bWIgaXMgZHJhd24gdmlhIENocm9tZUJyaWRnZS9XZWJUaGVtZUVu
Z2luZS4KKy8vIC0gVmFyaW91cyBmdW5jdGlvbnMgdGhhdCB3ZXJlIHNwbGl0IHVzaW5nICNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisvLyAgIGhhdmUgYmVlbiBjb21iaW5lZCB1c2luZyBy
dW50aW1lIGNoZWNrcyBpbnN0ZWFkLgogLy8KIC8vIEZvciBhbGwgb3RoZXIgZGlmZmVyZW5jZXMs
IGlmIGl0IHdhcyBpbnRyb2R1Y2VkIGluIHRoaXMgZmlsZSwgdGhlbiB0aGUKIC8vIG1haW50YWlu
ZXIgZm9yZ290IHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Q7IG90aGVyd2lzZSBpdCBpcyBhbiB1
cGRhdGUgdGhhdAogLy8gc2hvdWxkIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgZmlsZSBidXQg
d2FzIG5vdC4KIAotc3RhdGljIEhhc2hTZXQ8U2Nyb2xsYmFyKj4qIGdTY3JvbGxiYXJzOworbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1AaW50ZXJmYWNlIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgOiBO
U09iamVjdAordHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJldGFpblB0cjxXS1Njcm9sbGJh
clBhaW50ZXJSZWY+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsKKworc3RhdGljIFNjcm9sbGJhclBh
aW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CisgICAgc3RhdGljIFNjcm9sbGJhclBhaW50ZXJN
YXAqIG1hcCA9IG5ldyBTY3JvbGxiYXJQYWludGVyTWFwOworICAgIHJldHVybiBtYXA7Cit9CisK
K30KIAorQGludGVyZmFjZSBTY3JvbGxiYXJQcmVmc09ic2VydmVyIDogTlNPYmplY3QKK3sKIH0K
IAogKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXI7CkBAIC03NSwxMiArODYsMTIgQEAgKyAodm9p
ZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlmaQogICAgIFVOVVNFRF9QQVJBTSh1bnVz
ZWROb3RpZmljYXRpb24pOwogCiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYyo+KFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2Vk
KCk7Ci0gICAgaWYgKCFnU2Nyb2xsYmFycykKKyAgICBpZiAoc2Nyb2xsYmFyTWFwKCktPmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEhhc2hTZXQ8U2Nyb2xsYmFyKj46Oml0ZXJhdG9y
IGVuZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyKj46
Oml0ZXJhdG9yIGl0ID0gZ1Njcm9sbGJhcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAoKml0KS0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRl
KCk7CisgICAgU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFyTWFw
KCktPmVuZCgpOworICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQgPSBz
Y3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGl0LT5m
aXJzdC0+c3R5bGVDaGFuZ2VkKCk7CisgICAgICAgIGl0LT5maXJzdC0+aW52YWxpZGF0ZSgpOwog
ICAgIH0KIH0KIApAQCAtMTMzLDI0ICsxNDQsMzQgQEAgc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQ
bGFjZW1lbnQoKQogICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZVN0YXJ0OwogICAgIGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5n
OkAiRG91YmxlQm90aCJdKQogICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUJvdGg7Ci0gICAgZWxzZQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Ny
b2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsgLy8gVGhlIGRlZmF1bHQgaXMgU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUVuZC4KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKElzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQorICAgICAgICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1
dHRvbnNOb25lOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0g
U2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7
Ci0gICAgaWYgKCFnU2Nyb2xsYmFycykKLSAgICAgICAgZ1Njcm9sbGJhcnMgPSBuZXcgSGFzaFNl
dDxTY3JvbGxiYXIqPjsKLSAgICBnU2Nyb2xsYmFycy0+YWRkKHNjcm9sbGJhcik7CisgICAgYm9v
bCBpc0hvcml6b250YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcjsKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsYmFyUGFpbnRlciA9IHdr
TWFrZVNjcm9sbGJhclBhaW50ZXIoc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLCBpc0hvcml6b250
YWwpOworICAgIHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVy
KTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1bnJlZ2lzdGVyU2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAgIGdTY3JvbGxiYXJzLT5yZW1vdmUoc2Ny
b2xsYmFyKTsKLSAgICBpZiAoZ1Njcm9sbGJhcnMtPmlzRW1wdHkoKSkgewotICAgICAgICBkZWxl
dGUgZ1Njcm9sbGJhcnM7Ci0gICAgICAgIGdTY3JvbGxiYXJzID0gMDsKLSAgICB9CisgICAgc2Ny
b2xsYmFyTWFwKCktPnJlbW92ZShzY3JvbGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdQYWludGVyKQoreworICAgIHNjcm9sbGJhck1h
cCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVyKTsKK30KKworV0tTY3JvbGxiYXJQYWludGVy
UmVmIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xs
YmFyKS5nZXQoKTsKIH0KIAogU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYygpCkBAIC0xNzksNyArMjAwLDE4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6cHJlZmVyZW4KIAogaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKLSAg
ICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07CisgICAgaWYgKElzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJU
aGlja25lc3MoY29udHJvbFNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGNTY3JvbGxi
YXJUaGlja25lc3NbY29udHJvbFNpemVdOworfQorCitib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKElzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJQYWlu
dGVyVXNlc092ZXJsYXlTY3JvbGxlcnMoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogZG91YmxlIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmluaXRpYWxBdXRvc2Ny
b2xsVGltZXJEZWxheSgpCkBAIC0xOTEsNyArMjIzLDcgQEAgZG91YmxlIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OmF1dG9zYwogewogICAgIHJldHVybiBnQXV0b3Njcm9sbEJ1dHRvbkRlbGF5
OwogfQotCisgICAgCiBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWM6OmJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBnQnV0dG9u
UGxhY2VtZW50OwpAQCAtMTk5LDIwICsyMzEsMjggQEAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVu
dCBTY3JvbGxiYXJUaGVtZQogCiBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Omhhc0J1
dHRvbnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5h
YmxlZCgpICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/Ci0gICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgpIDoKLSAgICAgICAgICAgICBzY3Jv
bGxiYXItPmhlaWdodCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV0gLSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7
CisgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIGdCdXR0b25QbGFjZW1lbnQgIT0g
U2Nyb2xsYmFyQnV0dG9uc05vbmUKKyAgICAgICAgICAgICAmJiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIKKyAgICAgICAgICAgICA/IHNjcm9sbGJhci0+
d2lkdGgoKQorICAgICAgICAgICAgIDogc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gMiAqIChjUmVh
bEJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkhpdEluc2V0
W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0pOwogfQogCiBib29sIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWM6Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAgIHJldHVybiBz
Y3JvbGxiYXItPmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIgPwotICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6Ci0gICAg
ICAgICAgICAgc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gMiAqIGNCdXR0b25JbnNldFtzY3JvbGxi
YXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNp
emUoKV0gKyAxOworICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsKKyAgICBpZiAoSXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0gd2tT
Y3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihzY3JvbGxiYXJNYXAoKS0+
Z2V0KHNjcm9sbGJhcikuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbWluTGVuZ3RoRm9yVGh1
bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyBjVGh1bWJN
aW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7CisgICAgcmV0dXJuIHNjcm9s
bGJhci0+ZW5hYmxlZCgpICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IAorICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6IAorICAgICAg
ICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IG1pbkxlbmd0aEZvclRodW1iOwogfQogCiBz
dGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBidXR0b25SZWN0
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
Y29udHJvbFNpemUsIGJvb2wgc3RhcnQpCiB7CisgICAgQVNTRVJUKGdCdXR0b25QbGFjZW1lbnQg
IT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOworCiAgICAgSW50UmVjdCBwYWludFJlY3QoYnV0dG9u
UmVjdCk7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAg
ICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSk7
CkBAIC0yMzAsMTMgKzI3MCwxMyBAQCBzdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChj
b25zdCBJCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJhY2tCdXR0b25SZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcp
CiB7CiAgICAgSW50UmVjdCByZXN1bHQ7Ci0KKyAgICAKICAgICBpZiAocGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05v
bmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRv
bkVuZFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8
fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1
dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQorICAgICAgICAKICAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhp
Y2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CiAgICAgYm9vbCBvdXRlckJ1dHRvbiA9
IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xs
YmFyQnV0dG9uc0RvdWJsZUJvdGgpOwogICAgIGlmIChvdXRlckJ1dHRvbikgewpAQCAtMjQ2LDcg
KzI4Niw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6YmFja0IKICAgICAg
ICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCB0
aGlja25lc3MsIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsg
cGFpbnRpbmcgPyBjT3V0ZXJCdXR0b25PdmVybGFwIDogMCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQotCisgICAgCiAgICAgLy8gT3VyIHJlcGFpbnQgcmVjdCBpcyBzbGlnaHRseSBs
YXJnZXIsIHNpbmNlIHdlIGFyZSBhIGJ1dHRvbiB0aGF0IGlzIGFkamFjZW50IHRvIHRoZSB0cmFj
ay4KICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ID8g
c2Nyb2xsYmFyLT54KCkgOiBzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgoKSAtIGNP
dXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkxlbmd0
aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwpAQCAtMjU1LDcgKzI5NSw3IEBAIEludFJlY3Qg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6YmFja0IKICAgICAgICAgaW50IHN0YXJ0ID0gcGFy
dCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgOiBzY3JvbGxiYXItPnko
KSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpXSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsK
ICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVz
cywgY0J1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKICAgICB9Ci0KKyAg
ICAKICAgICBpZiAocGFpbnRpbmcpCiAgICAgICAgIHJldHVybiBidXR0b25SZXBhaW50UmVjdChy
ZXN1bHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
LCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0y
NjQsMTcgKzMwNCwxNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJhY2tC
CiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmZvcndhcmRCdXR0b25SZWN0KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCiB7
CiAgICAgSW50UmVjdCByZXN1bHQ7Ci0KKyAgICAKICAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0
dG9uRW5kUGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNOb25l
IHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNO
b25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kIHx8
IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLQorICAgICAgICAKICAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFy
VGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CiAgICAgaW50IG91dGVyQnV0dG9u
TGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07CiAg
ICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpXTsKLQorICAgIAogICAgIGJvb2wgb3V0ZXJCdXR0b24gPSBwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGgp
OwogICAgIGlmIChvdXRlckJ1dHRvbikgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKQEAgLTI4OCw3ICszMjgsNyBAQCBJbnRS
ZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmZvcndhCiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gcGFy
dCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53
aWR0aCgpIC0gYnV0dG9uTGVuZ3RoIDogc2Nyb2xsYmFyLT54KCkgKyBvdXRlckJ1dHRvbkxlbmd0
aDsKICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCksIGJ1dHRv
bkxlbmd0aCwgdGhpY2tuZXNzKTsKQEAgLTMwNSw3ICszNDUsNyBAQCBJbnRSZWN0IFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OnRyYWNrCiB7CiAgICAgaWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0
b25zKHNjcm9sbGJhcikpCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwot
CisgICAgCiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJh
clRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwogICAgIGludCBzdGFydFdpZHRo
ID0gMDsKQEAgLTMzMSw3ICszNzEsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWM6OnRyYWNrCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0K
KyAgICAKICAgICBpbnQgdG90YWxXaWR0aCA9IHN0YXJ0V2lkdGggKyBlbmRXaWR0aDsKICAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc3RhcnRXaWR0aCwgc2Nyb2xsYmFy
LT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSAtIHRvdGFsV2lkdGgsIHRoaWNrbmVzcyk7CkBAIC0z
NDAsNyArMzgwLDEwIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dHJhY2sK
IAogaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1UaHVtYkxlbmd0aChTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07CisgICAgaWYgKElzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5ndGgoc2Nyb2xs
YmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKIH0KIAogYm9vbCBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhcios
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtMzUyLDYgKzM5NSwxMSBAQCBib29s
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnNob3VsZENlCiAgICAgcmV0dXJuIGV2dC5hbHRL
ZXkoKTsKIH0KIAorYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGREcmFnRG9j
dW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KQoreworICAgIHJldHVybiBldmVudC5hbHRLZXkoKTsKK30KKwogc3RhdGljIGludCBz
Y3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAg
c3dpdGNoIChwYXJ0KSB7CkBAIC0zNzAsNiArNDE4LDE4IEBAIHN0YXRpYyBpbnQgc2Nyb2xsYmFy
UGFydFRvSElQcmVzc2VkU3RhdGUKICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgd2tTY3JvbGxl
cktub2JTdHlsZSB0b1Njcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlIHN0eWxlKQoreworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICBjYXNlIFNjcm9sbGJhck92
ZXJsYXlTdHlsZURhcms6CisgICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlRGFyazsK
KyAgICBjYXNlIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OgorICAgICAgICByZXR1cm4gd2tT
Y3JvbGxlcktub2JTdHlsZUxpZ2h0OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB3a1Nj
cm9sbGVyS25vYlN0eWxlRGVmYXVsdDsKKyAgICB9Cit9CisKIHN0YXRpYyBQbGF0Zm9ybUJyaWRn
ZTo6VGhlbWVQYWludFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciog
c2Nyb2xsYmFyKSB7CiAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwo=
</data>
<flag name="review"
          id="84386"
          type_id="1"
          status="-"
          setter="thakis"
    />
          </attachment>
      

    </bug>

</bugzilla>