<?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>172116</bug_id>
          
          <creation_ts>2017-05-15 06:42:43 -0700</creation_ts>
          <short_desc>RenderTheme does not need to be per-page</short_desc>
          <delta_ts>2017-05-15 23:42: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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1308642</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 06:42:43 -0700</bug_when>
    <thetext>There are no implementations of RenderTheme::themeForPage that actually care about the page. It can be replaced with a singleton, simplifying a bunch of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308643</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 06:43:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/30426457&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308647</commentid>
    <comment_count>2</comment_count>
      <attachid>310134</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 07:08:31 -0700</bug_when>
    <thetext>Created attachment 310134
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308648</commentid>
    <comment_count>3</comment_count>
      <attachid>310135</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 07:18:30 -0700</bug_when>
    <thetext>Created attachment 310135
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308691</commentid>
    <comment_count>4</comment_count>
      <attachid>310144</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 10:01:06 -0700</bug_when>
    <thetext>Created attachment 310144
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308746</commentid>
    <comment_count>5</comment_count>
      <attachid>310153</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 11:57:30 -0700</bug_when>
    <thetext>Created attachment 310153
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308769</commentid>
    <comment_count>6</comment_count>
      <attachid>310153</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-15 13:17:04 -0700</bug_when>
    <thetext>Comment on attachment 310153
patch

Rejecting attachment 310153 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 310153, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
ing rebase:
:040000 040000 841e1e2bc57dce4d72bf15c23ee0f9472213b34e 4fc215fbc6e8a33b7011ebfccb90f898a893d471 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.

Full output: http://webkit-queues.webkit.org/results/3745756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308985</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-15 22:35:52 -0700</bug_when>
    <thetext>https://trac.webkit.org/r216902</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310134</attachid>
            <date>2017-05-15 07:08:31 -0700</date>
            <delta_ts>2017-05-15 07:18:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertheme-singleton.patch</filename>
            <type>text/plain</type>
            <size>38242</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDE3LTA1LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXJUaGVtZSBkb2VzIG5v
dCBuZWVkIHRvIGJlIHBlci1wYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxMTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNDI2NDU3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFy
ZSBubyBpbXBsZW1lbnRhdGlvbnMgb2YgUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSB0aGF0IGFj
dHVhbGx5IGNhcmUgYWJvdXQgdGhlIHBhZ2UuCisgICAgICAgIEl0IGNhbiBiZSByZXBsYWNlZCB3
aXRoIGEgc2luZ2xldG9uLCBzaW1wbGlmeWluZyBhIGJ1bmNoIG9mIGNvZGUuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNoYWRvd1Jvb3RDU1NUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUpOgorICAgICAgICAqIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkRnVsbERlZmF1bHRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHls
ZVNoZWV0c0ZvckVsZW1lbnQpOgorCisgICAgICAgICAgICBGaXggYSBwb3RlbnRpYWwgY3Jhc2gg
aWYgd2UgZ2V0IGhlcmUgd2hlbiBwYWdlIGlzIG51bGwgKHRob3VnaCBpdCBkb2Vzbid0IGFwcGVh
ciB0byByZXBybyBvbiB0cnVuaykuCisKKyAgICAgICAgKiBjc3MvU3R5bGVDb2xvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUNvbG9yOjpjb2xvckZyb21LZXl3b3JkKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKToKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNv
bnN1bWVTeXN0ZW1Gb250KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
dGVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojp1
c2VzTWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRm
b3JtSGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmFkanVzdElubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKiBodG1sL0lu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnRoZW1lU3VwcG9ydHNE
YXRhTGlzdFVJKToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZUNhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
dHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZpbGxDb2xvcik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNv
bG9yT3JDdXJyZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNyZWF0
ZUZyb21TdHJpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VUcmFuc3BhcmVudCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xzOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpy
ZXBvcnRlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnVwZGF0ZUN1
cnJlbnRUaW1lRGlzcGxheSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJv
bHNCdXR0b25FbGVtZW50TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjOjp0cnlDcmVhdGUpOgorICAgICAgICAqIHBhZ2UvTWVtb3J5UmVsZWFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlTm9uY3JpdGljYWxNZW1vcnkpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAg
ICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dGhl
bWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNp
bmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlVGV4dFBhaW50U3R5bGUpOgorCiAyMDE3LTA1LTE1ICBOYWVsIE91ZWRy
YW9nbyAgPG5hZWwub3VlZHJhb2dvQGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBJbnZhbGlkIE1l
ZGlhU291cmNlIGR1cmF0aW9uIHZhbHVlIHNob3VsZCB0aHJvdyBUeXBlckVycm9yIGluc3RlYWQg
b2YgSW52YWxpZFN0YXRlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDE4ICsyODAsMTMgQEAgU3RyaW5n
IE1lZGlhQ29udHJvbHNIb3N0OjpnZW5lcmF0ZVVVSUQoKQogCiBTdHJpbmcgTWVkaWFDb250cm9s
c0hvc3Q6OnNoYWRvd1Jvb3RDU1NUZXh0KCkgY29uc3QKIHsKLSAgICBQYWdlKiBwYWdlID0gbV9t
ZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBh
Z2UocGFnZSktPm1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpzaW5nbGV0b24oKS5tb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwog
fQogCiBTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmJhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZShjb25zdCBTdHJpbmcmIGljb25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKSBjb25z
dAogewotICAgIFBhZ2UqIHBhZ2UgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShwYWdlKS0+bWVkaWFDb250cm9sc0Jhc2U2NFN0
cmluZ0Zvckljb25OYW1lQW5kVHlwZShpY29uTmFtZSwgaWNvblR5cGUpOworCisgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzQmFzZTY0U3RyaW5nRm9ySWNv
bk5hbWVBbmRUeXBlKGljb25OYW1lLCBpY29uVHlwZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMTY4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDEzICsxMzQsMTMgQEAgdm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6
OmxvYWRGdWxsRGVmYQogICAgIH0KIAogICAgIC8vIFN0cmljdC1tb2RlIHJ1bGVzLgotICAgIFN0
cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJpbmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
ZihodG1sVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5leHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisgICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9IFN0
cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHlsZVNo
ZWV0KSkgKyBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgp
OwogICAgIGRlZmF1bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGRlZmF1bHRSdWxlcyk7CiAg
ICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqZGVmYXVsdFN0eWxlU2hlZXQsIHNj
cmVlbkV2YWwoKSk7CiAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpk
ZWZhdWx0U3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwogCiAgICAgLy8gUXVpcmtzLW1vZGUgcnVs
ZXMuCi0gICAgU3RyaW5nIHF1aXJrc1J1bGVzID0gU3RyaW5nKHF1aXJrc1VzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOworICAgIFN0cmluZyBxdWly
a3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocXVpcmtz
VXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhUXVp
cmtzU3R5bGVTaGVldCgpOwogICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVp
cmtzUnVsZXMpOwogICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnF1
aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiB9CkBAIC0xNzAsOCArMTcwLDggQEAgdm9p
ZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bAogCiAgICAgaWYgKGlzPEhUTUxF
bGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBpZiAoaXM8SFRNTE9iamVjdEVsZW1lbnQ+KGVs
ZW1lbnQpIHx8IGlzPEhUTUxFbWJlZEVsZW1lbnQ+KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBsdWdJbnNTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBsdWdJbnNS
dWxlcyA9IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2Uo
KSktPmV4dHJhUGx1Z0luc1N0eWxlU2hlZXQoKSArIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkt
PmNocm9tZSgpLmNsaWVudCgpLnBsdWdJbkV4dHJhU3R5bGVTaGVldCgpOworICAgICAgICAgICAg
aWYgKCFwbHVnSW5zU3R5bGVTaGVldCAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIHBsdWdJbnNSdWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5leHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgKyBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5wbHVnSW5FeHRyYVN0eWxlU2hlZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAocGx1Z0luc1J1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcGx1
Z0luc1J1bGVzID0gU3RyaW5nKHBsdWdJbnNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocGx1
Z0luc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgICAgICAgICBwbHVnSW5zU3R5bGVT
aGVldCA9IHBhcnNlVUFTaGVldChwbHVnSW5zUnVsZXMpOwpAQCAtMTgyLDkgKzE4Miw5IEBAIHZv
aWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIG1lZGlhUnVsZXMgPSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9j
dW1lbnQoKS5wYWdlKCkpLT5tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgICAgICAgICAg
ICAgIFN0cmluZyBtZWRpYVJ1bGVzID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1lZGlhUnVsZXMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBtZWRpYVJ1bGVzID0gU3RyaW5nKG1lZGlhQ29udHJv
bHNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxl
U2hlZXQpKSArIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBh
Z2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6
c2luZ2xldG9uKCkuZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwogICAgICAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KG1lZGlhUnVsZXMpOwog
ICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKm1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwogICAgICAgICAgICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqbWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHBy
aW50RXZhbCgpKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0
czo6ZW5zdXJlRGVmYXVsCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgICAgIGVs
c2UgaWYgKGlzPEhUTUxEaXZFbGVtZW50PihlbGVtZW50KSAmJiBlbGVtZW50LmlzSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghaW1hZ2VDb250cm9sc1N0eWxl
U2hlZXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VDb250cm9sc1J1bGVzID0gUmVu
ZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKS0+aW1hZ2VD
b250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VDb250cm9s
c1J1bGVzID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmltYWdlQ29udHJvbHNTdHlsZVNoZWV0
KCk7CiAgICAgICAgICAgICAgICAgaW1hZ2VDb250cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hl
ZXQoaW1hZ2VDb250cm9sc1J1bGVzKTsKICAgICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KCppbWFnZUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
ICAgICAgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmlt
YWdlQ29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CkBAIC0yMjYsNyArMjI2LDcgQEAg
dm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bAogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC5k
b2N1bWVudCgpLndlYmtpdElzRnVsbFNjcmVlbigpKSB7Ci0gICAgICAgIFN0cmluZyBmdWxsc2Ny
ZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5leHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CisgICAgICAgIFN0cmluZyBmdWxsc2Ny
ZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
LmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKICAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKICAgICAgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldCgqZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7
CiAgICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmZ1bGxzY3Jl
ZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUNvbG9y
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIENvbG9yIFN0eWxlQ29sb3I6OmNv
bG9yRnJvbUtleXdvcmQoQ1NTVmEKICAgICAgICAgaWYgKGNvbnN0IE5hbWVkQ29sb3IqIG5hbWVk
Q29sb3IgPSBmaW5kQ29sb3IodmFsdWVOYW1lLCBzdHJsZW4odmFsdWVOYW1lKSkpCiAgICAgICAg
ICAgICByZXR1cm4gQ29sb3IobmFtZWRDb2xvci0+QVJHQlZhbHVlKTsKICAgICB9Ci0gICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3Ioa2V5d29yZCk7Cisg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihrZXl3b3JkKTsK
IH0KIAogYm9vbCBTdHlsZUNvbG9yOjppc0NvbG9yS2V5d29yZChDU1NWYWx1ZUlEIGlkKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OTgsNyArOTk4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQog
CiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhl
IHN0eWxlLgogICAgIGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlbGVtZW50LCBt
X3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5i
YWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgUmVu
ZGVyVGhlbWU6OnNpbmdsZXRvbigpLmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwg
bV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUu
YmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0
eWxlLgogICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjE2ODU4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzMsMTYgKzE3MywxMyBAQCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3Qg
U3RyaW5nCiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNvbG9yKCk7CiB9CiAKLUNvbG9yIENT
U1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQq
IGRvY3VtZW50KQorQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogewotICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAogICAgIENTU1ZhbHVlSUQgaWQgPSBjc3NWYWx1
ZUtleXdvcmRJRChzdHJpbmcpOwogICAgIGlmICghU3R5bGVDb2xvcjo6aXNTeXN0ZW1Db2xvcihp
ZCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIAotICAgIHJldHVybiBkb2N1bWVudC0+
cGFnZSgpLT50aGVtZSgpLnN5c3RlbUNvbG9yKGlkKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnN5c3RlbUNvbG9yKGlkKTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjE2ODU4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZh
cmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIGNvbnN0IEN1
c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdy
aXRpbmdNb2RlKTsKIAogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYs
IGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNvbG9y
KGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIENvbG9yIHBhcnNlU3lzdGVt
Q29sb3IoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VW
YWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpbXBvcnRhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDI5LDcgKzQ0MjksNyBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lU3lzdGVtRm9u
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKLSAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3Rl
bUZvbnQoc3lzdGVtRm9udElELCBmb250RGVzY3JpcHRpb24pOworICAgIFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5zeXN0ZW1Gb250KHN5c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKICAg
ICBpZiAoIWZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdp
dGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQogICAgIC8v
IGFscmVhZHkgYmxpbmtpbmcgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgogICAgIGlmIChzaG91bGRC
bGluayAmJiAhbV9jYXJldEJsaW5rVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBpZiAoU2Vj
b25kcyBibGlua0ludGVydmFsID0gbV9mcmFtZS0+cGFnZSgpLT50aGVtZSgpLmNhcmV0QmxpbmtJ
bnRlcnZhbCgpKQorICAgICAgICBpZiAoU2Vjb25kcyBibGlua0ludGVydmFsID0gUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLmNhcmV0QmxpbmtJbnRlcnZhbCgpKQogICAgICAgICAgICAgbV9jYXJl
dEJsaW5rVGltZXIuc3RhcnRSZXBlYXRpbmcoYmxpbmtJbnRlcnZhbCk7CiAKICAgICAgICAgaWYg
KCFtX2NhcmV0UGFpbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY5OCw3ICs2Njk4LDcgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIG1lZGlhQ29udHJvbHNTY3JpcHQgPSBSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKHBhZ2UpLT5tZWRpYUNvbnRyb2xzU2NyaXB0KCk7CisgICAg
U3RyaW5nIG1lZGlhQ29udHJvbHNTY3JpcHQgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVk
aWFDb250cm9sc1NjcmlwdCgpOwogICAgIGlmICghbWVkaWFDb250cm9sc1NjcmlwdC5sZW5ndGgo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
UmVmPEhUTUxNZXRlckVsZW1lbnQ+IEhUTUxNZXRlckVsZW1lbnQ6OgogCiBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gSFRNTE1ldGVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRl
clN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5zdXBwb3J0c01ldGVyKHN0eWxlLmFwcGVhcmFuY2Uo
KSkpCisgICAgaWYgKCFSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3VwcG9ydHNNZXRlcihzdHls
ZS5hcHBlYXJhbmNlKCkpKQogICAgICAgICByZXR1cm4gUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9y
KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiAKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyTWV0ZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94U2VsZWN0SXRlCiBib29s
IEhUTUxTZWxlY3RFbGVtZW50Ojp1c2VzTWVudUxpc3QoKSBjb25zdAogewogI2lmICFQTEFURk9S
TShJT1MpCi0gICAgaWYgKFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQoKS5wYWdl
KCkpLT5kZWxlZ2F0ZXNNZW51TGlzdFJlbmRlcmluZygpKQorICAgIGlmIChSZW5kZXJUaGVtZTo6
c2luZ2xldG9uKCkuZGVsZWdhdGVzTWVudUxpc3RSZW5kZXJpbmcoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDE7CkBAIC0xMDg1
LDcgKzEwODUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiAKIGJvb2wgSFRN
TFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogewotICAgIGlmICghUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShkb2N1bWVudCgp
LnBhZ2UoKSktPnBvcHNNZW51QnlBcnJvd0tleXMoKSkKKyAgICBpZiAoIVJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgp
KSkgewpAQCAtMTExOSw4ICsxMTE5LDYgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxp
c3REZWZhdWx0RQogICAgIEFTU0VSVChyZW5kZXJlcigpKTsKICAgICBBU1NFUlQocmVuZGVyZXIo
KS0+aXNNZW51TGlzdCgpKTsKIAotICAgIFJlZlB0cjxSZW5kZXJUaGVtZT4gcmVuZGVyVGhlbWUg
PSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50KCkucGFnZSgpKTsKLQogICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAgICBp
ZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEx
ODgsNyArMTE4Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyZW5kZXJUaGVt
ZS0+cG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSkgeworICAgICAgICBpZiAoUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkpIHsKICAgICAgICAgICAgIGlm
IChrZXlDb2RlID09ICcgJyB8fCBrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgICAgICBm
b2N1cygpOwogCkBAIC0xMjA1LDcgKzEyMDMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpt
ZW51TGlzdERlZmF1bHRFCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWVudUxpc3Q+
KCpyZW5kZXJlcikuc2hvd1BvcHVwKCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyVGhlbWUtPnBvcHNNZW51
QnlBcnJvd0tleXMoKSkgeworICAgICAgICB9IGVsc2UgaWYgKFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpIHsKICAgICAgICAgICAgIGlmIChrZXlDb2RlID09
ICcgJykgewogICAgICAgICAgICAgICAgIGZvY3VzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA1LDcgKzgwNSw3IEBAIHZvaWQgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmFkanVzdEkKICAgICB9CiAKICAgICBpZiAoaXNEaXNhYmxlZEZvcm1D
b250cm9sKCkpCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLnNldENvbG9yKGRvY3VtZW50KCkucGFn
ZSgpLT50aGVtZSgpLmRpc2FibGVkVGV4dENvbG9yKHRleHRCbG9ja1N0eWxlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcGFyZW50U3R5bGUudmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkpOworICAgICAgICB0ZXh0QmxvY2tT
dHlsZS5zZXRDb2xvcihSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZGlzYWJsZWRUZXh0Q29sb3Io
dGV4dEJsb2NrU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBw
YXJlbnRTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmICh0ZXh0QmxvY2tTdHlsZS50ZXh0U2Vj
dXJpdHkoKSAhPSBUU05PTkUgJiYgIXRleHRCbG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgYWxpZ25tZW50IGJ1dCBmb3JjZSB0aGUg
ZGlyZWN0aW9uIHRvIExUUiBzbyB0aGF0IHRoZSBsYXN0LXR5cGVkLCB1bm1hc2tlZCBjaGFyYWN0
ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcx
LDggKzE3MSw3IEBAIElucHV0VHlwZTo6fklucHV0VHlwZSgpCiAKIGJvb2wgSW5wdXRUeXBlOjp0
aGVtZVN1cHBvcnRzRGF0YUxpc3RVSShJbnB1dFR5cGUqIHR5cGUpCiB7Ci0gICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gdHlwZS0+ZWxlbWVudCgpLmRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQucGFnZSgpKS0+c3VwcG9ydHNEYXRhTGlzdFVJ
KHR5cGUtPmZvcm1Db250cm9sVHlwZSgpKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLnN1cHBvcnRzRGF0YUxpc3RVSSh0eXBlLT5mb3JtQ29udHJvbFR5cGUoKSk7CiB9CiAK
IGJvb2wgSW5wdXRUeXBlOjppc1RleHRGaWVsZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0NCwxMiArMjQ0LDEyIEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpuZWVkc0NvbnRhaW5l
cigKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50KCkuZG9j
dW1lbnQoKS5wYWdlKCkpLT5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOworICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVu
dCgpKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVDYXBzTG9ja0lu
ZGljYXRvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
ZWxlbWVudCgpLmRvY3VtZW50KCkucGFnZSgpKS0+c2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9y
KGVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zaG91bGRI
YXZlQ2Fwc0xvY2tJbmRpY2F0b3IoZWxlbWVudCgpKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1
dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzksNyArODM5LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQogICAgICAgICByZXR1cm47CiAKICAgICBy
ZWFsaXplU2F2ZXMoKTsKLSAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJv
bVN0cmluZyhjb2xvciwgJmNhbnZhcygpLmRvY3VtZW50KCkpKTsKKyAgICBzZXRTdHJva2VTdHls
ZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb2xvcikpOwogICAgIG1vZGlmaWFibGVT
dGF0ZSgpLnVucGFyc2VkU3Ryb2tlQ29sb3IgPSBjb2xvcjsKIH0KIApAQCAtODc1LDcgKzg3NSw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ28KICAgICAgICAgcmV0
dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxl
OjpjcmVhdGVGcm9tU3RyaW5nKGNvbG9yLCAmY2FudmFzKCkuZG9jdW1lbnQoKSkpOworICAgIHNl
dEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb2xvcikpOwogICAgIG1v
ZGlmaWFibGVTdGF0ZSgpLnVucGFyc2VkRmlsbENvbG9yID0gY29sb3I7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDIxNjg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIHN0YXRpYyBib29sIGlzQ3VycmVudENvbG9yU3Ry
aW5nKGNvbnN0IFMKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29s
b3JTdHJpbmcsICJjdXJyZW50Y29sb3IiKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3Io
Y29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cikK
K3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3JTdHJpbmcpOwogICAg
IGlmIChjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4g
Q1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbG9yU3RyaW5nLCBkb2N1bWVudCk7CisgICAg
cmV0dXJuIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZyk7CiB9CiAKIENv
bG9yIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQpAQCAtNzEsNyArNzEs
NyBAQCBDb2xvciBwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IoY29uc3QgU3RyCiAgICAgaWYgKGlz
Q3VycmVudENvbG9yU3RyaW5nKGNvbG9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRD
b2xvcihjYW52YXMpOwogCi0gICAgcmV0dXJuIHBhcnNlQ29sb3IoY29sb3JTdHJpbmcsIGNhbnZh
cyA/ICZjYW52YXMtPmRvY3VtZW50KCkgOiBudWxscHRyKTsKKyAgICByZXR1cm4gcGFyc2VDb2xv
cihjb2xvclN0cmluZyk7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xv
cikKQEAgLTEwOSwxMiArMTA5LDEyIEBAIGlubGluZSBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
Q3VycmVudEMKIHsKIH0KIAotQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50KQorQ2FudmFz
U3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvclN0
cmluZykKIHsKICAgICBpZiAoaXNDdXJyZW50Q29sb3JTdHJpbmcoY29sb3JTdHJpbmcpKQogICAg
ICAgICByZXR1cm4gQ3VycmVudENvbG9yIHsgc3RkOjpudWxsb3B0IH07CiAKLSAgICBDb2xvciBj
b2xvciA9IHBhcnNlQ29sb3IoY29sb3JTdHJpbmcsIGRvY3VtZW50KTsKKyAgICBDb2xvciBjb2xv
ciA9IHBhcnNlQ29sb3IoY29sb3JTdHJpbmcpOwogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4geyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmgJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogICAgIENhbnZhc1N0eWxlKENhbnZhc0dyYWRpZW50Jik7CiAgICAgQ2FudmFzU3R5bGUoQ2Fu
dmFzUGF0dGVybiYpOwogCi0gICAgc3RhdGljIENhbnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiBjb2xvciwgRG9jdW1lbnQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIENh
bnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvcik7CiAgICAgc3Rh
dGljIENhbnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYShjb25zdCBT
dHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcg
QEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0VGltZQogICAgIC8vIFRoZSB0
aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3BsYXk6J25vbmUnIG9uIHRo
ZSBwYW5lbCwKICAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNvcnJlY3RseSBkaXNwbGF5
ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBm
YWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9IGRvY3VtZW50KCkucGFn
ZSgpID8gZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJh
dGlvbigpIDogMF9zOworICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwogICAgIG1fdHJhbnNpdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbik7CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1CiAgICAgaWYgKG1fb3BhcXVlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBkb3VibGUgZHVyYXRpb24gPSBkb2N1bWVudCgpLnBhZ2Uo
KSA/IGRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpLm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlv
bigpIDogMDsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCku
bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7CiAKICAgICBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwog
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb24s
IGR1cmF0aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwpAQCAtMjA1LDcgKzIwNSw3IEBA
IHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnMKICAgICBpZiAoIW1fb3Bh
cXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZWNvbmRzIGR1cmF0aW9uID0gZG9jdW1lbnQo
KS5wYWdlKCkgPyBkb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5tZWRpYUNvbnRyb2xzRmFkZU91
dER1cmF0aW9uKCkgOiAwX3M7CisgICAgU2Vjb25kcyBkdXJhdGlvbiA9IFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7CiAKICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0
eU9wYWNpdHkpOwogICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0
aW9uRHVyYXRpb24sIGR1cmF0aW9uLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAko
cmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIxICs4NywxNyBAQCB2b2lkIE1lZGlhQ29u
dHJvbHM6OnNldE1lZGlhQ29udHJvbGxlcihNCiAKIHZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQo
KQogewotICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQogICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUo
KTsKIAogICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwogCiAgICAgZG91YmxlIGR1cmF0
aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYgKHN0ZDo6aXNmaW5p
dGUoZHVyYXRpb24pIHx8IHBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5n
Rm9yKE1lZGlhU2xpZGVyUGFydCkpIHsKKyAgICBpZiAoc3RkOjppc2Zpbml0ZShkdXJhdGlvbikg
fHwgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYVNsaWRlclBhcnQpKSB7CiAgICAgICAgIG1fdGltZWxpbmUtPnNldER1cmF0aW9uKGR1
cmF0aW9uKTsKICAgICAgICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xs
ZXItPmN1cnJlbnRUaW1lKCkpOwogICAgIH0KIAotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+
aGFzQXVkaW8oKSB8fCBwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYU11dGVCdXR0b25QYXJ0KSkKKyAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1
ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5k
bGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0KSkKICAgICAgICAgbV9wYW5lbE11dGVCdXR0b24t
PnNob3coKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CkBA
IC0xMjksMTkgKzEyNSwxNiBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkKIAogdm9pZCBN
ZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKCkKIHsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1l
bnQoKS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1
dHRvblBhcnQpKSB7CisgICAgYXV0byYgdGhlbWUgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCk7
CisgICAgaWYgKCF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFNdXRl
QnV0dG9uUGFydCkpIHsKICAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUoKTsKICAgICAg
ICAgbV92b2x1bWVTbGlkZXItPmhpZGUoKTsKICAgICB9CiAKLSAgICBpZiAobV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiAmJiAhcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoTWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQpKQorICAgIGlmICht
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uICYmICF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRl
SGFuZGxpbmdGb3IoTWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQpKQogICAgICAg
ICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaWRlKCk7CiAKLSAgICBpZiAobV9mdWxs
U2NyZWVuQnV0dG9uICYmICFwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvblBhcnQpKQorICAgIGlmIChtX2Z1bGxTY3Jl
ZW5CdXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVu
dGVyRnVsbHNjcmVlbkJ1dHRvblBhcnQpKQogICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhp
ZGUoKTsKIH0KIApAQCAtMjE4LDEyICsyMTEsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXli
YWNrU3RvcHBlZCgpCiB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxh
eSgpCiB7CiAgICAgZG91YmxlIG5vdyA9IG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgp
OwotCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4
dChwYWdlLT50aGVtZSgpLmZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKG5vdykpOworICAgIG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZv
cm1hdE1lZGlhQ29udHJvbHNUaW1lKG5vdykpOwogICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5z
ZXRDdXJyZW50VmFsdWUobm93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRN
YWMuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9t
YWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw3IEBAIFJlZlB0cjxJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYz4gSW0KICAg
ICBhdXRvIGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRN
YWMoZG9jdW1lbnQpKTsKICAgICBidXR0b24tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oSFRNTE5hbWVzOjpjbGFzc0F0dHIsIEF0b21pY1N0cmluZygieC13ZWJraXQtaW1hZ2Ut
Y29udHJvbHMtYnV0dG9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwog
Ci0gICAgSW50U2l6ZSBwb3NpdGlvbk9mZnNldCA9IGRvY3VtZW50LnBhZ2UoKS0+dGhlbWUoKS5p
bWFnZUNvbnRyb2xzQnV0dG9uUG9zaXRpb25PZmZzZXQoKTsKKyAgICBJbnRTaXplIHBvc2l0aW9u
T2Zmc2V0ID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmltYWdlQ29udHJvbHNCdXR0b25Qb3Np
dGlvbk9mZnNldCgpOwogICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgcG9zaXRpb25PZmZzZXQuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOwogCiAgICAgLy8gRklYTUU6IFdoeSBpcyByaWdodDogMHB4IG9mZiB0aGUgcmlnaHQgZWRn
ZSBvZiB0aGUgcGFyZW50PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3Bw
CShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIHZvaWQgcmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KCkKIHsKLSAgICBSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCktPnB1cmdlQ2FjaGVzKCk7CisgICAgUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLnB1cmdlQ2FjaGVzKCk7CiAKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnB1
cmdlSW5hY3RpdmVGb250RGF0YSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9u
IDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNSw3ICsyMDUsNiBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiYgcGFnZUNv
bmZpCiAgICAgLCBtX3Byb2dyZXNzKHN0ZDo6bWFrZV91bmlxdWU8UHJvZ3Jlc3NUcmFja2VyPigq
cGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50KSkKICAgICAsIG1fYmFja0Zv
cndhcmRDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8QmFja0ZvcndhcmRDb250cm9sbGVyPigq
dGhpcywgKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYmFja0ZvcndhcmRDbGllbnQpKSkKICAg
ICAsIG1fbWFpbkZyYW1lKE1haW5GcmFtZTo6Y3JlYXRlKCp0aGlzLCBwYWdlQ29uZmlndXJhdGlv
bikpCi0gICAgLCBtX3RoZW1lKFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UodGhpcykpCiAgICAg
LCBtX2VkaXRvckNsaWVudChXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmVkaXRvckNsaWVudCkp
CiAgICAgLCBtX3BsdWdJbkNsaWVudChwYWdlQ29uZmlndXJhdGlvbi5wbHVnSW5DbGllbnQpCiAg
ICAgLCBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24u
dmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDIx
Njg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsOCArMTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1JlY2FsY1N0eWxlSW5B
bGxGcmFtZXMoKTsKIAotICAgIFJlbmRlclRoZW1lJiB0aGVtZSgpIGNvbnN0IHsgcmV0dXJuICpt
X3RoZW1lOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9y
dEFyZ3VtZW50cygpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9v
bCByZWxvYWQpOwpAQCAtNjY2LDggKzY2NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UGx1
Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwogCi0gICAgUmVmUHRyPFJlbmRlclRoZW1lPiBtX3RoZW1l
OwotCiAgICAgVW5pcXVlUmVmPEVkaXRvckNsaWVudD4gbV9lZGl0b3JDbGllbnQ7CiAgICAgUGx1
Z0luQ2xpZW50KiBtX3BsdWdJbkNsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQ+IG1fdmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJKHJldmlzaW9uIDIx
Njg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKikKK1Jl
bmRlclRoZW1lJiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsKLSAgICBzdGF0aWMgUmVuZGVy
VGhlbWUmIHRoZW1lID0gUmVuZGVyVGhlbWVXUEU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICBy
ZXR1cm4gdGhlbWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxSZW5kZXJUaGVtZT4+
IHRoZW1lKFJlbmRlclRoZW1lV1BFOjpjcmVhdGUoKSk7CisgICAgcmV0dXJuIHRoZW1lLmdldCgp
OwogfQogCiB2b2lkIFJlbmRlclRoZW1lV1BFOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJ
KHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBib29sIFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgY29udGVudFJlY3QubW92ZUJ5
KHJvdW5kZWRJbnRQb2ludChhY2N1bXVsYXRlZE9mZnNldCkpOwogCiAgICAgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sLCBmb250RGVzY3JpcHRp
b24pOworICAgIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250KENTU1ZhbHVlV2Vi
a2l0U21hbGxDb250cm9sLCBmb250RGVzY3JpcHRpb24pOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRXZWlnaHQoYm9sZFdlaWdodFZhbHVlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5k
ZXJpbmdNb2RlKHNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEs
NyBAQCBSZW5kZXJPYmplY3Q6On5SZW5kZXJPYmplY3QoKQogCiBSZW5kZXJUaGVtZSYgUmVuZGVy
T2JqZWN0Ojp0aGVtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhZ2UoKS50aGVtZSgpOworICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0
Ojppc0Rlc2NlbmRhbnRPZihjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyMTY4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEzLDcgKzEzMTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpzZXRDdXN0b21G
b2N1c1JpbmdDb2xvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpCiB7Ci0g
ICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8gY3VzdG9tRm9jdXNS
aW5nQ29sb3IoKSA6IGRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCk7Cisg
ICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8gY3VzdG9tRm9jdXNS
aW5nQ29sb3IoKSA6IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5wbGF0Zm9ybUZvY3VzUmluZ0Nv
bG9yKCk7CiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZhdWx0TGFiZWwoYm9v
bCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTUgKzYyLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lKCkgeyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIHRvIGJlIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0tc3BlY2lmaWMgdGhlbWUg
aW1wbGVtZW50YXRpb24gdG8gaGFuZCBiYWNrIHRoZQotICAgIC8vIGFwcHJvcHJpYXRlIHBsYXRm
b3JtIHRoZW1lLiBXaGVuIHRoZSB0aGVtZSBpcyBuZWVkZWQgaW4gbm9uLXBhZ2UgZGVwZW5kZW50
IGNvZGUsIGEgZGVmYXVsdCB0aGVtZSBpcwotICAgIC8vIHVzZWQgYXMgZmFsbGJhY2ssIHdoaWNo
IGlzIHJldHVybmVkIGZvciBhIG51bGxlZCBwYWdlLCBzbyB0aGUgcGxhdGZvcm0gY29kZSBuZWVk
cyB0byBhY2NvdW50IGZvciB0aGlzLgotICAgIHN0YXRpYyBSZWY8UmVuZGVyVGhlbWU+IHRoZW1l
Rm9yUGFnZShQYWdlKik7Ci0KLSAgICAvLyBXaGVuIHRoZSB0aGVtZSBpcyBuZWVkZWQgaW4gbm9u
LXBhZ2UgZGVwZW5kZW50IGNvZGUsIHRoZSBkZWZhdWx0VGhlbWUoKSBpcyB1c2VkIGFzIGZhbGxi
YWNrLgotICAgIHN0YXRpYyBpbmxpbmUgUmVmPFJlbmRlclRoZW1lPiBkZWZhdWx0VGhlbWUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZW1lRm9yUGFnZShudWxscHRyKTsKLSAgICB9OworICAg
IC8vIGFwcHJvcHJpYXRlIHBsYXRmb3JtIHRoZW1lLgorICAgIHN0YXRpYyBSZW5kZXJUaGVtZSYg
c2luZ2xldG9uKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VDYWNoZXMoKSB7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lv
biAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgUmVmPFJlbmRlclRoZW1lPiBSZW5k
ZXJUaGVtZUd0azo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclRoZW1l
R3RrKCkpOwogfQogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
UGFnZSopCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3Rh
dGljIFJlbmRlclRoZW1lJiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoKS5sZWFrUmVmKCk7
Ci0gICAgcmV0dXJuIHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVuZGVyVGhl
bWU+PiB0aGVtZShSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0aGVtZS5n
ZXQoKTsKIH0KIAogc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjE2ODU4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTUsMTAgKzI5NSwxMCBAQCBSZW5kZXJUaGVtZUlPUzo6UmVuZGVyVGhlbWVJT1MoKQog
ICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJH
ZXRMb2NhbENlbnRlcigpLCB0aGlzLCBjb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlLCBVSUNv
bnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2VOb3RpZmljYXRpb24sIDAsIENGTm90aWZpY2F0aW9u
U3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKIH0KIAotUmVmPFJlbmRlclRo
ZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQorUmVuZGVyVGhlbWUmIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKQogewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSYgcmVuZGVyVGhl
bWUgPSBSZW5kZXJUaGVtZUlPUzo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiByZW5k
ZXJUaGVtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFJlbmRlclRoZW1lPj4gdGhl
bWUoUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gdGhlbWUuZ2V0KCk7CiB9
CiAKIFJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyMTY4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIGVudW0gewogICAgIGxlZnRQYWRkaW5nCiB9Owog
Ci1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSopCitSZW5k
ZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3RhdGljIFJlbmRlclRo
ZW1lJiBydCA9IFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJu
IHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVuZGVyVGhlbWU+PiB0aGVtZShS
ZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0aGVtZS5nZXQoKTsKIH0KIAog
UmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNpb24gMjE2ODU4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDEwICsxODgsMTAgQEAgUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVdp
bjo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclRoZW1lV2luKTsKIH0K
IAotUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2Up
CitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3RhdGljIFJl
bmRlclRoZW1lJiB3aW5UaGVtZSA9IFJlbmRlclRoZW1lV2luOjpjcmVhdGUoKS5sZWFrUmVmKCk7
Ci0gICAgcmV0dXJuIHdpblRoZW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVu
ZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0
aGVtZS5nZXQoKTsKIH0KIAogUmVuZGVyVGhlbWVXaW46OlJlbmRlclRoZW1lV2luKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBUZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4
dFBhaW50U3R5bGUoY29uCiAgICAgaWYgKGxpbmVTdHlsZS5pbnNpZGVEZWZhdWx0QnV0dG9uKCkp
IHsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2Ug
JiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgcGFp
bnRTdHlsZS5maWxsQ29sb3IgPSBwYWdlLT50aGVtZSgpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQWN0
aXZlYnV0dG9udGV4dCk7CisgICAgICAgICAgICBwYWludFN0eWxlLmZpbGxDb2xvciA9IFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFjdGl2ZWJ1dHRvbnRleHQp
OwogICAgICAgICAgICAgcmV0dXJuIHBhaW50U3R5bGU7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310135</attachid>
            <date>2017-05-15 07:18:30 -0700</date>
            <delta_ts>2017-05-15 10:01:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertheme-singleton-2.patch</filename>
            <type>text/plain</type>
            <size>41391</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDE3LTA1LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXJUaGVtZSBkb2VzIG5v
dCBuZWVkIHRvIGJlIHBlci1wYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxMTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNDI2NDU3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFy
ZSBubyBpbXBsZW1lbnRhdGlvbnMgb2YgUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSB0aGF0IGFj
dHVhbGx5IGNhcmUgYWJvdXQgdGhlIHBhZ2UuCisgICAgICAgIEl0IGNhbiBiZSByZXBsYWNlZCB3
aXRoIGEgc2luZ2xldG9uLCBzaW1wbGlmeWluZyBhIGJ1bmNoIG9mIGNvZGUuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNoYWRvd1Jvb3RDU1NUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUpOgorICAgICAgICAqIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkRnVsbERlZmF1bHRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHls
ZVNoZWV0c0ZvckVsZW1lbnQpOgorCisgICAgICAgICAgICBGaXggYSBwb3RlbnRpYWwgY3Jhc2gg
aWYgd2UgZ2V0IGhlcmUgd2hlbiBwYWdlIGlzIG51bGwgKHRob3VnaCBpdCBkb2Vzbid0IGFwcGVh
ciB0byByZXBybyBvbiB0cnVuaykuCisKKyAgICAgICAgKiBjc3MvU3R5bGVDb2xvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUNvbG9yOjpjb2xvckZyb21LZXl3b3JkKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKToKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNv
bnN1bWVTeXN0ZW1Gb250KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
dGVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojp1
c2VzTWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRm
b3JtSGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmFkanVzdElubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKiBodG1sL0lu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnRoZW1lU3VwcG9ydHNE
YXRhTGlzdFVJKToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZUNhcHNMb2Nr
SW5kaWNhdG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
dHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZpbGxDb2xvcik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNv
bG9yT3JDdXJyZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNyZWF0
ZUZyb21TdHJpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VUcmFuc3BhcmVudCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xzOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpy
ZXBvcnRlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnVwZGF0ZUN1
cnJlbnRUaW1lRGlzcGxheSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJv
bHNCdXR0b25FbGVtZW50TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjOjp0cnlDcmVhdGUpOgorICAgICAgICAqIHBhZ2UvTWVtb3J5UmVsZWFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlTm9uY3JpdGljYWxNZW1vcnkpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAg
ICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnRoZW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dGhl
bWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNp
bmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlVGV4dFBhaW50U3R5bGUpOgorCiAyMDE3LTA1LTE1ICBOYWVsIE91ZWRy
YW9nbyAgPG5hZWwub3VlZHJhb2dvQGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBJbnZhbGlkIE1l
ZGlhU291cmNlIGR1cmF0aW9uIHZhbHVlIHNob3VsZCB0aHJvdyBUeXBlckVycm9yIGluc3RlYWQg
b2YgSW52YWxpZFN0YXRlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDE4ICsyODAsMTMgQEAgU3RyaW5n
IE1lZGlhQ29udHJvbHNIb3N0OjpnZW5lcmF0ZVVVSUQoKQogCiBTdHJpbmcgTWVkaWFDb250cm9s
c0hvc3Q6OnNoYWRvd1Jvb3RDU1NUZXh0KCkgY29uc3QKIHsKLSAgICBQYWdlKiBwYWdlID0gbV9t
ZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBh
Z2UocGFnZSktPm1vZGVybk1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpzaW5nbGV0b24oKS5tb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwog
fQogCiBTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmJhc2U2NFN0cmluZ0Zvckljb25OYW1lQW5k
VHlwZShjb25zdCBTdHJpbmcmIGljb25OYW1lLCBjb25zdCBTdHJpbmcmIGljb25UeXBlKSBjb25z
dAogewotICAgIFBhZ2UqIHBhZ2UgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShwYWdlKS0+bWVkaWFDb250cm9sc0Jhc2U2NFN0
cmluZ0Zvckljb25OYW1lQW5kVHlwZShpY29uTmFtZSwgaWNvblR5cGUpOworCisgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzQmFzZTY0U3RyaW5nRm9ySWNv
bk5hbWVBbmRUeXBlKGljb25OYW1lLCBpY29uVHlwZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMTY4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDEzICsxMzQsMTMgQEAgdm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6
OmxvYWRGdWxsRGVmYQogICAgIH0KIAogICAgIC8vIFN0cmljdC1tb2RlIHJ1bGVzLgotICAgIFN0
cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJpbmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
ZihodG1sVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5leHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisgICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9IFN0
cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHlsZVNo
ZWV0KSkgKyBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgp
OwogICAgIGRlZmF1bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGRlZmF1bHRSdWxlcyk7CiAg
ICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqZGVmYXVsdFN0eWxlU2hlZXQsIHNj
cmVlbkV2YWwoKSk7CiAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpk
ZWZhdWx0U3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwogCiAgICAgLy8gUXVpcmtzLW1vZGUgcnVs
ZXMuCi0gICAgU3RyaW5nIHF1aXJrc1J1bGVzID0gU3RyaW5nKHF1aXJrc1VzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOworICAgIFN0cmluZyBxdWly
a3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocXVpcmtz
VXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhUXVp
cmtzU3R5bGVTaGVldCgpOwogICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVp
cmtzUnVsZXMpOwogICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnF1
aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiB9CkBAIC0xNzAsOCArMTcwLDggQEAgdm9p
ZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bAogCiAgICAgaWYgKGlzPEhUTUxF
bGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBpZiAoaXM8SFRNTE9iamVjdEVsZW1lbnQ+KGVs
ZW1lbnQpIHx8IGlzPEhUTUxFbWJlZEVsZW1lbnQ+KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBsdWdJbnNTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBsdWdJbnNS
dWxlcyA9IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2Uo
KSktPmV4dHJhUGx1Z0luc1N0eWxlU2hlZXQoKSArIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkt
PmNocm9tZSgpLmNsaWVudCgpLnBsdWdJbkV4dHJhU3R5bGVTaGVldCgpOworICAgICAgICAgICAg
aWYgKCFwbHVnSW5zU3R5bGVTaGVldCAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIHBsdWdJbnNSdWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5leHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgKyBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5wbHVnSW5FeHRyYVN0eWxlU2hlZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAocGx1Z0luc1J1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcGx1
Z0luc1J1bGVzID0gU3RyaW5nKHBsdWdJbnNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocGx1
Z0luc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgICAgICAgICBwbHVnSW5zU3R5bGVT
aGVldCA9IHBhcnNlVUFTaGVldChwbHVnSW5zUnVsZXMpOwpAQCAtMTgyLDkgKzE4Miw5IEBAIHZv
aWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIG1lZGlhUnVsZXMgPSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9j
dW1lbnQoKS5wYWdlKCkpLT5tZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgICAgICAgICAg
ICAgIFN0cmluZyBtZWRpYVJ1bGVzID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1lZGlhUnVsZXMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBtZWRpYVJ1bGVzID0gU3RyaW5nKG1lZGlhQ29udHJv
bHNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxl
U2hlZXQpKSArIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBh
Z2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6
c2luZ2xldG9uKCkuZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwogICAgICAgICAgICAg
ICAgIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KG1lZGlhUnVsZXMpOwog
ICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKm1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwogICAgICAgICAgICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqbWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHBy
aW50RXZhbCgpKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0
czo6ZW5zdXJlRGVmYXVsCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgICAgIGVs
c2UgaWYgKGlzPEhUTUxEaXZFbGVtZW50PihlbGVtZW50KSAmJiBlbGVtZW50LmlzSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghaW1hZ2VDb250cm9sc1N0eWxl
U2hlZXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VDb250cm9sc1J1bGVzID0gUmVu
ZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKS0+aW1hZ2VD
b250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VDb250cm9s
c1J1bGVzID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmltYWdlQ29udHJvbHNTdHlsZVNoZWV0
KCk7CiAgICAgICAgICAgICAgICAgaW1hZ2VDb250cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hl
ZXQoaW1hZ2VDb250cm9sc1J1bGVzKTsKICAgICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KCppbWFnZUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
ICAgICAgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmlt
YWdlQ29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CkBAIC0yMjYsNyArMjI2LDcgQEAg
dm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bAogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC5k
b2N1bWVudCgpLndlYmtpdElzRnVsbFNjcmVlbigpKSB7Ci0gICAgICAgIFN0cmluZyBmdWxsc2Ny
ZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5leHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CisgICAgICAgIFN0cmluZyBmdWxsc2Ny
ZWVuUnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
LmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKICAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKICAgICAgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldCgqZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7
CiAgICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmZ1bGxzY3Jl
ZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUNvbG9y
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIENvbG9yIFN0eWxlQ29sb3I6OmNv
bG9yRnJvbUtleXdvcmQoQ1NTVmEKICAgICAgICAgaWYgKGNvbnN0IE5hbWVkQ29sb3IqIG5hbWVk
Q29sb3IgPSBmaW5kQ29sb3IodmFsdWVOYW1lLCBzdHJsZW4odmFsdWVOYW1lKSkpCiAgICAgICAg
ICAgICByZXR1cm4gQ29sb3IobmFtZWRDb2xvci0+QVJHQlZhbHVlKTsKICAgICB9Ci0gICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3Ioa2V5d29yZCk7Cisg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihrZXl3b3JkKTsK
IH0KIAogYm9vbCBTdHlsZUNvbG9yOjppc0NvbG9yS2V5d29yZChDU1NWYWx1ZUlEIGlkKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OTgsNyArOTk4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQog
CiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhl
IHN0eWxlLgogICAgIGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlbGVtZW50LCBt
X3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5i
YWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgUmVu
ZGVyVGhlbWU6OnNpbmdsZXRvbigpLmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwg
bV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUu
YmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0
eWxlLgogICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjE2ODU4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzMsMTYgKzE3MywxMyBAQCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3Qg
U3RyaW5nCiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNvbG9yKCk7CiB9CiAKLUNvbG9yIENT
U1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQq
IGRvY3VtZW50KQorQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogewotICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAogICAgIENTU1ZhbHVlSUQgaWQgPSBjc3NWYWx1
ZUtleXdvcmRJRChzdHJpbmcpOwogICAgIGlmICghU3R5bGVDb2xvcjo6aXNTeXN0ZW1Db2xvcihp
ZCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIAotICAgIHJldHVybiBkb2N1bWVudC0+
cGFnZSgpLT50aGVtZSgpLnN5c3RlbUNvbG9yKGlkKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnN5c3RlbUNvbG9yKGlkKTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjE2ODU4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZh
cmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIGNvbnN0IEN1
c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdy
aXRpbmdNb2RlKTsKIAogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYs
IGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNvbG9y
KGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIENvbG9yIHBhcnNlU3lzdGVt
Q29sb3IoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VW
YWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpbXBvcnRhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDI5LDcgKzQ0MjksNyBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lU3lzdGVtRm9u
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKLSAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3Rl
bUZvbnQoc3lzdGVtRm9udElELCBmb250RGVzY3JpcHRpb24pOworICAgIFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5zeXN0ZW1Gb250KHN5c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKICAg
ICBpZiAoIWZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdp
dGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQogICAgIC8v
IGFscmVhZHkgYmxpbmtpbmcgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgogICAgIGlmIChzaG91bGRC
bGluayAmJiAhbV9jYXJldEJsaW5rVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBpZiAoU2Vj
b25kcyBibGlua0ludGVydmFsID0gbV9mcmFtZS0+cGFnZSgpLT50aGVtZSgpLmNhcmV0QmxpbmtJ
bnRlcnZhbCgpKQorICAgICAgICBpZiAoU2Vjb25kcyBibGlua0ludGVydmFsID0gUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLmNhcmV0QmxpbmtJbnRlcnZhbCgpKQogICAgICAgICAgICAgbV9jYXJl
dEJsaW5rVGltZXIuc3RhcnRSZXBlYXRpbmcoYmxpbmtJbnRlcnZhbCk7CiAKICAgICAgICAgaWYg
KCFtX2NhcmV0UGFpbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY5OCw3ICs2Njk4LDcgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIG1lZGlhQ29udHJvbHNTY3JpcHQgPSBSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKHBhZ2UpLT5tZWRpYUNvbnRyb2xzU2NyaXB0KCk7CisgICAg
U3RyaW5nIG1lZGlhQ29udHJvbHNTY3JpcHQgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVk
aWFDb250cm9sc1NjcmlwdCgpOwogICAgIGlmICghbWVkaWFDb250cm9sc1NjcmlwdC5sZW5ndGgo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
UmVmPEhUTUxNZXRlckVsZW1lbnQ+IEhUTUxNZXRlckVsZW1lbnQ6OgogCiBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gSFRNTE1ldGVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRl
clN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5zdXBwb3J0c01ldGVyKHN0eWxlLmFwcGVhcmFuY2Uo
KSkpCisgICAgaWYgKCFSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3VwcG9ydHNNZXRlcihzdHls
ZS5hcHBlYXJhbmNlKCkpKQogICAgICAgICByZXR1cm4gUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9y
KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiAKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyTWV0ZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94U2VsZWN0SXRlCiBib29s
IEhUTUxTZWxlY3RFbGVtZW50Ojp1c2VzTWVudUxpc3QoKSBjb25zdAogewogI2lmICFQTEFURk9S
TShJT1MpCi0gICAgaWYgKFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQoKS5wYWdl
KCkpLT5kZWxlZ2F0ZXNNZW51TGlzdFJlbmRlcmluZygpKQorICAgIGlmIChSZW5kZXJUaGVtZTo6
c2luZ2xldG9uKCkuZGVsZWdhdGVzTWVudUxpc3RSZW5kZXJpbmcoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDE7CkBAIC0xMDg1
LDcgKzEwODUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiAKIGJvb2wgSFRN
TFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogewotICAgIGlmICghUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShkb2N1bWVudCgp
LnBhZ2UoKSktPnBvcHNNZW51QnlBcnJvd0tleXMoKSkKKyAgICBpZiAoIVJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgp
KSkgewpAQCAtMTExOSw4ICsxMTE5LDYgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxp
c3REZWZhdWx0RQogICAgIEFTU0VSVChyZW5kZXJlcigpKTsKICAgICBBU1NFUlQocmVuZGVyZXIo
KS0+aXNNZW51TGlzdCgpKTsKIAotICAgIFJlZlB0cjxSZW5kZXJUaGVtZT4gcmVuZGVyVGhlbWUg
PSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50KCkucGFnZSgpKTsKLQogICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAgICBp
ZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEx
ODgsNyArMTE4Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyZW5kZXJUaGVt
ZS0+cG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSkgeworICAgICAgICBpZiAoUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkpIHsKICAgICAgICAgICAgIGlm
IChrZXlDb2RlID09ICcgJyB8fCBrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgICAgICBm
b2N1cygpOwogCkBAIC0xMjA1LDcgKzEyMDMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpt
ZW51TGlzdERlZmF1bHRFCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTWVudUxpc3Q+
KCpyZW5kZXJlcikuc2hvd1BvcHVwKCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyVGhlbWUtPnBvcHNNZW51
QnlBcnJvd0tleXMoKSkgeworICAgICAgICB9IGVsc2UgaWYgKFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpIHsKICAgICAgICAgICAgIGlmIChrZXlDb2RlID09
ICcgJykgewogICAgICAgICAgICAgICAgIGZvY3VzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA1LDcgKzgwNSw3IEBAIHZvaWQgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmFkanVzdEkKICAgICB9CiAKICAgICBpZiAoaXNEaXNhYmxlZEZvcm1D
b250cm9sKCkpCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLnNldENvbG9yKGRvY3VtZW50KCkucGFn
ZSgpLT50aGVtZSgpLmRpc2FibGVkVGV4dENvbG9yKHRleHRCbG9ja1N0eWxlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcGFyZW50U3R5bGUudmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkpOworICAgICAgICB0ZXh0QmxvY2tT
dHlsZS5zZXRDb2xvcihSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZGlzYWJsZWRUZXh0Q29sb3Io
dGV4dEJsb2NrU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBw
YXJlbnRTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmICh0ZXh0QmxvY2tTdHlsZS50ZXh0U2Vj
dXJpdHkoKSAhPSBUU05PTkUgJiYgIXRleHRCbG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgYWxpZ25tZW50IGJ1dCBmb3JjZSB0aGUg
ZGlyZWN0aW9uIHRvIExUUiBzbyB0aGF0IHRoZSBsYXN0LXR5cGVkLCB1bm1hc2tlZCBjaGFyYWN0
ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcx
LDggKzE3MSw3IEBAIElucHV0VHlwZTo6fklucHV0VHlwZSgpCiAKIGJvb2wgSW5wdXRUeXBlOjp0
aGVtZVN1cHBvcnRzRGF0YUxpc3RVSShJbnB1dFR5cGUqIHR5cGUpCiB7Ci0gICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gdHlwZS0+ZWxlbWVudCgpLmRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQucGFnZSgpKS0+c3VwcG9ydHNEYXRhTGlzdFVJ
KHR5cGUtPmZvcm1Db250cm9sVHlwZSgpKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmds
ZXRvbigpLnN1cHBvcnRzRGF0YUxpc3RVSSh0eXBlLT5mb3JtQ29udHJvbFR5cGUoKSk7CiB9CiAK
IGJvb2wgSW5wdXRUeXBlOjppc1RleHRGaWVsZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0NCwxMiArMjQ0LDEyIEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpuZWVkc0NvbnRhaW5l
cigKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50KCkuZG9j
dW1lbnQoKS5wYWdlKCkpLT5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOworICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVu
dCgpKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVDYXBzTG9ja0lu
ZGljYXRvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
ZWxlbWVudCgpLmRvY3VtZW50KCkucGFnZSgpKS0+c2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9y
KGVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zaG91bGRI
YXZlQ2Fwc0xvY2tJbmRpY2F0b3IoZWxlbWVudCgpKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1
dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzksNyArODM5LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQogICAgICAgICByZXR1cm47CiAKICAgICBy
ZWFsaXplU2F2ZXMoKTsKLSAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJv
bVN0cmluZyhjb2xvciwgJmNhbnZhcygpLmRvY3VtZW50KCkpKTsKKyAgICBzZXRTdHJva2VTdHls
ZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb2xvcikpOwogICAgIG1vZGlmaWFibGVT
dGF0ZSgpLnVucGFyc2VkU3Ryb2tlQ29sb3IgPSBjb2xvcjsKIH0KIApAQCAtODc1LDcgKzg3NSw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ28KICAgICAgICAgcmV0
dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxl
OjpjcmVhdGVGcm9tU3RyaW5nKGNvbG9yLCAmY2FudmFzKCkuZG9jdW1lbnQoKSkpOworICAgIHNl
dEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb2xvcikpOwogICAgIG1v
ZGlmaWFibGVTdGF0ZSgpLnVucGFyc2VkRmlsbENvbG9yID0gY29sb3I7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDIxNjg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIHN0YXRpYyBib29sIGlzQ3VycmVudENvbG9yU3Ry
aW5nKGNvbnN0IFMKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29s
b3JTdHJpbmcsICJjdXJyZW50Y29sb3IiKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3Io
Y29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cikK
K3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3JTdHJpbmcpOwogICAg
IGlmIChjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4g
Q1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbG9yU3RyaW5nLCBkb2N1bWVudCk7CisgICAg
cmV0dXJuIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZyk7CiB9CiAKIENv
bG9yIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQpAQCAtNzEsNyArNzEs
NyBAQCBDb2xvciBwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IoY29uc3QgU3RyCiAgICAgaWYgKGlz
Q3VycmVudENvbG9yU3RyaW5nKGNvbG9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRD
b2xvcihjYW52YXMpOwogCi0gICAgcmV0dXJuIHBhcnNlQ29sb3IoY29sb3JTdHJpbmcsIGNhbnZh
cyA/ICZjYW52YXMtPmRvY3VtZW50KCkgOiBudWxscHRyKTsKKyAgICByZXR1cm4gcGFyc2VDb2xv
cihjb2xvclN0cmluZyk7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xv
cikKQEAgLTEwOSwxMiArMTA5LDEyIEBAIGlubGluZSBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
Q3VycmVudEMKIHsKIH0KIAotQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50KQorQ2FudmFz
U3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvclN0
cmluZykKIHsKICAgICBpZiAoaXNDdXJyZW50Q29sb3JTdHJpbmcoY29sb3JTdHJpbmcpKQogICAg
ICAgICByZXR1cm4gQ3VycmVudENvbG9yIHsgc3RkOjpudWxsb3B0IH07CiAKLSAgICBDb2xvciBj
b2xvciA9IHBhcnNlQ29sb3IoY29sb3JTdHJpbmcsIGRvY3VtZW50KTsKKyAgICBDb2xvciBjb2xv
ciA9IHBhcnNlQ29sb3IoY29sb3JTdHJpbmcpOwogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4geyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmgJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogICAgIENhbnZhc1N0eWxlKENhbnZhc0dyYWRpZW50Jik7CiAgICAgQ2FudmFzU3R5bGUoQ2Fu
dmFzUGF0dGVybiYpOwogCi0gICAgc3RhdGljIENhbnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiBjb2xvciwgRG9jdW1lbnQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIENh
bnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvcik7CiAgICAgc3Rh
dGljIENhbnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYShjb25zdCBT
dHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcg
QEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnN0YXJ0VGltZQogICAgIC8vIFRoZSB0
aW1lciBpcyByZXF1aXJlZCB0byBzZXQgdGhlIHByb3BlcnR5IGRpc3BsYXk6J25vbmUnIG9uIHRo
ZSBwYW5lbCwKICAgICAvLyBzdWNoIHRoYXQgY2FwdGlvbnMgYXJlIGNvcnJlY3RseSBkaXNwbGF5
ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8KICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBm
YWRlb3V0IHRyYW5zaXRpb24uCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9IGRvY3VtZW50KCkucGFn
ZSgpID8gZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJh
dGlvbigpIDogMF9zOworICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwogICAgIG1fdHJhbnNpdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChkdXJhdGlvbik7CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lk
IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZU9wYXF1CiAgICAgaWYgKG1fb3BhcXVlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBkb3VibGUgZHVyYXRpb24gPSBkb2N1bWVudCgpLnBhZ2Uo
KSA/IGRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpLm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlv
bigpIDogMDsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCku
bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7CiAKICAgICBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eU9wYWNpdHkpOwog
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb24s
IGR1cmF0aW9uLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwpAQCAtMjA1LDcgKzIwNSw3IEBA
IHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnMKICAgICBpZiAoIW1fb3Bh
cXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZWNvbmRzIGR1cmF0aW9uID0gZG9jdW1lbnQo
KS5wYWdlKCkgPyBkb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5tZWRpYUNvbnRyb2xzRmFkZU91
dER1cmF0aW9uKCkgOiAwX3M7CisgICAgU2Vjb25kcyBkdXJhdGlvbiA9IFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7CiAKICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0
eU9wYWNpdHkpOwogICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2l0
aW9uRHVyYXRpb24sIGR1cmF0aW9uLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAko
cmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIxICs4NywxNyBAQCB2b2lkIE1lZGlhQ29u
dHJvbHM6OnNldE1lZGlhQ29udHJvbGxlcihNCiAKIHZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQo
KQogewotICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQogICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUo
KTsKIAogICAgIHVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwogCiAgICAgZG91YmxlIGR1cmF0
aW9uID0gbV9tZWRpYUNvbnRyb2xsZXItPmR1cmF0aW9uKCk7Ci0gICAgaWYgKHN0ZDo6aXNmaW5p
dGUoZHVyYXRpb24pIHx8IHBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5n
Rm9yKE1lZGlhU2xpZGVyUGFydCkpIHsKKyAgICBpZiAoc3RkOjppc2Zpbml0ZShkdXJhdGlvbikg
fHwgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYVNsaWRlclBhcnQpKSB7CiAgICAgICAgIG1fdGltZWxpbmUtPnNldER1cmF0aW9uKGR1
cmF0aW9uKTsKICAgICAgICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUNvbnRyb2xs
ZXItPmN1cnJlbnRUaW1lKCkpOwogICAgIH0KIAotICAgIGlmIChtX21lZGlhQ29udHJvbGxlci0+
aGFzQXVkaW8oKSB8fCBwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYU11dGVCdXR0b25QYXJ0KSkKKyAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhhc0F1
ZGlvKCkgfHwgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmhhc093bkRpc2FibGVkU3RhdGVIYW5k
bGluZ0ZvcihNZWRpYU11dGVCdXR0b25QYXJ0KSkKICAgICAgICAgbV9wYW5lbE11dGVCdXR0b24t
PnNob3coKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CkBA
IC0xMjksMTkgKzEyNSwxNiBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkKIAogdm9pZCBN
ZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKCkKIHsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1l
bnQoKS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1
dHRvblBhcnQpKSB7CisgICAgYXV0byYgdGhlbWUgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCk7
CisgICAgaWYgKCF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFNdXRl
QnV0dG9uUGFydCkpIHsKICAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUoKTsKICAgICAg
ICAgbV92b2x1bWVTbGlkZXItPmhpZGUoKTsKICAgICB9CiAKLSAgICBpZiAobV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiAmJiAhcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoTWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQpKQorICAgIGlmICht
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uICYmICF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRl
SGFuZGxpbmdGb3IoTWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQpKQogICAgICAg
ICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaWRlKCk7CiAKLSAgICBpZiAobV9mdWxs
U2NyZWVuQnV0dG9uICYmICFwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvblBhcnQpKQorICAgIGlmIChtX2Z1bGxTY3Jl
ZW5CdXR0b24gJiYgIXRoZW1lLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYUVu
dGVyRnVsbHNjcmVlbkJ1dHRvblBhcnQpKQogICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhp
ZGUoKTsKIH0KIApAQCAtMjE4LDEyICsyMTEsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXli
YWNrU3RvcHBlZCgpCiB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZUN1cnJlbnRUaW1lRGlzcGxh
eSgpCiB7CiAgICAgZG91YmxlIG5vdyA9IG1fbWVkaWFDb250cm9sbGVyLT5jdXJyZW50VGltZSgp
OwotCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4
dChwYWdlLT50aGVtZSgpLmZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKG5vdykpOworICAgIG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZv
cm1hdE1lZGlhQ29udHJvbHNUaW1lKG5vdykpOwogICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5z
ZXRDdXJyZW50VmFsdWUobm93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRN
YWMuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9t
YWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw3IEBAIFJlZlB0cjxJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYz4gSW0KICAg
ICBhdXRvIGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRN
YWMoZG9jdW1lbnQpKTsKICAgICBidXR0b24tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oSFRNTE5hbWVzOjpjbGFzc0F0dHIsIEF0b21pY1N0cmluZygieC13ZWJraXQtaW1hZ2Ut
Y29udHJvbHMtYnV0dG9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwog
Ci0gICAgSW50U2l6ZSBwb3NpdGlvbk9mZnNldCA9IGRvY3VtZW50LnBhZ2UoKS0+dGhlbWUoKS5p
bWFnZUNvbnRyb2xzQnV0dG9uUG9zaXRpb25PZmZzZXQoKTsKKyAgICBJbnRTaXplIHBvc2l0aW9u
T2Zmc2V0ID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmltYWdlQ29udHJvbHNCdXR0b25Qb3Np
dGlvbk9mZnNldCgpOwogICAgIGJ1dHRvbi0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgcG9zaXRpb25PZmZzZXQuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOwogCiAgICAgLy8gRklYTUU6IFdoeSBpcyByaWdodDogMHB4IG9mZiB0aGUgcmlnaHQgZWRn
ZSBvZiB0aGUgcGFyZW50PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3Bw
CShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIHZvaWQgcmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KCkKIHsKLSAgICBSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCktPnB1cmdlQ2FjaGVzKCk7CisgICAgUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLnB1cmdlQ2FjaGVzKCk7CiAKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnB1
cmdlSW5hY3RpdmVGb250RGF0YSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9u
IDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNSw3ICsyMDUsNiBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiYgcGFnZUNv
bmZpCiAgICAgLCBtX3Byb2dyZXNzKHN0ZDo6bWFrZV91bmlxdWU8UHJvZ3Jlc3NUcmFja2VyPigq
cGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50KSkKICAgICAsIG1fYmFja0Zv
cndhcmRDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8QmFja0ZvcndhcmRDb250cm9sbGVyPigq
dGhpcywgKldURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uYmFja0ZvcndhcmRDbGllbnQpKSkKICAg
ICAsIG1fbWFpbkZyYW1lKE1haW5GcmFtZTo6Y3JlYXRlKCp0aGlzLCBwYWdlQ29uZmlndXJhdGlv
bikpCi0gICAgLCBtX3RoZW1lKFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UodGhpcykpCiAgICAg
LCBtX2VkaXRvckNsaWVudChXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmVkaXRvckNsaWVudCkp
CiAgICAgLCBtX3BsdWdJbkNsaWVudChwYWdlQ29uZmlndXJhdGlvbi5wbHVnSW5DbGllbnQpCiAg
ICAgLCBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24u
dmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDIx
Njg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsOCArMTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1JlY2FsY1N0eWxlSW5B
bGxGcmFtZXMoKTsKIAotICAgIFJlbmRlclRoZW1lJiB0aGVtZSgpIGNvbnN0IHsgcmV0dXJuICpt
X3RoZW1lOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9y
dEFyZ3VtZW50cygpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9v
bCByZWxvYWQpOwpAQCAtNjY2LDggKzY2NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UGx1
Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwogCi0gICAgUmVmUHRyPFJlbmRlclRoZW1lPiBtX3RoZW1l
OwotCiAgICAgVW5pcXVlUmVmPEVkaXRvckNsaWVudD4gbV9lZGl0b3JDbGllbnQ7CiAgICAgUGx1
Z0luQ2xpZW50KiBtX3BsdWdJbkNsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQ+IG1fdmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbGludXgvUmVzb3VyY2VVc2FnZU92ZXJsYXlMaW51
eC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbGludXgvUmVz
b3VyY2VVc2FnZU92ZXJsYXlMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgICAgICA6IG1fb3ZlcmxheShvdmVybGF5KQogICAgIHsKICAgICAgICAg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgICAgIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZU1lc3NhZ2VCb3gsIGZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250
KENTU1ZhbHVlTWVzc2FnZUJveCwgZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShnRm9udFNpemUpOwogICAgICAgICBtX3RleHRGb250ID0g
Rm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICAgICAgbV90ZXh0Rm9udC51
cGRhdGUobnVsbHB0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9w
dXBNZW51V2luLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMiw4ICs2MjIsOCBA
QCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYgCiAgICAgICAgIENvbG9y
IG9wdGlvbkJhY2tncm91bmRDb2xvciwgb3B0aW9uVGV4dENvbG9yOwogICAgICAgICBQb3B1cE1l
bnVTdHlsZSBpdGVtU3R5bGUgPSBjbGllbnQoKS0+aXRlbVN0eWxlKGluZGV4KTsKICAgICAgICAg
aWYgKGluZGV4ID09IGZvY3VzZWRJbmRleCgpKSB7Ci0gICAgICAgICAgICBvcHRpb25CYWNrZ3Jv
dW5kQ29sb3IgPSBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgICAgIG9wdGlvblRleHRDb2xvciA9IFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpOworICAgICAgICAgICAgb3B0aW9uQmFja2dyb3VuZENvbG9yID0gUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsK
KyAgICAgICAgICAgIG9wdGlvblRleHRDb2xvciA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBvcHRpb25CYWNrZ3JvdW5kQ29sb3IgPSBpdGVtU3R5bGUuYmFja2dyb3Vu
ZENvbG9yKCk7CiAgICAgICAgICAgICBvcHRpb25UZXh0Q29sb3IgPSBpdGVtU3R5bGUuZm9yZWdy
b3VuZENvbG9yKCk7CkBAIC02NjAsMTIgKzY2MCwxMiBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFp
bnQoY29uc3QgSW50UmVjdCYgCiAgICAgICAgICAgICBpbnQgdGV4dFggPSAwOwogICAgICAgICAg
ICAgaWYgKGNsaWVudCgpLT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAg
ICAgICAgICAgICAgICAgdGV4dFggPSBzdGQ6Om1heDxpbnQ+KDAsIGNsaWVudCgpLT5jbGllbnRQ
YWRkaW5nTGVmdCgpIC0gY2xpZW50KCktPmNsaWVudEluc2V0TGVmdCgpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cE9wdGlvblN1cHBvcnRz
VGV4dEluZGVudCgpKQorICAgICAgICAgICAgICAgIGlmIChSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkucG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
dGV4dFggKz0gbWluaW11bUludFZhbHVlRm9yTGVuZ3RoKGl0ZW1TdHlsZS50ZXh0SW5kZW50KCks
IGl0ZW1SZWN0LndpZHRoKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICB0ZXh0WCA9IGl0ZW1SZWN0LndpZHRoKCkgLSBjbGllbnQoKS0+bWVudVN0eWxlKCkuZm9udCgp
LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIHRleHRYID0gc3RkOjptaW48aW50Pih0
ZXh0WCwgdGV4dFggLSBjbGllbnQoKS0+Y2xpZW50UGFkZGluZ1JpZ2h0KCkgKyBjbGllbnQoKS0+
Y2xpZW50SW5zZXRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKQorICAgICAgICAg
ICAgICAgIGlmIChSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkucG9wdXBPcHRpb25TdXBwb3J0c1Rl
eHRJbmRlbnQoKSkKICAgICAgICAgICAgICAgICAgICAgdGV4dFggLT0gbWluaW11bUludFZhbHVl
Rm9yTGVuZ3RoKGl0ZW1TdHlsZS50ZXh0SW5kZW50KCksIGl0ZW1SZWN0LndpZHRoKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaW50IHRleHRZID0gaXRlbVJlY3QueSgpICsgaXRlbUZv
bnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSArIChpdGVtUmVjdC5oZWlnaHQoKSAtIGl0ZW1Gb250
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpIC8gMjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3BlL1JlbmRlclRoZW1lV1BFLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1JlbmRlclRoZW1lV1BFLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTAgKzMzLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFJlbmRl
clRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQorUmVuZGVyVGhlbWUmIFJl
bmRlclRoZW1lOjpzaW5nbGV0b24oKQogewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSYgdGhlbWUg
PSBSZW5kZXJUaGVtZVdQRTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiB0aGVtZTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFJlbmRlclRoZW1lPj4gdGhlbWUoUmVuZGVy
VGhlbWVXUEU6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gdGhlbWUuZ2V0KCk7CiB9CiAKIHZvaWQg
UmVuZGVyVGhlbWVXUEU6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1
ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjE2
ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDcgKzM1Nyw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OmdldFJlcGxhY2VtZW4KICAgICBjb250ZW50UmVjdC5tb3ZlQnkocm91bmRlZEludFBv
aW50KGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKLSAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZv
bnQoQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7CisgICAgUmVu
ZGVyVGhlbWU6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRy
b2wsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChib2xk
V2VpZ2h0VmFsdWUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MoKS5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKDEyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIFJlbmRlck9i
amVjdDo6flJlbmRlck9iamVjdCgpCiAKIFJlbmRlclRoZW1lJiBSZW5kZXJPYmplY3Q6OnRoZW1l
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFnZSgpLnRoZW1lKCk7CisgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzRGVzY2VuZGFu
dE9mKGNvbnN0IFJlbmRlck9iamVjdCogYW5jZXN0b3IpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NzgsNyArMTI3OCw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFMK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogQ29sb3IgUmVuZGVyVGhlbWU6OnRhcEhpZ2hsaWdo
dENvbG9yKCkKIHsKLSAgICByZXR1cm4gZGVmYXVsdFRoZW1lKCktPnBsYXRmb3JtVGFwSGlnaGxp
Z2h0Q29sb3IoKTsKKyAgICByZXR1cm4gc2luZ2xldG9uKCkucGxhdGZvcm1UYXBIaWdobGlnaHRD
b2xvcigpOwogfQogI2VuZGlmCiAKQEAgLTEzMTMsNyArMTMxMyw3IEBAIHZvaWQgUmVuZGVyVGhl
bWU6OnNldEN1c3RvbUZvY3VzUmluZ0NvbG8KIAogQ29sb3IgUmVuZGVyVGhlbWU6OmZvY3VzUmlu
Z0NvbG9yKCkKIHsKLSAgICByZXR1cm4gY3VzdG9tRm9jdXNSaW5nQ29sb3IoKS5pc1ZhbGlkKCkg
PyBjdXN0b21Gb2N1c1JpbmdDb2xvcigpIDogZGVmYXVsdFRoZW1lKCktPnBsYXRmb3JtRm9jdXNS
aW5nQ29sb3IoKTsKKyAgICByZXR1cm4gY3VzdG9tRm9jdXNSaW5nQ29sb3IoKS5pc1ZhbGlkKCkg
PyBjdXN0b21Gb2N1c1JpbmdDb2xvcigpIDogUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnBsYXRm
b3JtRm9jdXNSaW5nQ29sb3IoKTsKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdERl
ZmF1bHRMYWJlbChib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miwx
NSArNjIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWUoKSB7IH0KIAogICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4geW91ciBwbGF0Zm9ybS1z
cGVjaWZpYyB0aGVtZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kIGJhY2sgdGhlCi0gICAgLy8gYXBw
cm9wcmlhdGUgcGxhdGZvcm0gdGhlbWUuIFdoZW4gdGhlIHRoZW1lIGlzIG5lZWRlZCBpbiBub24t
cGFnZSBkZXBlbmRlbnQgY29kZSwgYSBkZWZhdWx0IHRoZW1lIGlzCi0gICAgLy8gdXNlZCBhcyBm
YWxsYmFjaywgd2hpY2ggaXMgcmV0dXJuZWQgZm9yIGEgbnVsbGVkIHBhZ2UsIHNvIHRoZSBwbGF0
Zm9ybSBjb2RlIG5lZWRzIHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgc3RhdGljIFJlZjxSZW5k
ZXJUaGVtZT4gdGhlbWVGb3JQYWdlKFBhZ2UqKTsKLQotICAgIC8vIFdoZW4gdGhlIHRoZW1lIGlz
IG5lZWRlZCBpbiBub24tcGFnZSBkZXBlbmRlbnQgY29kZSwgdGhlIGRlZmF1bHRUaGVtZSgpIGlz
IHVzZWQgYXMgZmFsbGJhY2suCi0gICAgc3RhdGljIGlubGluZSBSZWY8UmVuZGVyVGhlbWU+IGRl
ZmF1bHRUaGVtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhlbWVGb3JQYWdlKG51bGxwdHIp
OwotICAgIH07CisgICAgLy8gYXBwcm9wcmlhdGUgcGxhdGZvcm0gdGhlbWUuCisgICAgc3RhdGlj
IFJlbmRlclRoZW1lJiBzaW5nbGV0b24oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUNhY2hl
cygpIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0
ay5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEwICs2NiwxMCBAQCBSZWY8UmVu
ZGVyVGhlbWU+IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVuZGVyVGhlbWVHdGsoKSk7CiB9CiAKLVJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6
OnRoZW1lRm9yUGFnZShQYWdlKikKK1JlbmRlclRoZW1lJiBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUmIHJ0ID0gUmVuZGVyVGhlbWVHdGs6OmNyZWF0
ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gcnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFJlZjxSZW5kZXJUaGVtZT4+IHRoZW1lKFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoKSk7CisgICAg
cmV0dXJuIHRoZW1lLmdldCgpOwogfQogCiBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lv
biAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI5NSwxMCArMjk1LDEwIEBAIFJlbmRlclRoZW1lSU9TOjpSZW5k
ZXJUaGVtZUlPUygpCiAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlm
aWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGNvbnRlbnRTaXplQ2F0ZWdvcnlE
aWRDaGFuZ2UsIFVJQ29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbiwgMCwg
Q0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwogfQog
Ci1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSopCitSZW5k
ZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3RhdGljIFJlbmRlclRo
ZW1lJiByZW5kZXJUaGVtZSA9IFJlbmRlclRoZW1lSU9TOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0g
ICAgcmV0dXJuIHJlbmRlclRoZW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVu
ZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZUlPUzo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0
aGVtZS5nZXQoKTsKIH0KIAogUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUlPUzo6Y3JlYXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJl
dmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgZW51bSB7CiAgICAgbGVm
dFBhZGRpbmcKIH07CiAKLVJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFn
ZShQYWdlKikKK1JlbmRlclRoZW1lJiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsKLSAgICBz
dGF0aWMgUmVuZGVyVGhlbWUmIHJ0ID0gUmVuZGVyVGhlbWVNYWM6OmNyZWF0ZSgpLmxlYWtSZWYo
KTsKLSAgICByZXR1cm4gcnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxSZW5kZXJU
aGVtZT4+IHRoZW1lKFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKSk7CisgICAgcmV0dXJuIHRoZW1l
LmdldCgpOwogfQogCiBSZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZp
c2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTAgKzE4OCwxMCBAQCBSZWY8UmVuZGVyVGhlbWU+
IFJlbmRlclRoZW1lV2luOjpjcmVhdGUoCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVy
VGhlbWVXaW4pOwogfQogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBh
Z2UoUGFnZSogcGFnZSkKK1JlbmRlclRoZW1lJiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsK
LSAgICBzdGF0aWMgUmVuZGVyVGhlbWUmIHdpblRoZW1lID0gUmVuZGVyVGhlbWVXaW46OmNyZWF0
ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gd2luVGhlbWU7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJlZjxSZW5kZXJUaGVtZT4+IHRoZW1lKFJlbmRlclRoZW1lV2luOjpjcmVhdGUoKSk7
CisgICAgcmV0dXJuIHRoZW1lLmdldCgpOwogfQogCiBSZW5kZXJUaGVtZVdpbjo6UmVuZGVyVGhl
bWVXaW4oKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIFRleHRQYWludFN0
eWxlIGNvbXB1dGVUZXh0UGFpbnRTdHlsZShjb24KICAgICBpZiAobGluZVN0eWxlLmluc2lkZURl
ZmF1bHRCdXR0b24oKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogICAg
ICAgICBpZiAocGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpKSB7Ci0g
ICAgICAgICAgICBwYWludFN0eWxlLmZpbGxDb2xvciA9IHBhZ2UtPnRoZW1lKCkuc3lzdGVtQ29s
b3IoQ1NTVmFsdWVBY3RpdmVidXR0b250ZXh0KTsKKyAgICAgICAgICAgIHBhaW50U3R5bGUuZmls
bENvbG9yID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQWN0
aXZlYnV0dG9udGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gcGFpbnRTdHlsZTsKICAgICAgICAg
fQogICAgIH0K
</data>
<flag name="review"
          id="331234"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310144</attachid>
            <date>2017-05-15 10:01:06 -0700</date>
            <delta_ts>2017-05-15 11:57:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertheme-singleton-3.patch</filename>
            <type>text/plain</type>
            <size>41389</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDE3LTA1LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXJUaGVtZSBkb2VzIG5v
dCBuZWVkIHRvIGJlIHBlci1wYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxMTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNDI2NDU3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKworICAgICAgICBUaGVyZSBhcmUg
bm8gaW1wbGVtZW50YXRpb25zIG9mIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UgdGhhdCBhY3R1
YWxseSBjYXJlIGFib3V0IHRoZSBwYWdlLgorICAgICAgICBJdCBjYW4gYmUgcmVwbGFjZWQgd2l0
aCBhIHNpbmdsZXRvbiwgc2ltcGxpZnlpbmcgYSBidW5jaCBvZiBjb2RlLgorCisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaGFkb3dSb290Q1NTVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6YmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBl
KToKKyAgICAgICAgKiBjc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0RlZmF1bHRTdHlsZVNoZWV0czo6bG9hZEZ1bGxEZWZhdWx0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVT
aGVldHNGb3JFbGVtZW50KToKKworICAgICAgICAgICAgRml4IGEgcG90ZW50aWFsIGNyYXNoIGlm
IHdlIGdldCBoZXJlIHdoZW4gcGFnZSBpcyBudWxsICh0aG91Z2ggaXQgZG9lc24ndCBhcHBlYXIg
dG8gcmVwcm8gb24gdHJ1bmspLgorCisgICAgICAgICogY3NzL1N0eWxlQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5d29yZCk6CisgICAgICAgICog
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcik6CisgICAgICAg
ICogY3NzL3BhcnNlci9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25z
dW1lU3lzdGVtRm9udCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAg
ICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCk6CisgICAgICAg
ICogaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRl
ckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dXNl
c01lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9y
bUhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjphZGp1c3RJbm5lclRleHRTdHlsZSk6CisgICAgICAgICogaHRtbC9JbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjp0aGVtZVN1cHBvcnRzRGF0
YUxpc3RVSSk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVDYXBzTG9ja0lu
ZGljYXRvcik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ry
b2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsQ29sb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xv
ck9yQ3VycmVudENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVG
cm9tU3RyaW5nKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFxdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQpOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sczo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6cmVw
b3J0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJy
ZW50VGltZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KToKKyAgICAg
ICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0aGVtZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1JlbmRlclRoZW1lV1BFLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnRoZW1l
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5n
bGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZVRleHRQYWludFN0eWxlKToKKwogMjAxNy0wNS0xNSAgTmFlbCBPdWVkcmFv
Z28gIDxuYWVsLm91ZWRyYW9nb0BjcmYuY2Fub24uZnI+CiAKICAgICAgICAgSW52YWxpZCBNZWRp
YVNvdXJjZSBkdXJhdGlvbiB2YWx1ZSBzaG91bGQgdGhyb3cgVHlwZXJFcnJvciBpbnN0ZWFkIG9m
IEludmFsaWRTdGF0ZUVycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29u
dHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAJKHJldmlzaW9uIDIx
Njg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCwxOCArMjgwLDEzIEBAIFN0cmluZyBN
ZWRpYUNvbnRyb2xzSG9zdDo6Z2VuZXJhdGVVVUlEKCkKIAogU3RyaW5nIE1lZGlhQ29udHJvbHNI
b3N0OjpzaGFkb3dSb290Q1NTVGV4dCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdl
KHBhZ2UpLT5tb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkubW9kZXJuTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKIH0K
IAogU3RyaW5nIE1lZGlhQ29udHJvbHNIb3N0OjpiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29uVHlwZSkgY29uc3QK
IHsKLSAgICBQYWdlKiBwYWdlID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwot
ICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJu
IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UocGFnZSktPm1lZGlhQ29udHJvbHNCYXNlNjRTdHJp
bmdGb3JJY29uTmFtZUFuZFR5cGUoaWNvbk5hbWUsIGljb25UeXBlKTsKKworICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25O
YW1lQW5kVHlwZShpY29uTmFtZSwgaWNvblR5cGUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjE2ODU4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjps
b2FkRnVsbERlZmEKICAgICB9CiAKICAgICAvLyBTdHJpY3QtbW9kZSBydWxlcy4KLSAgICBTdHJp
bmcgZGVmYXVsdFJ1bGVzID0gU3RyaW5nKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
aHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOworICAgIFN0cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJp
bmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihodG1sVXNlckFnZW50U3R5bGVTaGVl
dCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsK
ICAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMpOwogICAg
IGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmRlZmF1bHRTdHlsZVNoZWV0LCBzY3Jl
ZW5FdmFsKCkpOwogICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqZGVm
YXVsdFN0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKIAogICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVz
LgotICAgIFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyAgICBTdHJpbmcgcXVpcmtz
UnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1Vz
ZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5leHRyYVF1aXJr
c1N0eWxlU2hlZXQoKTsKICAgICBxdWlya3NTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJr
c1J1bGVzKTsKICAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWly
a3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwogfQpAQCAtMTcwLDggKzE3MCw4IEBAIHZvaWQg
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKIAogICAgIGlmIChpczxIVE1MRWxl
bWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPYmplY3RFbGVtZW50PihlbGVt
ZW50KSB8fCBpczxIVE1MRW1iZWRFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICAgICAgaWYg
KCFwbHVnSW5zU3R5bGVTaGVldCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwbHVnSW5zUnVs
ZXMgPSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkp
LT5leHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgKyBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5j
aHJvbWUoKS5jbGllbnQoKS5wbHVnSW5FeHRyYVN0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgIGlm
ICghcGx1Z0luc1N0eWxlU2hlZXQgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAg
ICAgICAgICAgICAgIFN0cmluZyBwbHVnSW5zUnVsZXMgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkuZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpICsgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkucGx1Z0luRXh0cmFTdHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHBsdWdJbnNSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHBsdWdJ
bnNSdWxlcyA9IFN0cmluZyhwbHVnSW5zVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHBsdWdJ
bnNVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgICAgICAgICAgICAgcGx1Z0luc1N0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQocGx1Z0luc1J1bGVzKTsKQEAgLTE4Miw5ICsxODIsOSBAQCB2b2lk
IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsCiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgICAgICBlbHNlIGlmIChpczxIVE1MTWVkaWFFbGVtZW50PihlbGVtZW50KSkgewogICAgICAg
ICAgICAgaWYgKCFtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBtZWRpYVJ1bGVzID0gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LmRvY3Vt
ZW50KCkucGFnZSgpKS0+bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgbWVkaWFSdWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOwogICAgICAgICAgICAgICAgIGlmIChtZWRpYVJ1bGVzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xz
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNo
ZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdl
KCkpLT5leHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisgICAgICAgICAgICAgICAgICAg
IG1lZGlhUnVsZXMgPSBTdHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKICAgICAgICAgICAgICAg
ICBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKICAg
ICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCptZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgICAgICAgICBkZWZhdWx0UHJp
bnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKm1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBwcmlu
dEV2YWwoKSk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6
OmVuc3VyZURlZmF1bAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgICAgICBlbHNl
IGlmIChpczxIVE1MRGl2RWxlbWVudD4oZWxlbWVudCkgJiYgZWxlbWVudC5pc0ltYWdlQ29udHJv
bHNSb290RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIWltYWdlQ29udHJvbHNTdHlsZVNo
ZWV0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlQ29udHJvbHNSdWxlcyA9IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSktPmltYWdlQ29u
dHJvbHNTdHlsZVNoZWV0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlQ29udHJvbHNS
dWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5pbWFnZUNvbnRyb2xzU3R5bGVTaGVldCgp
OwogICAgICAgICAgICAgICAgIGltYWdlQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0
KGltYWdlQ29udHJvbHNSdWxlcyk7CiAgICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldCgqaW1hZ2VDb250cm9sc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCppbWFn
ZUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZv
aWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKICAgICBpZiAoIWZ1bGxzY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQuZG9j
dW1lbnQoKS53ZWJraXRJc0Z1bGxTY3JlZW4oKSkgewotICAgICAgICBTdHJpbmcgZnVsbHNjcmVl
blJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoZnVs
bHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KS0+ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpOworICAgICAgICBTdHJpbmcgZnVsbHNjcmVl
blJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoZnVs
bHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5l
eHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CiAgICAgICAgIGZ1bGxzY3JlZW5TdHlsZVNoZWV0
ID0gcGFyc2VVQVNoZWV0KGZ1bGxzY3JlZW5SdWxlcyk7CiAgICAgICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoKmZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwog
ICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpmdWxsc2NyZWVu
U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVDb2xvci5j
cHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUNvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBDb2xvciBTdHlsZUNvbG9yOjpjb2xv
ckZyb21LZXl3b3JkKENTU1ZhCiAgICAgICAgIGlmIChjb25zdCBOYW1lZENvbG9yKiBuYW1lZENv
bG9yID0gZmluZENvbG9yKHZhbHVlTmFtZSwgc3RybGVuKHZhbHVlTmFtZSkpKQogICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKG5hbWVkQ29sb3ItPkFSR0JWYWx1ZSk7CiAgICAgfQotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGtleXdvcmQpOworICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtQ29sb3Ioa2V5d29yZCk7CiB9
CiAKIGJvb2wgU3R5bGVDb2xvcjo6aXNDb2xvcktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk4
LDcgKzk5OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKIAog
ICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBz
dHlsZS4KICAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwgbV9z
dGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFj
a2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5hZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsIGVsZW1lbnQsIG1f
c3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJh
Y2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KICAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTczLDE2ICsxNzMsMTMgQEAgQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0
cmluZwogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOwogfQogCi1Db2xvciBDU1NQ
YXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBk
b2N1bWVudCkKK0NvbG9yIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKICAgICBDU1NWYWx1ZUlEIGlkID0gY3NzVmFsdWVL
ZXl3b3JkSUQoc3RyaW5nKTsKICAgICBpZiAoIVN0eWxlQ29sb3I6OmlzU3lzdGVtQ29sb3IoaWQp
KQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnBh
Z2UoKS0+dGhlbWUoKS5zeXN0ZW1Db2xvcihpZCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5zeXN0ZW1Db2xvcihpZCk7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJp
YWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBjb25zdCBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uLCBXcml0
aW5nTW9kZSk7CiAKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmLCBi
b29sIHN0cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihj
b25zdCBTdHJpbmcmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNv
bG9yKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYs
IGJvb2wgaW1wb3J0YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQy
OSw3ICs0NDI5LDcgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6Y29uc3VtZVN5c3RlbUZvbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1G
b250KHN5c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKKyAgICBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkuc3lzdGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7CiAgICAg
aWYgKCFmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDU3LDcgKzIwNTcsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICAvLyBTdGFydCBibGlua2luZyB3aXRo
IGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYgd2UncmUKICAgICAvLyBh
bHJlYWR5IGJsaW5raW5nIGluIHRoZSByaWdodCBsb2NhdGlvbi4KICAgICBpZiAoc2hvdWxkQmxp
bmsgJiYgIW1fY2FyZXRCbGlua1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKFNlY29u
ZHMgYmxpbmtJbnRlcnZhbCA9IG1fZnJhbWUtPnBhZ2UoKS0+dGhlbWUoKS5jYXJldEJsaW5rSW50
ZXJ2YWwoKSkKKyAgICAgICAgaWYgKFNlY29uZHMgYmxpbmtJbnRlcnZhbCA9IFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5jYXJldEJsaW5rSW50ZXJ2YWwoKSkKICAgICAgICAgICAgIG1fY2FyZXRC
bGlua1RpbWVyLnN0YXJ0UmVwZWF0aW5nKGJsaW5rSW50ZXJ2YWwpOwogCiAgICAgICAgIGlmICgh
bV9jYXJldFBhaW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OTgsNyArNjY5OCw3IEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0ID0gUmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZShwYWdlKS0+bWVkaWFDb250cm9sc1NjcmlwdCgpOworICAgIFN0
cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0ID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlh
Q29udHJvbHNTY3JpcHQoKTsKICAgICBpZiAoIW1lZGlhQ29udHJvbHNTY3JpcHQubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWV0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZXRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIFJl
ZjxIVE1MTWV0ZXJFbGVtZW50PiBIVE1MTWV0ZXJFbGVtZW50OjoKIAogUmVuZGVyUHRyPFJlbmRl
ckVsZW1lbnQ+IEhUTUxNZXRlckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewotICAgIGlmICghZG9j
dW1lbnQoKS5wYWdlKCktPnRoZW1lKCkuc3VwcG9ydHNNZXRlcihzdHlsZS5hcHBlYXJhbmNlKCkp
KQorICAgIGlmICghUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnN1cHBvcnRzTWV0ZXIoc3R5bGUu
YXBwZWFyYW5jZSgpKSkKICAgICAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigq
dGhpcywgV1RGTW92ZShzdHlsZSkpOwogCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ck1ldGVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyAr
MTkzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveFNlbGVjdEl0ZQogYm9vbCBI
VE1MU2VsZWN0RWxlbWVudDo6dXNlc01lbnVMaXN0KCkgY29uc3QKIHsKICNpZiAhUExBVEZPUk0o
SU9TKQotICAgIGlmIChSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50KCkucGFnZSgp
KS0+ZGVsZWdhdGVzTWVudUxpc3RSZW5kZXJpbmcoKSkKKyAgICBpZiAoUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLmRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgcmV0dXJuICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxOwpAQCAtMTA4NSw3
ICsxMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxT
ZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoIVJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQoKS5w
YWdlKCkpLT5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpCisgICAgaWYgKCFSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkucG9wc01lbnVCeUFycm93S2V5cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCkuZnJhbWUoKSkp
IHsKQEAgLTExMTksOCArMTExOSw2IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0
RGVmYXVsdEUKICAgICBBU1NFUlQocmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkt
PmlzTWVudUxpc3QoKSk7CiAKLSAgICBSZWZQdHI8UmVuZGVyVGhlbWU+IHJlbmRlclRoZW1lID0g
UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShkb2N1bWVudCgpLnBhZ2UoKSk7Ci0KICAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKICAgICAgICAgaWYg
KCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTg4
LDcgKzExODYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocmVuZGVyVGhlbWUt
PnBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5wb3BzTWVudUJ5U3BhY2VPclJldHVybigpKSB7CiAgICAgICAgICAgICBpZiAo
a2V5Q29kZSA9PSAnICcgfHwga2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAgICAgICAgZm9j
dXMoKTsKIApAQCAtMTIwNSw3ICsxMjAzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVu
dUxpc3REZWZhdWx0RQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1lbnVMaXN0Pigq
cmVuZGVyZXIpLnNob3dQb3B1cCgpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlclRoZW1lLT5wb3BzTWVudUJ5
QXJyb3dLZXlzKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkucG9wc01lbnVCeUFycm93S2V5cygpKSB7CiAgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSAn
ICcpIHsKICAgICAgICAgICAgICAgICBmb2N1cygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjE2
ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNSw3ICs4MDUsNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjphZGp1c3RJCiAgICAgfQogCiAgICAgaWYgKGlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpKQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihkb2N1bWVudCgpLnBhZ2Uo
KS0+dGhlbWUoKS5kaXNhYmxlZFRleHRDb2xvcih0ZXh0QmxvY2tTdHlsZS52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHBhcmVudFN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpKTsKKyAgICAgICAgdGV4dEJsb2NrU3R5
bGUuc2V0Q29sb3IoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmRpc2FibGVkVGV4dENvbG9yKHRl
eHRCbG9ja1N0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcGFy
ZW50U3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSkpOwogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAodGV4dEJsb2NrU3R5bGUudGV4dFNlY3Vy
aXR5KCkgIT0gVFNOT05FICYmICF0ZXh0QmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFsaWdubWVudCBidXQgZm9yY2UgdGhlIGRp
cmVjdGlvbiB0byBMVFIgc28gdGhhdCB0aGUgbGFzdC10eXBlZCwgdW5tYXNrZWQgY2hhcmFjdGVy
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw4
ICsxNzEsNyBAQCBJbnB1dFR5cGU6On5JbnB1dFR5cGUoKQogCiBib29sIElucHV0VHlwZTo6dGhl
bWVTdXBwb3J0c0RhdGFMaXN0VUkoSW5wdXRUeXBlKiB0eXBlKQogewotICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IHR5cGUtPmVsZW1lbnQoKS5kb2N1bWVudCgpOwotICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50LnBhZ2UoKSktPnN1cHBvcnRzRGF0YUxpc3RVSSh0
eXBlLT5mb3JtQ29udHJvbFR5cGUoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5zdXBwb3J0c0RhdGFMaXN0VUkodHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkpOwogfQogCiBi
b29sIElucHV0VHlwZTo6aXNUZXh0RmllbGQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQsMTIgKzI0NCwxMiBAQCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6bmVlZHNDb250YWluZXIo
CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudCgpLmRvY3Vt
ZW50KCkucGFnZSgpKS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVudCgpKTsKKyAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNob3VsZEhhdmVTcGluQnV0dG9uKGVsZW1lbnQo
KSk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRp
Y2F0b3IoKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVs
ZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSktPnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihl
bGVtZW50KCkpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yKGVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRU
eXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM5LDcgKzgzOSw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVh
bGl6ZVNhdmVzKCk7Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21T
dHJpbmcoY29sb3IsICZjYW52YXMoKS5kb2N1bWVudCgpKSk7CisgICAgc2V0U3Ryb2tlU3R5bGUo
Q2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IpKTsKICAgICBtb2RpZmlhYmxlU3Rh
dGUoKS51bnBhcnNlZFN0cm9rZUNvbG9yID0gY29sb3I7CiB9CiAKQEAgLTg3NSw3ICs4NzUsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHJlYWxpemVTYXZlcygpOwotICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6
Y3JlYXRlRnJvbVN0cmluZyhjb2xvciwgJmNhbnZhcygpLmRvY3VtZW50KCkpKTsKKyAgICBzZXRG
aWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IpKTsKICAgICBtb2Rp
ZmlhYmxlU3RhdGUoKS51bnBhcnNlZEZpbGxDb2xvciA9IGNvbG9yOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAyMTY4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb2xvclN0cmlu
Zyhjb25zdCBTCiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbG9y
U3RyaW5nLCAiY3VycmVudGNvbG9yIik7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxwdHIpCitz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogewogICAg
IENvbG9yIGNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICAgICBp
ZiAoY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIENT
U1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZywgZG9jdW1lbnQpOworICAgIHJl
dHVybiBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29sb3JTdHJpbmcpOwogfQogCiBDb2xv
ciBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKQEAgLTcxLDcgKzcxLDcg
QEAgQ29sb3IgcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKGNvbnN0IFN0cgogICAgIGlmIChpc0N1
cnJlbnRDb2xvclN0cmluZyhjb2xvclN0cmluZykpCiAgICAgICAgIHJldHVybiBjdXJyZW50Q29s
b3IoY2FudmFzKTsKIAotICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nLCBjYW52YXMg
PyAmY2FudmFzLT5kb2N1bWVudCgpIDogbnVsbHB0cik7CisgICAgcmV0dXJuIHBhcnNlQ29sb3Io
Y29sb3JTdHJpbmcpOwogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29sb3Ip
CkBAIC0xMDksMTIgKzEwOSwxMiBAQCBpbmxpbmUgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKEN1
cnJlbnRDCiB7CiB9CiAKLUNhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKK0NhbnZhc1N0
eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3JTdHJp
bmcpCiB7CiAgICAgaWYgKGlzQ3VycmVudENvbG9yU3RyaW5nKGNvbG9yU3RyaW5nKSkKICAgICAg
ICAgcmV0dXJuIEN1cnJlbnRDb2xvciB7IHN0ZDo6bnVsbG9wdCB9OwogCi0gICAgQ29sb3IgY29s
b3IgPSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nLCBkb2N1bWVudCk7CisgICAgQ29sb3IgY29sb3Ig
PSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5oCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICBDYW52YXNTdHlsZShDYW52YXNHcmFkaWVudCYpOwogICAgIENhbnZhc1N0eWxlKENhbnZh
c1BhdHRlcm4mKTsKIAotICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29sb3IsIERvY3VtZW50KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBDYW52
YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3IpOwogICAgIHN0YXRp
YyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29uc3QgU3Ry
aW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBA
IHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWUKICAgICAvLyBUaGUgdGlt
ZXIgaXMgcmVxdWlyZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eSBkaXNwbGF5Oidub25lJyBvbiB0aGUg
cGFuZWwsCiAgICAgLy8gc3VjaCB0aGF0IGNhcHRpb25zIGFyZSBjb3JyZWN0bHkgZGlzcGxheWVk
IGF0IHRoZSBib3R0b20gb2YgdGhlIHZpZGVvCiAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZmFk
ZW91dCB0cmFuc2l0aW9uLgotICAgIFNlY29uZHMgZHVyYXRpb24gPSBkb2N1bWVudCgpLnBhZ2Uo
KSA/IGRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpLm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRp
b24oKSA6IDBfczsKKyAgICBTZWNvbmRzIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpLm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKTsKICAgICBtX3RyYW5zaXRpb25UaW1l
ci5zdGFydE9uZVNob3QoZHVyYXRpb24pOwogfQogCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFxdQogICAgIGlmIChtX29wYXF1ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQoKS5wYWdlKCkg
PyBkb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24o
KSA6IDA7CisgICAgZG91YmxlIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1l
ZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpOwogCiAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1cmF0aW9uLCBk
dXJhdGlvbiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKTsKQEAgLTIwNSw3ICsyMDUsNyBAQCB2
b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZVRyYW5zCiAgICAgaWYgKCFtX29wYXF1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9IGRvY3VtZW50KCku
cGFnZSgpID8gZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkubWVkaWFDb250cm9sc0ZhZGVPdXRE
dXJhdGlvbigpIDogMF9zOworICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwogCiAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlP
cGFjaXR5KTsKICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlv
bkR1cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAJKHJl
dmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywyMSArODcsMTcgQEAgdm9pZCBNZWRpYUNvbnRy
b2xzOjpzZXRNZWRpYUNvbnRyb2xsZXIoTQogCiB2b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkK
IHsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
CiAKICAgICB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKIAogICAgIGRvdWJsZSBkdXJhdGlv
biA9IG1fbWVkaWFDb250cm9sbGVyLT5kdXJhdGlvbigpOwotICAgIGlmIChzdGQ6OmlzZmluaXRl
KGR1cmF0aW9uKSB8fCBwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYVNsaWRlclBhcnQpKSB7CisgICAgaWYgKHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3Io
TWVkaWFTbGlkZXJQYXJ0KSkgewogICAgICAgICBtX3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7CiAgICAgICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVy
LT5jdXJyZW50VGltZSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhh
c0F1ZGlvKCkgfHwgcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3Io
TWVkaWFNdXRlQnV0dG9uUGFydCkpCisgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRp
bygpIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxp
bmdGb3IoTWVkaWFNdXRlQnV0dG9uUGFydCkpCiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5z
aG93KCk7CiAgICAgZWxzZQogICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwpAQCAt
MTI5LDE5ICsxMjUsMTYgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCiAKIHZvaWQgTWVk
aWFDb250cm9sczo6cmVwb3J0ZWRFcnJvcigpCiB7Ci0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50
KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFw
YWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0
b25QYXJ0KSkgeworICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwor
ICAgIGlmICghdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1
dHRvblBhcnQpKSB7CiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CiAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24gJiYgIXBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKKyAgICBpZiAobV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAmJiAhdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhh
bmRsaW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKICAgICAgICAg
bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKG1fZnVsbFNj
cmVlbkJ1dHRvbiAmJiAhcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdG
b3IoTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0KSkKKyAgICBpZiAobV9mdWxsU2NyZWVu
QnV0dG9uICYmICF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFFbnRl
ckZ1bGxzY3JlZW5CdXR0b25QYXJ0KSkKICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRl
KCk7CiB9CiAKQEAgLTIxOCwxMiArMjExLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFj
a1N0b3BwZWQoKQogdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXko
KQogewogICAgIGRvdWJsZSBub3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsK
LQotICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQo
cGFnZS0+dGhlbWUoKS5mb3JtYXRNZWRpYUNvbnRyb2xzVGltZShub3cpKTsKKyAgICBtX2N1cnJl
bnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3Jt
YXRNZWRpYUNvbnRyb2xzVGltZShub3cpKTsKICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0
Q3VycmVudFZhbHVlKG5vdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFj
L0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCBSZWZQdHI8SW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWM+IEltCiAgICAg
YXV0byBidXR0b24gPSBhZG9wdFJlZigqbmV3IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
KGRvY3VtZW50KSk7CiAgICAgYnV0dG9uLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6Y2xhc3NBdHRyLCBBdG9taWNTdHJpbmcoIngtd2Via2l0LWltYWdlLWNv
bnRyb2xzLWJ1dHRvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAot
ICAgIEludFNpemUgcG9zaXRpb25PZmZzZXQgPSBkb2N1bWVudC5wYWdlKCktPnRoZW1lKCkuaW1h
Z2VDb250cm9sc0J1dHRvblBvc2l0aW9uT2Zmc2V0KCk7CisgICAgSW50U2l6ZSBwb3NpdGlvbk9m
ZnNldCA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5pbWFnZUNvbnRyb2xzQnV0dG9uUG9zaXRp
b25PZmZzZXQoKTsKICAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlUb3AsIHBvc2l0aW9uT2Zmc2V0LmhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgcmlnaHQ6IDBweCBvZmYgdGhlIHJpZ2h0IGVkZ2Ug
b2YgdGhlIHBhcmVudD8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcAko
cmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyB2b2lkIHJlbGVhc2VOb25jcml0aWNhbE1lbW9yeSgpCiB7Ci0gICAgUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5wdXJnZUNhY2hlcygpOworICAgIFJlbmRlclRoZW1lOjpzaW5n
bGV0b24oKS5wdXJnZUNhY2hlcygpOwogCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wdXJn
ZUluYWN0aXZlRm9udERhdGEoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAy
MTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDUsNyArMjA1LDYgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25m
aQogICAgICwgbV9wcm9ncmVzcyhzdGQ6Om1ha2VfdW5pcXVlPFByb2dyZXNzVHJhY2tlcj4oKnBh
Z2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCkpCiAgICAgLCBtX2JhY2tGb3J3
YXJkQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPEJhY2tGb3J3YXJkQ29udHJvbGxlcj4oKnRo
aXMsICpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmJhY2tGb3J3YXJkQ2xpZW50KSkpCiAgICAg
LCBtX21haW5GcmFtZShNYWluRnJhbWU6OmNyZWF0ZSgqdGhpcywgcGFnZUNvbmZpZ3VyYXRpb24p
KQotICAgICwgbV90aGVtZShSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKHRoaXMpKQogICAgICwg
bV9lZGl0b3JDbGllbnQoV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5lZGl0b3JDbGllbnQpKQog
ICAgICwgbV9wbHVnSW5DbGllbnQocGFnZUNvbmZpZ3VyYXRpb24ucGx1Z0luQ2xpZW50KQogICAg
ICwgbV92YWxpZGF0aW9uTWVzc2FnZUNsaWVudChXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZh
bGlkYXRpb25NZXNzYWdlQ2xpZW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAyMTY4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2
LDggKzE2Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKCk7CiAKLSAgICBSZW5kZXJUaGVtZSYgdGhlbWUoKSBjb25zdCB7IHJldHVybiAqbV90
aGVtZTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgVmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRB
cmd1bWVudHMoKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wg
cmVsb2FkKTsKQEAgLTY2Niw4ICs2NjQsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFBsdWdp
bkRhdGE+IG1fcGx1Z2luRGF0YTsKIAotICAgIFJlZlB0cjxSZW5kZXJUaGVtZT4gbV90aGVtZTsK
LQogICAgIFVuaXF1ZVJlZjxFZGl0b3JDbGllbnQ+IG1fZWRpdG9yQ2xpZW50OwogICAgIFBsdWdJ
bkNsaWVudCogbV9wbHVnSW5DbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50PiBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXgu
Y3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291
cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgOiBtX292ZXJsYXkob3ZlcmxheSkKICAgICB7CiAgICAgICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgICAgICBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVNZXNzYWdlQm94LCBmb250RGVz
Y3JpcHRpb24pOworICAgICAgICBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udChD
U1NWYWx1ZU1lc3NhZ2VCb3gsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoZ0ZvbnRTaXplKTsKICAgICAgICAgbV90ZXh0Rm9udCA9IEZv
bnRDYXNjYWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgICAgIG1fdGV4dEZvbnQudXBk
YXRlKG51bGxwdHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsOCArNjIyLDggQEAg
dm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIAogICAgICAgICBDb2xvciBv
cHRpb25CYWNrZ3JvdW5kQ29sb3IsIG9wdGlvblRleHRDb2xvcjsKICAgICAgICAgUG9wdXBNZW51
U3R5bGUgaXRlbVN0eWxlID0gY2xpZW50KCktPml0ZW1TdHlsZShpbmRleCk7CiAgICAgICAgIGlm
IChpbmRleCA9PSBmb2N1c2VkSW5kZXgoKSkgewotICAgICAgICAgICAgb3B0aW9uQmFja2dyb3Vu
ZENvbG9yID0gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCk7Ci0gICAgICAgICAgICBvcHRpb25UZXh0Q29sb3IgPSBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKTsKKyAgICAgICAgICAgIG9wdGlvbkJhY2tncm91bmRDb2xvciA9IFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Cisg
ICAgICAgICAgICBvcHRpb25UZXh0Q29sb3IgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuYWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgb3B0aW9uQmFja2dyb3VuZENvbG9yID0gaXRlbVN0eWxlLmJhY2tncm91bmRD
b2xvcigpOwogICAgICAgICAgICAgb3B0aW9uVGV4dENvbG9yID0gaXRlbVN0eWxlLmZvcmVncm91
bmRDb2xvcigpOwpAQCAtNjYwLDEyICs2NjAsMTIgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50
KGNvbnN0IEludFJlY3QmIAogICAgICAgICAgICAgaW50IHRleHRYID0gMDsKICAgICAgICAgICAg
IGlmIChjbGllbnQoKS0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpID09IExUUikgewogICAg
ICAgICAgICAgICAgIHRleHRYID0gc3RkOjptYXg8aW50PigwLCBjbGllbnQoKS0+Y2xpZW50UGFk
ZGluZ0xlZnQoKSAtIGNsaWVudCgpLT5jbGllbnRJbnNldExlZnQoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1Rl
eHRJbmRlbnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
LnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHRl
eHRYICs9IG1pbmltdW1JbnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBp
dGVtUmVjdC53aWR0aCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
dGV4dFggPSBpdGVtUmVjdC53aWR0aCgpIC0gY2xpZW50KCktPm1lbnVTdHlsZSgpLmZvbnQoKS53
aWR0aCh0ZXh0UnVuKTsKICAgICAgICAgICAgICAgICB0ZXh0WCA9IHN0ZDo6bWluPGludD4odGV4
dFgsIHRleHRYIC0gY2xpZW50KCktPmNsaWVudFBhZGRpbmdSaWdodCgpICsgY2xpZW50KCktPmNs
aWVudEluc2V0UmlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0
SW5kZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHRleHRYIC09IG1pbmltdW1JbnRWYWx1ZUZv
ckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGludCB0ZXh0WSA9IGl0ZW1SZWN0LnkoKSArIGl0ZW1Gb250
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKyAoaXRlbVJlY3QuaGVpZ2h0KCkgLSBpdGVtRm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpKSAvIDI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDEwICszMywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxSZW5kZXJU
aGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKikKK1JlbmRlclRoZW1lJiBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUmIHRoZW1lID0g
UmVuZGVyVGhlbWVXUEU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gdGhlbWU7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxSZW5kZXJUaGVtZT4+IHRoZW1lKFJlbmRlclRo
ZW1lV1BFOjpjcmVhdGUoKSk7CisgICAgcmV0dXJuIHRoZW1lLmdldCgpOwogfQogCiB2b2lkIFJl
bmRlclRoZW1lV1BFOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJ
RCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIxNjg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgY29udGVudFJlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2lu
dChhY2N1bXVsYXRlZE9mZnNldCkpOwogCiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250
KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sLCBmb250RGVzY3JpcHRpb24pOworICAgIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9s
LCBmb250RGVzY3JpcHRpb24pOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZFdl
aWdodFZhbHVlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRp
bmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZSgxMik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZW5kZXJPYmpl
Y3Q6On5SZW5kZXJPYmplY3QoKQogCiBSZW5kZXJUaGVtZSYgUmVuZGVyT2JqZWN0Ojp0aGVtZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhZ2UoKS50aGVtZSgpOworICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6c2luZ2xldG9uKCk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0Rlc2NlbmRhbnRP
Zihjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc4
LDcgKzEyNzgsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVRleHRTCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIENvbG9yIFJlbmRlclRoZW1lOjp0YXBIaWdobGlnaHRD
b2xvcigpCiB7Ci0gICAgcmV0dXJuIGRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybVRhcEhpZ2hsaWdo
dENvbG9yKCk7CisgICAgcmV0dXJuIHNpbmdsZXRvbigpLnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29s
b3IoKTsKIH0KICNlbmRpZgogCkBAIC0xMzEzLDcgKzEzMTMsNyBAQCB2b2lkIFJlbmRlclRoZW1l
OjpzZXRDdXN0b21Gb2N1c1JpbmdDb2xvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdD
b2xvcigpCiB7Ci0gICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8g
Y3VzdG9tRm9jdXNSaW5nQ29sb3IoKSA6IGRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCk7CisgICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8g
Y3VzdG9tRm9jdXNSaW5nQ29sb3IoKSA6IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5wbGF0Zm9y
bUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZh
dWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTUg
KzYyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lKCkgeyB9CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0tc3Bl
Y2lmaWMgdGhlbWUgaW1wbGVtZW50YXRpb24gdG8gaGFuZCBiYWNrIHRoZQotICAgIC8vIGFwcHJv
cHJpYXRlIHBsYXRmb3JtIHRoZW1lLiBXaGVuIHRoZSB0aGVtZSBpcyBuZWVkZWQgaW4gbm9uLXBh
Z2UgZGVwZW5kZW50IGNvZGUsIGEgZGVmYXVsdCB0aGVtZSBpcwotICAgIC8vIHVzZWQgYXMgZmFs
bGJhY2ssIHdoaWNoIGlzIHJldHVybmVkIGZvciBhIG51bGxlZCBwYWdlLCBzbyB0aGUgcGxhdGZv
cm0gY29kZSBuZWVkcyB0byBhY2NvdW50IGZvciB0aGlzLgotICAgIHN0YXRpYyBSZWY8UmVuZGVy
VGhlbWU+IHRoZW1lRm9yUGFnZShQYWdlKik7Ci0KLSAgICAvLyBXaGVuIHRoZSB0aGVtZSBpcyBu
ZWVkZWQgaW4gbm9uLXBhZ2UgZGVwZW5kZW50IGNvZGUsIHRoZSBkZWZhdWx0VGhlbWUoKSBpcyB1
c2VkIGFzIGZhbGxiYWNrLgotICAgIHN0YXRpYyBpbmxpbmUgUmVmPFJlbmRlclRoZW1lPiBkZWZh
dWx0VGhlbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZW1lRm9yUGFnZShudWxscHRyKTsK
LSAgICB9OworICAgIC8vIGFwcHJvcHJpYXRlIHBsYXRmb3JtIHRoZW1lLgorICAgIHN0YXRpYyBS
ZW5kZXJUaGVtZSYgc2luZ2xldG9uKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VDYWNoZXMo
KSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgUmVmPFJlbmRl
clRoZW1lPiBSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlbmRlclRoZW1lR3RrKCkpOwogfQogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0
aGVtZUZvclBhZ2UoUGFnZSopCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
CiB7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lJiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUo
KS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWY8UmVuZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkpOworICAgIHJl
dHVybiB0aGVtZS5nZXQoKTsKIH0KIAogc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTUsMTAgKzI5NSwxMCBAQCBSZW5kZXJUaGVtZUlPUzo6UmVuZGVy
VGhlbWVJT1MoKQogICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmlj
YXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCBjb250ZW50U2l6ZUNhdGVnb3J5RGlk
Q2hhbmdlLCBVSUNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2VOb3RpZmljYXRpb24sIDAsIENG
Tm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKIH0KIAot
UmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQorUmVuZGVy
VGhlbWUmIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKQogewotICAgIHN0YXRpYyBSZW5kZXJUaGVt
ZSYgcmVuZGVyVGhlbWUgPSBSZW5kZXJUaGVtZUlPUzo6Y3JlYXRlKCkubGVha1JlZigpOwotICAg
IHJldHVybiByZW5kZXJUaGVtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFJlbmRl
clRoZW1lPj4gdGhlbWUoUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gdGhl
bWUuZ2V0KCk7CiB9CiAKIFJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZp
c2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIGVudW0gewogICAgIGxlZnRQ
YWRkaW5nCiB9OwogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
UGFnZSopCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3Rh
dGljIFJlbmRlclRoZW1lJiBydCA9IFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKS5sZWFrUmVmKCk7
Ci0gICAgcmV0dXJuIHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVuZGVyVGhl
bWU+PiB0aGVtZShSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0aGVtZS5n
ZXQoKTsKIH0KIAogUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNp
b24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDEwICsxODgsMTAgQEAgUmVmPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclRo
ZW1lV2luKTsKIH0KIAotUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdl
KFBhZ2UqIHBhZ2UpCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0g
ICAgc3RhdGljIFJlbmRlclRoZW1lJiB3aW5UaGVtZSA9IFJlbmRlclRoZW1lV2luOjpjcmVhdGUo
KS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHdpblRoZW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZWY8UmVuZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKCkpOwor
ICAgIHJldHVybiB0aGVtZS5nZXQoKTsKIH0KIAogUmVuZGVyVGhlbWVXaW46OlJlbmRlclRoZW1l
V2luKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBUZXh0UGFpbnRTdHls
ZSBjb21wdXRlVGV4dFBhaW50U3R5bGUoY29uCiAgICAgaWYgKGxpbmVTdHlsZS5pbnNpZGVEZWZh
dWx0QnV0dG9uKCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKICAgICAg
ICAgaWYgKHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKSkgewotICAg
ICAgICAgICAgcGFpbnRTdHlsZS5maWxsQ29sb3IgPSBwYWdlLT50aGVtZSgpLnN5c3RlbUNvbG9y
KENTU1ZhbHVlQWN0aXZlYnV0dG9udGV4dCk7CisgICAgICAgICAgICBwYWludFN0eWxlLmZpbGxD
b2xvciA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFjdGl2
ZWJ1dHRvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIHBhaW50U3R5bGU7CiAgICAgICAgIH0K
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310153</attachid>
            <date>2017-05-15 11:57:30 -0700</date>
            <delta_ts>2017-05-15 23:42:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertheme-singleton-4.patch</filename>
            <type>text/plain</type>
            <size>42061</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDE3LTA1LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXJUaGVtZSBkb2VzIG5v
dCBuZWVkIHRvIGJlIHBlci1wYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxMTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNDI2NDU3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKworICAgICAgICBUaGVyZSBhcmUg
bm8gaW1wbGVtZW50YXRpb25zIG9mIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UgdGhhdCBhY3R1
YWxseSBjYXJlIGFib3V0IHRoZSBwYWdlLgorICAgICAgICBJdCBjYW4gYmUgcmVwbGFjZWQgd2l0
aCBhIHNpbmdsZXRvbiwgc2ltcGxpZnlpbmcgYSBidW5jaCBvZiBjb2RlLgorCisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaGFkb3dSb290Q1NTVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xzSG9zdDo6YmFzZTY0U3RyaW5nRm9ySWNvbk5hbWVBbmRUeXBl
KToKKyAgICAgICAgKiBjc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0RlZmF1bHRTdHlsZVNoZWV0czo6bG9hZEZ1bGxEZWZhdWx0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVT
aGVldHNGb3JFbGVtZW50KToKKworICAgICAgICAgICAgRml4IGEgcG90ZW50aWFsIGNyYXNoIGlm
IHdlIGdldCBoZXJlIHdoZW4gcGFnZSBpcyBudWxsICh0aG91Z2ggaXQgZG9lc24ndCBhcHBlYXIg
dG8gcmVwcm8gb24gdHJ1bmspLgorCisgICAgICAgICogY3NzL1N0eWxlQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5d29yZCk6CisgICAgICAgICog
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcik6CisgICAgICAg
ICogY3NzL3BhcnNlci9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25z
dW1lU3lzdGVtRm9udCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAg
ICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCk6CisgICAgICAg
ICogaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRl
ckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dXNl
c01lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9y
bUhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjphZGp1c3RJbm5lclRleHRTdHlsZSk6CisgICAgICAgICogaHRtbC9JbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjp0aGVtZVN1cHBvcnRzRGF0
YUxpc3RVSSk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVDYXBzTG9ja0lu
ZGljYXRvcik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ry
b2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsQ29sb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xv
ck9yQ3VycmVudENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVG
cm9tU3RyaW5nKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFxdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjptYWtlVHJhbnNwYXJlbnQpOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sczo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6cmVw
b3J0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJy
ZW50VGltZURpc3BsYXkpOgorICAgICAgICAqIGh0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KToKKyAgICAg
ICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0aGVtZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1JlbmRlclRoZW1lV1BFLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnRoZW1l
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5n
bGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNpbmdsZXRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZVRleHRQYWludFN0eWxlKToKKwogMjAxNy0wNS0xNSAgTmFlbCBPdWVkcmFv
Z28gIDxuYWVsLm91ZWRyYW9nb0BjcmYuY2Fub24uZnI+CiAKICAgICAgICAgSW52YWxpZCBNZWRp
YVNvdXJjZSBkdXJhdGlvbiB2YWx1ZSBzaG91bGQgdGhyb3cgVHlwZXJFcnJvciBpbnN0ZWFkIG9m
IEludmFsaWRTdGF0ZUVycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29u
dHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAJKHJldmlzaW9uIDIx
Njg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCwxOCArMjgwLDEzIEBAIFN0cmluZyBN
ZWRpYUNvbnRyb2xzSG9zdDo6Z2VuZXJhdGVVVUlEKCkKIAogU3RyaW5nIE1lZGlhQ29udHJvbHNI
b3N0OjpzaGFkb3dSb290Q1NTVGV4dCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdl
KHBhZ2UpLT5tb2Rlcm5NZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkubW9kZXJuTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKIH0K
IAogU3RyaW5nIE1lZGlhQ29udHJvbHNIb3N0OjpiYXNlNjRTdHJpbmdGb3JJY29uTmFtZUFuZFR5
cGUoY29uc3QgU3RyaW5nJiBpY29uTmFtZSwgY29uc3QgU3RyaW5nJiBpY29uVHlwZSkgY29uc3QK
IHsKLSAgICBQYWdlKiBwYWdlID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwot
ICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJu
IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UocGFnZSktPm1lZGlhQ29udHJvbHNCYXNlNjRTdHJp
bmdGb3JJY29uTmFtZUFuZFR5cGUoaWNvbk5hbWUsIGljb25UeXBlKTsKKworICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkubWVkaWFDb250cm9sc0Jhc2U2NFN0cmluZ0Zvckljb25O
YW1lQW5kVHlwZShpY29uTmFtZSwgaWNvblR5cGUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjE2ODU4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjps
b2FkRnVsbERlZmEKICAgICB9CiAKICAgICAvLyBTdHJpY3QtbW9kZSBydWxlcy4KLSAgICBTdHJp
bmcgZGVmYXVsdFJ1bGVzID0gU3RyaW5nKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
aHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOworICAgIFN0cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJp
bmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihodG1sVXNlckFnZW50U3R5bGVTaGVl
dCkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsK
ICAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMpOwogICAg
IGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmRlZmF1bHRTdHlsZVNoZWV0LCBzY3Jl
ZW5FdmFsKCkpOwogICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqZGVm
YXVsdFN0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKIAogICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVz
LgotICAgIFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyAgICBTdHJpbmcgcXVpcmtz
UnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1Vz
ZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5leHRyYVF1aXJr
c1N0eWxlU2hlZXQoKTsKICAgICBxdWlya3NTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJr
c1J1bGVzKTsKICAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWly
a3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwogfQpAQCAtMTcwLDggKzE3MCw4IEBAIHZvaWQg
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKIAogICAgIGlmIChpczxIVE1MRWxl
bWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPYmplY3RFbGVtZW50PihlbGVt
ZW50KSB8fCBpczxIVE1MRW1iZWRFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICAgICAgaWYg
KCFwbHVnSW5zU3R5bGVTaGVldCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwbHVnSW5zUnVs
ZXMgPSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkp
LT5leHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkgKyBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5j
aHJvbWUoKS5jbGllbnQoKS5wbHVnSW5FeHRyYVN0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgIGlm
ICghcGx1Z0luc1N0eWxlU2hlZXQgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAg
ICAgICAgICAgICAgIFN0cmluZyBwbHVnSW5zUnVsZXMgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkuZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpICsgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkucGx1Z0luRXh0cmFTdHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHBsdWdJbnNSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHBsdWdJ
bnNSdWxlcyA9IFN0cmluZyhwbHVnSW5zVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHBsdWdJ
bnNVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgICAgICAgICAgICAgcGx1Z0luc1N0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQocGx1Z0luc1J1bGVzKTsKQEAgLTE4Miw5ICsxODIsOSBAQCB2b2lk
IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsCiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgICAgICBlbHNlIGlmIChpczxIVE1MTWVkaWFFbGVtZW50PihlbGVtZW50KSkgewogICAgICAg
ICAgICAgaWYgKCFtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBtZWRpYVJ1bGVzID0gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LmRvY3Vt
ZW50KCkucGFnZSgpKS0+bWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgbWVkaWFSdWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5tZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOwogICAgICAgICAgICAgICAgIGlmIChtZWRpYVJ1bGVzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xz
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNo
ZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdl
KCkpLT5leHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisgICAgICAgICAgICAgICAgICAg
IG1lZGlhUnVsZXMgPSBTdHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKICAgICAgICAgICAgICAg
ICBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKICAg
ICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCptZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgICAgICAgICBkZWZhdWx0UHJp
bnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKm1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBwcmlu
dEV2YWwoKSk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6
OmVuc3VyZURlZmF1bAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgICAgICBlbHNl
IGlmIChpczxIVE1MRGl2RWxlbWVudD4oZWxlbWVudCkgJiYgZWxlbWVudC5pc0ltYWdlQ29udHJv
bHNSb290RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIWltYWdlQ29udHJvbHNTdHlsZVNo
ZWV0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlQ29udHJvbHNSdWxlcyA9IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSktPmltYWdlQ29u
dHJvbHNTdHlsZVNoZWV0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlQ29udHJvbHNS
dWxlcyA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5pbWFnZUNvbnRyb2xzU3R5bGVTaGVldCgp
OwogICAgICAgICAgICAgICAgIGltYWdlQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0
KGltYWdlQ29udHJvbHNSdWxlcyk7CiAgICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldCgqaW1hZ2VDb250cm9sc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCppbWFn
ZUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZv
aWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWwKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKICAgICBpZiAoIWZ1bGxzY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQuZG9j
dW1lbnQoKS53ZWJraXRJc0Z1bGxTY3JlZW4oKSkgewotICAgICAgICBTdHJpbmcgZnVsbHNjcmVl
blJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoZnVs
bHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KS0+ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpOworICAgICAgICBTdHJpbmcgZnVsbHNjcmVl
blJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoZnVs
bHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5l
eHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CiAgICAgICAgIGZ1bGxzY3JlZW5TdHlsZVNoZWV0
ID0gcGFyc2VVQVNoZWV0KGZ1bGxzY3JlZW5SdWxlcyk7CiAgICAgICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoKmZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwog
ICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpmdWxsc2NyZWVu
U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVDb2xvci5j
cHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUNvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBDb2xvciBTdHlsZUNvbG9yOjpjb2xv
ckZyb21LZXl3b3JkKENTU1ZhCiAgICAgICAgIGlmIChjb25zdCBOYW1lZENvbG9yKiBuYW1lZENv
bG9yID0gZmluZENvbG9yKHZhbHVlTmFtZSwgc3RybGVuKHZhbHVlTmFtZSkpKQogICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKG5hbWVkQ29sb3ItPkFSR0JWYWx1ZSk7CiAgICAgfQotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGtleXdvcmQpOworICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtQ29sb3Ioa2V5d29yZCk7CiB9
CiAKIGJvb2wgU3R5bGVDb2xvcjo6aXNDb2xvcktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk4
LDcgKzk5OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKIAog
ICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBz
dHlsZS4KICAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwgbV9z
dGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFj
a2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5hZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsIGVsZW1lbnQsIG1f
c3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJh
Y2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KICAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTczLDE2ICsxNzMsMTMgQEAgQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0
cmluZwogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOwogfQogCi1Db2xvciBDU1NQ
YXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBk
b2N1bWVudCkKK0NvbG9yIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKICAgICBDU1NWYWx1ZUlEIGlkID0gY3NzVmFsdWVL
ZXl3b3JkSUQoc3RyaW5nKTsKICAgICBpZiAoIVN0eWxlQ29sb3I6OmlzU3lzdGVtQ29sb3IoaWQp
KQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnBh
Z2UoKS0+dGhlbWUoKS5zeXN0ZW1Db2xvcihpZCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5zeXN0ZW1Db2xvcihpZCk7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJp
YWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBjb25zdCBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uLCBXcml0
aW5nTW9kZSk7CiAKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmLCBi
b29sIHN0cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihj
b25zdCBTdHJpbmcmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNv
bG9yKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYs
IGJvb2wgaW1wb3J0YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQy
OSw3ICs0NDI5LDcgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6Y29uc3VtZVN5c3RlbUZvbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1G
b250KHN5c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKKyAgICBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkuc3lzdGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7CiAgICAg
aWYgKCFmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDU3LDcgKzIwNTcsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICAvLyBTdGFydCBibGlua2luZyB3aXRo
IGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYgd2UncmUKICAgICAvLyBh
bHJlYWR5IGJsaW5raW5nIGluIHRoZSByaWdodCBsb2NhdGlvbi4KICAgICBpZiAoc2hvdWxkQmxp
bmsgJiYgIW1fY2FyZXRCbGlua1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKFNlY29u
ZHMgYmxpbmtJbnRlcnZhbCA9IG1fZnJhbWUtPnBhZ2UoKS0+dGhlbWUoKS5jYXJldEJsaW5rSW50
ZXJ2YWwoKSkKKyAgICAgICAgaWYgKFNlY29uZHMgYmxpbmtJbnRlcnZhbCA9IFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5jYXJldEJsaW5rSW50ZXJ2YWwoKSkKICAgICAgICAgICAgIG1fY2FyZXRC
bGlua1RpbWVyLnN0YXJ0UmVwZWF0aW5nKGJsaW5rSW50ZXJ2YWwpOwogCiAgICAgICAgIGlmICgh
bV9jYXJldFBhaW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OTgsNyArNjY5OCw3IEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0ID0gUmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZShwYWdlKS0+bWVkaWFDb250cm9sc1NjcmlwdCgpOworICAgIFN0
cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0ID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1lZGlh
Q29udHJvbHNTY3JpcHQoKTsKICAgICBpZiAoIW1lZGlhQ29udHJvbHNTY3JpcHQubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWV0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZXRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIFJl
ZjxIVE1MTWV0ZXJFbGVtZW50PiBIVE1MTWV0ZXJFbGVtZW50OjoKIAogUmVuZGVyUHRyPFJlbmRl
ckVsZW1lbnQ+IEhUTUxNZXRlckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewotICAgIGlmICghZG9j
dW1lbnQoKS5wYWdlKCktPnRoZW1lKCkuc3VwcG9ydHNNZXRlcihzdHlsZS5hcHBlYXJhbmNlKCkp
KQorICAgIGlmICghUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnN1cHBvcnRzTWV0ZXIoc3R5bGUu
YXBwZWFyYW5jZSgpKSkKICAgICAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigq
dGhpcywgV1RGTW92ZShzdHlsZSkpOwogCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ck1ldGVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyAr
MTkzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveFNlbGVjdEl0ZQogYm9vbCBI
VE1MU2VsZWN0RWxlbWVudDo6dXNlc01lbnVMaXN0KCkgY29uc3QKIHsKICNpZiAhUExBVEZPUk0o
SU9TKQotICAgIGlmIChSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50KCkucGFnZSgp
KS0+ZGVsZWdhdGVzTWVudUxpc3RSZW5kZXJpbmcoKSkKKyAgICBpZiAoUmVuZGVyVGhlbWU6OnNp
bmdsZXRvbigpLmRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgcmV0dXJuICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxOwpAQCAtMTA4NSw3
ICsxMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxT
ZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoIVJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZG9jdW1lbnQoKS5w
YWdlKCkpLT5wb3BzTWVudUJ5QXJyb3dLZXlzKCkpCisgICAgaWYgKCFSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkucG9wc01lbnVCeUFycm93S2V5cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCkuZnJhbWUoKSkp
IHsKQEAgLTExMTksOCArMTExOSw2IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0
RGVmYXVsdEUKICAgICBBU1NFUlQocmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkt
PmlzTWVudUxpc3QoKSk7CiAKLSAgICBSZWZQdHI8UmVuZGVyVGhlbWU+IHJlbmRlclRoZW1lID0g
UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShkb2N1bWVudCgpLnBhZ2UoKSk7Ci0KICAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKICAgICAgICAgaWYg
KCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTg4
LDcgKzExODYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocmVuZGVyVGhlbWUt
PnBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5wb3BzTWVudUJ5U3BhY2VPclJldHVybigpKSB7CiAgICAgICAgICAgICBpZiAo
a2V5Q29kZSA9PSAnICcgfHwga2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAgICAgICAgZm9j
dXMoKTsKIApAQCAtMTIwNSw3ICsxMjAzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVu
dUxpc3REZWZhdWx0RQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlck1lbnVMaXN0Pigq
cmVuZGVyZXIpLnNob3dQb3B1cCgpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlclRoZW1lLT5wb3BzTWVudUJ5
QXJyb3dLZXlzKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkucG9wc01lbnVCeUFycm93S2V5cygpKSB7CiAgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSAn
ICcpIHsKICAgICAgICAgICAgICAgICBmb2N1cygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjE2
ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNSw3ICs4MDUsNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjphZGp1c3RJCiAgICAgfQogCiAgICAgaWYgKGlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpKQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihkb2N1bWVudCgpLnBhZ2Uo
KS0+dGhlbWUoKS5kaXNhYmxlZFRleHRDb2xvcih0ZXh0QmxvY2tTdHlsZS52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHBhcmVudFN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpKTsKKyAgICAgICAgdGV4dEJsb2NrU3R5
bGUuc2V0Q29sb3IoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmRpc2FibGVkVGV4dENvbG9yKHRl
eHRCbG9ja1N0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgcGFy
ZW50U3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSkpOwogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAodGV4dEJsb2NrU3R5bGUudGV4dFNlY3Vy
aXR5KCkgIT0gVFNOT05FICYmICF0ZXh0QmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFsaWdubWVudCBidXQgZm9yY2UgdGhlIGRp
cmVjdGlvbiB0byBMVFIgc28gdGhhdCB0aGUgbGFzdC10eXBlZCwgdW5tYXNrZWQgY2hhcmFjdGVy
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw4
ICsxNzEsNyBAQCBJbnB1dFR5cGU6On5JbnB1dFR5cGUoKQogCiBib29sIElucHV0VHlwZTo6dGhl
bWVTdXBwb3J0c0RhdGFMaXN0VUkoSW5wdXRUeXBlKiB0eXBlKQogewotICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IHR5cGUtPmVsZW1lbnQoKS5kb2N1bWVudCgpOwotICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6dGhlbWVGb3JQYWdlKGRvY3VtZW50LnBhZ2UoKSktPnN1cHBvcnRzRGF0YUxpc3RVSSh0
eXBlLT5mb3JtQ29udHJvbFR5cGUoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5zdXBwb3J0c0RhdGFMaXN0VUkodHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkpOwogfQogCiBi
b29sIElucHV0VHlwZTo6aXNUZXh0RmllbGQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQsMTIgKzI0NCwxMiBAQCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6bmVlZHNDb250YWluZXIo
CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudCgpLmRvY3Vt
ZW50KCkucGFnZSgpKS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVudCgpKTsKKyAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNob3VsZEhhdmVTcGluQnV0dG9uKGVsZW1lbnQo
KSk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRp
Y2F0b3IoKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVs
ZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSktPnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihl
bGVtZW50KCkpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yKGVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRU
eXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM5LDcgKzgzOSw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVh
bGl6ZVNhdmVzKCk7Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21T
dHJpbmcoY29sb3IsICZjYW52YXMoKS5kb2N1bWVudCgpKSk7CisgICAgc2V0U3Ryb2tlU3R5bGUo
Q2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IpKTsKICAgICBtb2RpZmlhYmxlU3Rh
dGUoKS51bnBhcnNlZFN0cm9rZUNvbG9yID0gY29sb3I7CiB9CiAKQEAgLTg3NSw3ICs4NzUsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHJlYWxpemVTYXZlcygpOwotICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6
Y3JlYXRlRnJvbVN0cmluZyhjb2xvciwgJmNhbnZhcygpLmRvY3VtZW50KCkpKTsKKyAgICBzZXRG
aWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IpKTsKICAgICBtb2Rp
ZmlhYmxlU3RhdGUoKS51bnBhcnNlZEZpbGxDb2xvciA9IGNvbG9yOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAyMTY4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBzdGF0aWMgYm9vbCBpc0N1cnJlbnRDb2xvclN0cmlu
Zyhjb25zdCBTCiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbG9y
U3RyaW5nLCAiY3VycmVudGNvbG9yIik7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxwdHIpCitz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogewogICAg
IENvbG9yIGNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICAgICBp
ZiAoY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIENT
U1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZywgZG9jdW1lbnQpOworICAgIHJl
dHVybiBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29sb3JTdHJpbmcpOwogfQogCiBDb2xv
ciBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKQEAgLTcxLDcgKzcxLDcg
QEAgQ29sb3IgcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKGNvbnN0IFN0cgogICAgIGlmIChpc0N1
cnJlbnRDb2xvclN0cmluZyhjb2xvclN0cmluZykpCiAgICAgICAgIHJldHVybiBjdXJyZW50Q29s
b3IoY2FudmFzKTsKIAotICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nLCBjYW52YXMg
PyAmY2FudmFzLT5kb2N1bWVudCgpIDogbnVsbHB0cik7CisgICAgcmV0dXJuIHBhcnNlQ29sb3Io
Y29sb3JTdHJpbmcpOwogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29sb3Ip
CkBAIC0xMDksMTIgKzEwOSwxMiBAQCBpbmxpbmUgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKEN1
cnJlbnRDCiB7CiB9CiAKLUNhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKK0NhbnZhc1N0
eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3JTdHJp
bmcpCiB7CiAgICAgaWYgKGlzQ3VycmVudENvbG9yU3RyaW5nKGNvbG9yU3RyaW5nKSkKICAgICAg
ICAgcmV0dXJuIEN1cnJlbnRDb2xvciB7IHN0ZDo6bnVsbG9wdCB9OwogCi0gICAgQ29sb3IgY29s
b3IgPSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nLCBkb2N1bWVudCk7CisgICAgQ29sb3IgY29sb3Ig
PSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5oCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICBDYW52YXNTdHlsZShDYW52YXNHcmFkaWVudCYpOwogICAgIENhbnZhc1N0eWxlKENhbnZh
c1BhdHRlcm4mKTsKIAotICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29sb3IsIERvY3VtZW50KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBDYW52
YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3IpOwogICAgIHN0YXRp
YyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29uc3QgU3Ry
aW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBA
IHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzdGFydFRpbWUKICAgICAvLyBUaGUgdGlt
ZXIgaXMgcmVxdWlyZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eSBkaXNwbGF5Oidub25lJyBvbiB0aGUg
cGFuZWwsCiAgICAgLy8gc3VjaCB0aGF0IGNhcHRpb25zIGFyZSBjb3JyZWN0bHkgZGlzcGxheWVk
IGF0IHRoZSBib3R0b20gb2YgdGhlIHZpZGVvCiAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZmFk
ZW91dCB0cmFuc2l0aW9uLgotICAgIFNlY29uZHMgZHVyYXRpb24gPSBkb2N1bWVudCgpLnBhZ2Uo
KSA/IGRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpLm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRp
b24oKSA6IDBfczsKKyAgICBTZWNvbmRzIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpLm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKTsKICAgICBtX3RyYW5zaXRpb25UaW1l
ci5zdGFydE9uZVNob3QoZHVyYXRpb24pOwogfQogCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Om1ha2VPcGFxdQogICAgIGlmIChtX29wYXF1ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIGR1cmF0aW9uID0gZG9jdW1lbnQoKS5wYWdlKCkg
PyBkb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKS5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24o
KSA6IDA7CisgICAgZG91YmxlIGR1cmF0aW9uID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLm1l
ZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpOwogCiAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1cmF0aW9uLCBk
dXJhdGlvbiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKTsKQEAgLTIwNSw3ICsyMDUsNyBAQCB2
b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bWFrZVRyYW5zCiAgICAgaWYgKCFtX29wYXF1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2Vjb25kcyBkdXJhdGlvbiA9IGRvY3VtZW50KCku
cGFnZSgpID8gZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkubWVkaWFDb250cm9sc0ZhZGVPdXRE
dXJhdGlvbigpIDogMF9zOworICAgIFNlY29uZHMgZHVyYXRpb24gPSBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkubWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwogCiAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlP
cGFjaXR5KTsKICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNpdGlv
bkR1cmF0aW9uLCBkdXJhdGlvbi52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAJKHJl
dmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywyMSArODcsMTcgQEAgdm9pZCBNZWRpYUNvbnRy
b2xzOjpzZXRNZWRpYUNvbnRyb2xsZXIoTQogCiB2b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkK
IHsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7
CiAKICAgICB1cGRhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKIAogICAgIGRvdWJsZSBkdXJhdGlv
biA9IG1fbWVkaWFDb250cm9sbGVyLT5kdXJhdGlvbigpOwotICAgIGlmIChzdGQ6OmlzZmluaXRl
KGR1cmF0aW9uKSB8fCBwYWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zv
cihNZWRpYVNsaWRlclBhcnQpKSB7CisgICAgaWYgKHN0ZDo6aXNmaW5pdGUoZHVyYXRpb24pIHx8
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3Io
TWVkaWFTbGlkZXJQYXJ0KSkgewogICAgICAgICBtX3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7CiAgICAgICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFDb250cm9sbGVy
LT5jdXJyZW50VGltZSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXItPmhh
c0F1ZGlvKCkgfHwgcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3Io
TWVkaWFNdXRlQnV0dG9uUGFydCkpCisgICAgaWYgKG1fbWVkaWFDb250cm9sbGVyLT5oYXNBdWRp
bygpIHx8IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxp
bmdGb3IoTWVkaWFNdXRlQnV0dG9uUGFydCkpCiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5z
aG93KCk7CiAgICAgZWxzZQogICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwpAQCAt
MTI5LDE5ICsxMjUsMTYgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCiAKIHZvaWQgTWVk
aWFDb250cm9sczo6cmVwb3J0ZWRFcnJvcigpCiB7Ci0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50
KCkucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFw
YWdlLT50aGVtZSgpLmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0
b25QYXJ0KSkgeworICAgIGF1dG8mIHRoZW1lID0gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpOwor
ICAgIGlmICghdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1
dHRvblBhcnQpKSB7CiAgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CiAgICAgICAg
IG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24gJiYgIXBhZ2UtPnRoZW1lKCkuaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKKyAgICBpZiAobV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAmJiAhdGhlbWUuaGFzT3duRGlzYWJsZWRTdGF0ZUhh
bmRsaW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKICAgICAgICAg
bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKG1fZnVsbFNj
cmVlbkJ1dHRvbiAmJiAhcGFnZS0+dGhlbWUoKS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdG
b3IoTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0KSkKKyAgICBpZiAobV9mdWxsU2NyZWVu
QnV0dG9uICYmICF0aGVtZS5oYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFFbnRl
ckZ1bGxzY3JlZW5CdXR0b25QYXJ0KSkKICAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRl
KCk7CiB9CiAKQEAgLTIxOCwxMiArMjExLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFj
a1N0b3BwZWQoKQogdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVDdXJyZW50VGltZURpc3BsYXko
KQogewogICAgIGRvdWJsZSBub3cgPSBtX21lZGlhQ29udHJvbGxlci0+Y3VycmVudFRpbWUoKTsK
LQotICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQo
cGFnZS0+dGhlbWUoKS5mb3JtYXRNZWRpYUNvbnRyb2xzVGltZShub3cpKTsKKyAgICBtX2N1cnJl
bnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb3Jt
YXRNZWRpYUNvbnRyb2xzVGltZShub3cpKTsKICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0
Q3VycmVudFZhbHVlKG5vdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFj
L0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCBSZWZQdHI8SW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWM+IEltCiAgICAg
YXV0byBidXR0b24gPSBhZG9wdFJlZigqbmV3IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
KGRvY3VtZW50KSk7CiAgICAgYnV0dG9uLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6Y2xhc3NBdHRyLCBBdG9taWNTdHJpbmcoIngtd2Via2l0LWltYWdlLWNv
bnRyb2xzLWJ1dHRvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAot
ICAgIEludFNpemUgcG9zaXRpb25PZmZzZXQgPSBkb2N1bWVudC5wYWdlKCktPnRoZW1lKCkuaW1h
Z2VDb250cm9sc0J1dHRvblBvc2l0aW9uT2Zmc2V0KCk7CisgICAgSW50U2l6ZSBwb3NpdGlvbk9m
ZnNldCA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5pbWFnZUNvbnRyb2xzQnV0dG9uUG9zaXRp
b25PZmZzZXQoKTsKICAgICBidXR0b24tPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlUb3AsIHBvc2l0aW9uT2Zmc2V0LmhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgcmlnaHQ6IDBweCBvZmYgdGhlIHJpZ2h0IGVkZ2Ug
b2YgdGhlIHBhcmVudD8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcAko
cmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyB2b2lkIHJlbGVhc2VOb25jcml0aWNhbE1lbW9yeSgpCiB7Ci0gICAgUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5wdXJnZUNhY2hlcygpOworICAgIFJlbmRlclRoZW1lOjpzaW5n
bGV0b24oKS5wdXJnZUNhY2hlcygpOwogCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wdXJn
ZUluYWN0aXZlRm9udERhdGEoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAy
MTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDUsNyArMjA1LDYgQEAgUGFnZTo6UGFnZShQYWdlQ29uZmlndXJhdGlvbiYmIHBhZ2VDb25m
aQogICAgICwgbV9wcm9ncmVzcyhzdGQ6Om1ha2VfdW5pcXVlPFByb2dyZXNzVHJhY2tlcj4oKnBh
Z2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCkpCiAgICAgLCBtX2JhY2tGb3J3
YXJkQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPEJhY2tGb3J3YXJkQ29udHJvbGxlcj4oKnRo
aXMsICpXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmJhY2tGb3J3YXJkQ2xpZW50KSkpCiAgICAg
LCBtX21haW5GcmFtZShNYWluRnJhbWU6OmNyZWF0ZSgqdGhpcywgcGFnZUNvbmZpZ3VyYXRpb24p
KQotICAgICwgbV90aGVtZShSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKHRoaXMpKQogICAgICwg
bV9lZGl0b3JDbGllbnQoV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbi5lZGl0b3JDbGllbnQpKQog
ICAgICwgbV9wbHVnSW5DbGllbnQocGFnZUNvbmZpZ3VyYXRpb24ucGx1Z0luQ2xpZW50KQogICAg
ICwgbV92YWxpZGF0aW9uTWVzc2FnZUNsaWVudChXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZh
bGlkYXRpb25NZXNzYWdlQ2xpZW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAyMTY4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2
LDggKzE2Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKCk7CiAKLSAgICBSZW5kZXJUaGVtZSYgdGhlbWUoKSBjb25zdCB7IHJldHVybiAqbV90
aGVtZTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgVmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRB
cmd1bWVudHMoKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wg
cmVsb2FkKTsKQEAgLTY2Niw4ICs2NjQsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFBsdWdp
bkRhdGE+IG1fcGx1Z2luRGF0YTsKIAotICAgIFJlZlB0cjxSZW5kZXJUaGVtZT4gbV90aGVtZTsK
LQogICAgIFVuaXF1ZVJlZjxFZGl0b3JDbGllbnQ+IG1fZWRpdG9yQ2xpZW50OwogICAgIFBsdWdJ
bkNsaWVudCogbV9wbHVnSW5DbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50PiBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXgu
Y3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291
cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgOiBtX292ZXJsYXkob3ZlcmxheSkKICAgICB7CiAgICAgICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgICAgICBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVNZXNzYWdlQm94LCBmb250RGVz
Y3JpcHRpb24pOworICAgICAgICBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udChD
U1NWYWx1ZU1lc3NhZ2VCb3gsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoZ0ZvbnRTaXplKTsKICAgICAgICAgbV90ZXh0Rm9udCA9IEZv
bnRDYXNjYWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgICAgIG1fdGV4dEZvbnQudXBk
YXRlKG51bGxwdHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsOCArNjIyLDggQEAg
dm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIAogICAgICAgICBDb2xvciBv
cHRpb25CYWNrZ3JvdW5kQ29sb3IsIG9wdGlvblRleHRDb2xvcjsKICAgICAgICAgUG9wdXBNZW51
U3R5bGUgaXRlbVN0eWxlID0gY2xpZW50KCktPml0ZW1TdHlsZShpbmRleCk7CiAgICAgICAgIGlm
IChpbmRleCA9PSBmb2N1c2VkSW5kZXgoKSkgewotICAgICAgICAgICAgb3B0aW9uQmFja2dyb3Vu
ZENvbG9yID0gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCk7Ci0gICAgICAgICAgICBvcHRpb25UZXh0Q29sb3IgPSBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKTsKKyAgICAgICAgICAgIG9wdGlvbkJhY2tncm91bmRDb2xvciA9IFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Cisg
ICAgICAgICAgICBvcHRpb25UZXh0Q29sb3IgPSBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuYWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgb3B0aW9uQmFja2dyb3VuZENvbG9yID0gaXRlbVN0eWxlLmJhY2tncm91bmRD
b2xvcigpOwogICAgICAgICAgICAgb3B0aW9uVGV4dENvbG9yID0gaXRlbVN0eWxlLmZvcmVncm91
bmRDb2xvcigpOwpAQCAtNjYwLDEyICs2NjAsMTIgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50
KGNvbnN0IEludFJlY3QmIAogICAgICAgICAgICAgaW50IHRleHRYID0gMDsKICAgICAgICAgICAg
IGlmIChjbGllbnQoKS0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpID09IExUUikgewogICAg
ICAgICAgICAgICAgIHRleHRYID0gc3RkOjptYXg8aW50PigwLCBjbGllbnQoKS0+Y2xpZW50UGFk
ZGluZ0xlZnQoKSAtIGNsaWVudCgpLT5jbGllbnRJbnNldExlZnQoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1Rl
eHRJbmRlbnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
LnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHRl
eHRYICs9IG1pbmltdW1JbnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBp
dGVtUmVjdC53aWR0aCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
dGV4dFggPSBpdGVtUmVjdC53aWR0aCgpIC0gY2xpZW50KCktPm1lbnVTdHlsZSgpLmZvbnQoKS53
aWR0aCh0ZXh0UnVuKTsKICAgICAgICAgICAgICAgICB0ZXh0WCA9IHN0ZDo6bWluPGludD4odGV4
dFgsIHRleHRYIC0gY2xpZW50KCktPmNsaWVudFBhZGRpbmdSaWdodCgpICsgY2xpZW50KCktPmNs
aWVudEluc2V0UmlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0
SW5kZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHRleHRYIC09IG1pbmltdW1JbnRWYWx1ZUZv
ckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGludCB0ZXh0WSA9IGl0ZW1SZWN0LnkoKSArIGl0ZW1Gb250
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKyAoaXRlbVJlY3QuaGVpZ2h0KCkgLSBpdGVtRm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpKSAvIDI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDEwICszMywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxSZW5kZXJU
aGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKikKK1JlbmRlclRoZW1lJiBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUmIHRoZW1lID0g
UmVuZGVyVGhlbWVXUEU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gdGhlbWU7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZjxSZW5kZXJUaGVtZT4+IHRoZW1lKFJlbmRlclRo
ZW1lV1BFOjpjcmVhdGUoKSk7CisgICAgcmV0dXJuIHRoZW1lLmdldCgpOwogfQogCiB2b2lkIFJl
bmRlclRoZW1lV1BFOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJ
RCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIxNjg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgY29udGVudFJlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2lu
dChhY2N1bXVsYXRlZE9mZnNldCkpOwogCiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250
KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sLCBmb250RGVzY3JpcHRpb24pOworICAgIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9s
LCBmb250RGVzY3JpcHRpb24pOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZFdl
aWdodFZhbHVlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRp
bmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZSgxMik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZW5kZXJPYmpl
Y3Q6On5SZW5kZXJPYmplY3QoKQogCiBSZW5kZXJUaGVtZSYgUmVuZGVyT2JqZWN0Ojp0aGVtZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhZ2UoKS50aGVtZSgpOworICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6c2luZ2xldG9uKCk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0Rlc2NlbmRhbnRP
Zihjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc4
LDcgKzEyNzgsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVRleHRTCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIENvbG9yIFJlbmRlclRoZW1lOjp0YXBIaWdobGlnaHRD
b2xvcigpCiB7Ci0gICAgcmV0dXJuIGRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybVRhcEhpZ2hsaWdo
dENvbG9yKCk7CisgICAgcmV0dXJuIHNpbmdsZXRvbigpLnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29s
b3IoKTsKIH0KICNlbmRpZgogCkBAIC0xMzEzLDcgKzEzMTMsNyBAQCB2b2lkIFJlbmRlclRoZW1l
OjpzZXRDdXN0b21Gb2N1c1JpbmdDb2xvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdD
b2xvcigpCiB7Ci0gICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8g
Y3VzdG9tRm9jdXNSaW5nQ29sb3IoKSA6IGRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCk7CisgICAgcmV0dXJuIGN1c3RvbUZvY3VzUmluZ0NvbG9yKCkuaXNWYWxpZCgpID8g
Y3VzdG9tRm9jdXNSaW5nQ29sb3IoKSA6IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5wbGF0Zm9y
bUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZh
dWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTUg
KzYyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lKCkgeyB9CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0tc3Bl
Y2lmaWMgdGhlbWUgaW1wbGVtZW50YXRpb24gdG8gaGFuZCBiYWNrIHRoZQotICAgIC8vIGFwcHJv
cHJpYXRlIHBsYXRmb3JtIHRoZW1lLiBXaGVuIHRoZSB0aGVtZSBpcyBuZWVkZWQgaW4gbm9uLXBh
Z2UgZGVwZW5kZW50IGNvZGUsIGEgZGVmYXVsdCB0aGVtZSBpcwotICAgIC8vIHVzZWQgYXMgZmFs
bGJhY2ssIHdoaWNoIGlzIHJldHVybmVkIGZvciBhIG51bGxlZCBwYWdlLCBzbyB0aGUgcGxhdGZv
cm0gY29kZSBuZWVkcyB0byBhY2NvdW50IGZvciB0aGlzLgotICAgIHN0YXRpYyBSZWY8UmVuZGVy
VGhlbWU+IHRoZW1lRm9yUGFnZShQYWdlKik7Ci0KLSAgICAvLyBXaGVuIHRoZSB0aGVtZSBpcyBu
ZWVkZWQgaW4gbm9uLXBhZ2UgZGVwZW5kZW50IGNvZGUsIHRoZSBkZWZhdWx0VGhlbWUoKSBpcyB1
c2VkIGFzIGZhbGxiYWNrLgotICAgIHN0YXRpYyBpbmxpbmUgUmVmPFJlbmRlclRoZW1lPiBkZWZh
dWx0VGhlbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZW1lRm9yUGFnZShudWxscHRyKTsK
LSAgICB9OworICAgIC8vIGFwcHJvcHJpYXRlIHBsYXRmb3JtIHRoZW1lLgorICAgIHN0YXRpYyBS
ZW5kZXJUaGVtZSYgc2luZ2xldG9uKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VDYWNoZXMo
KSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCShyZXZpc2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMTAgQEAgUmVmPFJlbmRl
clRoZW1lPiBSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlbmRlclRoZW1lR3RrKCkpOwogfQogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0
aGVtZUZvclBhZ2UoUGFnZSopCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigp
CiB7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lJiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUo
KS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWY8UmVuZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkpOworICAgIHJl
dHVybiB0aGVtZS5nZXQoKTsKIH0KIAogc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24g
MjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTUsMTAgKzI5NSwxMCBAQCBSZW5kZXJUaGVtZUlPUzo6UmVuZGVy
VGhlbWVJT1MoKQogICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmlj
YXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCBjb250ZW50U2l6ZUNhdGVnb3J5RGlk
Q2hhbmdlLCBVSUNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2VOb3RpZmljYXRpb24sIDAsIENG
Tm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKIH0KIAot
UmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQorUmVuZGVy
VGhlbWUmIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKQogewotICAgIHN0YXRpYyBSZW5kZXJUaGVt
ZSYgcmVuZGVyVGhlbWUgPSBSZW5kZXJUaGVtZUlPUzo6Y3JlYXRlKCkubGVha1JlZigpOwotICAg
IHJldHVybiByZW5kZXJUaGVtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPFJlbmRl
clRoZW1lPj4gdGhlbWUoUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gdGhl
bWUuZ2V0KCk7CiB9CiAKIFJlZjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZp
c2lvbiAyMTY4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIGVudW0gewogICAgIGxlZnRQ
YWRkaW5nCiB9OwogCi1SZWY8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
UGFnZSopCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3Rh
dGljIFJlbmRlclRoZW1lJiBydCA9IFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKS5sZWFrUmVmKCk7
Ci0gICAgcmV0dXJuIHJ0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8UmVuZGVyVGhl
bWU+PiB0aGVtZShSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkpOworICAgIHJldHVybiB0aGVtZS5n
ZXQoKTsKIH0KIAogUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNp
b24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDEwICsxODgsMTAgQEAgUmVmPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclRo
ZW1lV2luKTsKIH0KIAotUmVmPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdl
KFBhZ2UqIHBhZ2UpCitSZW5kZXJUaGVtZSYgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpCiB7Ci0g
ICAgc3RhdGljIFJlbmRlclRoZW1lJiB3aW5UaGVtZSA9IFJlbmRlclRoZW1lV2luOjpjcmVhdGUo
KS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHdpblRoZW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZWY8UmVuZGVyVGhlbWU+PiB0aGVtZShSZW5kZXJUaGVtZVdpbjo6Y3JlYXRlKCkpOwor
ICAgIHJldHVybiB0aGVtZS5nZXQoKTsKIH0KIAogUmVuZGVyVGhlbWVXaW46OlJlbmRlclRoZW1l
V2luKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cAkocmV2aXNpb24gMjE2ODU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBUZXh0UGFpbnRTdHls
ZSBjb21wdXRlVGV4dFBhaW50U3R5bGUoY29uCiAgICAgaWYgKGxpbmVTdHlsZS5pbnNpZGVEZWZh
dWx0QnV0dG9uKCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKICAgICAg
ICAgaWYgKHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKSkgewotICAg
ICAgICAgICAgcGFpbnRTdHlsZS5maWxsQ29sb3IgPSBwYWdlLT50aGVtZSgpLnN5c3RlbUNvbG9y
KENTU1ZhbHVlQWN0aXZlYnV0dG9udGV4dCk7CisgICAgICAgICAgICBwYWludFN0eWxlLmZpbGxD
b2xvciA9IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFjdGl2
ZWJ1dHRvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIHBhaW50U3R5bGU7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjE2ODU4KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MjUsNyArMjcy
NSw3IEBAIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKICAgICAgICAg
Y2FzZSBXTV9YUF9USEVNRUNIQU5HRUQ6CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUobWFpbkZyYW1lSW1wbCkpIHsKICAgICAgICAgICAgICAgICB3ZWJWaWV3LT5kZWxl
dGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPnBhZ2UoKS0+dGhl
bWUoKS50aGVtZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkudGhlbWVDaGFuZ2VkKCk7CiAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkudGhlbWVDaGFuZ2VkKCk7CiAgICAgICAgICAgICAgICAgUkVDVCB3aW5kb3dSZWN0Owog
ICAgICAgICAgICAgICAgIDo6R2V0Q2xpZW50UmVjdChoV25kLCAmd2luZG93UmVjdCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>