<?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>71585</bug_id>
          
          <creation_ts>2011-11-04 13:40:16 -0700</creation_ts>
          <short_desc>Revert platform and scrolling to ints</short_desc>
          <delta_ts>2011-11-07 18:11:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (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>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>496424</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-04 13:40:16 -0700</bug_when>
    <thetext>We are currently incorrectly using LayoutUnits and related types in a couple of places in the platform and scrolling code. These should be reverted back to ints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496508</commentid>
    <comment_count>1</comment_count>
      <attachid>113719</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-04 15:33:13 -0700</bug_when>
    <thetext>Created attachment 113719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496514</commentid>
    <comment_count>2</comment_count>
      <attachid>113719</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-04 15:44:53 -0700</bug_when>
    <thetext>Comment on attachment 113719
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496523</commentid>
    <comment_count>3</comment_count>
      <attachid>113719</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 15:55:23 -0700</bug_when>
    <thetext>Comment on attachment 113719
Patch

Attachment 113719 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10337137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497590</commentid>
    <comment_count>4</comment_count>
      <attachid>113956</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-07 16:37:05 -0800</bug_when>
    <thetext>Created attachment 113956
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497613</commentid>
    <comment_count>5</comment_count>
      <attachid>113956</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 17:14:46 -0800</bug_when>
    <thetext>Comment on attachment 113956
Patch for landing

Rejecting attachment 113956 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
n/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/10331863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497616</commentid>
    <comment_count>6</comment_count>
      <attachid>113956</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-07 17:17:39 -0800</bug_when>
    <thetext>Comment on attachment 113956
Patch for landing

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

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        Need a short description and bug URL (OOPS!)

The following ChangeLog files contain OOPS:

        trunk/Source/WebKit/chromium/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497622</commentid>
    <comment_count>7</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-07 17:23:49 -0800</bug_when>
    <thetext>Ah, missed one. Thanks for pointing it out Adam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497629</commentid>
    <comment_count>8</comment_count>
      <attachid>113966</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-07 17:31:06 -0800</bug_when>
    <thetext>Created attachment 113966
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497648</commentid>
    <comment_count>9</comment_count>
      <attachid>113966</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 18:11:23 -0800</bug_when>
    <thetext>Comment on attachment 113966
Patch for landing

Clearing flags on attachment: 113966

Committed r99511: &lt;http://trac.webkit.org/changeset/99511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497649</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 18:11:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113719</attachid>
            <date>2011-11-04 15:33:13 -0700</date>
            <delta_ts>2011-11-07 16:37:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71585-20111104153311.patch</filename>
            <type>text/plain</type>
            <size>78583</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MzI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTEtMDQgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmVydCBwbGF0Zm9ybSBhbmQg
c2Nyb2xsaW5nIHRvIGludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxNTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBMYXlvdXRVbml0IGFuZCByZWxhdGVkIHR5cGVz
IHdpdGggaW50cyBpbiBwbGF0Zm9ybQorICAgICAgICBhbmQgc2Nyb2xsaW5nIGNvZGUuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vUG9wdXBNZW51Q2xp
ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oOgorCiAyMDExLTExLTA0ICBNaWNoYWVsIE5vcmRtYW4g
IDxtaWNoYWVsbkBnb29nbGUuY29vbT4KIAogICAgICAgICBBbGxvdyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjphZGRNZXNzYWdlIHRvIGJlIGNhbGxlZCBmcm9tIGJhY2tncm91bmQgdGhyZWFkcy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDk5MzI1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDE1
ICsxMzU3LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVGaXhlZE9iamVjdCgpCiAgICAgICAg
IHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5KCk7CiB9CiAKLUxheW91dFVuaXQgRnJh
bWVWaWV3OjpzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitpbnQgRnJhbWVWaWV3Ojpz
Y3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxl
Q29udGVudFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKLSAgICBMYXlvdXRV
bml0IG1heFggPSBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlQ29udGVudFdpZHRoOworICAgIGlu
dCB2aXNpYmxlQ29udGVudFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsKKyAg
ICBpbnQgbWF4WCA9IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50V2lkdGg7CiAKICAg
ICBpZiAobWF4WCA9PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIExheW91dFVuaXQgeCA9
IHNjcm9sbFgoKTsKKyAgICBpbnQgeCA9IHNjcm9sbFgoKTsKIAogICAgIGlmICghc2Nyb2xsT3Jp
Z2luKCkueCgpKSB7CiAgICAgICAgIGlmICh4IDwgMCkKQEAgLTEzOTIsMTUgKzEzOTIsMTUgQEAg
TGF5b3V0VW5pdCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvcwogICAgIHJldHVybiB4ICog
ZHJhZ0ZhY3RvciAvIGZyYW1lU2NhbGVGYWN0b3I7CiB9CiAKLUxheW91dFVuaXQgRnJhbWVWaWV3
OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitpbnQgRnJhbWVWaWV3OjpzY3JvbGxZ
Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxlQ29udGVu
dEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOworICAgIGludCB2aXNpYmxl
Q29udGVudEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOwogCi0gICAgTGF5
b3V0VW5pdCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVDb250ZW50SGVpZ2h0Owor
ICAgIGludCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVDb250ZW50SGVpZ2h0Owog
ICAgIGlmIChtYXhZID09IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgTGF5b3V0VW5pdCB5
ID0gc2Nyb2xsWSgpOworICAgIGludCB5ID0gc2Nyb2xsWSgpOwogCiAgICAgaWYgKCFzY3JvbGxP
cmlnaW4oKS55KCkpIHsKICAgICAgICAgaWYgKHkgPCAwKQpAQCAtMTQyMywxMiArMTQyMywxMiBA
QCBMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWUZvckZpeGVkUG9zCiAgICAgcmV0dXJuIHkg
KiBkcmFnRmFjdG9yIC8gZnJhbWVTY2FsZUZhY3RvcjsKIH0KIAotTGF5b3V0U2l6ZSBGcmFtZVZp
ZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdAorSW50U2l6ZSBGcmFtZVZp
ZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBM
YXlvdXRTaXplKHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCksIHNjcm9sbFlGb3JGaXhlZFBvc2l0
aW9uKCkpOworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCksIHNj
cm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkpOwogfQogCi1MYXlvdXRQb2ludCBGcmFtZVZpZXc6OmN1
cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKK0ludFBvaW50IEZyYW1lVmlldzo6Y3VycmVudE1v
dXNlUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2ludCgpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUg
IlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNjQsOCArNjUsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsK
ICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwpAQCAtODgs
NyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6
ZShjb25zdCBMYXlvdXRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2l6ZShj
b25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGxheW91dChib29sIGFsbG93U3VidHJlZSA9IHRy
dWUpOwogICAgIGJvb2wgZGlkRmlyc3RMYXlvdXQoKSBjb25zdDsKQEAgLTE2Niw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYpIE9WRVJSSURFOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAg
ICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldCgpOwogICAgIHZp
cnR1YWwgdm9pZCByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNv
bnN0OwpAQCAtMTkxLDkgKzE5Miw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Ig
cXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24sIG5lZ2F0aW5nIHRoZSBlZmZl
Y3RzIG9mIG92ZXJoYW5nCiAgICAgLy8gYW5kIGFkanVzdGluZyBmb3IgcGFnZSBzY2FsZS4KLSAg
ICBMYXlvdXRVbml0IHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgTGF5b3V0
VW5pdCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OwotICAgIExheW91dFNpemUgc2Ny
b2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIGludCBzY3JvbGxYRm9yRml4
ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIGludCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNv
bnN0OworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0Owog
CiAgICAgdm9pZCBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsKICAgICB2b2lkIGVuZERlZmVycmVk
UmVwYWludHMoKTsKQEAgLTI2NywxMCArMjY4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9s
bEVsZW1lbnRUb1JlY3QoRWxlbWVudCosIGNvbnN0IEludFJlY3QmKTsKIAogICAgIC8vIE1ldGhv
ZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIGNvb3JkaW5hdGUgc3Bh
Y2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgotICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJl
Y3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwg
TGF5b3V0UG9pbnQgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydFRv
UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRU
b1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRU
b1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAK
ICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRlclNjcm9sbGJhclBhcnQqIHNj
cm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3JuZXIgPT0gc2Nyb2xsQ29ybmVy
OyB9CiAKQEAgLTI4NSw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgLy8gT24gZWFjaCByZXBhaW50
IHRoZSBkZWxheSBpbmNyZXNlcyBieSB0aGlzIGFtb3VudAogICAgIHN0YXRpYyB2b2lkIHNldFJl
cGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2FkaW5n
KGRvdWJsZSBwKTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3VycmVudE1vdXNlUG9zaXRp
b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkg
Y29uc3Q7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9kIG9uY2UgcGx1Z2luIGxv
YWRpbmcgaXMgZGVjb3VwbGVkIGZyb20gbGF5b3V0LgogICAgIHZvaWQgZmx1c2hBbnlQZW5kaW5n
UG9zdExheW91dFRhc2tzKCk7CkBAIC0zMDEsNyArMzAyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VHJhY2tzUmVwYWludHMoYm9vbCk7CiAgICAgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBj
b25zdCB7IHJldHVybiBtX2lzVHJhY2tpbmdSZXBhaW50czsgfQogICAgIHZvaWQgcmVzZXRUcmFj
a2VkUmVwYWludHMoKSB7IG1fdHJhY2tlZFJlcGFpbnRSZWN0cy5jbGVhcigpOyB9Ci0gICAgY29u
c3QgVmVjdG9yPExheW91dFJlY3Q+JiB0cmFja2VkUmVwYWludFJlY3RzKCkgY29uc3QgeyByZXR1
cm4gbV90cmFja2VkUmVwYWludFJlY3RzOyB9CisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiB0
cmFja2VkUmVwYWludFJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV90cmFja2VkUmVwYWludFJlY3Rz
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0
aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xs
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CkBAIC0zNDEsMjEgKzM0MiwyMSBAQCBwcml2YXRl
OgogCiAgICAgLy8gT3ZlcnJpZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRvIGRvIHBvaW50IGNvbnZl
cnNpb24gdmlhIHJlbmRlcmVycywgaW4gb3JkZXIgdG8KICAgICAvLyB0YWtlIHRyYW5zZm9ybXMg
aW50byBhY2NvdW50LgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0VG9Db250YWluaW5n
Vmlldyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZp
cnR1YWwgTGF5b3V0UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UG9p
bnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXcoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRl
cmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlz
QWN0aXZlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8TGF5
b3V0UmVjdD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJ
bnRSZWN0PiYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRTaXpl
Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFuZChjb25zdCBJbnRTaXplJikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVyQmFuZChjb25zdCBJbnRT
aXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QW5pbWF0ZWRTY3JvbGwoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sbCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgTGF5
b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc09uQWN0aXZlUGFnZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3Q7CiAKQEAgLTQ1Niw3ICs0NTcsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX2xhc3RQ
YWludFRpbWU7CiAgICAgCiAgICAgYm9vbCBtX2lzVHJhY2tpbmdSZXBhaW50czsgLy8gVXNlZCBm
b3IgdGVzdGluZy4KLSAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbV90cmFja2VkUmVwYWludFJlY3Rz
OworICAgIFZlY3RvcjxJbnRSZWN0PiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7CiAKICAgICBib29s
IG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsy
Miw2IEBACiAjaWZuZGVmIFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIFBvcHVwTWVudUNsaWVu
dF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlBvcHVwTWVudVN0eWxl
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpA
QCAtNTIsOCArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBtZW51
U3R5bGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBp
bnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGxpc3RT
aXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAkocmV2aXNpb24gOTkz
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6UGVyQXhpc0RhdGE6OgogICAgIHJldHVybiBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWU7CiB9CiAK
LVNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1h
dG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvc2l0aW9uLCBMYXlvdXRVbml0IHZpc2li
bGVMZW5ndGgpCitTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShT
Y3JvbGxBbmltYXRvck5vbmUqIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3NpdGlvbiwgaW50IHZp
c2libGVMZW5ndGgpCiAgICAgOiBtX2N1cnJlbnRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pCiAg
ICAgLCBtX3Zpc2libGVMZW5ndGgodmlzaWJsZUxlbmd0aCkKIHsKQEAgLTM2Niw3ICszNjYsNyBA
QCBib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmFuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6dXBkYXRlVmlz
aWJsZUxlbmd0aChMYXlvdXRVbml0IHZpc2libGVMZW5ndGgpCit2b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6UGVyQXhpc0RhdGE6OnVwZGF0ZVZpc2libGVMZW5ndGgoaW50IHZpc2libGVMZW5ndGgp
CiB7CiAgICAgbV92aXNpYmxlTGVuZ3RoID0gdmlzaWJsZUxlbmd0aDsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCShyZXZpc2lvbiA5OTMy
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3Iu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogCkBAIC05MywxMSArOTIsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIGZyaWVuZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKICAgICBzdHJ1Y3Qg
UGVyQXhpc0RhdGEgewotICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvck5vbmUqIHBh
cmVudCwgZmxvYXQqIGN1cnJlbnRQb3MsIExheW91dFVuaXQgdmlzaWJsZUxlbmd0aCk7CisgICAg
ICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVu
dFBvcywgaW50IHZpc2libGVMZW5ndGgpOwogICAgICAgICB2b2lkIHJlc2V0KCk7CiAgICAgICAg
IGJvb2wgdXBkYXRlRGF0YUZyb21QYXJhbWV0ZXJzKGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxp
ZXIsIGZsb2F0IHNjcm9sbGFibGVTaXplLCBkb3VibGUgY3VycmVudFRpbWUsIFBhcmFtZXRlcnMq
KTsKICAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGltZSk7Ci0gICAg
ICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aChMYXlvdXRVbml0IHZpc2libGVMZW5ndGgpOwor
ICAgICAgICB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGgoaW50IHZpc2libGVMZW5ndGgpOwogCiAg
ICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVBdChDdXJ2ZSwgZG91YmxlIHQpOwogICAgICAgICBz
dGF0aWMgZG91YmxlIGF0dGFja0N1cnZlKEN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3Vy
dmVULCBkb3VibGUgc3RhcnRQb3MsIGRvdWJsZSBhdHRhY2tQb3MpOwpAQCAtMTI5LDcgKzEyOCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgZG91YmxlIG1fcmVsZWFzZVRpbWU7CiAgICAgICAgIEN1
cnZlIG1fcmVsZWFzZUN1cnZlOwogCi0gICAgICAgIExheW91dFVuaXQgbV92aXNpYmxlTGVuZ3Ro
OworICAgICAgICBpbnQgbV92aXNpYmxlTGVuZ3RoOwogICAgIH07CiAKICAgICAvLyBXaGlsZSB6
b29taW5nLCBzY2FsZSwgcG9zWCBhbmQgcG9zWSBuZWVkIHRvIHN0YXkgdGlnaHRseSBjb3VwbGVk
LCBzbyB1c2UgYSBzZXBhcmF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAJKHJldmlzaW9uIDk5MzI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwzNCArMjMxLDM0IEBAIEludFJlY3QgU2Ny
b2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KGIKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29u
dGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50
UmVjdDsKIAotICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigp
CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSB2ZXJ0aWNhbFNjcm9sbGJhcigpICYm
ICF2ZXJ0aWNhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKQogICAgICAgICAmJiAh
aW5jbHVkZVNjcm9sbGJhcnMgPyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMDsKLSAg
ICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKKyAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IGhvcml6b250YWxTY3JvbGxiYXIoKSAm
JiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKQogICAgICAgICAm
JiAhaW5jbHVkZVNjcm9sbGJhcnMgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDog
MDsKIAotICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KG1fc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICBM
YXlvdXRTaXplKG1heDxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PExheW91dFVuaXQ+
KDAsIGhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCkpKTsKLQorICAgIHJldHVy
biBJbnRSZWN0KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgbV9z
Y3JvbGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgbWF4KDAsIHdpZHRoKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgbWF4KDAsIGhl
aWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCkpOwogfQogI2VuZGlmCiAKLUxheW91
dFVuaXQgU2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAoraW50IFNjcm9sbFZpZXc6Omxh
eW91dFdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maXhlZExheW91dFNpemUuaXNFbXB0
eSgpIHx8ICFtX3VzZUZpeGVkTGF5b3V0ID8gdmlzaWJsZVdpZHRoKCkgOiBtX2ZpeGVkTGF5b3V0
U2l6ZS53aWR0aCgpOwogfQogCi1MYXlvdXRVbml0IFNjcm9sbFZpZXc6OmxheW91dEhlaWdodCgp
IGNvbnN0CitpbnQgU2Nyb2xsVmlldzo6bGF5b3V0SGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9maXhlZExheW91dFNpemUuaXNFbXB0eSgpIHx8ICFtX3VzZUZpeGVkTGF5b3V0ID8gdmlz
aWJsZUhlaWdodCgpIDogbV9maXhlZExheW91dFNpemUuaGVpZ2h0KCk7CiB9CiAKLUxheW91dFNp
emUgU2Nyb2xsVmlldzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKK0ludFNpemUgU2Nyb2xsVmll
dzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maXhlZExheW91dFNp
emU7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IExheW91
dFNpemUmIG5ld1NpemUpCit2b2lkIFNjcm9sbFZpZXc6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25z
dCBJbnRTaXplJiBuZXdTaXplKQogewogICAgIGlmIChmaXhlZExheW91dFNpemUoKSA9PSBuZXdT
aXplKQogICAgICAgICByZXR1cm47CkBAIC0yNzksMTIgKzI3OSwxMiBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnNldFVzZUZpeGVkTGF5b3V0KGJvb2wgCiAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxP
ZmZzZXQoKSk7CiB9CiAKLUxheW91dFNpemUgU2Nyb2xsVmlldzo6Y29udGVudHNTaXplKCkgY29u
c3QKK0ludFNpemUgU2Nyb2xsVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9jb250ZW50c1NpemU7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNTaXpl
KGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCit2b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRz
U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogewogICAgIGlmIChjb250ZW50c1NpemUoKSA9
PSBuZXdTaXplKQogICAgICAgICByZXR1cm47CkBAIC00MDUsMTcgKzQwNSwxNyBAQCBib29sIFNj
cm9sbFZpZXc6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9nCiAgICAgcmV0dXJuIHNjcm9sbChsb2dp
Y2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzVmVydGljYWxEb2N1bWVudCgpLCBpc0ZsaXBwZWRE
b2N1bWVudCgpKSwgZ3JhbnVsYXJpdHkpOwogfQogCi1MYXlvdXRTaXplIFNjcm9sbFZpZXc6Om92
ZXJoYW5nQW1vdW50KCkgY29uc3QKK0ludFNpemUgU2Nyb2xsVmlldzo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAogewotICAgIExheW91dFNpemUgc3RyZXRjaDsKKyAgICBJbnRTaXplIHN0cmV0Y2g7
CiAKLSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgp
ICsgc2Nyb2xsT3JpZ2luKCkueSgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQ
b3NpdGlvbigpLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsKICAgICBpZiAocGh5c2ljYWxTY3Jv
bGxZIDwgMCkKICAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZKTsKICAg
ICBlbHNlIGlmIChjb250ZW50c0hlaWdodCgpICYmIHBoeXNpY2FsU2Nyb2xsWSA+IGNvbnRlbnRz
SGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCiAgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHBo
eXNpY2FsU2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CiAK
LSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsg
c2Nyb2xsT3JpZ2luKCkueCgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3Np
dGlvbigpLngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxY
IDwgMCkKICAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChwaHlzaWNhbFNjcm9sbFgpOwogICAgIGVs
c2UgaWYgKGNvbnRlbnRzV2lkdGgoKSAmJiBwaHlzaWNhbFNjcm9sbFggPiBjb250ZW50c1dpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCB2b2lkIFNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgIG1faW5VcGRhdGVTY3JvbGxiYXJzID0g
ZmFsc2U7CiAgICAgfQogCi0gICAgTGF5b3V0UmVjdCBvbGRTY3JvbGxDb3JuZXJSZWN0ID0gc2Ny
b2xsQ29ybmVyUmVjdCgpOworICAgIEludFJlY3Qgb2xkU2Nyb2xsQ29ybmVyUmVjdCA9IHNjcm9s
bENvcm5lclJlY3QoKTsKIAogICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1faG9y
aXpvbnRhbFNjcm9sbGJhcjsKICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gbV92ZXJ0
aWNhbFNjcm9sbGJhcjsKQEAgLTQ3Miw4ICs0NzIsOCBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgfSBlbHNlIHsKICAgICAgICAgYm9vbCBzZW5kQ29udGVu
dFJlc2l6ZWROb3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIExheW91dFNp
emUgZG9jU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOwotICAgICAgICBMYXlvdXRTaXplIGZyYW1lU2l6
ZSA9IGZyYW1lUmVjdCgpLnNpemUoKTsKKyAgICAgICAgSW50U2l6ZSBkb2NTaXplID0gY29udGVu
dHNTaXplKCk7CisgICAgICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVSZWN0KCkuc2l6ZSgp
OwogCiAgICAgICAgIGlmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8pIHsKICAgICAgICAgICAg
IG5ld0hhc0hvcml6b250YWxTY3JvbGxiYXIgPSBkb2NTaXplLndpZHRoKCkgPiB2aXNpYmxlV2lk
dGgoKTsKQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJh
cnMoY29uc3QgCiAgICAgICAgICAgICBtX3VwZGF0ZVNjcm9sbGJhcnNQYXNzKys7CiAgICAgICAg
ICAgICBjb250ZW50c1Jlc2l6ZWQoKTsKICAgICAgICAgICAgIHZpc2libGVDb250ZW50c1Jlc2l6
ZWQoKTsKLSAgICAgICAgICAgIExheW91dFNpemUgbmV3RG9jU2l6ZSA9IGNvbnRlbnRzU2l6ZSgp
OworICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXplID0gY29udGVudHNTaXplKCk7CiAgICAg
ICAgICAgICBpZiAobmV3RG9jU2l6ZSA9PSBkb2NTaXplKSB7CiAgICAgICAgICAgICAgICAgLy8g
VGhlIGxheW91dCB3aXRoIHRoZSBuZXcgc2Nyb2xsIHN0YXRlIGhhZCBubyBpbXBhY3Qgb24KICAg
ICAgICAgICAgICAgICAvLyB0aGUgZG9jdW1lbnQncyBvdmVyYWxsIHNpemUsIHNvIHVwZGF0ZVNj
cm9sbGJhcnMgZGlkbid0IGdldCBjYWxsZWQuCkBAIC01MzUsMTIgKzUzNSwxMiBAQCB2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOwot
ICAgICAgICBMYXlvdXRVbml0IHBhZ2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRV
bml0PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5n
KCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAx
KTsKLSAgICAgICAgTGF5b3V0UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkpOwotICAgICAgICBMYXlvdXRSZWN0IGhCYXJSZWN0ID0gTGF5b3V0UmVjdCgwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9sbGJhciA/IG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGludCBw
YWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rp
b25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFw
QmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBJbnRSZWN0IGhCYXJSZWN0KDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gKG1fdmVydGljYWxT
Y3JvbGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJhclJlY3QpOwogICAgICAgICBp
ZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CkBAIC01NTYsMTIgKzU1NiwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgewogICAg
ICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOwotICAgICAgICBMYXlvdXRV
bml0IHBhZ2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRIZWln
aHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWln
aHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwotICAgICAgICBM
YXlvdXRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAg
ICAgICBMYXlvdXRSZWN0IHZCYXJSZWN0ID0gTGF5b3V0UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNh
bFNjcm9sbGJhci0+d2lkdGgoKSwgCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgIGhlaWdodCgpIC0gKG1faG9yaXpv
bnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwKSk7Cisg
ICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRIZWlnaHQgKiBTY3JvbGxi
YXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3JvbGxi
YXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBJbnRSZWN0IG9sZFJl
Y3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBJbnRSZWN0IHZC
YXJSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6
IDApKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZCYXJSZWN0
KTsKICAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5pbnZhbGlkYXRlKCk7CkBAIC02MDMsOCArNjAzLDggQEAgSW50UmVjdCBTY3JvbGxW
aWV3OjpyZWN0VG9Db3B5T25TY3JvbGwoKQogewogICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3Qg
PSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlzaWJsZVdpZHRoKCks
IHZpc2libGVIZWlnaHQoKSkpOwogICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpKSB7Ci0g
ICAgICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxTY3Jv
bGxiYXIoKS0+d2lkdGgoKSA6IDA7Ci0gICAgICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA9IChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhhc0xheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwor
ICAgICAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigp
ICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVydGljYWxTY3JvbGxiYXIo
KS0+d2lkdGgoKSA6IDA7CisgICAgICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0g
KGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7CiAgICAgICAgIAogICAg
ICAgICBzY3JvbGxWaWV3UmVjdC5zZXRXaWR0aChzY3JvbGxWaWV3UmVjdC53aWR0aCgpIC0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCk7CiAgICAgICAgIHNjcm9sbFZpZXdSZWN0LnNldEhlaWdodChz
Y3JvbGxWaWV3UmVjdC5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwpAQCAt
NjMwLDkgKzYzMCw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3QgSW4K
ICAgICBpZiAobV9kcmF3UGFuU2Nyb2xsSWNvbikgewogICAgICAgICAvLyBGSVhNRTogdGhlIHBh
biBpY29uIGlzIGJyb2tlbiB3aGVuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIG9uLCBzaW5j
ZSBpdCB3aWxsIGRyYXcgdW5kZXIgdGhlIGNvbXBvc2l0aW5nIGxheWVycy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3ODM3Ci0gICAgICAgIExh
eW91dFVuaXQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCA9IDIgKiAocGFuSWNvblNpemVM
ZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpLCBhYnMoc2Nyb2xsRGVsdGEuaGVp
Z2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50IHdoYXQncyBuZWNlc3NhcnkKLSAg
ICAgICAgTGF5b3V0UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gPSBMYXlvdXRQb2lu
dChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0
aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6
ZUxlbmd0aCAvIDIpKTsKLSAgICAgICAgTGF5b3V0UmVjdCBwYW5TY3JvbGxJY29uRGlydHlSZWN0
ID0gTGF5b3V0UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiAsIExheW91dFNpemUocGFu
SWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCwgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCkp
OworICAgICAgICBpbnQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCA9IDIgKiAocGFuSWNv
blNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpLCBhYnMoc2Nyb2xsRGVs
dGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50IHdoYXQncyBuZWNlc3Nh
cnkKKyAgICAgICAgSW50UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gPSBJbnRQb2lu
dChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0
aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNvbkRpcnR5U3F1YXJlU2l6
ZUxlbmd0aCAvIDIpKTsKKyAgICAgICAgSW50UmVjdCBwYW5TY3JvbGxJY29uRGlydHlSZWN0ID0g
SW50UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiwgSW50U2l6ZShwYW5JY29uRGlydHlT
cXVhcmVTaXplTGVuZ3RoLCBwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoKSk7CiAgICAgICAg
IHBhblNjcm9sbEljb25EaXJ0eVJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAgICAgaG9z
dFdpbmRvdygpLT5pbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3cocGFuU2Nyb2xsSWNvbkRpcnR5
UmVjdCwgZmFsc2UgLyppbW1lZGlhdGUqLyk7CiAgICAgfQpAQCAtNjQ4LDggKzY0OCw4IEBAIHZv
aWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3QgSW4KICAgICB9CiAKICAgICAvLyBJ
bnZhbGlkYXRlIHRoZSBvdmVyaGFuZyBhcmVhcyBpZiB0aGV5IGFyZSB2aXNpYmxlLgotICAgIExh
eW91dFJlY3QgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdDsKLSAgICBMYXlvdXRSZWN0IHZlcnRpY2Fs
T3ZlcmhhbmdSZWN0OworICAgIEludFJlY3QgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdDsKKyAgICBJ
bnRSZWN0IHZlcnRpY2FsT3ZlcmhhbmdSZWN0OwogICAgIGNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNG
b3JQYWludGluZyhob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCk7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFURk9STShDSFJPTUlVTSkg
JiYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVyaGFu
Z0xheWVyID0gbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzKCkpIHsKQEAgLTcyMiw3ICs3MjIsNyBAQCBJ
bnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvCiAKIEludFJlY3QgU2Nyb2xs
Vmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0KSBjb25zdAog
ewotICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3co
d2luZG93UmVjdCk7CisgICAgSW50UmVjdCB2aWV3UmVjdCA9IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyh3aW5kb3dSZWN0KTsKICAgICB2aWV3UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCgpKTsK
ICAgICByZXR1cm4gdmlld1JlY3Q7CiB9CkBAIC03NDMsMTIgKzc0MywxMiBAQCBJbnRSZWN0IFNj
cm9sbFZpZXc6OmNvbnRlbnRzVG9TY3JlZW4oY29uCiAgICAgcmV0dXJuIGhvc3RXaW5kb3coKS0+
d2luZG93VG9TY3JlZW4oY29udGVudHNUb1dpbmRvdyhyZWN0KSk7CiB9CiAKLUxheW91dFBvaW50
IFNjcm9sbFZpZXc6OnNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAorSW50UG9pbnQgU2Nyb2xsVmlldzo6c2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYg
cG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVy
biBwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMocG9pbnQpOwogICAgIGlmICghaG9zdFdpbmRvdygp
KQotICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEludFBvaW50
KCk7CiAgICAgcmV0dXJuIHdpbmRvd1RvQ29udGVudHMoaG9zdFdpbmRvdygpLT5zY3JlZW5Ub1dp
bmRvdyhwb2ludCkpOwogfQogCkBAIC04MTIsNyArODEyLDcgQEAgU2Nyb2xsYmFyKiBTY3JvbGxW
aWV3OjpzY3JvbGxiYXJBdFBvaW50KAogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIExheW91dFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFp
bnModmlld1BvaW50KSkKICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQpAQCAtODUwLDkgKzg1MCw5IEBAIHZvaWQg
U2Nyb2xsVmlldzo6Z2VzdHVyZUV2ZW50KGNvbnN0IFBsYXQKIH0KICNlbmRpZgogCi12b2lkIFNj
cm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBuZXdSZWN0KQordm9pZCBT
Y3JvbGxWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHsKLSAgICBM
YXlvdXRSZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBJbnRSZWN0IG9sZFJlY3QgPSBm
cmFtZVJlY3QoKTsKICAgICAKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAgICBy
ZXR1cm47CkBAIC04ODMsMTQgKzg4MywxNCBAQCBzdGF0aWMgdm9pZCBwb3NpdGlvblNjcm9sbGJh
ckxheWVyKEdyYXBoCiAgICAgaWYgKCFncmFwaGljc0xheWVyIHx8ICFzY3JvbGxiYXIpCiAgICAg
ICAgIHJldHVybjsKICAgICBncmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0g
ICAgTGF5b3V0UmVjdCBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAg
ICBJbnRSZWN0IHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwogICAgIGdy
YXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CiAgICAg
aWYgKHNjcm9sbGJhclJlY3Quc2l6ZSgpICE9IGdyYXBoaWNzTGF5ZXItPnNpemUoKSkKICAgICAg
ICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgZ3JhcGhpY3NMYXllci0+
c2V0U2l6ZShzY3JvbGxiYXJSZWN0LnNpemUoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBvc2l0aW9u
U2Nyb2xsQ29ybmVyTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgY29uc3QgTGF5
b3V0UmVjdCYgY29ybmVyUmVjdCkKK3N0YXRpYyB2b2lkIHBvc2l0aW9uU2Nyb2xsQ29ybmVyTGF5
ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVj
dCkKIHsKICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTkxMiw5
ICs5MTIsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXJzCiAjZW5k
aWYKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBM
YXlvdXRSZWN0JiByZWN0LCBib29sIG5vdykKK3ZvaWQgU2Nyb2xsVmlldzo6cmVwYWludENvbnRl
bnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBub3cpCiB7Ci0gICAgTGF5b3V0
UmVjdCBwYWludFJlY3QgPSByZWN0OworICAgIEludFJlY3QgcGFpbnRSZWN0ID0gcmVjdDsKICAg
ICBpZiAoY2xpcHNSZXBhaW50cygpICYmICFwYWludHNFbnRpcmVDb250ZW50cygpKQogICAgICAg
ICBwYWludFJlY3QuaW50ZXJzZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKICAgICBpZiAocGFp
bnRSZWN0LmlzRW1wdHkoKSkKQEAgLTkzMCwyNSArOTMwLDI1IEBAIHZvaWQgU2Nyb2xsVmlldzo6
cmVwYWludENvbnRlbnRSZWN0YW5nbGUKICAgICAgICAgaG9zdFdpbmRvdygpLT5pbnZhbGlkYXRl
Q29udGVudHNBbmRXaW5kb3coY29udGVudHNUb1dpbmRvdyhwYWludFJlY3QpLCBub3cgLyppbW1l
ZGlhdGUqLyk7CiB9CiAKLUxheW91dFJlY3QgU2Nyb2xsVmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgp
IGNvbnN0CitJbnRSZWN0IFNjcm9sbFZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAogewot
ICAgIExheW91dFJlY3QgY29ybmVyUmVjdDsKKyAgICBJbnRSZWN0IGNvcm5lclJlY3Q7CiAKICAg
ICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKICAgICAgICAgcmV0dXJuIGNvcm5lclJlY3Q7
CiAKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIHdpZHRoKCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPndpZHRoKCkgPiAwKSB7Ci0gICAgICAgIGNvcm5lclJlY3QudW5pdGUoTGF5
b3V0UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAgICAgICBjb3Ju
ZXJSZWN0LnVuaXRlKEludFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKICAgICB9CiAK
ICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3Jv
bGxiYXItPmhlaWdodCgpID4gMCkgewotICAgICAgICBjb3JuZXJSZWN0LnVuaXRlKExheW91dFJl
Y3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1f
dmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKSk7CisgICAgICAgIGNvcm5lclJlY3QudW5pdGUo
SW50UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvcm5l
clJlY3Q7CkBAIC05NjksMTcgKzk2OSwxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bENvcm5lcigpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQordm9p
ZCBTY3JvbGxWaWV3OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCiB7CiAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCktPnBhaW50U2Nyb2xsQ29ybmVyKHRoaXMsIGNvbnRleHQsIGNvcm5lclJlY3QpOwogfQogCi12
b2lkIFNjcm9sbFZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IExheW91dFJl
Y3QmIHJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaW52YWxpZGF0ZVJlY3QocmVjdCk7CiB9CiAKLXZv
aWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxiYXJz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludFBhblNjcm9sbElj
b24oR3JhcAogICAgIGNvbnRleHQtPmRyYXdJbWFnZShwYW5TY3JvbGxJY29uLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBtX3BhblNjcm9sbEljb25Qb2ludCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQor
dm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKICAgICAgICAgV2lk
Z2V0OjpwYWludChjb250ZXh0LCByZWN0KTsKQEAgLTEwMjIsMTMgKzEwMjIsMTMgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIElmIHdlIGVuY291bnRl
ciBhbnkgb3ZlcmxheSBzY3JvbGxiYXJzIGFzIHdlIHBhaW50LCB0aGlzIHdpbGwgYmUgc2V0IHRv
IHRydWUuCiAgICAgbV9jb250YWluc1Njcm9sbGFibGVBcmVhV2l0aE92ZXJsYXlTY3JvbGxiYXJz
ID0gZmFsc2U7CiAKLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gZnJhbWVSZWN0KCk7CisgICAg
SW50UmVjdCBjbGlwUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJh
cigpICYmICF2ZXJ0aWNhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAg
ICAgY2xpcFJlY3Quc2V0V2lkdGgoY2xpcFJlY3Qud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
KCktPndpZHRoKCkpOwogICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhvcml6b250
YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIGNsaXBSZWN0LnNl
dEhlaWdodChjbGlwUmVjdC5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0
KCkpOwogCi0gICAgTGF5b3V0UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7CisgICAgSW50
UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7CiAgICAgZG9jdW1lbnREaXJ0eVJlY3QuaW50
ZXJzZWN0KGNsaXBSZWN0KTsKIAogICAgIGlmICghZG9jdW1lbnREaXJ0eVJlY3QuaXNFbXB0eSgp
KSB7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogCiAgICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJzLgogICAgIGlmICghbV9z
Y3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGlj
YWxTY3JvbGxiYXIpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqY29udGV4dCk7Ci0gICAgICAgIExheW91dFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVjdCA9
IHJlY3Q7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7CiAgICAg
ICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKICAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKICAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVj
dC5tb3ZlQnkoLWxvY2F0aW9uKCkpOwpAQCAtMTA3MCwyNSArMTA3MCwyNSBAQCB2b2lkIFNjcm9s
bFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIHBhaW50UGFuU2Nyb2xsSWNv
bihjb250ZXh0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFz
Rm9yUGFpbnRpbmcoTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgTGF5b3V0UmVj
dCYgdmVydGljYWxPdmVyaGFuZ1JlY3QpCit2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJo
YW5nQXJlYXNGb3JQYWludGluZyhJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCBJbnRS
ZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCkKIHsKLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggPSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIo
KS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
PSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpCiAgICAgICAgID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7
Ci0gICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxT
Y3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAg
ICAgICAgID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7CiAKLSAgICBMYXlv
dXRVbml0IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3Jp
Z2luKCkueSgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlvbigpLnko
KSArIHNjcm9sbE9yaWdpbigpLnkoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxZIDwgMCkgewog
ICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJhbWVSZWN0KCk7CiAgICAgICAgIGhv
cml6b250YWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KC1waHlzaWNhbFNjcm9sbFkpOwogICAgIH0g
ZWxzZSBpZiAoY29udGVudHNIZWlnaHQoKSAmJiBwaHlzaWNhbFNjcm9sbFkgPiBjb250ZW50c0hl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0ID0g
cGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOwor
ICAgICAgICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkg
LSB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5tYXhZKCkgLSBoZWlnaHQgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKICAgICAgICAg
aG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKICAgICB9CiAKLSAgICBM
YXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xs
T3JpZ2luKCkueCgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3NpdGlvbigp
LngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxYIDwgMCkg
ewogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRXaWR0aCgtcGh5c2ljYWxTY3JvbGxY
KTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGZyYW1lUmVjdCgpLmhl
aWdodCgpIC0gaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CkBAIC0xMDk4LDcgKzEw
OTgsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCku
eSgpKTsKICAgICB9IGVsc2UgaWYgKGNvbnRlbnRzV2lkdGgoKSAmJiBwaHlzaWNhbFNjcm9sbFgg
PiBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkgewotICAgICAgICBMYXlvdXRVbml0
IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxYIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0
aCgpKTsKKyAgICAgICAgaW50IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxYIC0gKGNvbnRlbnRzV2lk
dGgoKSAtIHZpc2libGVXaWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0
V2lkdGgod2lkdGgpOwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJh
bWVSZWN0KCkuaGVpZ2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5tYXhYKCkgLSB3aWR0
aCAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwpAQCAtMTEwOSwxNSArMTEwOSwxNSBAQCB2b2lk
IFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGCiAgICAgfQogfQogCi12b2lkIFNj
cm9sbFZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIGNvbnN0IExheW91dFJlY3Qm
IHZlcnRpY2FsT3ZlcmhhbmdSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCit2b2lk
IFNjcm9sbFZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIGNvbnN0IEludFJlY3QmIHZl
cnRpY2FsT3ZlcmhhbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50T3ZlcmhhbmdBcmVhcyh0aGlzLCBjb250ZXh0LCBo
b3Jpem9udGFsT3ZlcmhhbmdSZWN0LCB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCwgZGlydHlSZWN0KTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVBbmRQYWludE92ZXJoYW5nQXJlYXMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCit2b2lk
IFNjcm9sbFZpZXc6OmNhbGN1bGF0ZUFuZFBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBMYXlvdXRSZWN0
IGhvcml6b250YWxPdmVyaGFuZ1JlY3Q7Ci0gICAgTGF5b3V0UmVjdCB2ZXJ0aWNhbE92ZXJoYW5n
UmVjdDsKKyAgICBJbnRSZWN0IGhvcml6b250YWxPdmVyaGFuZ1JlY3Q7CisgICAgSW50UmVjdCB2
ZXJ0aWNhbE92ZXJoYW5nUmVjdDsKICAgICBjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRm9yUGFpbnRp
bmcoaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgdmVydGljYWxPdmVyaGFuZ1JlY3QpOwogCiAgICAg
aWYgKGRpcnR5UmVjdC5pbnRlcnNlY3RzKGhvcml6b250YWxPdmVyaGFuZ1JlY3QpIHx8IGRpcnR5
UmVjdC5pbnRlcnNlY3RzKHZlcnRpY2FsT3ZlcmhhbmdSZWN0KSkKQEAgLTExMjksMTkgKzExMjks
MTkgQEAgYm9vbCBTY3JvbGxWaWV3Ojppc1BvaW50SW5TY3JvbGxiYXJDb3JuZQogICAgIGlmICgh
c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBM
YXlvdXRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93
UG9pbnQpOworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyh3aW5kb3dQb2ludCk7CiAKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0g
ICAgICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4gPSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFs
U2Nyb2xsYmFyWU1heCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpICsg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5oZWlnaHQoKTsKLSAgICAgICAgTGF5
b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFyWE1pbiA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkueCgpICsgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0
aCgpOworICAgICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4gPSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKTsKKyAgICAgICAgaW50IGhvcml6b250YWxTY3JvbGxi
YXJZTWF4ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6
b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAgICAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhclhNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngo
KSArIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKIAogICAgICAg
ICByZXR1cm4gdmlld1BvaW50LnkoKSA+IGhvcml6b250YWxTY3JvbGxiYXJZTWluICYmIHZpZXdQ
b2ludC55KCkgPCBob3Jpem9udGFsU2Nyb2xsYmFyWU1heCAmJiB2aWV3UG9pbnQueCgpID4gaG9y
aXpvbnRhbFNjcm9sbGJhclhNaW47CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNj
cm9sbGJhclhNaW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCk7Ci0gICAg
TGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhclhNYXggPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS54KCkgKyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0aCgp
OwotICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJZTWluID0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+ZnJhbWVSZWN0KCkueSgpICsgbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCku
aGVpZ2h0KCk7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWE1pbiA9IG1fdmVydGljYWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLngoKTsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJYTWF4ID0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJZTWluID0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpICsgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkuaGVpZ2h0KCk7CiAgICAgCiAgICAgcmV0dXJuIHZpZXdQb2ludC54KCkg
PiB2ZXJ0aWNhbFNjcm9sbGJhclhNaW4gJiYgdmlld1BvaW50LngoKSA8IHZlcnRpY2FsU2Nyb2xs
YmFyWE1heCAmJiB2aWV3UG9pbnQueSgpID4gdmVydGljYWxTY3JvbGxiYXJZTWluOwogfQpAQCAt
MTE1MiwzNCArMTE1MiwzNCBAQCBib29sIFNjcm9sbFZpZXc6OnNjcm9sbGJhckNvcm5lclByZXNl
bnQoCiAgICAgICAgIHx8IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhlaWdodCgpIC0gbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgPiAwKTsKIH0KIAotTGF5b3V0UmVjdCBTY3JvbGxWaWV3
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK0ludFJlY3QgU2Ny
b2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAg
Ly8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKLSAgICBMYXlvdXRS
ZWN0IG5ld1JlY3QgPSBsb2NhbFJlY3Q7CisgICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxSZWN0
OwogICAgIG5ld1JlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJu
IG5ld1JlY3Q7CiB9CiAKLUxheW91dFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlv
dXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAorSW50UmVjdCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7Ci0gICAgTGF5b3V0UmVjdCBuZXdSZWN0
ID0gcGFyZW50UmVjdDsKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBwYXJlbnRSZWN0OwogICAgIC8v
IFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQgd2l0aGluIHVzCiAgICAgbmV3UmVjdC5t
b3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1JlY3Q7CiB9CiAK
IC8vIEZJWE1FOiB0ZXN0IHRoZXNlIG9uIHdpbmRvd3MKLUxheW91dFBvaW50IFNjcm9sbFZpZXc6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CitJbnRQb2ludCBT
Y3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAogewog
ICAgIC8vIFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQgd2l0aGluIHVzCi0gICAgTGF5
b3V0UG9pbnQgbmV3UG9pbnQgPSBsb2NhbFBvaW50OworICAgIEludFBvaW50IG5ld1BvaW50ID0g
bG9jYWxQb2ludDsKICAgICBuZXdQb2ludC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsK
ICAgICByZXR1cm4gbmV3UG9pbnQ7CiB9CiAKLUxheW91dFBvaW50IFNjcm9sbFZpZXc6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorSW50UG9pbnQgU2Nyb2xs
Vmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiB7Ci0gICAg
TGF5b3V0UG9pbnQgbmV3UG9pbnQgPSBwYXJlbnRQb2ludDsKKyAgICBJbnRQb2ludCBuZXdQb2lu
dCA9IHBhcmVudFBvaW50OwogICAgIC8vIFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQg
d2l0aGluIHVzCiAgICAgbmV3UG9pbnQubW92ZUJ5KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwog
ICAgIHJldHVybiBuZXdQb2ludDsKQEAgLTEyNDIsNyArMTI0Miw3IEBAIGJvb2wgU2Nyb2xsVmll
dzo6aXNPZmZzY3JlZW4oKSBjb25zdAogfQogCiAKLXZvaWQgU2Nyb2xsVmlldzo6YWRkUGFuU2Ny
b2xsSWNvbihjb25zdCBMYXlvdXRQb2ludCYgaWNvblBvc2l0aW9uKQordm9pZCBTY3JvbGxWaWV3
OjphZGRQYW5TY3JvbGxJY29uKGNvbnN0IEludFBvaW50JiBpY29uUG9zaXRpb24pCiB7CiAgICAg
aWYgKCFob3N0V2luZG93KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNDYsMTIgKzEzNDYsMTIg
QEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6ZQogewogfQogCi1JbnRS
ZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihjb25zdCBMYXlvdXRSZWN0
JiByZWN0KSBjb25zdAorSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzVG9TY3Jl
ZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gcmVjdDsKIH0KIAot
TGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVu
VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBv
aW50OwogfQpAQCAtMTM2NSw3ICsxMzY1LDcgQEAgYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNj
cm9sbChTY3JvbGxEaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBs
YXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgLypu
b3cqLykKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShj
b25zdCBJbnRSZWN0JiwgYm9vbCAvKm5vdyovKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDggKzE0Niw4IEBAIHB1
YmxpYzoKICAgICAvLyB3aGljaCB1c3VhbGx5IHdpbGwgaGFwcGVuIHdoZW4gcGFubmluZywgcGlu
Y2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9yIHdoZW4gc2NhbGUgb3IgcG9zaXRpb24gYXJlIGNo
YW5nZWQgbWFudWFsbHkuCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChi
b29sIGluY2x1ZGVTY3JvbGxiYXJzID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJl
Y3QpIHsgbV9maXhlZFZpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsgfQot
ICAgIExheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRl
bnRSZWN0KCkud2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgdmlzaWJsZUhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9CisgICAgaW50IHZpc2li
bGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLndpZHRoKCk7IH0K
KyAgICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVj
dCgpLmhlaWdodCgpOyB9CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0
aGUgc2l6ZSB3ZWJraXQgc2hvdWxkIHVzZSB0byBsYXlvdXQgdGhlIGNvbnRlbnRzLiBCeSBkZWZh
dWx0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHZpc2libGUKICAgICAvLyBjb250ZW50IHNpemUu
IEV4cGxpY2l0bHkgc2V0dGluZyBhIGxheW91dCBzaXplIHZhbHVlIHdpbGwgY2F1c2Ugd2Via2l0
IHRvIGxheW91dCB0aGUgY29udGVudHMgdXNpbmcgdGhpcyBzaXplIGluc3RlYWQuCkBAIC0yNzks
NyArMjc5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJblNjcm9sbGJh
ckNvcm5lcihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3Ju
ZXJQcmVzZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCShyZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgU2Nyb2xs
YWJsZUFyZWFfaAogI2RlZmluZSBTY3JvbGxhYmxlQXJlYV9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtOTIsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRp
b24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwogICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhcihT
Y3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVj
dCgpIGNvbnN0ID0gMDsKICAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+Jikg
Y29uc3QgeyB9CiAKQEAgLTEyNyw4ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRQ
b2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gSW50UG9pbnQoKTsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIEludFBvaW50
KCk7IH0KICAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgLyppbmNs
dWRlU2Nyb2xsYmFycyovID0gZmFsc2UpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZUhlaWdodCgp
IGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBM
YXlvdXRVbml0IHZpc2libGVXaWR0aCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRo
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFs
IEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIEludFNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBJbnRTaXplKCk7IH0KICAgICB2aXJ0
dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gSW50UG9p
bnQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTcsMTcgKzEyOTcsMTcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBMYXlvdXRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbiA9IGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAgICBJbnRQb2ludCBjdXJy
ZW50TW91c2VQb3NpdGlvbiA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9z
aXRpb24oKTsKICAgICAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1v
dXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQg
b2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgTGF5
b3V0UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2
aW91c01vdXNlUG9zaXRpb247CiAgICAgaWYgKGN1cnJlbnRNb3VzZVBvc2l0aW9uLngoKSA8IDAg
fHwgY3VycmVudE1vdXNlUG9zaXRpb24ueSgpIDwgMCkKICAgICAgICAgY3VycmVudE1vdXNlUG9z
aXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CiAgICAgZWxzZQogICAgICAgICBwcmV2aW91
c01vdXNlUG9zaXRpb24gPSBjdXJyZW50TW91c2VQb3NpdGlvbjsKIAotICAgIExheW91dFVuaXQg
eERlbHRhID0gY3VycmVudE1vdXNlUG9zaXRpb24ueCgpIC0gc291cmNlUG9pbnQueCgpOwotICAg
IExheW91dFVuaXQgeURlbHRhID0gY3VycmVudE1vdXNlUG9zaXRpb24ueSgpIC0gc291cmNlUG9p
bnQueSgpOworICAgIGludCB4RGVsdGEgPSBjdXJyZW50TW91c2VQb3NpdGlvbi54KCkgLSBzb3Vy
Y2VQb2ludC54KCk7CisgICAgaW50IHlEZWx0YSA9IGN1cnJlbnRNb3VzZVBvc2l0aW9uLnkoKSAt
IHNvdXJjZVBvaW50LnkoKTsKIAogICAgIGlmIChhYnMoeERlbHRhKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgogICAgICAgICB4RGVsdGEgPSAwOwpAQCAtMTM0NSw3ICsxMzQ1LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShMYQogICAgIH0gZWxzZSBpZiAocmVuZGVy
ZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwg
d2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5
IHNjcm9sbGVkLCBidXQgZG9lc24ndAogICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAu
IFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9s
bGVkLgotICAgICAgICByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShM
YXlvdXRTaXplKHhEZWx0YSwgeURlbHRhKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnZpZXcoKS0+
ZnJhbWVWaWV3KCktPnNjcm9sbEJ5KEludFNpemUoeERlbHRhLCB5RGVsdGEpKTsKICAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0
byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwogICAgIH0KQEAgLTEz
NjgsNyArMTM2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KExheW91dFUK
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKExheW91
dFBvaW50KHgsIHkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oTGF5b3V0VW5p
dCB4LCBMYXlvdXRVbml0IHkpCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50
IHkpCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkK
QEAgLTEzODUsNyArMTM4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKExheW91dFVu
aXQgeCwKICAgICAvLyBjb21wbGljYXRlZCAoc2luY2UgaXQgd2lsbCBpbnZvbHZlIHRlc3Rpbmcg
d2hldGhlciBvdXIgbGF5ZXIKICAgICAvLyBpcyBlaXRoZXIgb2NjbHVkZWQgYnkgYW5vdGhlciBs
YXllciBvciBjbGlwcGVkIGJ5IGFuIGVuY2xvc2luZwogICAgIC8vIGxheWVyIG9yIGNvbnRhaW5z
IGZpeGVkIGJhY2tncm91bmRzLCBldGMuKS4KLSAgICBMYXlvdXRTaXplIG5ld1Njcm9sbE9mZnNl
dCA9IExheW91dFNpemUoeCAtIHNjcm9sbE9yaWdpbigpLngoKSwgeSAtIHNjcm9sbE9yaWdpbigp
LnkoKSk7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBJbnRTaXplKHggLSBzY3JvbGxP
cmlnaW4oKS54KCksIHkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOwogICAgIGlmIChtX3Njcm9sbE9m
ZnNldCA9PSBuZXdTY3JvbGxPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Njcm9sbE9m
ZnNldCA9IG5ld1Njcm9sbE9mZnNldDsKQEAgLTE1MDEsNyArMTUwMSw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICAgICAgICAgICAgICB4T2Zmc2V0ID0g
bWF4PExheW91dFVuaXQ+KDAsIG1pbihmcmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSwgeE9mZnNl
dCkpOwogICAgICAgICAgICAgICAgIHlPZmZzZXQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKGZy
YW1lVmlldy0+Y29udGVudHNIZWlnaHQoKSwgeU9mZnNldCkpOwogCi0gICAgICAgICAgICAgICAg
ZnJhbWVWaWV3LT5zZXRTY3JvbGxQb3NpdGlvbihMYXlvdXRQb2ludCh4T2Zmc2V0LCB5T2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCh4T2Zmc2V0LCB5T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSByZW5k
ZXJlcigpLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5n
TGF5ZXIoKTsKICAgICAgICAgICAgICAgICBuZXdSZWN0LnNldFgocmVjdC54KCkgLSBmcmFtZVZp
ZXctPnNjcm9sbFgoKSArIGZyYW1lVmlldy0+eCgpKTsKICAgICAgICAgICAgICAgICBuZXdSZWN0
LnNldFkocmVjdC55KCkgLSBmcmFtZVZpZXctPnNjcm9sbFkoKSArIGZyYW1lVmlldy0+eSgpKTsK
QEAgLTE2MTgsNyArMTYxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoKQogICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKCk7CiAj
ZW5kaWYKIAotICAgIExheW91dFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gZnJhbWVW
aWV3LT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNl
UG9zaXRpb24oKSk7CisgICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSBmcmFt
ZVZpZXctPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91
c2VQb3NpdGlvbigpKTsKICAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVu
dERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7
CiB9CiAKQEAgLTE2ODcsMTggKzE2ODcsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNv
bnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFs
c28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1
bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CitpbnQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNv
bnN0CiB7CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6
b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFyKS5nZXQoKTsKICAgICByZXR1cm4gc2Ny
b2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXpl
KCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IExh
eW91dFBvaW50JiBvZmZzZXQpCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQoY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBzY3JvbGxUbyhvZmZzZXQueCgpLCBvZmZzZXQu
eSgpKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKFNj
cm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIHNjcm9sbFhPZmZz
ZXQoKTsKQEAgLTE3MDcsMTcgKzE3MDcsMTcgQEAgTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6c2Ny
b2xsUG9zaXRpb24oUwogICAgIHJldHVybiAwOwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJMYXll
cjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCkgKyBtX3Njcm9sbE9m
ZnNldDsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6Om1pbmltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJMYXllcjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCk7CiB9CiAKLUxheW91dFBvaW50IFJl
bmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgUmVuZGVy
TGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IG1f
c2Nyb2xsU2l6ZSBtYXkgbm90IGJlIHVwLXRvLWRhdGUgaWYgbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkgaXMgdHJ1ZS4KICAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCkgKyBtX3Njcm9sbFNpemUgLSB2
aXNpYmxlQ29udGVudFJlY3QodHJ1ZSkuc2l6ZSgpOwpAQCAtMTczNywxMiArMTczNywxMiBAQCBJ
bnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3QoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXgoMCwgbV9sYXllclNpemUuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KSkpOwogfQogCi1MYXlvdXRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0CitJbnRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIExheW91dFNpemUoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgTGF5b3V0U2l6ZSYp
IGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgSW50
U2l6ZSYpIGNvbnN0CiB7CiB9CiAKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotc3RhdGljIExheW91dFJlY3QgY29ybmVyUmVjdChj
b25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKK3N0YXRp
YyBJbnRSZWN0IGNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBJbnRS
ZWN0JiBib3VuZHMpCiB7CiAgICAgaW50IGhvcml6b250YWxUaGlja25lc3M7CiAgICAgaW50IHZl
cnRpY2FsVGhpY2tuZXNzOwpAQCAtMTc3MSwxMiArMTc3MSwxMiBAQCBzdGF0aWMgTGF5b3V0UmVj
dCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlCiAgICAgICAgIGhvcml6b250YWxUaGlja25lc3MgPSBs
YXllci0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKICAgICAgICAgdmVydGljYWxUaGlj
a25lc3MgPSBsYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIExheW91dFJlY3QoYm91bmRzLm1heFgoKSAtIGhvcml6b250YWxUaGlja25lc3Mg
LSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGljYWxUaGlja25lc3MgLSBsYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRoaWNrbmVzcyk7CisgICAg
cmV0dXJuIEludFJlY3QoYm91bmRzLm1heFgoKSAtIGhvcml6b250YWxUaGlja25lc3MgLSBsYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKKyAgICAgICAgICAg
ICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGljYWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICBo
b3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRoaWNrbmVzcyk7CiB9CiAKLUxheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAorSW50UmVjdCBSZW5kZXJMYXll
cjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSBhIHNjcm9sbGJh
ciBjb3JuZXIgd2hlbiBhIHNjcm9sbGJhciBpcyB2aXNpYmxlIGFuZCBub3QgZmlsbGluZyB0aGUg
ZW50aXJlIGxlbmd0aCBvZiB0aGUgYm94LgogICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuOgpAQCAt
MTc4NywyMyArMTc4NywyMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJS
ZWN0CiAgICAgYm9vbCBoYXNSZXNpemVyID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+cmVzaXplKCkg
IT0gUkVTSVpFX05PTkU7CiAgICAgaWYgKChoYXNIb3Jpem9udGFsQmFyICYmIGhhc1ZlcnRpY2Fs
QmFyKSB8fCAoaGFzUmVzaXplciAmJiAoaGFzSG9yaXpvbnRhbEJhciB8fCBoYXNWZXJ0aWNhbEJh
cikpKQogICAgICAgICByZXR1cm4gY29ybmVyUmVjdCh0aGlzLCByZW5kZXJCb3goKS0+Ym9yZGVy
Qm94UmVjdCgpKTsKLSAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0
KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0IHJlc2l6ZXJDb3JuZXJSZWN0KGNvbnN0IFJlbmRl
ckxheWVyKiBsYXllciwgY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQorc3RhdGljIEludFJlY3Qg
cmVzaXplckNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBJbnRSZWN0
JiBib3VuZHMpCiB7CiAgICAgQVNTRVJUKGxheWVyLT5yZW5kZXJlcigpLT5pc0JveCgpKTsKICAg
ICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05F
KQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwogICAgIHJldHVybiBjb3JuZXJSZWN0KGxheWVyLCBib3VuZHMpOwogfQogCi1MYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0CitJbnRSZWN0
IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0CiB7CiAgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKLSAgICBMYXlvdXRSZWN0IHNjcm9sbENvcm5lckFuZFJlc2l6ZXIg
PSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgSW50
UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVyID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAgIGlm
IChzY3JvbGxDb3JuZXJBbmRSZXNpemVyLmlzRW1wdHkoKSkKICAgICAgICAgc2Nyb2xsQ29ybmVy
QW5kUmVzaXplciA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJveC0+Ym9yZGVyQm94UmVjdCgp
KTsKICAgICByZXR1cm4gc2Nyb2xsQ29ybmVyQW5kUmVzaXplcjsKQEAgLTE4MTUsNjMgKzE4MTUs
NjMgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKAogICAgIHJldHVy
biAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJM
YXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAorSW50
UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBj
b25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAg
aWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUmVjdDsKIAotICAgIExheW91dFJl
Y3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVj
dDsKICAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwogCiAgICAgcmV0
dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHJl
Y3QpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJl
Y3QmIHBhcmVudFJlY3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHJl
bmRlcmVyKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBwYXJlbnRS
ZWN0OwogCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRU
b1JlbmRlcmVyKHJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAgIEludFJlY3QgcmVjdCA9IHZp
ZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRSZWN0
KTsKICAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKICAgICByZXR1
cm4gcmVjdDsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5
b3V0UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAogewogICAgIFJlbmRl
clZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAg
ICByZXR1cm4gc2Nyb2xsYmFyUG9pbnQ7CiAKLSAgICBMYXlvdXRQb2ludCBwb2ludCA9IHNjcm9s
bGJhclBvaW50OworICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CiAgICAgcG9p
bnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CiAgICAgcmV0dXJuIHZpZXctPmZy
YW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHBvaW50KTsKIH0KIAot
TGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHBhcmVudFBvaW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJl
cigpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7
CiAKLSAgICBMYXlvdXRQb2ludCBwb2ludCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9S
ZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSB2
aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFyZW50UG9p
bnQpOwogCiAgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwogICAg
IHJldHVybiBwb2ludDsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXpl
KCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIExheW91dFNpemUoY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5zY3Jv
bGxXaWR0aCgpLCBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPnNjcm9sbEhlaWdodCgp
KTsKKyAgICByZXR1cm4gSW50U2l6ZShjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPnNj
cm9sbFdpZHRoKCksIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+c2Nyb2xsSGVpZ2h0
KCkpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjp2aXNpYmxlSGVpZ2h0KCkgY29uc3QK
K2ludCBSZW5kZXJMYXllcjo6dmlzaWJsZUhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
bGF5ZXJTaXplLmhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjp2aXNpYmxl
V2lkdGgoKSBjb25zdAoraW50IFJlbmRlckxheWVyOjp2aXNpYmxlV2lkdGgoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2xheWVyU2l6ZS53aWR0aCgpOwogfQpAQCAtMTg4OSwyNiArMTg4OSwyNiBA
QCBib29sIFJlbmRlckxheWVyOjppc09uQWN0aXZlUGFnZSgpIGNvbnN0CiAgICAgcmV0dXJuICFt
X3JlbmRlcmVyLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwogfQogCi1MYXlvdXRQb2ludCBS
ZW5kZXJMYXllcjo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgUmVuZGVy
TGF5ZXI6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS0+ZnJhbWUoKSA/IHJlbmRlcmVyKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJy
ZW50TW91c2VQb3NpdGlvbigpIDogTGF5b3V0UG9pbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIo
KS0+ZnJhbWUoKSA/IHJlbmRlcmVyKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50
TW91c2VQb3NpdGlvbigpIDogSW50UG9pbnQoKTsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJMYXll
cjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAorSW50
U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAKICAgICBp
ZiAoc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFNpemUo
Ym94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBi
b3gtPmJvcmRlclRvcCgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUoYm94LT53aWR0aCgpIC0g
Ym94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBib3gtPmJvcmRlclRvcCgp
KTsKIAogICAgIGlmIChzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQotICAgICAgICByZXR1cm4g
TGF5b3V0U2l6ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5oZWlnaHQoKSAtIGJveC0+Ym9yZGVy
Qm90dG9tKCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUo
Ym94LT5ib3JkZXJMZWZ0KCksIGJveC0+aGVpZ2h0KCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0g
c2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIExheW91dFNpemUoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgpOwogfQogCi12b2lk
IFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoc2Nyb2xsYmFyID09
IG1fdkJhci5nZXQoKSkgewpAQCAtMTkyMyw3ICsxOTIzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlYwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgTGF5
b3V0UmVjdCBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0
OwogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7CiAg
ICAgaWYgKHNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCkBAIC0xOTMzLDcgKzE5MzMsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjCiAgICAgcmVuZGVyZXIoKS0+
cmVwYWludFJlY3RhbmdsZShzY3JvbGxSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6aW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxMDMsMjAgKzIxMDMs
MjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRybwogICAgIGlmICgh
Ym94KQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJCb3gg
PSBib3gtPmJvcmRlckJveFJlY3QoKTsKLSAgICBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxDb3Ju
ZXIgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgTGF5b3V0UmVjdCBhYnNCb3VuZHMoYm9yZGVy
Qm94LmxvY2F0aW9uKCkgKyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJveC5zaXplKCkpOworICAg
IGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJCb3hSZWN0KCk7CisgICAgY29u
c3QgSW50UmVjdCYgc2Nyb2xsQ29ybmVyID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIEludFJl
Y3QgYWJzQm91bmRzKGJvcmRlckJveC5sb2NhdGlvbigpICsgb2Zmc2V0RnJvbUxheWVyLCBib3Jk
ZXJCb3guc2l6ZSgpKTsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldEZyYW1l
UmVjdChMYXlvdXRSZWN0KGFic0JvdW5kcy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBt
X3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWJzQm91bmRzLnkoKSArIGJveC0+Ym9yZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgp
ICsgYm94LT5ib3JkZXJCb3R0b20oKSkgLSBzY3JvbGxDb3JuZXIuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgbV92QmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMubWF4WCgpIC0gYm94LT5i
b3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRvcCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuaGVpZ2h0KCkgLSAoYm94LT5ib3Jk
ZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gc2Nyb2xsQ29ybmVyLmhlaWdodCgpKSk7
CiAKICAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChMYXlvdXRS
ZWN0KGFic0JvdW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMubWF4WSgpIC0gYm94LT5ib3JkZXJCb3R0
b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWJzQm91bmRzLndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJv
cmRlclJpZ2h0KCkpIC0gc2Nyb2xsQ29ybmVyLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOworICAgICAgICBtX2hCYXIt
PnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMubWF4WSgpIC0g
Ym94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0
KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gc2Nyb2xsQ29ybmVyLndpZHRoKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOwogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CkBAIC0yMjA3LDcgKzIyMDcsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9uCiAgICAgbV9zY3JvbGxT
aXplLnNldFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKICAgICBtX3Nj
cm9sbFNpemUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsKICAg
ICAKLSAgICBzZXRTY3JvbGxPcmlnaW4oTGF5b3V0UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lk
dGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKKyAgICBzZXRTY3JvbGxPcmlnaW4o
SW50UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVp
Z2h0KCkpKTsKIAogICAgIGlmIChuZWVkSEJhcikKICAgICAgICAgKm5lZWRIQmFyID0gbV9zY3Jv
bGxTaXplLndpZHRoKCkgPiBib3gtPmNsaWVudFdpZHRoKCk7CkBAIC0yMjUyLDggKzIyNTIsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgaWYgKGJveC0+
c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpIHsKICAgICAgICAgLy8gTGF5b3V0IG1h
eSBjYXVzZSB1cyB0byBiZSBpbiBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gIEluIHRoaXMg
Y2FzZSB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sg
dG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBMYXlvdXRV
bml0IG5ld1ggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xs
V2lkdGgoKSAtIGJveC0+Y2xpZW50V2lkdGgoKSkpOwotICAgICAgICBMYXlvdXRVbml0IG5ld1kg
PSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFlPZmZzZXQoKSwgc2Nyb2xsSGVpZ2h0KCkg
LSBib3gtPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgIGludCBuZXdYID0gbWF4KDAsIG1pbihz
Y3JvbGxYT2Zmc2V0KCksIHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdpZHRoKCkpKTsKKyAg
ICAgICAgaW50IG5ld1kgPSBtYXgoMCwgbWluKHNjcm9sbFlPZmZzZXQoKSwgc2Nyb2xsSGVpZ2h0
KCkgLSBib3gtPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGlmIChuZXdYICE9IHNjcm9sbFhP
ZmZzZXQoKSB8fCBuZXdZICE9IHNjcm9sbFlPZmZzZXQoKSkKICAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0KG5ld1gsIG5ld1kpOwogICAgIH0KQEAgLTI1MDIsMTQgKzI1MDIsMTQgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7CiAgICAgCi0gICAgTGF5b3V0UmVjdCByZXNp
emVDb250cm9sUmVjdDsKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwogICAgIGlmIChy
ZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSAhPSBSRVNJWkVfTk9ORSkgewogICAgICAgICBy
ZXNpemVDb250cm9sUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJveC0+Ym9yZGVyQm94
UmVjdCgpKTsKICAgICAgICAgaWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNvbnRhaW5zKGxvY2FsUG9p
bnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCBy
ZXNpemVDb250cm9sU2l6ZSA9IG1heDxMYXlvdXRVbml0PihyZXNpemVDb250cm9sUmVjdC5oZWln
aHQoKSwgMCk7CisgICAgaW50IHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4KHJlc2l6ZUNvbnRyb2xS
ZWN0LmhlaWdodCgpLCAwKTsKIAogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgTGF5b3V0UmVj
dCB2QmFyUmVjdChib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndp
ZHRoKCksIApAQCAtMjUyMiw3ICsyNTIyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92
ZXJmbG93Q29udHJvbAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVzaXplQ29udHJvbFNpemUg
PSBtYXg8TGF5b3V0VW5pdD4ocmVzaXplQ29udHJvbFJlY3Qud2lkdGgoKSwgMCk7CisgICAgcmVz
aXplQ29udHJvbFNpemUgPSBtYXgocmVzaXplQ29udHJvbFJlY3Qud2lkdGgoKSwgMCk7CiAgICAg
aWYgKG1faEJhcikgewogICAgICAgICBMYXlvdXRSZWN0IGhCYXJSZWN0KGJveC0+Ym9yZGVyTGVm
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVpZ2h0KCkgLSBib3gtPmJv
cmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA5OTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksOCArMjU5LDggQEAg
cHVibGljOgogICAgIGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fdG9wTGVmdDsgfQogICAgIHZvaWQgc2V0TG9jYXRpb24oTGF5b3V0VW5pdCB4LCBMYXlvdXRV
bml0IHkpIHsgbV90b3BMZWZ0ID0gTGF5b3V0UG9pbnQoeCwgeSk7IH0KIAotICAgIGNvbnN0IExh
eW91dFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyU2l6ZTsgfQotICAgIHZvaWQg
c2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fbGF5ZXJTaXplID0gc2l6ZTsgfQor
ICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyU2l6ZTsgfQor
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fbGF5ZXJTaXplID0gc2l6
ZTsgfQogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChs
b2NhdGlvbigpLCBzaXplKCkpOyB9CiAKQEAgLTI3OSw5ICsyNzksOSBAQCBwdWJsaWM6CiAKICAg
ICBMYXlvdXRTaXplIHNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHNjcm9s
bE9mZnNldCgpICsgbV9zY3JvbGxPdmVyZmxvdzsgfQogCi0gICAgTGF5b3V0VW5pdCBzY3JvbGxY
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKSArIHNjcm9sbE9y
aWdpbigpLngoKTsgfQotICAgIExheW91dFVuaXQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOyB9Ci0gICAg
TGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNjcm9s
bFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKTsgfQorICAgIGludCBzY3JvbGxYT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKSArIHNjcm9sbE9yaWdpbigpLngo
KTsgfQorICAgIGludCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7IH0KKyAgICBJbnRTaXplIHNjcm9sbE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxZT2Zm
c2V0KCkpOyB9CiAKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KExheW91dFVuaXQsIExheW91dFVu
aXQsIFNjcm9sbE9mZnNldENsYW1waW5nID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKTsKICAgICB2
b2lkIHNjcm9sbFRvWE9mZnNldChMYXlvdXRVbml0IHgsIFNjcm9sbE9mZnNldENsYW1waW5nIGNs
YW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KHgsIHNjcm9sbFlP
ZmZzZXQoKSwgY2xhbXApOyB9CkBAIC01OTIsNDIgKzU5Miw0MiBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCi0gICAgTGF5b3V0VW5pdCBz
Y3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsUG9zaXRpb24o
U2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgCiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNl
Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNv
bnN0IExheW91dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJW
aXNpYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5lclJlY3Qo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsK
LSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIExheW91dFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIExheW91
dFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCBt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxD
b3JuZXJSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVh
bCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29u
c3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29u
c3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRlU2Nyb2xsYmFy
cykgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHZpc2libGVIZWlnaHQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBMYXlvdXRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3VycmVu
dE1vdXNlUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJi
ZXJCYW5kKGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxl
SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50
U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVu
dE1vdXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJi
ZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3Vz
cGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNPbkFjdGl2
ZVBhZ2UoKSBjb25zdDsKIAogICAgIC8vIFJlY3RhbmdsZSBlbmNvbXBhc3NpbmcgdGhlIHNjcm9s
bCBjb3JuZXIgYW5kIHJlc2l6ZXIgcmVjdC4KLSAgICBMYXlvdXRSZWN0IHNjcm9sbENvcm5lckFu
ZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVy
UmVjdCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsg
bV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSAwOyB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9s
bGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCk7Cisg
ICAgdm9pZCBzY3JvbGxUbyhpbnQsIGludCk7CiAKLSAgICBMYXlvdXRTaXplIHNjcm9sbGJhck9m
ZnNldChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNl
dChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKICAgICAKICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93
U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpOwog
CkBAIC03NTUsMTUgKzc1NSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgTGF5b3V0UG9pbnQgbV90b3BM
ZWZ0OwogCiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0Ci0gICAgTGF5b3V0U2l6ZSBt
X2xheWVyU2l6ZTsKKyAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCiAgICAgLy8gT3VyIHNjcm9s
bCBvZmZzZXRzIGlmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLgotICAgIExheW91dFNpemUgbV9zY3Jv
bGxPZmZzZXQ7CisgICAgSW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAogICAgIExheW91dFNpemUg
bV9zY3JvbGxPdmVyZmxvdzsKICAgICAKICAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBz
Y3JvbGxlZCBhcmVhLgotICAgIExheW91dFNpemUgbV9zY3JvbGxTaXplOworICAgIEludFNpemUg
bV9zY3JvbGxTaXplOwogCiAgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZl
IGEgcGFpciBvZiBzY3JvbGxiYXJzLgogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9u
IDk5MzI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NDEsNyArNTQxLDcgQEAgaW50IFJlbmRlckxpc3RCb3g6OnNjcm9s
bFRvd2FyZChjb25zdCBJbgogCiB2b2lkIFJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwoKQogewot
ICAgIExheW91dFBvaW50IHBvcyA9IGZyYW1lKCktPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhm
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSk7CisgICAgSW50
UG9pbnQgcG9zID0gZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKIAogICAgIGludCBlbmRJbmRl
eCA9IHNjcm9sbFRvd2FyZChwb3MpOwogICAgIGlmIChlbmRJbmRleCA+PSAwKSB7CkBAIC03MDgs
OTEgKzcwOCw5MSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzQWN0aXZlKCkgY29uc3QKICAgICBy
ZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAot
dm9pZCBSZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6aW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgTGF5b3V0UmVjdCBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0
IHNjcm9sbFJlY3QgPSByZWN0OwogICAgIHNjcm9sbFJlY3QubW92ZSh3aWR0aCgpIC0gYm9yZGVy
UmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKSwgYm9yZGVyVG9wKCkpOwogICAgIHJlcGFpbnRS
ZWN0YW5nbGUoc2Nyb2xsUmVjdCk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGlzdEJveDo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAorSW50UmVjdCBSZW5k
ZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0CiB7
CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAg
ICAgICAgIHJldHVybiBzY3JvbGxiYXJSZWN0OwogCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gc2Ny
b2xsYmFyUmVjdDsKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwogCi0gICAgTGF5
b3V0VW5pdCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxi
YXItPndpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsK
KyAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpOworICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKICAgICBy
ZWN0Lm1vdmUoc2Nyb2xsYmFyTGVmdCwgc2Nyb2xsYmFyVG9wKTsKIAogICAgIHJldHVybiB2aWV3
LT5mcmFtZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcih0aGlzLCByZWN0KTsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIHBhcmVudFJl
Y3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygp
OwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CiAKLSAgICBMYXlv
dXRSZWN0IHJlY3QgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIodGhpcywg
cGFyZW50UmVjdCk7CisgICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZl
cnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFJlY3QpOwogCi0gICAgTGF5b3V0VW5pdCBzY3JvbGxi
YXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7Ci0g
ICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKKyAgICBpbnQgc2Nyb2xs
YmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOwor
ICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKICAgICByZWN0Lm1vdmUoLXNjcm9s
bGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiByZWN0OwogfQogCi1MYXlvdXRQ
b2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFBvaW50JiBzY3JvbGxiYXJQ
b2ludCkgY29uc3QKK0ludFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0aGlz
LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUG9pbnQ7
CiAKLSAgICBMYXlvdXRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIEludFBvaW50
IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxlZnQg
PSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBMYXlv
dXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIGludCBzY3JvbGxiYXJMZWZ0
ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50
IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwogICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyTGVm
dCwgc2Nyb2xsYmFyVG9wKTsKIAogICAgIHJldHVybiB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVy
dEZyb21SZW5kZXJlcih0aGlzLCBwb2ludCk7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckxpc3RC
b3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorSW50UG9p
bnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNv
bnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZp
ZXcpCiAgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsKIAotICAgIExheW91dFBvaW50IHBvaW50
ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFBvaW50
KTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5k
ZXJlcih0aGlzLCBwYXJlbnRQb2ludCk7CiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxlZnQg
PSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBMYXlv
dXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIGludCBzY3JvbGxiYXJMZWZ0
ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50
IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwogICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhckxl
ZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiBwb2ludDsKIH0KIAotTGF5b3V0U2l6ZSBS
ZW5kZXJMaXN0Qm94Ojpjb250ZW50c1NpemUoKSBjb25zdAorSW50U2l6ZSBSZW5kZXJMaXN0Qm94
Ojpjb250ZW50c1NpemUoKSBjb25zdAogewotICAgIHJldHVybiBMYXlvdXRTaXplKHNjcm9sbFdp
ZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgp
LCBzY3JvbGxIZWlnaHQoKSk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6dmlzaWJs
ZUhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyTGlzdEJveDo6dmlzaWJsZUhlaWdodCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6
OnZpc2libGVXaWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyTGlzdEJveDo6dmlzaWJsZVdpZHRoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gd2lkdGgoKTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGlz
dEJveDo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGlzdEJv
eDo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcg
PSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gTGF5b3V0UG9p
bnQoKTsKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CiAgICAgcmV0dXJuIHZpZXctPmZyYW1l
VmlldygpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDk5MzI1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDIw
ICsxMDIsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9s
bFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
U2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IC8vIFdlIGRvbid0
IHN1cHBvcnQgcmVzaXplIG9uIGxpc3QgYm94ZXMgeWV0LiBJZiB3ZSBkaWQgdGhlc2Ugd291bGQg
aGF2ZSB0byBjaGFuZ2UuCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5lclJlY3Qo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExh
eW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UG9p
bnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQotICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91
dFVuaXQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNp
YmxlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRNb3VzZVBv
c2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3Vz
ZVBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxB
bmltYXRpb25zKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT25BY3RpdmVQYWdlKCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkocmV2aXNpb24gOTkzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsMTMgKzUwMiwxMyBAQCBpbnQgUmVuZGVy
TWVudUxpc3Q6OmNsaWVudEluc2V0UmlnaHQoKSBjCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxheW91
dFVuaXQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKK2ludCBSZW5k
ZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewogICAgIHJldHVybiBwYWRk
aW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgpOwogfQogCiBjb25zdCBpbnQg
ZW5kT2ZMaW5lUGFkZGluZyA9IDI7Ci1MYXlvdXRVbml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQ
YWRkaW5nUmlnaHQoKSBjb25zdAoraW50IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nUmln
aHQoKSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQ
YXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpIHsKICAg
ICAgICAgLy8gRm9yIHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBw
YWRkaW5nIHRvIGxlYXZlIHJvb20gZm9yIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDk5MzI1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDggKzkyLDgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xp
ZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFk
ZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5k
ZXgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkocmV2aXNpb24gOTkzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI4LDkg
KzYyOCw5IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEkKICAgICBy
ZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAoraW50IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewotICAgIExheW91dFVuaXQg
cGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CisgICAgaW50IHBhZGRpbmcgPSBwYWRkaW5nTGVmdCgp
OwogCiAgICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVu
dCgpOwogICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24g
PyByZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApCkBAIC02MzksOSArNjM5LDkgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIHJldHVybiBwYWRkaW5n
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFk
ZGluZ1JpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVu
dFBhZGRpbmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGlu
Z1JpZ2h0KCk7CisgICAgaW50IHBhZGRpbmcgPSBwYWRkaW5nUmlnaHQoKTsKIAogICAgIEhUTUxF
bGVtZW50KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKFJl
bmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBjYW5jZWxCdXR0b24tPnJl
bmRlckJveCgpIDogMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDk5MzI1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBvcHVw
TWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0
TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQ
YWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cG9wdXBEaWRIaWRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTMyOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEx
LTExLTA0ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZl
cnQgcGxhdGZvcm0gYW5kIHNjcm9sbGluZyB0byBpbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTU4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgTGF5b3V0VW5pdCBh
bmQgcmVsYXRlZCB0eXBlcyB3aXRoIGludHMgaW4gcGxhdGZvcm0KKyAgICAgICAgYW5kIHNjcm9s
bGluZyBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERG
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVp
Z2h0KToKKyAgICAgICAgKFdlYktpdDo6QnVpbHRJblBERlZpZXc6OnZpc2libGVXaWR0aCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oOgorCiAyMDEx
LTExLTAzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIE5ldHNjYXBlUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3
LmNwcAkocmV2aXNpb24gOTkzMjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL0J1aWx0SW5QREZWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0LDcgKzYwNCw3
IEBAIGJvb2wgQnVpbHRJblBERlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKIAogdm9pZCBCdWlsdElu
UERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IExheW91dFJlY3QmIHJlY3QpCiB7Ci0gICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OworICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKICAgICBkaXJ0eVJlY3QubW92ZUJ5KHNj
cm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygp
LT5sb2NhdGlvbigpKTsKICAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsK
QEAgLTY1MCwxMiArNjUwLDEyIEBAIEludFBvaW50IEJ1aWx0SW5QREZWaWV3OjptYXhpbXVtU2Ny
b2xsUG8KICAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKIH0KIAotTGF5b3V0VW5pdCBCdWlsdElu
UERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0CitpbnQgQnVpbHRJblBERlZpZXc6OnZpc2li
bGVIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3BsdWdpblNpemUuaGVpZ2h0KCk7CiB9
CiAKLUxheW91dFVuaXQgQnVpbHRJblBERlZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CitpbnQg
QnVpbHRJblBERlZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGx1
Z2luU2l6ZS53aWR0aCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9CdWlsdEluUERGVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaAkocmV2aXNpb24gOTkzMjUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpMYXlvdXRVbml0IHZpc2libGVIZWlnaHQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkxheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZpc2libGVX
aWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0ICB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113956</attachid>
            <date>2011-11-07 16:37:05 -0800</date>
            <delta_ts>2011-11-07 17:31:03 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71585-20111107163704.patch</filename>
            <type>text/plain</type>
            <size>79947</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTEtMDcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmVydCBwbGF0Zm9ybSBhbmQg
c2Nyb2xsaW5nIHRvIGludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxNTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAg
ICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBMYXlvdXRVbml0IGFuZCByZWxhdGVkIHR5cGVzIHdp
dGggaW50cyBpbiBwbGF0Zm9ybQorICAgICAgICBhbmQgc2Nyb2xsaW5nIGNvZGUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50
Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oOgorCiAyMDExLTExLTA3ICBTY290dCBHcmFoYW0gIDxzY290
dG1nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBbGxvdyBnYW1lcGFkIEFQSSB0byBiZSBlbmFi
bGVkIGF0IHJ1bnRpbWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9u
IDk5NDk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzU3LDE1ICsxMzU3LDE1IEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVGaXhlZE9i
amVjdCgpCiAgICAgICAgIHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5KCk7CiB9CiAK
LUxheW91dFVuaXQgRnJhbWVWaWV3OjpzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0Citp
bnQgRnJhbWVWaWV3OjpzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgTGF5
b3V0VW5pdCB2aXNpYmxlQ29udGVudFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgo
KTsKLSAgICBMYXlvdXRVbml0IG1heFggPSBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlQ29udGVu
dFdpZHRoOworICAgIGludCB2aXNpYmxlQ29udGVudFdpZHRoID0gdmlzaWJsZUNvbnRlbnRSZWN0
KCkud2lkdGgoKTsKKyAgICBpbnQgbWF4WCA9IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250
ZW50V2lkdGg7CiAKICAgICBpZiAobWF4WCA9PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IExheW91dFVuaXQgeCA9IHNjcm9sbFgoKTsKKyAgICBpbnQgeCA9IHNjcm9sbFgoKTsKIAogICAg
IGlmICghc2Nyb2xsT3JpZ2luKCkueCgpKSB7CiAgICAgICAgIGlmICh4IDwgMCkKQEAgLTEzOTIs
MTUgKzEzOTIsMTUgQEAgTGF5b3V0VW5pdCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvcwog
ICAgIHJldHVybiB4ICogZHJhZ0ZhY3RvciAvIGZyYW1lU2NhbGVGYWN0b3I7CiB9CiAKLUxheW91
dFVuaXQgRnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CitpbnQgRnJh
bWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5p
dCB2aXNpYmxlQ29udGVudEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOwor
ICAgIGludCB2aXNpYmxlQ29udGVudEhlaWdodCA9IHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdo
dCgpOwogCi0gICAgTGF5b3V0VW5pdCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVD
b250ZW50SGVpZ2h0OworICAgIGludCBtYXhZID0gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVD
b250ZW50SGVpZ2h0OwogICAgIGlmIChtYXhZID09IDApCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgTGF5b3V0VW5pdCB5ID0gc2Nyb2xsWSgpOworICAgIGludCB5ID0gc2Nyb2xsWSgpOwogCiAg
ICAgaWYgKCFzY3JvbGxPcmlnaW4oKS55KCkpIHsKICAgICAgICAgaWYgKHkgPCAwKQpAQCAtMTQy
MywxMiArMTQyMywxMiBAQCBMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWUZvckZpeGVkUG9z
CiAgICAgcmV0dXJuIHkgKiBkcmFnRmFjdG9yIC8gZnJhbWVTY2FsZUZhY3RvcjsKIH0KIAotTGF5
b3V0U2l6ZSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdAor
SW50U2l6ZSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdAog
ewotICAgIHJldHVybiBMYXlvdXRTaXplKHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCksIHNjcm9s
bFlGb3JGaXhlZFBvc2l0aW9uKCkpOworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFhGb3JGaXhl
ZFBvc2l0aW9uKCksIHNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkpOwogfQogCi1MYXlvdXRQb2lu
dCBGcmFtZVZpZXc6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKK0ludFBvaW50IEZyYW1l
Vmlldzo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1l
ID8gbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQ
b2ludCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA5OTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKICNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFz
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpA
QCAtNjQsOCArNjUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3coKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgTGF5
b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpOwpAQCAtODgsNyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxS
ZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCi0gICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzU2l6ZShjb25zdCBMYXlvdXRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGxheW91dChib29sIGFs
bG93U3VidHJlZSA9IHRydWUpOwogICAgIGJvb2wgZGlkRmlyc3RMYXlvdXQoKSBjb25zdDsKQEAg
LTE2Niw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6
ZXJSZWN0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRp
b24oY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdp
ZGdldCgpOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xs
aW5nKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3Jv
bGxEaXJlY3Rpb24pIGNvbnN0OwpAQCAtMTkxLDkgKzE5Miw5IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24sIG5l
Z2F0aW5nIHRoZSBlZmZlY3RzIG9mIG92ZXJoYW5nCiAgICAgLy8gYW5kIGFkanVzdGluZyBmb3Ig
cGFnZSBzY2FsZS4KLSAgICBMYXlvdXRVbml0IHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OwotICAg
IExheW91dFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIGlu
dCBzY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIGludCBzY3JvbGxZRm9yRml4
ZWRQb3NpdGlvbigpIGNvbnN0OworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3Np
dGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsKICAgICB2
b2lkIGVuZERlZmVycmVkUmVwYWludHMoKTsKQEAgLTI2NywxMCArMjY4LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCosIGNvbnN0IEludFJlY3QmKTsK
IAogICAgIC8vIE1ldGhvZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhl
IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgotICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCos
IGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVy
dFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0
UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0
UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21SZW5kZXJlcihj
b25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJ
bnRSZWN0IGNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRlclNj
cm9sbGJhclBhcnQqIHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3JuZXIg
PT0gc2Nyb2xsQ29ybmVyOyB9CiAKQEAgLTI4NSw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgLy8g
T24gZWFjaCByZXBhaW50IHRoZSBkZWxheSBpbmNyZXNlcyBieSB0aGlzIGFtb3VudAogICAgIHN0
YXRpYyB2b2lkIHNldFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1l
bnREdXJpbmdMb2FkaW5nKGRvdWJsZSBwKTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3Vy
cmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRN
b3VzZVBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9k
IG9uY2UgcGx1Z2luIGxvYWRpbmcgaXMgZGVjb3VwbGVkIGZyb20gbGF5b3V0LgogICAgIHZvaWQg
Zmx1c2hBbnlQZW5kaW5nUG9zdExheW91dFRhc2tzKCk7CkBAIC0zMDEsNyArMzAyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VHJhY2tzUmVwYWludHMoYm9vbCk7CiAgICAgYm9vbCBpc1RyYWNr
aW5nUmVwYWludHMoKSBjb25zdCB7IHJldHVybiBtX2lzVHJhY2tpbmdSZXBhaW50czsgfQogICAg
IHZvaWQgcmVzZXRUcmFja2VkUmVwYWludHMoKSB7IG1fdHJhY2tlZFJlcGFpbnRSZWN0cy5jbGVh
cigpOyB9Ci0gICAgY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiB0cmFja2VkUmVwYWludFJlY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV90cmFja2VkUmVwYWludFJlY3RzOyB9CisgICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiB0cmFja2VkUmVwYWludFJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV90cmFj
a2VkUmVwYWludFJlY3RzOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
Q29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVj
dCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CkBAIC0zNDEsMjEgKzM0
MiwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gT3ZlcnJpZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRv
IGRvIHBvaW50IGNvbnZlcnNpb24gdmlhIHJlbmRlcmVycywgaW4gb3JkZXIgdG8KICAgICAvLyB0
YWtlIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252
ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVh
bCBMYXlvdXRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0
OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBTY3Jv
bGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
dmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRpY2tt
YXJrcyhWZWN0b3I8TGF5b3V0UmVjdD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlj
a21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxU
byhjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UnViYmVyQmFuZChj
b25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVy
QmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QW5p
bWF0ZWRTY3JvbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVBbmltYXRl
ZFNjcm9sbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc09uQWN0
aXZlUGFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3Q7CiAKQEAgLTQ1Niw3ICs0NTcsNyBAQCBwcml2YXRlOgogICAg
IGRvdWJsZSBtX2xhc3RQYWludFRpbWU7CiAgICAgCiAgICAgYm9vbCBtX2lzVHJhY2tpbmdSZXBh
aW50czsgLy8gVXNlZCBmb3IgdGVzdGluZy4KLSAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbV90cmFj
a2VkUmVwYWludFJlY3RzOworICAgIFZlY3RvcjxJbnRSZWN0PiBtX3RyYWNrZWRSZXBhaW50UmVj
dHM7CiAKICAgICBib29sIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiA5OTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5l
IFBvcHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudVN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNTIsOCArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQb3B1
cE1lbnVTdHlsZSBtZW51U3R5bGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgY2xpZW50
SW5zZXRMZWZ0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRpbmdMZWZ0KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVk
SW5kZXgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNw
cAkocmV2aXNpb24gOTk0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgZG91YmxlIFNj
cm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OgogICAgIHJldHVybiBlbmRWYWx1ZSAtIHN0
YXJ0VmFsdWU7CiB9CiAKLVNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OlBlckF4aXNE
YXRhKFNjcm9sbEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvc2l0aW9uLCBM
YXlvdXRVbml0IHZpc2libGVMZW5ndGgpCitTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRh
OjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvck5vbmUqIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQ
b3NpdGlvbiwgaW50IHZpc2libGVMZW5ndGgpCiAgICAgOiBtX2N1cnJlbnRQb3NpdGlvbihjdXJy
ZW50UG9zaXRpb24pCiAgICAgLCBtX3Zpc2libGVMZW5ndGgodmlzaWJsZUxlbmd0aCkKIHsKQEAg
LTM2Niw3ICszNjYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmFu
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlz
RGF0YTo6dXBkYXRlVmlzaWJsZUxlbmd0aChMYXlvdXRVbml0IHZpc2libGVMZW5ndGgpCit2b2lk
IFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OnVwZGF0ZVZpc2libGVMZW5ndGgoaW50
IHZpc2libGVMZW5ndGgpCiB7CiAgICAgbV92aXNpYmxlTGVuZ3RoID0gdmlzaWJsZUxlbmd0aDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5o
CShyZXZpc2lvbiA5OTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCkBAIC05MywxMSArOTIsMTEg
QEAgcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7
CiAKICAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgewotICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxB
bmltYXRvck5vbmUqIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MsIExheW91dFVuaXQgdmlzaWJs
ZUxlbmd0aCk7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yTm9uZSogcGFyZW50
LCBmbG9hdCogY3VycmVudFBvcywgaW50IHZpc2libGVMZW5ndGgpOwogICAgICAgICB2b2lkIHJl
c2V0KCk7CiAgICAgICAgIGJvb2wgdXBkYXRlRGF0YUZyb21QYXJhbWV0ZXJzKGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIsIGZsb2F0IHNjcm9sbGFibGVTaXplLCBkb3VibGUgY3VycmVudFRp
bWUsIFBhcmFtZXRlcnMqKTsKICAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJy
ZW50VGltZSk7Ci0gICAgICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aChMYXlvdXRVbml0IHZp
c2libGVMZW5ndGgpOworICAgICAgICB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGgoaW50IHZpc2li
bGVMZW5ndGgpOwogCiAgICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVBdChDdXJ2ZSwgZG91Ymxl
IHQpOwogICAgICAgICBzdGF0aWMgZG91YmxlIGF0dGFja0N1cnZlKEN1cnZlLCBkb3VibGUgZGVs
dGFULCBkb3VibGUgY3VydmVULCBkb3VibGUgc3RhcnRQb3MsIGRvdWJsZSBhdHRhY2tQb3MpOwpA
QCAtMTI5LDcgKzEyOCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgZG91YmxlIG1fcmVsZWFzZVRp
bWU7CiAgICAgICAgIEN1cnZlIG1fcmVsZWFzZUN1cnZlOwogCi0gICAgICAgIExheW91dFVuaXQg
bV92aXNpYmxlTGVuZ3RoOworICAgICAgICBpbnQgbV92aXNpYmxlTGVuZ3RoOwogICAgIH07CiAK
ICAgICAvLyBXaGlsZSB6b29taW5nLCBzY2FsZSwgcG9zWCBhbmQgcG9zWSBuZWVkIHRvIHN0YXkg
dGlnaHRseSBjb3VwbGVkLCBzbyB1c2UgYSBzZXBhcmF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDk5NDk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwzNCArMjMxLDM0
IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KGIKICAgICBpZiAoIW1f
Zml4ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhl
ZFZpc2libGVDb250ZW50UmVjdDsKIAotICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA9IHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3Zl
cmxheVNjcm9sbGJhcigpCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSB2ZXJ0aWNh
bFNjcm9sbGJhcigpICYmICF2ZXJ0aWNhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIo
KQogICAgICAgICAmJiAhaW5jbHVkZVNjcm9sbGJhcnMgPyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53
aWR0aCgpIDogMDsKLSAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBo
b3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IGhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxi
YXIoKQogICAgICAgICAmJiAhaW5jbHVkZVNjcm9sbGJhcnMgPyBob3Jpem9udGFsU2Nyb2xsYmFy
KCktPmhlaWdodCgpIDogMDsKIAotICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KG1f
c2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRTaXplKG1heDxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4PExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCkp
KTsKLQorICAgIHJldHVybiBJbnRSZWN0KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksCisgICAgICAg
ICAgICAgICAgICAgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
bWF4KDAsIHdpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSwgCisgICAgICAgICAgICAg
ICAgICAgbWF4KDAsIGhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCkpOwogfQog
I2VuZGlmCiAKLUxheW91dFVuaXQgU2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAoraW50
IFNjcm9sbFZpZXc6OmxheW91dFdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maXhlZExh
eW91dFNpemUuaXNFbXB0eSgpIHx8ICFtX3VzZUZpeGVkTGF5b3V0ID8gdmlzaWJsZVdpZHRoKCkg
OiBtX2ZpeGVkTGF5b3V0U2l6ZS53aWR0aCgpOwogfQogCi1MYXlvdXRVbml0IFNjcm9sbFZpZXc6
OmxheW91dEhlaWdodCgpIGNvbnN0CitpbnQgU2Nyb2xsVmlldzo6bGF5b3V0SGVpZ2h0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9maXhlZExheW91dFNpemUuaXNFbXB0eSgpIHx8ICFtX3VzZUZp
eGVkTGF5b3V0ID8gdmlzaWJsZUhlaWdodCgpIDogbV9maXhlZExheW91dFNpemUuaGVpZ2h0KCk7
CiB9CiAKLUxheW91dFNpemUgU2Nyb2xsVmlldzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKK0lu
dFNpemUgU2Nyb2xsVmlldzo6Zml4ZWRMYXlvdXRTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9maXhlZExheW91dFNpemU7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0Rml4ZWRMYXlvdXRT
aXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCit2b2lkIFNjcm9sbFZpZXc6OnNldEZpeGVk
TGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogewogICAgIGlmIChmaXhlZExheW91
dFNpemUoKSA9PSBuZXdTaXplKQogICAgICAgICByZXR1cm47CkBAIC0yNzksMTIgKzI3OSwxMiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFVzZUZpeGVkTGF5b3V0KGJvb2wgCiAgICAgdXBkYXRlU2Ny
b2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CiB9CiAKLUxheW91dFNpemUgU2Nyb2xsVmlldzo6Y29u
dGVudHNTaXplKCkgY29uc3QKK0ludFNpemUgU2Nyb2xsVmlldzo6Y29udGVudHNTaXplKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9jb250ZW50c1NpemU7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6
c2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmIG5ld1NpemUpCit2b2lkIFNjcm9sbFZp
ZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogewogICAgIGlmIChj
b250ZW50c1NpemUoKSA9PSBuZXdTaXplKQogICAgICAgICByZXR1cm47CkBAIC00MDUsMTcgKzQw
NSwxNyBAQCBib29sIFNjcm9sbFZpZXc6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9nCiAgICAgcmV0
dXJuIHNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzVmVydGljYWxEb2N1bWVu
dCgpLCBpc0ZsaXBwZWREb2N1bWVudCgpKSwgZ3JhbnVsYXJpdHkpOwogfQogCi1MYXlvdXRTaXpl
IFNjcm9sbFZpZXc6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK0ludFNpemUgU2Nyb2xsVmlldzo6
b3ZlcmhhbmdBbW91bnQoKSBjb25zdAogewotICAgIExheW91dFNpemUgc3RyZXRjaDsKKyAgICBJ
bnRTaXplIHN0cmV0Y2g7CiAKLSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9s
bFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOworICAgIGludCBwaHlzaWNhbFNj
cm9sbFkgPSBzY3JvbGxQb3NpdGlvbigpLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsKICAgICBp
ZiAocGh5c2ljYWxTY3JvbGxZIDwgMCkKICAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2lj
YWxTY3JvbGxZKTsKICAgICBlbHNlIGlmIChjb250ZW50c0hlaWdodCgpICYmIHBoeXNpY2FsU2Ny
b2xsWSA+IGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCiAgICAgICAgIHN0cmV0
Y2guc2V0SGVpZ2h0KHBoeXNpY2FsU2Nyb2xsWSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJs
ZUhlaWdodCgpKSk7CiAKLSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBv
c2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOworICAgIGludCBwaHlzaWNhbFNjcm9s
bFggPSBzY3JvbGxQb3NpdGlvbigpLngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKICAgICBpZiAo
cGh5c2ljYWxTY3JvbGxYIDwgMCkKICAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChwaHlzaWNhbFNj
cm9sbFgpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzV2lkdGgoKSAmJiBwaHlzaWNhbFNjcm9sbFgg
PiBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgIG1faW5VcGRh
dGVTY3JvbGxiYXJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgTGF5b3V0UmVjdCBvbGRTY3JvbGxD
b3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIEludFJlY3Qgb2xkU2Nyb2xsQ29y
bmVyUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKIAogICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNj
cm9sbGJhciA9IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICBib29sIGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyID0gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKQEAgLTQ3Miw4ICs0NzIsOCBAQCB2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ym9vbCBzZW5kQ29udGVudFJlc2l6ZWROb3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIExheW91dFNpemUgZG9jU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOwotICAgICAgICBMYXlv
dXRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lUmVjdCgpLnNpemUoKTsKKyAgICAgICAgSW50U2l6ZSBk
b2NTaXplID0gY29udGVudHNTaXplKCk7CisgICAgICAgIEludFNpemUgZnJhbWVTaXplID0gZnJh
bWVSZWN0KCkuc2l6ZSgpOwogCiAgICAgICAgIGlmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8p
IHsKICAgICAgICAgICAgIG5ld0hhc0hvcml6b250YWxTY3JvbGxiYXIgPSBkb2NTaXplLndpZHRo
KCkgPiB2aXNpYmxlV2lkdGgoKTsKQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3VwZGF0ZVNjcm9sbGJhcnNQ
YXNzKys7CiAgICAgICAgICAgICBjb250ZW50c1Jlc2l6ZWQoKTsKICAgICAgICAgICAgIHZpc2li
bGVDb250ZW50c1Jlc2l6ZWQoKTsKLSAgICAgICAgICAgIExheW91dFNpemUgbmV3RG9jU2l6ZSA9
IGNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgSW50U2l6ZSBuZXdEb2NTaXplID0gY29udGVu
dHNTaXplKCk7CiAgICAgICAgICAgICBpZiAobmV3RG9jU2l6ZSA9PSBkb2NTaXplKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhlIGxheW91dCB3aXRoIHRoZSBuZXcgc2Nyb2xsIHN0YXRlIGhhZCBu
byBpbXBhY3Qgb24KICAgICAgICAgICAgICAgICAvLyB0aGUgZG9jdW1lbnQncyBvdmVyYWxsIHNp
emUsIHNvIHVwZGF0ZVNjcm9sbGJhcnMgZGlkbid0IGdldCBjYWxsZWQuCkBAIC01MzUsMTIgKzUz
NSwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZp
c2libGVXaWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHBhZ2VTdGVwID0gbWF4PExheW91dFVu
aXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25U
b1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0
d2VlblBhZ2VzKCkpLCAxKTsKLSAgICAgICAgTGF5b3V0UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAgICAgICBMYXlvdXRSZWN0IGhCYXJSZWN0ID0g
TGF5b3V0UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9sbGJh
ciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7
CisgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRXaWR0aCAqIFNjcm9s
bGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xs
YmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICAgICAgSW50UmVjdCBvbGRS
ZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBJbnRSZWN0
IGhCYXJSZWN0KDAsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgp
IC0gKG1fdmVydGljYWxTY3JvbGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDog
MCksCisgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJhclJl
Y3QpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CkBAIC01NTYsMTIgKzU1NiwxMiBAQCB2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAKICAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOwot
ICAgICAgICBMYXlvdXRVbml0IHBhZ2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRV
bml0PihjbGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2lu
ZygpLCBjbGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSks
IDEpOwotICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkpOwotICAgICAgICBMYXlvdXRSZWN0IHZCYXJSZWN0ID0gTGF5b3V0UmVjdCh3aWR0
aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgIGhlaWdo
dCgpIC0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkgOiAwKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRI
ZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRI
ZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAg
ICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAg
ICAgICBJbnRSZWN0IHZCYXJSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5oZWlnaHQoKSA6IDApKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJh
bWVSZWN0KHZCYXJSZWN0KTsKICAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CkBAIC02MDMsOCArNjAzLDggQEAg
SW50UmVjdCBTY3JvbGxWaWV3OjpyZWN0VG9Db3B5T25TY3JvbGwoKQogewogICAgIEludFJlY3Qg
c2Nyb2xsVmlld1JlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwg
dmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSkpOwogICAgIGlmIChoYXNPdmVybGF5U2Ny
b2xsYmFycygpKSB7Ci0gICAgICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9
ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
ID8gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7Ci0gICAgICAgIExheW91dFVuaXQg
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhh
c0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+
aGVpZ2h0KCkgOiAwOworICAgICAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0
aWNhbFNjcm9sbGJhcigpICYmICFoYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpID8gdmVy
dGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDA7CisgICAgICAgIGludCBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaGFzTGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDA7
CiAgICAgICAgIAogICAgICAgICBzY3JvbGxWaWV3UmVjdC5zZXRXaWR0aChzY3JvbGxWaWV3UmVj
dC53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CiAgICAgICAgIHNjcm9sbFZpZXdS
ZWN0LnNldEhlaWdodChzY3JvbGxWaWV3UmVjdC5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQpOwpAQCAtNjMwLDkgKzYzMCw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29u
dGVudHMoY29uc3QgSW4KICAgICBpZiAobV9kcmF3UGFuU2Nyb2xsSWNvbikgewogICAgICAgICAv
LyBGSVhNRTogdGhlIHBhbiBpY29uIGlzIGJyb2tlbiB3aGVuIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nIGlzIG9uLCBzaW5jZSBpdCB3aWxsIGRyYXcgdW5kZXIgdGhlIGNvbXBvc2l0aW5nIGxheWVy
cy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3
ODM3Ci0gICAgICAgIExheW91dFVuaXQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCA9IDIg
KiAocGFuSWNvblNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkpLCBhYnMo
c2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50IHdoYXQn
cyBuZWNlc3NhcnkKLSAgICAgICAgTGF5b3V0UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRp
b24gPSBMYXlvdXRQb2ludChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5
U3F1YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNv
bkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpKTsKLSAgICAgICAgTGF5b3V0UmVjdCBwYW5TY3Jv
bGxJY29uRGlydHlSZWN0ID0gTGF5b3V0UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiAs
IExheW91dFNpemUocGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCwgcGFuSWNvbkRpcnR5U3F1
YXJlU2l6ZUxlbmd0aCkpOworICAgICAgICBpbnQgcGFuSWNvbkRpcnR5U3F1YXJlU2l6ZUxlbmd0
aCA9IDIgKiAocGFuSWNvblNpemVMZW5ndGggKyBtYXgoYWJzKHNjcm9sbERlbHRhLndpZHRoKCkp
LCBhYnMoc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSk7IC8vIFdlIG9ubHkgd2FudCB0byByZXBhaW50
IHdoYXQncyBuZWNlc3NhcnkKKyAgICAgICAgSW50UG9pbnQgcGFuSWNvbkRpcnR5U3F1YXJlTG9j
YXRpb24gPSBJbnRQb2ludChtX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5
U3F1YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3BhblNjcm9sbEljb25Qb2ludC55KCkgLSAocGFuSWNv
bkRpcnR5U3F1YXJlU2l6ZUxlbmd0aCAvIDIpKTsKKyAgICAgICAgSW50UmVjdCBwYW5TY3JvbGxJ
Y29uRGlydHlSZWN0ID0gSW50UmVjdChwYW5JY29uRGlydHlTcXVhcmVMb2NhdGlvbiwgSW50U2l6
ZShwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoLCBwYW5JY29uRGlydHlTcXVhcmVTaXplTGVu
Z3RoKSk7CiAgICAgICAgIHBhblNjcm9sbEljb25EaXJ0eVJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0
KTsKICAgICAgICAgaG9zdFdpbmRvdygpLT5pbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3cocGFu
U2Nyb2xsSWNvbkRpcnR5UmVjdCwgZmFsc2UgLyppbW1lZGlhdGUqLyk7CiAgICAgfQpAQCAtNjQ4
LDggKzY0OCw4IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3QgSW4KICAg
ICB9CiAKICAgICAvLyBJbnZhbGlkYXRlIHRoZSBvdmVyaGFuZyBhcmVhcyBpZiB0aGV5IGFyZSB2
aXNpYmxlLgotICAgIExheW91dFJlY3QgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdDsKLSAgICBMYXlv
dXRSZWN0IHZlcnRpY2FsT3ZlcmhhbmdSZWN0OworICAgIEludFJlY3QgaG9yaXpvbnRhbE92ZXJo
YW5nUmVjdDsKKyAgICBJbnRSZWN0IHZlcnRpY2FsT3ZlcmhhbmdSZWN0OwogICAgIGNhbGN1bGF0
ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyhob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCB2ZXJ0aWNh
bE92ZXJoYW5nUmVjdCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChHcmFwaGlj
c0xheWVyKiBvdmVyaGFuZ0xheWVyID0gbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzKCkpIHsKQEAgLTcy
Miw3ICs3MjIsNyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvCiAK
IEludFJlY3QgU2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiB3aW5k
b3dSZWN0KSBjb25zdAogewotICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3cod2luZG93UmVjdCk7CisgICAgSW50UmVjdCB2aWV3UmVjdCA9IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKICAgICB2aWV3UmVjdC5tb3ZlKHNj
cm9sbE9mZnNldCgpKTsKICAgICByZXR1cm4gdmlld1JlY3Q7CiB9CkBAIC03NDMsMTIgKzc0Mywx
MiBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9TY3JlZW4oY29uCiAgICAgcmV0dXJu
IGhvc3RXaW5kb3coKS0+d2luZG93VG9TY3JlZW4oY29udGVudHNUb1dpbmRvdyhyZWN0KSk7CiB9
CiAKLUxheW91dFBvaW50IFNjcm9sbFZpZXc6OnNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAorSW50UG9pbnQgU2Nyb2xsVmlldzo6c2NyZWVuVG9Db250ZW50cyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkp
CiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMocG9pbnQpOwogICAgIGlm
ICghaG9zdFdpbmRvdygpKQotICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKKyAgICAgICAg
cmV0dXJuIEludFBvaW50KCk7CiAgICAgcmV0dXJuIHdpbmRvd1RvQ29udGVudHMoaG9zdFdpbmRv
dygpLT5zY3JlZW5Ub1dpbmRvdyhwb2ludCkpOwogfQogCkBAIC04MTIsNyArODEyLDcgQEAgU2Ny
b2xsYmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJBdFBvaW50KAogICAgIGlmIChwbGF0Zm9ybVdp
ZGdldCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIExheW91dFBvaW50IHZpZXdQb2ludCA9
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgSW50UG9pbnQg
dmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKICAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkuY29udGFpbnModmlld1BvaW50KSkKICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKTsKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQpAQCAtODUwLDkg
Kzg1MCw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6Z2VzdHVyZUV2ZW50KGNvbnN0IFBsYXQKIH0KICNl
bmRpZgogCi12b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBMYXlvdXRSZWN0JiBu
ZXdSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3
UmVjdCkKIHsKLSAgICBMYXlvdXRSZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBJbnRS
ZWN0IG9sZFJlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAKICAgICBpZiAobmV3UmVjdCA9PSBvbGRS
ZWN0KQogICAgICAgICByZXR1cm47CkBAIC04ODMsMTQgKzg4MywxNCBAQCBzdGF0aWMgdm9pZCBw
b3NpdGlvblNjcm9sbGJhckxheWVyKEdyYXBoCiAgICAgaWYgKCFncmFwaGljc0xheWVyIHx8ICFz
Y3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKICAgICBncmFwaGljc0xheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7Ci0gICAgTGF5b3V0UmVjdCBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKTsKKyAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1l
UmVjdCgpOwogICAgIGdyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKHNjcm9sbGJhclJlY3QubG9j
YXRpb24oKSk7CiAgICAgaWYgKHNjcm9sbGJhclJlY3Quc2l6ZSgpICE9IGdyYXBoaWNzTGF5ZXIt
PnNpemUoKSkKICAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
Z3JhcGhpY3NMYXllci0+c2V0U2l6ZShzY3JvbGxiYXJSZWN0LnNpemUoKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHBvc2l0aW9uU2Nyb2xsQ29ybmVyTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllciwgY29uc3QgTGF5b3V0UmVjdCYgY29ybmVyUmVjdCkKK3N0YXRpYyB2b2lkIHBvc2l0aW9u
U2Nyb2xsQ29ybmVyTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgY29uc3QgSW50
UmVjdCYgY29ybmVyUmVjdCkKIHsKICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkxMiw5ICs5MTIsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXJzCiAjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJl
Y3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBib29sIG5vdykKK3ZvaWQgU2Nyb2xsVmll
dzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBub3cp
CiB7Ci0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSByZWN0OworICAgIEludFJlY3QgcGFpbnRS
ZWN0ID0gcmVjdDsKICAgICBpZiAoY2xpcHNSZXBhaW50cygpICYmICFwYWludHNFbnRpcmVDb250
ZW50cygpKQogICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KHZpc2libGVDb250ZW50UmVjdCgp
KTsKICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKQEAgLTkzMCwyNSArOTMwLDI1IEBAIHZv
aWQgU2Nyb2xsVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUKICAgICAgICAgaG9zdFdpbmRv
dygpLT5pbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29udGVudHNUb1dpbmRvdyhwYWludFJl
Y3QpLCBub3cgLyppbW1lZGlhdGUqLyk7CiB9CiAKLUxheW91dFJlY3QgU2Nyb2xsVmlldzo6c2Ny
b2xsQ29ybmVyUmVjdCgpIGNvbnN0CitJbnRSZWN0IFNjcm9sbFZpZXc6OnNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdAogewotICAgIExheW91dFJlY3QgY29ybmVyUmVjdDsKKyAgICBJbnRSZWN0IGNv
cm5lclJlY3Q7CiAKICAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKICAgICAgICAgcmV0
dXJuIGNvcm5lclJlY3Q7CiAKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIHdpZHRo
KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCkgPiAwKSB7Ci0gICAgICAgIGNvcm5l
clJlY3QudW5pdGUoTGF5b3V0UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSkp
OworICAgICAgICBjb3JuZXJSZWN0LnVuaXRlKEludFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGgoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCkpKTsKICAgICB9CiAKICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBoZWlnaHQoKSAt
IG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpID4gMCkgewotICAgICAgICBjb3JuZXJSZWN0
LnVuaXRlKExheW91dFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKSk7CisgICAgICAgIGNv
cm5lclJlY3QudW5pdGUoSW50UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGNvcm5lclJlY3Q7CkBAIC05NjksMTcgKzk2OSwxNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbENvcm5lcigpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cGFpbnRT
Y3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBj
b3JuZXJSZWN0KQordm9pZCBTY3JvbGxWaWV3OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCiB7CiAgICAgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKHRoaXMsIGNvbnRleHQsIGNvcm5l
clJlY3QpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OmludmFsaWRhdGVTY3Jv
bGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaW52YWxpZGF0ZVJlY3Qo
cmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6
cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojpw
YWludFBhblNjcm9sbEljb24oR3JhcAogICAgIGNvbnRleHQtPmRyYXdJbWFnZShwYW5TY3JvbGxJ
Y29uLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3BhblNjcm9sbEljb25Qb2ludCk7CiB9CiAKLXZv
aWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlv
dXRSZWN0JiByZWN0KQordm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkp
IHsKICAgICAgICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCByZWN0KTsKQEAgLTEwMjIsMTMgKzEw
MjIsMTMgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgIC8v
IElmIHdlIGVuY291bnRlciBhbnkgb3ZlcmxheSBzY3JvbGxiYXJzIGFzIHdlIHBhaW50LCB0aGlz
IHdpbGwgYmUgc2V0IHRvIHRydWUuCiAgICAgbV9jb250YWluc1Njcm9sbGFibGVBcmVhV2l0aE92
ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7CiAKLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gZnJh
bWVSZWN0KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIGlmICh2
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICF2ZXJ0aWNhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkKICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgoY2xpcFJlY3Qud2lkdGgoKSAtIHZl
cnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkpOwogICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFy
KCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAg
ICAgIGNsaXBSZWN0LnNldEhlaWdodChjbGlwUmVjdC5oZWlnaHQoKSAtIGhvcml6b250YWxTY3Jv
bGxiYXIoKS0+aGVpZ2h0KCkpOwogCi0gICAgTGF5b3V0UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9
IHJlY3Q7CisgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7CiAgICAgZG9jdW1l
bnREaXJ0eVJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKIAogICAgIGlmICghZG9jdW1lbnREaXJ0
eVJlY3QuaXNFbXB0eSgpKSB7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCB2b2lkIFNjcm9sbFZpZXc6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJz
LgogICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXIpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAgICAgIExheW91dFJlY3Qgc2Nyb2xs
Vmlld0RpcnR5UmVjdCA9IHJlY3Q7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVj
dCA9IHJlY3Q7CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lUmVj
dCgpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKICAgICAgICAgc2Ny
b2xsVmlld0RpcnR5UmVjdC5tb3ZlQnkoLWxvY2F0aW9uKCkpOwpAQCAtMTA3MCwyNSArMTA3MCwy
NSBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIHBh
aW50UGFuU2Nyb2xsSWNvbihjb250ZXh0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRm9yUGFpbnRpbmcoTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdCwgTGF5b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ1JlY3QpCit2b2lkIFNjcm9sbFZpZXc6
OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyhJbnRSZWN0JiBob3Jpem9udGFsT3Zl
cmhhbmdSZWN0LCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCkKIHsKLSAgICBMYXlvdXRV
bml0IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVy
dGljYWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCisgICAgaW50IHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGggPSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxi
YXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgID8gdmVydGljYWxTY3JvbGxiYXIo
KS0+d2lkdGgoKSA6IDA7Ci0gICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9ICho
b3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWhvcml6b250YWxTY3JvbGxiYXIoKS0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpCiAgICAgICAgID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6
IDA7CiAKLSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCku
eSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3Jv
bGxQb3NpdGlvbigpLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsKICAgICBpZiAocGh5c2ljYWxT
Y3JvbGxZIDwgMCkgewogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJhbWVSZWN0
KCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KC1waHlzaWNhbFNj
cm9sbFkpOwogICAgIH0gZWxzZSBpZiAoY29udGVudHNIZWlnaHQoKSAmJiBwaHlzaWNhbFNjcm9s
bFkgPiBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSB7Ci0gICAgICAgIExheW91
dFVuaXQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpOworICAgICAgICBpbnQgaGVpZ2h0ID0gcGh5c2ljYWxTY3JvbGxZIC0gKGNv
bnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3Zl
cmhhbmdSZWN0ID0gZnJhbWVSZWN0KCk7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Qu
c2V0WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsK
ICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9u
KCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOworICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBz
Y3JvbGxQb3NpdGlvbigpLngoKSArIHNjcm9sbE9yaWdpbigpLngoKTsKICAgICBpZiAocGh5c2lj
YWxTY3JvbGxYIDwgMCkgewogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRXaWR0aCgt
cGh5c2ljYWxTY3JvbGxYKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0
KGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7
CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5n
QXJlYXNGCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNl
dFkoZnJhbWVSZWN0KCkueSgpKTsKICAgICB9IGVsc2UgaWYgKGNvbnRlbnRzV2lkdGgoKSAmJiBw
aHlzaWNhbFNjcm9sbFggPiBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkgewotICAg
ICAgICBMYXlvdXRVbml0IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxYIC0gKGNvbnRlbnRzV2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKTsKKyAgICAgICAgaW50IHdpZHRoID0gcGh5c2ljYWxTY3JvbGxY
IC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKTsKICAgICAgICAgdmVydGljYWxP
dmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgpOwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVj
dC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0
LmhlaWdodCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3Qo
KS5tYXhYKCkgLSB3aWR0aCAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwpAQCAtMTEwOSwxNSAr
MTEwOSwxNSBAQCB2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGCiAgICAg
fQogfQogCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIGNv
bnN0IExheW91dFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIGNv
bnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCiB7CiAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50T3ZlcmhhbmdBcmVhcyh0
aGlzLCBjb250ZXh0LCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCB2ZXJ0aWNhbE92ZXJoYW5nUmVj
dCwgZGlydHlSZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVBbmRQYWludE92
ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZUFuZFBhaW50T3ZlcmhhbmdBcmVh
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsK
LSAgICBMYXlvdXRSZWN0IGhvcml6b250YWxPdmVyaGFuZ1JlY3Q7Ci0gICAgTGF5b3V0UmVjdCB2
ZXJ0aWNhbE92ZXJoYW5nUmVjdDsKKyAgICBJbnRSZWN0IGhvcml6b250YWxPdmVyaGFuZ1JlY3Q7
CisgICAgSW50UmVjdCB2ZXJ0aWNhbE92ZXJoYW5nUmVjdDsKICAgICBjYWxjdWxhdGVPdmVyaGFu
Z0FyZWFzRm9yUGFpbnRpbmcoaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCwgdmVydGljYWxPdmVyaGFu
Z1JlY3QpOwogCiAgICAgaWYgKGRpcnR5UmVjdC5pbnRlcnNlY3RzKGhvcml6b250YWxPdmVyaGFu
Z1JlY3QpIHx8IGRpcnR5UmVjdC5pbnRlcnNlY3RzKHZlcnRpY2FsT3ZlcmhhbmdSZWN0KSkKQEAg
LTExMjksMTkgKzExMjksMTkgQEAgYm9vbCBTY3JvbGxWaWV3Ojppc1BvaW50SW5TY3JvbGxiYXJD
b3JuZQogICAgIGlmICghc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBMYXlvdXRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3cod2luZG93UG9pbnQpOworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CiAKICAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4g
PSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFyWU1heCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkueSgpICsgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5oZWlnaHQo
KTsKLSAgICAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFyWE1pbiA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS53aWR0aCgpOworICAgICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhcllNaW4g
PSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKTsKKyAgICAgICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmhlaWdodCgpOworICAg
ICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhclhNaW4gPSBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLngoKSArIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lk
dGgoKTsKIAogICAgICAgICByZXR1cm4gdmlld1BvaW50LnkoKSA+IGhvcml6b250YWxTY3JvbGxi
YXJZTWluICYmIHZpZXdQb2ludC55KCkgPCBob3Jpem9udGFsU2Nyb2xsYmFyWU1heCAmJiB2aWV3
UG9pbnQueCgpID4gaG9yaXpvbnRhbFNjcm9sbGJhclhNaW47CiAgICAgfQogCi0gICAgTGF5b3V0
VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhclhNaW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKS54KCk7Ci0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhclhNYXggPSBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCkgKyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKS53aWR0aCgpOwotICAgIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJZTWluID0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpICsgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkuaGVpZ2h0KCk7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyWE1pbiA9
IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKTsKKyAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJYTWF4ID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkud2lkdGgoKTsKKyAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJZTWluID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpICsgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuaGVpZ2h0KCk7CiAgICAgCiAgICAgcmV0dXJu
IHZpZXdQb2ludC54KCkgPiB2ZXJ0aWNhbFNjcm9sbGJhclhNaW4gJiYgdmlld1BvaW50LngoKSA8
IHZlcnRpY2FsU2Nyb2xsYmFyWE1heCAmJiB2aWV3UG9pbnQueSgpID4gdmVydGljYWxTY3JvbGxi
YXJZTWluOwogfQpAQCAtMTE1MiwzNCArMTE1MiwzNCBAQCBib29sIFNjcm9sbFZpZXc6OnNjcm9s
bGJhckNvcm5lclByZXNlbnQoCiAgICAgICAgIHx8IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhl
aWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgPiAwKTsKIH0KIAotTGF5b3V0
UmVjdCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29u
c3QKK0ludFJlY3QgU2Nyb2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0CiB7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4g
dXMKLSAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBsb2NhbFJlY3Q7CisgICAgSW50UmVjdCBuZXdS
ZWN0ID0gbG9jYWxSZWN0OwogICAgIG5ld1JlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24o
KSk7CiAgICAgcmV0dXJuIG5ld1JlY3Q7CiB9CiAKLUxheW91dFJlY3QgU2Nyb2xsVmlldzo6Y29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBMYXlvdXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAorSW50UmVjdCBTY3JvbGxW
aWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7Ci0gICAgTGF5
b3V0UmVjdCBuZXdSZWN0ID0gcGFyZW50UmVjdDsKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBwYXJl
bnRSZWN0OwogICAgIC8vIFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQgd2l0aGluIHVz
CiAgICAgbmV3UmVjdC5tb3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJu
IG5ld1JlY3Q7CiB9CiAKIC8vIEZJWE1FOiB0ZXN0IHRoZXNlIG9uIHdpbmRvd3MKLUxheW91dFBv
aW50IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpIGNv
bnN0CitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBsb2NhbFBv
aW50KSBjb25zdAogewogICAgIC8vIFNjcm9sbGJhcnMgd29uJ3QgYmUgdHJhbnNmb3JtZWQgd2l0
aGluIHVzCi0gICAgTGF5b3V0UG9pbnQgbmV3UG9pbnQgPSBsb2NhbFBvaW50OworICAgIEludFBv
aW50IG5ld1BvaW50ID0gbG9jYWxQb2ludDsKICAgICBuZXdQb2ludC5tb3ZlQnkoc2Nyb2xsYmFy
LT5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UG9pbnQ7CiB9CiAKLUxheW91dFBvaW50IFNj
cm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAor
SW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0CiB7Ci0gICAgTGF5b3V0UG9pbnQgbmV3UG9pbnQgPSBwYXJlbnRQb2ludDsKKyAgICBJ
bnRQb2ludCBuZXdQb2ludCA9IHBhcmVudFBvaW50OwogICAgIC8vIFNjcm9sbGJhcnMgd29uJ3Qg
YmUgdHJhbnNmb3JtZWQgd2l0aGluIHVzCiAgICAgbmV3UG9pbnQubW92ZUJ5KC1zY3JvbGxiYXIt
PmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdQb2ludDsKQEAgLTEyNDIsNyArMTI0Miw3IEBA
IGJvb2wgU2Nyb2xsVmlldzo6aXNPZmZzY3JlZW4oKSBjb25zdAogfQogCiAKLXZvaWQgU2Nyb2xs
Vmlldzo6YWRkUGFuU2Nyb2xsSWNvbihjb25zdCBMYXlvdXRQb2ludCYgaWNvblBvc2l0aW9uKQor
dm9pZCBTY3JvbGxWaWV3OjphZGRQYW5TY3JvbGxJY29uKGNvbnN0IEludFBvaW50JiBpY29uUG9z
aXRpb24pCiB7CiAgICAgaWYgKCFob3N0V2luZG93KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEz
NDYsMTIgKzEzNDYsMTIgQEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6
ZQogewogfQogCi1JbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihj
b25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAorSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bUNvbnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1
cm4gcmVjdDsKIH0KIAotTGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0Nv
bnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50IFNjcm9sbFZpZXc6
OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHBvaW50OwogfQpAQCAtMTM2NSw3ICsxMzY1LDcgQEAgYm9vbCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxEaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0
UmVjdCYsIGJvb2wgLypub3cqLykKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29u
dGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCAvKm5vdyovKQogewogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiA5OTQ5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2
LDggKzE0Niw4IEBAIHB1YmxpYzoKICAgICAvLyB3aGljaCB1c3VhbGx5IHdpbGwgaGFwcGVuIHdo
ZW4gcGFubmluZywgcGluY2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9yIHdoZW4gc2NhbGUgb3Ig
cG9zaXRpb24gYXJlIGNoYW5nZWQgbWFudWFsbHkuCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpc2li
bGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzID0gZmFsc2UpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiB2
aXNpYmxlQ29udGVudFJlY3QpIHsgbV9maXhlZFZpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVD
b250ZW50UmVjdDsgfQotICAgIExheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkud2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgdmlzaWJs
ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9
CisgICAgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVj
dCgpLndpZHRoKCk7IH0KKyAgICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHZp
c2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIGdl
dHRpbmcvc2V0dGluZyB0aGUgc2l6ZSB3ZWJraXQgc2hvdWxkIHVzZSB0byBsYXlvdXQgdGhlIGNv
bnRlbnRzLiBCeSBkZWZhdWx0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHZpc2libGUKICAgICAv
LyBjb250ZW50IHNpemUuIEV4cGxpY2l0bHkgc2V0dGluZyBhIGxheW91dCBzaXplIHZhbHVlIHdp
bGwgY2F1c2Ugd2Via2l0IHRvIGxheW91dCB0aGUgY29udGVudHMgdXNpbmcgdGhpcyBzaXplIGlu
c3RlYWQuCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlz
UG9pbnRJblNjcm9sbGJhckNvcm5lcihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKIAogICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiA5OTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAK
ICNpZm5kZWYgU2Nyb2xsYWJsZUFyZWFfaAogI2RlZmluZSBTY3JvbGxhYmxlQXJlYV9oCiAKLSNp
bmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIApAQCAtOTIsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwogICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhcihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxD
b3JuZXIoY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVj
dG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKQEAgLTEyNyw4ICsxMjYsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW50UG9pbnQoKTsgfQogICAgIHZpcnR1YWwgSW50UG9p
bnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIEludFBvaW50KCk7IH0KICAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRS
ZWN0KGJvb2wgLyppbmNsdWRlU2Nyb2xsYmFycyovID0gZmFsc2UpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIExheW91dFVuaXQg
dmlzaWJsZUhlaWdodCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHZpc2libGVXaWR0aCgpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgp
IGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBp
bnQgdmlzaWJsZVdpZHRoKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIEludFNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBvdmVy
aGFuZ0Ftb3VudCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBJbnRTaXpl
KCk7IH0KICAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gSW50UG9pbnQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA5OTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTcsMTcgKzEyOTcsMTcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbgogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBMYXlvdXRQb2ludCBjdXJyZW50TW91c2VQb3Np
dGlvbiA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAg
ICBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbiA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlm
IHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRo
ZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQK
LSAgICBzdGF0aWMgTGF5b3V0UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIHN0YXRp
YyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CiAgICAgaWYgKGN1cnJlbnRNb3VzZVBv
c2l0aW9uLngoKSA8IDAgfHwgY3VycmVudE1vdXNlUG9zaXRpb24ueSgpIDwgMCkKICAgICAgICAg
Y3VycmVudE1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CiAgICAgZWxzZQog
ICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBjdXJyZW50TW91c2VQb3NpdGlvbjsKIAot
ICAgIExheW91dFVuaXQgeERlbHRhID0gY3VycmVudE1vdXNlUG9zaXRpb24ueCgpIC0gc291cmNl
UG9pbnQueCgpOwotICAgIExheW91dFVuaXQgeURlbHRhID0gY3VycmVudE1vdXNlUG9zaXRpb24u
eSgpIC0gc291cmNlUG9pbnQueSgpOworICAgIGludCB4RGVsdGEgPSBjdXJyZW50TW91c2VQb3Np
dGlvbi54KCkgLSBzb3VyY2VQb2ludC54KCk7CisgICAgaW50IHlEZWx0YSA9IGN1cnJlbnRNb3Vz
ZVBvc2l0aW9uLnkoKSAtIHNvdXJjZVBvaW50LnkoKTsKIAogICAgIGlmIChhYnMoeERlbHRhKSA8
PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQg
dGhlIHNwYWNlIGZvciB0aGUgaWNvbgogICAgICAgICB4RGVsdGEgPSAwOwpAQCAtMTM0NSw3ICsx
MzQ1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShMYQogICAgIH0g
ZWxzZSBpZiAocmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKSkgewogICAgICAgICAvLyBJ
ZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBw
cm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAogICAgICAgICAvLyBoYXZlIGFu
IG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRo
YXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmll
dygpLT5zY3JvbGxCeShMYXlvdXRTaXplKHhEZWx0YSwgeURlbHRhKSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnZpZXcoKS0+ZnJhbWVWaWV3KCktPnNjcm9sbEJ5KEludFNpemUoeERlbHRhLCB5RGVs
dGEpKTsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdh
eSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8g
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIz
NwogICAgIH0KQEAgLTEzNjgsNyArMTM2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
T2Zmc2V0KExheW91dFUKICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKExheW91dFBvaW50KHgsIHkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHkpCit2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhpbnQgeCwgaW50IHkpCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
ICAgICBpZiAoIWJveCkKQEAgLTEzODUsNyArMTM4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFRvKExheW91dFVuaXQgeCwKICAgICAvLyBjb21wbGljYXRlZCAoc2luY2UgaXQgd2lsbCBp
bnZvbHZlIHRlc3Rpbmcgd2hldGhlciBvdXIgbGF5ZXIKICAgICAvLyBpcyBlaXRoZXIgb2NjbHVk
ZWQgYnkgYW5vdGhlciBsYXllciBvciBjbGlwcGVkIGJ5IGFuIGVuY2xvc2luZwogICAgIC8vIGxh
eWVyIG9yIGNvbnRhaW5zIGZpeGVkIGJhY2tncm91bmRzLCBldGMuKS4KLSAgICBMYXlvdXRTaXpl
IG5ld1Njcm9sbE9mZnNldCA9IExheW91dFNpemUoeCAtIHNjcm9sbE9yaWdpbigpLngoKSwgeSAt
IHNjcm9sbE9yaWdpbigpLnkoKSk7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBJbnRT
aXplKHggLSBzY3JvbGxPcmlnaW4oKS54KCksIHkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOwogICAg
IGlmIChtX3Njcm9sbE9mZnNldCA9PSBuZXdTY3JvbGxPZmZzZXQpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldDsKQEAgLTE1MDEsNyArMTUwMSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICAgICAgICAg
ICAgICB4T2Zmc2V0ID0gbWF4PExheW91dFVuaXQ+KDAsIG1pbihmcmFtZVZpZXctPmNvbnRlbnRz
V2lkdGgoKSwgeE9mZnNldCkpOwogICAgICAgICAgICAgICAgIHlPZmZzZXQgPSBtYXg8TGF5b3V0
VW5pdD4oMCwgbWluKGZyYW1lVmlldy0+Y29udGVudHNIZWlnaHQoKSwgeU9mZnNldCkpOwogCi0g
ICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxQb3NpdGlvbihMYXlvdXRQb2ludCh4
T2Zmc2V0LCB5T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxQ
b3NpdGlvbihJbnRQb2ludCh4T2Zmc2V0LCB5T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgcGFy
ZW50TGF5ZXIgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVy
ZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgICAgICAgICBuZXdSZWN0LnNldFgocmVj
dC54KCkgLSBmcmFtZVZpZXctPnNjcm9sbFgoKSArIGZyYW1lVmlldy0+eCgpKTsKICAgICAgICAg
ICAgICAgICBuZXdSZWN0LnNldFkocmVjdC55KCkgLSBmcmFtZVZpZXctPnNjcm9sbFkoKSArIGZy
YW1lVmlldy0+eSgpKTsKQEAgLTE2MTgsNyArMTYxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmF1
dG9zY3JvbGwoKQogICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlU2VsZWN0aW9uRm9y
TW91c2VEcmFnKCk7CiAjZW5kaWYKIAotICAgIExheW91dFBvaW50IGN1cnJlbnREb2N1bWVudFBv
c2l0aW9uID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSk7CisgICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50
UG9zaXRpb24gPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKICAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExh
eW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCk7CiB9CiAKQEAgLTE2ODcsMTggKzE2ODcsMTggQEAgdm9pZCBSZW5kZXJM
YXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0
KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBr
ZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLUxheW91dFVuaXQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0CiB7CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFyKS5nZXQoKTsK
ICAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxi
YXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xs
T2Zmc2V0KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQpCit2b2lkIFJlbmRlckxheWVyOjpzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBzY3JvbGxUbyhvZmZz
ZXQueCgpLCBvZmZzZXQueSgpKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6c2Nyb2xs
UG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0
dXJuIHNjcm9sbFhPZmZzZXQoKTsKQEAgLTE3MDcsMTcgKzE3MDcsMTcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oUwogICAgIHJldHVybiAwOwogfQogCi1MYXlvdXRQ
b2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gc2Nyb2xsT3JpZ2lu
KCkgKyBtX3Njcm9sbE9mZnNldDsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6Om1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJMYXllcjo6bWluaW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCk7CiB9CiAK
LUxheW91dFBvaW50IFJlbmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAor
SW50UG9pbnQgUmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IG1fc2Nyb2xsU2l6ZSBtYXkgbm90IGJlIHVwLXRvLWRhdGUgaWYgbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkgaXMgdHJ1ZS4KICAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCkgKyBt
X3Njcm9sbFNpemUgLSB2aXNpYmxlQ29udGVudFJlY3QodHJ1ZSkuc2l6ZSgpOwpAQCAtMTczNywx
MiArMTczNywxMiBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3QoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgbV9sYXllclNpemUuaGVpZ2h0KCkgLSBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KSkpOwogfQogCi1MYXlvdXRTaXplIFJlbmRlckxheWVy
OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CitJbnRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ft
b3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIExheW91dFNpemUoKTsKKyAgICByZXR1cm4gSW50
U2l6ZSgpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29u
c3QgTGF5b3V0U2l6ZSYpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpkaWRDb21wbGV0ZVJ1YmJl
ckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0CiB7CiB9CiAKQEAgLTE3NTIsNyArMTc1Miw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotc3RhdGljIExheW91dFJl
Y3QgY29ybmVyUmVjdChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IExheW91dFJlY3Qm
IGJvdW5kcykKK3N0YXRpYyBJbnRSZWN0IGNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxh
eWVyLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpCiB7CiAgICAgaW50IGhvcml6b250YWxUaGlja25l
c3M7CiAgICAgaW50IHZlcnRpY2FsVGhpY2tuZXNzOwpAQCAtMTc3MSwxMiArMTc3MSwxMiBAQCBz
dGF0aWMgTGF5b3V0UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlCiAgICAgICAgIGhvcml6b250
YWxUaGlja25lc3MgPSBsYXllci0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKICAgICAg
ICAgdmVydGljYWxUaGlja25lc3MgPSBsYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWln
aHQoKTsKICAgICB9Ci0gICAgcmV0dXJuIExheW91dFJlY3QoYm91bmRzLm1heFgoKSAtIGhvcml6
b250YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRX
aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGljYWxU
aGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRo
aWNrbmVzcyk7CisgICAgcmV0dXJuIEludFJlY3QoYm91bmRzLm1heFgoKSAtIGhvcml6b250YWxU
aGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgp
LCAKKyAgICAgICAgICAgICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGljYWxUaGlja25lc3Mg
LSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRoaWNrbmVzcyk7CiB9
CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAorSW50
UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gV2Ug
aGF2ZSBhIHNjcm9sbGJhciBjb3JuZXIgd2hlbiBhIHNjcm9sbGJhciBpcyB2aXNpYmxlIGFuZCBu
b3QgZmlsbGluZyB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgYm94LgogICAgIC8vIFRoaXMgaGFw
cGVucyB3aGVuOgpAQCAtMTc4NywyMyArMTc4NywyMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVy
OjpzY3JvbGxDb3JuZXJSZWN0CiAgICAgYm9vbCBoYXNSZXNpemVyID0gcmVuZGVyZXIoKS0+c3R5
bGUoKS0+cmVzaXplKCkgIT0gUkVTSVpFX05PTkU7CiAgICAgaWYgKChoYXNIb3Jpem9udGFsQmFy
ICYmIGhhc1ZlcnRpY2FsQmFyKSB8fCAoaGFzUmVzaXplciAmJiAoaGFzSG9yaXpvbnRhbEJhciB8
fCBoYXNWZXJ0aWNhbEJhcikpKQogICAgICAgICByZXR1cm4gY29ybmVyUmVjdCh0aGlzLCByZW5k
ZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKTsKLSAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAg
IHJldHVybiBJbnRSZWN0KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0IHJlc2l6ZXJDb3JuZXJS
ZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQor
c3RhdGljIEludFJlY3QgcmVzaXplckNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVy
LCBjb25zdCBJbnRSZWN0JiBib3VuZHMpCiB7CiAgICAgQVNTRVJUKGxheWVyLT5yZW5kZXJlcigp
LT5pc0JveCgpKTsKICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgp
ID09IFJFU0laRV9OT05FKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwogICAgIHJldHVybiBjb3JuZXJSZWN0KGxheWVyLCBib3VuZHMpOwog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgp
IGNvbnN0CitJbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgp
IGNvbnN0CiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJv
eCkKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBMYXlvdXRSZWN0IHNjcm9sbENv
cm5lckFuZFJlc2l6ZXIgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVyID0gc2Nyb2xsQ29ybmVy
UmVjdCgpOwogICAgIGlmIChzY3JvbGxDb3JuZXJBbmRSZXNpemVyLmlzRW1wdHkoKSkKICAgICAg
ICAgc2Nyb2xsQ29ybmVyQW5kUmVzaXplciA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJveC0+
Ym9yZGVyQm94UmVjdCgpKTsKICAgICByZXR1cm4gc2Nyb2xsQ29ybmVyQW5kUmVzaXplcjsKQEAg
LTE4MTUsNjMgKzE4MTUsNjMgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNp
YmxlKAogICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxiYXJS
ZWN0KSBjb25zdAorSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBz
Y3JvbGxiYXJSZWN0KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigp
LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUmVjdDsK
IAotICAgIExheW91dFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgSW50UmVjdCByZWN0
ID0gc2Nyb2xsYmFyUmVjdDsKICAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJh
cikpOwogCiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVy
KHJlbmRlcmVyKCksIHJlY3QpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IExheW91dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVy
VmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybiBwYXJlbnRSZWN0OwogCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVW
aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAgIElu
dFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJl
cigpLCBwYXJlbnRSZWN0KTsKICAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxi
YXIpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorSW50UG9pbnQg
UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25z
dAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgaWYg
KCF2aWV3KQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUG9pbnQ7CiAKLSAgICBMYXlvdXRQb2lu
dCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFy
UG9pbnQ7CiAgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CiAgICAg
cmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCks
IHBvaW50KTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5
b3V0UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcq
IHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1
cm4gcGFyZW50UG9pbnQ7CiAKLSAgICBMYXlvdXRQb2ludCBwb2ludCA9IHZpZXctPmZyYW1lVmll
dygpLT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgSW50
UG9pbnQgcG9pbnQgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVy
ZXIoKSwgcGFyZW50UG9pbnQpOwogCiAgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwogICAgIHJldHVybiBwb2ludDsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJMYXll
cjo6Y29udGVudHNTaXplKCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIExheW91dFNpemUoY29uc3RfY2FzdDxSZW5kZXJMYXll
cio+KHRoaXMpLT5zY3JvbGxXaWR0aCgpLCBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PnNjcm9sbEhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50U2l6ZShjb25zdF9jYXN0PFJlbmRlckxh
eWVyKj4odGhpcyktPnNjcm9sbFdpZHRoKCksIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlz
KS0+c2Nyb2xsSGVpZ2h0KCkpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjp2aXNpYmxl
SGVpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJMYXllcjo6dmlzaWJsZUhlaWdodCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fbGF5ZXJTaXplLmhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRl
ckxheWVyOjp2aXNpYmxlV2lkdGgoKSBjb25zdAoraW50IFJlbmRlckxheWVyOjp2aXNpYmxlV2lk
dGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVyU2l6ZS53aWR0aCgpOwogfQpAQCAtMTg4
OSwyNiArMTg4OSwyNiBAQCBib29sIFJlbmRlckxheWVyOjppc09uQWN0aXZlUGFnZSgpIGNvbnN0
CiAgICAgcmV0dXJuICFtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwogfQog
Ci1MYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAor
SW50UG9pbnQgUmVuZGVyTGF5ZXI6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gcmVuZGVyZXIoKS0+ZnJhbWUoKSA/IHJlbmRlcmVyKCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpIDogTGF5b3V0UG9pbnQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKS0+ZnJhbWUoKSA/IHJlbmRlcmVyKCktPmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpIDogSW50UG9pbnQoKTsKIH0KIAotTGF5b3V0
U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAorSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7CiAKICAgICBpZiAoc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIExheW91dFNpemUoYm94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpLCBib3gtPmJvcmRlclRvcCgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUo
Ym94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBi
b3gtPmJvcmRlclRvcCgpKTsKIAogICAgIGlmIChzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQot
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5oZWlnaHQo
KSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAg
cmV0dXJuIEludFNpemUoYm94LT5ib3JkZXJMZWZ0KCksIGJveC0+aGVpZ2h0KCkgLSBib3gtPmJv
cmRlckJvdHRvbSgpIC0gc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAgICAgCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFNpemUoKTsKKyAgICByZXR1cm4gSW50U2l6
ZSgpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBp
ZiAoc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewpAQCAtMTkyMyw3ICsxOTIzLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlYwogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCi0gICAgTGF5b3V0UmVjdCBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IHNj
cm9sbFJlY3QgPSByZWN0OwogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAg
QVNTRVJUKGJveCk7CiAgICAgaWYgKHNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCkBAIC0xOTMz
LDcgKzE5MzMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjCiAg
ICAgcmVuZGVyZXIoKS0+cmVwYWludFJlY3RhbmdsZShzY3JvbGxSZWN0KTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
cmVjdCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAg
LTIxMDMsMjAgKzIxMDMsMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0Nv
bnRybwogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBMYXlvdXRS
ZWN0JiBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJveFJlY3QoKTsKLSAgICBjb25zdCBMYXlvdXRS
ZWN0JiBzY3JvbGxDb3JuZXIgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgTGF5b3V0UmVjdCBh
YnNCb3VuZHMoYm9yZGVyQm94LmxvY2F0aW9uKCkgKyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJv
eC5zaXplKCkpOworICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJCb3hS
ZWN0KCk7CisgICAgY29uc3QgSW50UmVjdCYgc2Nyb2xsQ29ybmVyID0gc2Nyb2xsQ29ybmVyUmVj
dCgpOworICAgIEludFJlY3QgYWJzQm91bmRzKGJvcmRlckJveC5sb2NhdGlvbigpICsgb2Zmc2V0
RnJvbUxheWVyLCBib3JkZXJCb3guc2l6ZSgpKTsKICAgICBpZiAobV92QmFyKQotICAgICAgICBt
X3ZCYXItPnNldEZyYW1lUmVjdChMYXlvdXRSZWN0KGFic0JvdW5kcy5tYXhYKCkgLSBib3gtPmJv
cmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWJzQm91bmRzLnkoKSArIGJveC0+Ym9yZGVyVG9wKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5oZWlnaHQoKSAtIChi
b3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJCb3R0b20oKSkgLSBzY3JvbGxDb3JuZXIuaGVp
Z2h0KCkpKTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMu
bWF4WCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRv
cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuaGVpZ2h0
KCkgLSAoYm94LT5ib3JkZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gc2Nyb2xsQ29y
bmVyLmhlaWdodCgpKSk7CiAKICAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnNldEZy
YW1lUmVjdChMYXlvdXRSZWN0KGFic0JvdW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMubWF4WSgpIC0g
Ym94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLndpZHRoKCkgLSAoYm94LT5ib3JkZXJM
ZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gc2Nyb2xsQ29ybmVyLndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOwor
ICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy54KCkgKyBib3gt
PmJvcmRlckxlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNC
b3VuZHMubWF4WSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLndpZHRoKCkgLSAo
Ym94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gc2Nyb2xsQ29ybmVyLndp
ZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWln
aHQoKSkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CkBAIC0y
MjA3LDcgKzIyMDcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
CiAgICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVm
dCgpKTsKICAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVy
Zmxvd1RvcCgpKTsKICAgICAKLSAgICBzZXRTY3JvbGxPcmlnaW4oTGF5b3V0UG9pbnQoLW1fc2Ny
b2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKKyAgICBz
ZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Ny
b2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChuZWVkSEJhcikKICAgICAgICAgKm5l
ZWRIQmFyID0gbV9zY3JvbGxTaXplLndpZHRoKCkgPiBib3gtPmNsaWVudFdpZHRoKCk7CkBAIC0y
MjUyLDggKzIyNTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
CiAgICAgaWYgKGJveC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpIHsKICAgICAg
ICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBpbiBhbiBpbnZhbGlkIHNjcm9sbCBwb3Np
dGlvbi4gIEluIHRoaXMgY2FzZSB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9s
bCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgot
ICAgICAgICBMYXlvdXRVbml0IG5ld1ggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFhP
ZmZzZXQoKSwgc2Nyb2xsV2lkdGgoKSAtIGJveC0+Y2xpZW50V2lkdGgoKSkpOwotICAgICAgICBM
YXlvdXRVbml0IG5ld1kgPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKHNjcm9sbFlPZmZzZXQoKSwg
c2Nyb2xsSGVpZ2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgIGludCBuZXdY
ID0gbWF4KDAsIG1pbihzY3JvbGxYT2Zmc2V0KCksIHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVu
dFdpZHRoKCkpKTsKKyAgICAgICAgaW50IG5ld1kgPSBtYXgoMCwgbWluKHNjcm9sbFlPZmZzZXQo
KSwgc2Nyb2xsSGVpZ2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGlmIChu
ZXdYICE9IHNjcm9sbFhPZmZzZXQoKSB8fCBuZXdZICE9IHNjcm9sbFlPZmZzZXQoKSkKICAgICAg
ICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1gsIG5ld1kpOwogICAgIH0KQEAgLTI1MDIsMTQgKzI1
MDIsMTQgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7CiAgICAgCi0gICAg
TGF5b3V0UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xS
ZWN0OwogICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSAhPSBSRVNJWkVfTk9O
RSkgewogICAgICAgICByZXNpemVDb250cm9sUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMs
IGJveC0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICAgICAgaWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNv
bnRhaW5zKGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgTGF5b3V0VW5pdCByZXNpemVDb250cm9sU2l6ZSA9IG1heDxMYXlvdXRVbml0PihyZXNpemVD
b250cm9sUmVjdC5oZWlnaHQoKSwgMCk7CisgICAgaW50IHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4
KHJlc2l6ZUNvbnRyb2xSZWN0LmhlaWdodCgpLCAwKTsKIAogICAgIGlmIChtX3ZCYXIpIHsKICAg
ICAgICAgTGF5b3V0UmVjdCB2QmFyUmVjdChib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0
KCkgLSBtX3ZCYXItPndpZHRoKCksIApAQCAtMjUyMiw3ICsyNTIyLDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVz
aXplQ29udHJvbFNpemUgPSBtYXg8TGF5b3V0VW5pdD4ocmVzaXplQ29udHJvbFJlY3Qud2lkdGgo
KSwgMCk7CisgICAgcmVzaXplQ29udHJvbFNpemUgPSBtYXgocmVzaXplQ29udHJvbFJlY3Qud2lk
dGgoKSwgMCk7CiAgICAgaWYgKG1faEJhcikgewogICAgICAgICBMYXlvdXRSZWN0IGhCYXJSZWN0
KGJveC0+Ym9yZGVyTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVp
Z2h0KCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA5OTQ5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksOCArMjU5LDggQEAgcHVibGljOgogICAgIGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQogICAgIHZvaWQgc2V0TG9jYXRpb24oTGF5b3V0
VW5pdCB4LCBMYXlvdXRVbml0IHkpIHsgbV90b3BMZWZ0ID0gTGF5b3V0UG9pbnQoeCwgeSk7IH0K
IAotICAgIGNvbnN0IExheW91dFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyU2l6
ZTsgfQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fbGF5ZXJT
aXplID0gc2l6ZTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyU2l6ZTsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1f
bGF5ZXJTaXplID0gc2l6ZTsgfQogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKQEAgLTI3OSw5ICsyNzksOSBA
QCBwdWJsaWM6CiAKICAgICBMYXlvdXRTaXplIHNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIHNjcm9sbE9mZnNldCgpICsgbV9zY3JvbGxPdmVyZmxvdzsgfQogCi0gICAgTGF5
b3V0VW5pdCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lk
dGgoKSArIHNjcm9sbE9yaWdpbigpLngoKTsgfQotICAgIExheW91dFVuaXQgc2Nyb2xsWU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpICsgc2Nyb2xsT3JpZ2lu
KCkueSgpOyB9Ci0gICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBM
YXlvdXRTaXplKHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKTsgfQorICAgIGludCBz
Y3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKSArIHNj
cm9sbE9yaWdpbigpLngoKTsgfQorICAgIGludCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7IH0KKyAgICBJ
bnRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc2Nyb2xsWE9mZnNl
dCgpLCBzY3JvbGxZT2Zmc2V0KCkpOyB9CiAKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KExheW91
dFVuaXQsIExheW91dFVuaXQsIFNjcm9sbE9mZnNldENsYW1waW5nID0gU2Nyb2xsT2Zmc2V0VW5j
bGFtcGVkKTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChMYXlvdXRVbml0IHgsIFNjcm9sbE9m
ZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zm
c2V0KHgsIHNjcm9sbFlPZmZzZXQoKSwgY2xhbXApOyB9CkBAIC01OTIsNDIgKzU5Miw0MiBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCi0g
ICAgTGF5b3V0VW5pdCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKKyAgICBpbnQg
c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgCiAgICAgLy8gU2Nyb2xsYWJs
ZUFyZWEgaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciosIGNvbnN0IExheW91dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNj
cm9sbENvcm5lclJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91
dFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFJlY3QmKSBj
b25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmly
dHVhbCBMYXlvdXRVbml0IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIExheW91dFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBMYXlvdXRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFs
IExheW91dFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwg
SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9s
bFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIEludFBvaW50IHNjcm9s
bFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3QoYm9vbCBp
bmNsdWRlU2Nyb2xsYmFycykgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHZpc2libGVI
ZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVdp
ZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OworICAgIHZpcnR1YWwg
SW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNPbkFjdGl2ZVBhZ2UoKSBjb25zdDsKIAogICAgIC8vIFJlY3RhbmdsZSBlbmNvbXBh
c3NpbmcgdGhlIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIgcmVjdC4KLSAgICBMYXlvdXRSZWN0
IHNjcm9sbENvcm5lckFuZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CisgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5l
Y3RGcm9tUGFnZSgpIHsgbV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSAwOyB9CiAKICAgICAvLyBOT1RF
OiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9m
ZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oTGF5b3V0VW5pdCwg
TGF5b3V0VW5pdCk7CisgICAgdm9pZCBzY3JvbGxUbyhpbnQsIGludCk7CiAKLSAgICBMYXlvdXRT
aXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKKyAgICBJbnRTaXpl
IHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKICAgICAKICAgICB2b2lk
IHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRp
Y2FsT3ZlcmZsb3cpOwogCkBAIC03NTUsMTUgKzc1NSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgTGF5
b3V0UG9pbnQgbV90b3BMZWZ0OwogCiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0Ci0g
ICAgTGF5b3V0U2l6ZSBtX2xheWVyU2l6ZTsKKyAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCiAg
ICAgLy8gT3VyIHNjcm9sbCBvZmZzZXRzIGlmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLgotICAgIExh
eW91dFNpemUgbV9zY3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAog
ICAgIExheW91dFNpemUgbV9zY3JvbGxPdmVyZmxvdzsKICAgICAKICAgICAvLyBUaGUgd2lkdGgv
aGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIExheW91dFNpemUgbV9zY3JvbGxTaXpl
OworICAgIEludFNpemUgbV9zY3JvbGxTaXplOwogCiAgICAgLy8gRm9yIGxheWVycyB3aXRoIG92
ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgogICAgIFJlZlB0cjxTY3JvbGxi
YXI+IG1faEJhcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDk5NDk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsNyArNTQxLDcgQEAgaW50IFJlbmRl
ckxpc3RCb3g6OnNjcm9sbFRvd2FyZChjb25zdCBJbgogCiB2b2lkIFJlbmRlckxpc3RCb3g6OmF1
dG9zY3JvbGwoKQogewotICAgIExheW91dFBvaW50IHBvcyA9IGZyYW1lKCktPnZpZXcoKS0+d2lu
ZG93VG9Db250ZW50cyhmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRp
b24oKSk7CisgICAgSW50UG9pbnQgcG9zID0gZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKIAog
ICAgIGludCBlbmRJbmRleCA9IHNjcm9sbFRvd2FyZChwb3MpOwogICAgIGlmIChlbmRJbmRleCA+
PSAwKSB7CkBAIC03MDgsOTEgKzcwOCw5MSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzQWN0aXZl
KCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNB
Y3RpdmUoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgUmVu
ZGVyTGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgTGF5b3V0UmVjdCBzY3JvbGxSZWN0ID0gcmVj
dDsKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OwogICAgIHNjcm9sbFJlY3QubW92ZSh3
aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKSwgYm9yZGVyVG9wKCkp
OwogICAgIHJlcGFpbnRSZWN0YW5nbGUoc2Nyb2xsUmVjdCk7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dAorSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJh
clJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJSZWN0OwogCi0gICAgTGF5b3V0
UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJS
ZWN0OwogCi0gICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJp
Z2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJUb3Ag
PSBib3JkZXJUb3AoKTsKKyAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJS
aWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOworICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3Jk
ZXJUb3AoKTsKICAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyTGVmdCwgc2Nyb2xsYmFyVG9wKTsKIAog
ICAgIHJldHVybiB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcih0aGlzLCBy
ZWN0KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91
dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3
ID0gdGhpcy0+dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHBhcmVudFJl
Y3Q7CiAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRv
UmVuZGVyZXIodGhpcywgcGFyZW50UmVjdCk7CisgICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJh
bWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFJlY3QpOwogCi0gICAgTGF5
b3V0VW5pdCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxi
YXItPndpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsK
KyAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpOworICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKICAgICBy
ZWN0Lm1vdmUoLXNjcm9sbGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiByZWN0
OwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFBv
aW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK0ludFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAogewogICAgIFJlbmRlclZp
ZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyUG9pbnQ7CiAKLSAgICBMYXlvdXRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50
OworICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CiAKLSAgICBMYXlvdXRVbml0
IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lk
dGgoKTsKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIGlu
dCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndp
ZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwogICAgIHBvaW50Lm1v
dmUoc2Nyb2xsYmFyTGVmdCwgc2Nyb2xsYmFyVG9wKTsKIAogICAgIHJldHVybiB2aWV3LT5mcmFt
ZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcih0aGlzLCBwb2ludCk7CiB9CiAKLUxheW91dFBv
aW50IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBvaW50
KSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXco
KTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsKIAotICAgIExh
eW91dFBvaW50IHBvaW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRo
aXMsIHBhcmVudFBvaW50KTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHZpZXctPmZyYW1lVmlldygp
LT5jb252ZXJ0VG9SZW5kZXJlcih0aGlzLCBwYXJlbnRQb2ludCk7CiAKLSAgICBMYXlvdXRVbml0
IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lk
dGgoKTsKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIGlu
dCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndp
ZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwogICAgIHBvaW50Lm1v
dmUoLXNjcm9sbGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiBwb2ludDsKIH0K
IAotTGF5b3V0U2l6ZSBSZW5kZXJMaXN0Qm94Ojpjb250ZW50c1NpemUoKSBjb25zdAorSW50U2l6
ZSBSZW5kZXJMaXN0Qm94Ojpjb250ZW50c1NpemUoKSBjb25zdAogewotICAgIHJldHVybiBMYXlv
dXRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50U2l6
ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVy
TGlzdEJveDo6dmlzaWJsZUhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyTGlzdEJveDo6dmlzaWJs
ZUhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0
IFJlbmRlckxpc3RCb3g6OnZpc2libGVXaWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyTGlzdEJveDo6
dmlzaWJsZVdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gd2lkdGgoKTsKIH0KIAotTGF5b3V0
UG9pbnQgUmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorSW50UG9p
bnQgUmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAogewogICAgIFJl
bmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CiAgICAgcmV0
dXJuIHZpZXctPmZyYW1lVmlldygpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDk5NDk4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDIwICsxMDIsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFVu
aXQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9IC8vIFdlIGRvbid0IHN1cHBvcnQgcmVzaXplIG9uIGxpc3QgYm94ZXMgeWV0LiBJZiB3ZSBk
aWQgdGhlc2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UuCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNj
cm9sbENvcm5lclJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIHsg
fQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVh
bCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1
YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdkJhci5n
ZXQoKTsgfQotICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50
IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRl
bnRzU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBv
aW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT25B
Y3RpdmVQYWdlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gOTk0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsMTMgKzUwMiwx
MyBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudEluc2V0UmlnaHQoKSBjCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdMZWZ0KCkg
Y29uc3QKK2ludCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewog
ICAgIHJldHVybiBwYWRkaW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgpOwog
fQogCiBjb25zdCBpbnQgZW5kT2ZMaW5lUGFkZGluZyA9IDI7Ci1MYXlvdXRVbml0IFJlbmRlck1l
bnVMaXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoraW50IFJlbmRlck1lbnVMaXN0Ojpj
bGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1
dHRvblBhcnQpIHsKICAgICAgICAgLy8gRm9yIHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUg
dGhlbWUgYXBwbGllcyBwYWRkaW5nIHRvIGxlYXZlIHJvb20gZm9yIHRoZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDk5NDk4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIG1l
bnVTdHlsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0TGVmdCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IExheW91dFVuaXQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91
dFVuaXQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50
UGFkZGluZ0xlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gOTk0OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjI4LDkgKzYyOCw5IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNsaWVudEkKICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1MYXlvdXRVbml0IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAoraW50IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewot
ICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CisgICAgaW50IHBhZGRpbmcg
PSBwYWRkaW5nTGVmdCgpOwogCiAgICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1
bHRzQnV0dG9uRWxlbWVudCgpOwogICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9
IHJlc3VsdHNCdXR0b24gPyByZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApCkBAIC02Mzks
OSArNjM5LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAg
IHJldHVybiBwYWRkaW5nOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCBw
YWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7CisgICAgaW50IHBhZGRpbmcgPSBwYWRkaW5nUmlnaHQo
KTsKIAogICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50
KCk7CiAgICAgaWYgKFJlbmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBj
YW5jZWxCdXR0b24tPnJlbmRlckJveCgpIDogMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9u
IDk5NDk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGNsaWVudEluc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0
UmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ0xlZnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsaXN0
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5
OTUwMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDExLTExLTA3ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZlcnQgcGxhdGZvcm0gYW5kIHNjcm9sbGluZyB0byBpbnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTU4NQorCisgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2Yg
TGF5b3V0VW5pdCBhbmQgcmVsYXRlZCB0eXBlcyB3aXRoIGludHMgaW4gcGxhdGZvcm0KKyAgICAg
ICAgYW5kIHNjcm9sbGluZyBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9CdWlsdEluUERGVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3Ojpp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3
Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6QnVpbHRJblBERlZpZXc6OnZpc2li
bGVXaWR0aCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmll
dy5oOgorCiAyMDExLTExLTA3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0OTAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVp
bHRJblBERlZpZXcuY3BwCShyZXZpc2lvbiA5OTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDYsNyArNjA2LDcgQEAgYm9vbCBCdWlsdEluUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAogCiB2
b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKLSAgICBMYXlvdXRSZWN0IGRpcnR5
UmVjdCA9IHJlY3Q7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OwogICAgIGRpcnR5UmVj
dC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICBkaXJ0eVJlY3QubW92ZUJ5KC1w
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwogICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShk
aXJ0eVJlY3QpOwpAQCAtNjUyLDEyICs2NTIsMTIgQEAgSW50UG9pbnQgQnVpbHRJblBERlZpZXc6
Om1heGltdW1TY3JvbGxQbwogICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OwogfQogCi1MYXlvdXRV
bml0IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK2ludCBCdWlsdEluUERG
Vmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS5o
ZWlnaHQoKTsKIH0KIAotTGF5b3V0VW5pdCBCdWlsdEluUERGVmlldzo6dmlzaWJsZVdpZHRoKCkg
Y29uc3QKK2ludCBCdWlsdEluUERGVmlldzo6dmlzaWJsZVdpZHRoKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oCShyZXZpc2lv
biA5OTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJ
blBERlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDggKzEyNiw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkxheW91dFVuaXQgdmlzaWJsZUhlaWdodCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6TGF5b3V0VW5pdCB2aXNpYmxlV2lkdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgdmlzaWJsZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIGNv
bnRlbnRzU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyKCkgY29uc3QgIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKTsgfQogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTUwMSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEt
MTEtMDcgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE5lZWQg
YSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiB0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVU
ZXN0LmNwcDoKKyAgICAgICAgKE1vY2tTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUhlaWdodCk6Cisg
ICAgICAgIChNb2NrU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVXaWR0aCk6CisKIDIwMTEtMTEtMDcg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ5MApJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwCShyZXZp
c2lvbiA5OTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsQW5pbWF0
b3JOb25lVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgog
ICAgIE1PQ0tfTUVUSE9EMShzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uLCB2b2lkKGNvbnN0
IEludFBvaW50JikpOwogICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChlbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSwgU2Nyb2xsYWJsZUFyZWEqKCkpOwogCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IHZpc2li
bGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiA3Njg7IH0KLSAgICB2aXJ0dWFsIExheW91dFVuaXQg
dmlzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gMTAyNDsgfQorICAgIHZpcnR1YWwgaW50IHZp
c2libGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiA3Njg7IH0KKyAgICB2aXJ0dWFsIGludCB2aXNp
YmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiAxMDI0OyB9CiAKICAgICBib29sIHNjcm9sbEFuaW1h
dG9yRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3JFbmFibGVkOyB9CiAg
ICAgYm9vbCBtX3Njcm9sbEFuaW1hdG9yRW5hYmxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113966</attachid>
            <date>2011-11-07 17:31:06 -0800</date>
            <delta_ts>2011-11-07 18:11:22 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71585-20111107173105.patch</filename>
            <type>text/plain</type>
            <size>80171</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTEtMDcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmVydCBwbGF0Zm9ybSBhbmQg
c2Nyb2xsaW5nIHRvIGludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxNTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAg
ICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBMYXlvdXRVbml0IGFuZCByZWxhdGVkIHR5cGVzIHdp
dGggaW50cyBpbiBwbGF0Zm9ybQorICAgICAgICBhbmQgc2Nyb2xsaW5nIGNvZGUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50
Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oOgorCiAyMDExLTExLTA3ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNDA1MjE1PiBSRUdSRVNT
SU9OIChyOTgxNzgpOiBXb3JsZCBvZiBXYXJjcmFmdCBMYXVuY2hlciBjcmFzaGVzIGluIEZyYW1l
Vmlldzo6aXNPbkFjdGl2ZVBhZ2UoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
cmV2aXNpb24gOTk1MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNTcsMTUgKzEzNTcsMTUgQEAgdm9pZCBGcmFtZVZpZXc6OnJlbW92
ZUZpeGVkT2JqZWN0KCkKICAgICAgICAgdXBkYXRlQ2FuQmxpdE9uU2Nyb2xsUmVjdXJzaXZlbHko
KTsKIH0KIAotTGF5b3V0VW5pdCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkg
Y29uc3QKK2ludCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKIHsK
LSAgICBMYXlvdXRVbml0IHZpc2libGVDb250ZW50V2lkdGggPSB2aXNpYmxlQ29udGVudFJlY3Qo
KS53aWR0aCgpOwotICAgIExheW91dFVuaXQgbWF4WCA9IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2li
bGVDb250ZW50V2lkdGg7CisgICAgaW50IHZpc2libGVDb250ZW50V2lkdGggPSB2aXNpYmxlQ29u
dGVudFJlY3QoKS53aWR0aCgpOworICAgIGludCBtYXhYID0gY29udGVudHNXaWR0aCgpIC0gdmlz
aWJsZUNvbnRlbnRXaWR0aDsKIAogICAgIGlmIChtYXhYID09IDApCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgTGF5b3V0VW5pdCB4ID0gc2Nyb2xsWCgpOworICAgIGludCB4ID0gc2Nyb2xsWCgp
OwogCiAgICAgaWYgKCFzY3JvbGxPcmlnaW4oKS54KCkpIHsKICAgICAgICAgaWYgKHggPCAwKQpA
QCAtMTM5MiwxNSArMTM5MiwxNSBAQCBMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xsWEZvckZp
eGVkUG9zCiAgICAgcmV0dXJuIHggKiBkcmFnRmFjdG9yIC8gZnJhbWVTY2FsZUZhY3RvcjsKIH0K
IAotTGF5b3V0VW5pdCBGcmFtZVZpZXc6OnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QK
K2ludCBGcmFtZVZpZXc6OnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBM
YXlvdXRVbml0IHZpc2libGVDb250ZW50SGVpZ2h0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVp
Z2h0KCk7CisgICAgaW50IHZpc2libGVDb250ZW50SGVpZ2h0ID0gdmlzaWJsZUNvbnRlbnRSZWN0
KCkuaGVpZ2h0KCk7CiAKLSAgICBMYXlvdXRVbml0IG1heFkgPSBjb250ZW50c0hlaWdodCgpIC0g
dmlzaWJsZUNvbnRlbnRIZWlnaHQ7CisgICAgaW50IG1heFkgPSBjb250ZW50c0hlaWdodCgpIC0g
dmlzaWJsZUNvbnRlbnRIZWlnaHQ7CiAgICAgaWYgKG1heFkgPT0gMCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBMYXlvdXRVbml0IHkgPSBzY3JvbGxZKCk7CisgICAgaW50IHkgPSBzY3JvbGxZ
KCk7CiAKICAgICBpZiAoIXNjcm9sbE9yaWdpbigpLnkoKSkgewogICAgICAgICBpZiAoeSA8IDAp
CkBAIC0xNDIzLDEyICsxNDIzLDEyIEBAIExheW91dFVuaXQgRnJhbWVWaWV3OjpzY3JvbGxZRm9y
Rml4ZWRQb3MKICAgICByZXR1cm4geSAqIGRyYWdGYWN0b3IgLyBmcmFtZVNjYWxlRmFjdG9yOwog
fQogCi1MYXlvdXRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigp
IGNvbnN0CitJbnRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIExheW91dFNpemUoc2Nyb2xsWEZvckZpeGVkUG9zaXRpb24o
KSwgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xs
WEZvckZpeGVkUG9zaXRpb24oKSwgc2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CiB9CiAKLUxh
eW91dFBvaW50IEZyYW1lVmlldzo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdAorSW50UG9p
bnQgRnJhbWVWaWV3OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZnJhbWUgPyBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24o
KSA6IEludFBvaW50KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9u
IDk5NTA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5oIgog
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJQ
YWludFBoYXNlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC02NCw4ICs2NSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdygpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChj
b25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
KTsKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVk
dWxlQW5pbWF0aW9uKCk7CkBAIC04OCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IExheW91dFNpemUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQgbGF5b3V0
KGJvb2wgYWxsb3dTdWJ0cmVlID0gdHJ1ZSk7CiAgICAgYm9vbCBkaWRGaXJzdExheW91dCgpIGNv
bnN0OwpAQCAtMTY2LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgd2lu
ZG93UmVzaXplclJlY3QoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRGaXhlZFZpc2li
bGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdm9pZCBzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYVBs
YXRmb3JtV2lkZ2V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRGaXhlZEVsZW1lbnRzQWZ0
ZXJTY3JvbGxpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0
aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Q7CkBAIC0xOTEsOSArMTkyLDkgQEAgcHVibGljOgog
CiAgICAgLy8gRnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgY3VycmVudCBzY3JvbGxlZCBwb3Np
dGlvbiwgbmVnYXRpbmcgdGhlIGVmZmVjdHMgb2Ygb3ZlcmhhbmcKICAgICAvLyBhbmQgYWRqdXN0
aW5nIGZvciBwYWdlIHNjYWxlLgotICAgIExheW91dFVuaXQgc2Nyb2xsWEZvckZpeGVkUG9zaXRp
b24oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkgY29u
c3Q7Ci0gICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7
CisgICAgaW50IHNjcm9sbFhGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7CisgICAgaW50IHNjcm9s
bFlGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7CisgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JG
aXhlZFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGJlZ2luRGVmZXJyZWRSZXBhaW50cygp
OwogICAgIHZvaWQgZW5kRGVmZXJyZWRSZXBhaW50cygpOwpAQCAtMjY3LDEwICsyNjgsMTAgQEAg
cHVibGljOgogICAgIHZvaWQgc2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50KiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgLy8gTWV0aG9kcyB0byBjb252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0
d2VlbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVuZGVyZXIsIGFuZCB0aGlzIHZpZXcu
Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRSZWN0
JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVh
bCBMYXlvdXRQb2ludCBjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbVJl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21SZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZp
cnR1YWwgSW50UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKIAogICAgIGJvb2wgaXNGcmFtZVZpZXdTY3JvbGxDb3JuZXIo
UmVuZGVyU2Nyb2xsYmFyUGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bENvcm5lciA9PSBzY3JvbGxDb3JuZXI7IH0KIApAQCAtMjg1LDcgKzI4Niw3IEBAIHB1YmxpYzoK
ICAgICAvLyBPbiBlYWNoIHJlcGFpbnQgdGhlIGRlbGF5IGluY3Jlc2VzIGJ5IHRoaXMgYW1vdW50
CiAgICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRocm90dGxpbmdEZWZlcnJlZFJlcGFpbnREZWxh
eUluY3JlbWVudER1cmluZ0xvYWRpbmcoZG91YmxlIHApOwogCi0gICAgdmlydHVhbCBMYXlvdXRQ
b2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQg
Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBtZXRob2Qgb25jZSBwbHVnaW4gbG9hZGluZyBpcyBkZWNvdXBsZWQgZnJvbSBsYXlvdXQuCiAg
ICAgdm9pZCBmbHVzaEFueVBlbmRpbmdQb3N0TGF5b3V0VGFza3MoKTsKQEAgLTMwMSw3ICszMDIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhib29sKTsKICAgICBib29s
IGlzVHJhY2tpbmdSZXBhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faXNUcmFja2luZ1JlcGFpbnRz
OyB9CiAgICAgdm9pZCByZXNldFRyYWNrZWRSZXBhaW50cygpIHsgbV90cmFja2VkUmVwYWludFJl
Y3RzLmNsZWFyKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHRyYWNrZWRSZXBh
aW50UmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7IH0KKyAgICBj
b25zdCBWZWN0b3I8SW50UmVjdD4mIHRyYWNrZWRSZXBhaW50UmVjdHMoKSBjb25zdCB7IHJldHVy
biBtX3RyYWNrZWRSZXBhaW50UmVjdHM7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25z
dCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKQEAgLTM0
MSwyMSArMzQyLDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBPdmVycmlkZSBTY3JvbGxWaWV3IG1l
dGhvZHMgdG8gZG8gcG9pbnQgY29udmVyc2lvbiB2aWEgcmVuZGVyZXJzLCBpbiBvcmRlciB0bwog
ICAgIC8vIHRha2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIExheW91dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0
JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXco
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAogICAg
IC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0VGlja21hcmtzKFZlY3RvcjxMYXlvdXRSZWN0PiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRSdWJi
ZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnRBbmltYXRlZFNjcm9sbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0
ZUFuaW1hdGVkU2Nyb2xsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29s
IGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTY3JvbGxhYmxlQXJlYSogZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKIApAQCAtNDU2LDcgKzQ1Nyw3IEBAIHByaXZh
dGU6CiAgICAgZG91YmxlIG1fbGFzdFBhaW50VGltZTsKICAgICAKICAgICBib29sIG1faXNUcmFj
a2luZ1JlcGFpbnRzOyAvLyBVc2VkIGZvciB0ZXN0aW5nLgotICAgIFZlY3RvcjxMYXlvdXRSZWN0
PiBtX3RyYWNrZWRSZXBhaW50UmVjdHM7CisgICAgVmVjdG9yPEludFJlY3Q+IG1fdHJhY2tlZFJl
cGFpbnRSZWN0czsKIAogICAgIGJvb2wgbV9zaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbjsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9u
IDk5NTA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgUG9wdXBNZW51Q2xpZW50X2gK
ICNkZWZpbmUgUG9wdXBNZW51Q2xpZW50X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51U3R5bGUuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC01Miw4ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFBvcHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGlu
dCBjbGllbnRJbnNldExlZnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgY2xpZW50SW5z
ZXRSaWdodCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGlu
Z0xlZnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRpbmdS
aWdodCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nTGVmdCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQg
c2VsZWN0ZWRJbmRleCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRl
KCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ck5vbmUuY3BwCShyZXZpc2lvbiA5OTUwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yTm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBk
b3VibGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6CiAgICAgcmV0dXJuIGVuZFZh
bHVlIC0gc3RhcnRWYWx1ZTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6
UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JOb25lKiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9z
aXRpb24sIExheW91dFVuaXQgdmlzaWJsZUxlbmd0aCkKK1Njcm9sbEFuaW1hdG9yTm9uZTo6UGVy
QXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCog
Y3VycmVudFBvc2l0aW9uLCBpbnQgdmlzaWJsZUxlbmd0aCkKICAgICA6IG1fY3VycmVudFBvc2l0
aW9uKGN1cnJlbnRQb3NpdGlvbikKICAgICAsIG1fdmlzaWJsZUxlbmd0aCh2aXNpYmxlTGVuZ3Ro
KQogewpAQCAtMzY2LDcgKzM2Niw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlz
RGF0YTo6YW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6
OlBlckF4aXNEYXRhOjp1cGRhdGVWaXNpYmxlTGVuZ3RoKExheW91dFVuaXQgdmlzaWJsZUxlbmd0
aCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6dXBkYXRlVmlzaWJsZUxl
bmd0aChpbnQgdmlzaWJsZUxlbmd0aCkKIHsKICAgICBtX3Zpc2libGVMZW5ndGggPSB2aXNpYmxl
TGVuZ3RoOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmgJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2lm
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTkzLDEx
ICs5MiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0b3JO
b25lVGVzdDsKIAogICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7Ci0gICAgICAgIFBlckF4aXNEYXRh
KFNjcm9sbEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcywgTGF5b3V0VW5p
dCB2aXNpYmxlTGVuZ3RoKTsKKyAgICAgICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JOb25l
KiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zLCBpbnQgdmlzaWJsZUxlbmd0aCk7CiAgICAgICAg
IHZvaWQgcmVzZXQoKTsKICAgICAgICAgYm9vbCB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgZmxvYXQgc2Nyb2xsYWJsZVNpemUsIGRvdWJsZSBj
dXJyZW50VGltZSwgUGFyYW1ldGVycyopOwogICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91
YmxlIGN1cnJlbnRUaW1lKTsKLSAgICAgICAgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RoKExheW91
dFVuaXQgdmlzaWJsZUxlbmd0aCk7CisgICAgICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aChp
bnQgdmlzaWJsZUxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUF0KEN1cnZl
LCBkb3VibGUgdCk7CiAgICAgICAgIHN0YXRpYyBkb3VibGUgYXR0YWNrQ3VydmUoQ3VydmUsIGRv
dWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSBzdGFydFBvcywgZG91YmxlIGF0dGFj
a1Bvcyk7CkBAIC0xMjksNyArMTI4LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBkb3VibGUgbV9y
ZWxlYXNlVGltZTsKICAgICAgICAgQ3VydmUgbV9yZWxlYXNlQ3VydmU7CiAKLSAgICAgICAgTGF5
b3V0VW5pdCBtX3Zpc2libGVMZW5ndGg7CisgICAgICAgIGludCBtX3Zpc2libGVMZW5ndGg7CiAg
ICAgfTsKIAogICAgIC8vIFdoaWxlIHpvb21pbmcsIHNjYWxlLCBwb3NYIGFuZCBwb3NZIG5lZWQg
dG8gc3RheSB0aWdodGx5IGNvdXBsZWQsIHNvIHVzZSBhIHNlcGFyYXRlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gOTk1MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDM0
ICsyMzEsMzQgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoYgogICAg
IGlmICghbV9maXhlZFZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0OwogCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoID0gdmVydGljYWxTY3JvbGxiYXIoKSAmJiAhdmVydGljYWxTY3JvbGxiYXIo
KS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9
IHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNj
cm9sbGJhcigpCiAgICAgICAgICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IHZlcnRpY2FsU2Nyb2xs
YmFyKCktPndpZHRoKCkgOiAwOwotICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCA9IGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5p
c092ZXJsYXlTY3JvbGxiYXIoKQorICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0g
aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlzT3Zlcmxh
eVNjcm9sbGJhcigpCiAgICAgICAgICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IGhvcml6b250YWxT
Y3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogCi0gICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgIExheW91dFNpemUobWF4PExheW91dFVuaXQ+KDAsIHdpZHRo
KCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXg8TGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KSkpOwotCisgICAgcmV0dXJuIEludFJlY3QobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwK
KyAgICAgICAgICAgICAgICAgICBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICBtYXgoMCwgd2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpLCAKKyAgICAg
ICAgICAgICAgICAgICBtYXgoMCwgaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KSk7CiB9CiAjZW5kaWYKIAotTGF5b3V0VW5pdCBTY3JvbGxWaWV3OjpsYXlvdXRXaWR0aCgpIGNv
bnN0CitpbnQgU2Nyb2xsVmlldzo6bGF5b3V0V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBt
X2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgIW1fdXNlRml4ZWRMYXlvdXQgPyB2aXNpYmxl
V2lkdGgoKSA6IG1fZml4ZWRMYXlvdXRTaXplLndpZHRoKCk7CiB9CiAKLUxheW91dFVuaXQgU2Ny
b2xsVmlldzo6bGF5b3V0SGVpZ2h0KCkgY29uc3QKK2ludCBTY3JvbGxWaWV3OjpsYXlvdXRIZWln
aHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwg
IW1fdXNlRml4ZWRMYXlvdXQgPyB2aXNpYmxlSGVpZ2h0KCkgOiBtX2ZpeGVkTGF5b3V0U2l6ZS5o
ZWlnaHQoKTsKIH0KIAotTGF5b3V0U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBj
b25zdAorSW50U2l6ZSBTY3JvbGxWaWV3OjpmaXhlZExheW91dFNpemUoKSBjb25zdAogewogICAg
IHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzZXRGaXhl
ZExheW91dFNpemUoY29uc3QgTGF5b3V0U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKGZp
eGVkTGF5b3V0U2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTI3OSwxMiAr
Mjc5LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCAKICAgICB1
cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAotTGF5b3V0U2l6ZSBTY3JvbGxW
aWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAorSW50U2l6ZSBTY3JvbGxWaWV3Ojpjb250ZW50c1Np
emUoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRlbnRzU2l6ZTsKIH0KIAotdm9pZCBTY3Jv
bGxWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgTGF5b3V0U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQg
U2Nyb2xsVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAg
ICAgaWYgKGNvbnRlbnRzU2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQw
NSwxNyArNDA1LDE3IEBAIGJvb2wgU2Nyb2xsVmlldzo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2cK
ICAgICByZXR1cm4gc2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNWZXJ0aWNh
bERvY3VtZW50KCksIGlzRmxpcHBlZERvY3VtZW50KCkpLCBncmFudWxhcml0eSk7CiB9CiAKLUxh
eW91dFNpemUgU2Nyb2xsVmlldzo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAorSW50U2l6ZSBTY3Jv
bGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0U2l6ZSBzdHJldGNo
OworICAgIEludFNpemUgc3RyZXRjaDsKIAotICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxZ
ID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7CisgICAgaW50IHBo
eXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgp
OwogICAgIGlmIChwaHlzaWNhbFNjcm9sbFkgPCAwKQogICAgICAgICBzdHJldGNoLnNldEhlaWdo
dChwaHlzaWNhbFNjcm9sbFkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzSGVpZ2h0KCkgJiYgcGh5
c2ljYWxTY3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKICAgICAg
ICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKGNvbnRlbnRzSGVpZ2h0KCkg
LSB2aXNpYmxlSGVpZ2h0KCkpKTsKIAotICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxYID0g
c2Nyb2xsUG9zaXRpb24oKS54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCk7CisgICAgaW50IHBoeXNp
Y2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOwog
ICAgIGlmIChwaHlzaWNhbFNjcm9sbFggPCAwKQogICAgICAgICBzdHJldGNoLnNldFdpZHRoKHBo
eXNpY2FsU2Nyb2xsWCk7CiAgICAgZWxzZSBpZiAoY29udGVudHNXaWR0aCgpICYmIHBoeXNpY2Fs
U2Nyb2xsWCA+IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQpAQCAtNDQ4LDcgKzQ0
OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAg
bV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IG9s
ZFNjcm9sbENvcm5lclJlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgSW50UmVjdCBvbGRT
Y3JvbGxDb3JuZXJSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogCiAgICAgYm9vbCBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIGJvb2wgaGFzVmVy
dGljYWxTY3JvbGxiYXIgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtNDcyLDggKzQ3Miw4IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICB9IGVsc2Ugewog
ICAgICAgICBib29sIHNlbmRDb250ZW50UmVzaXplZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgTGF5b3V0U2l6ZSBkb2NTaXplID0gY29udGVudHNTaXplKCk7Ci0gICAg
ICAgIExheW91dFNpemUgZnJhbWVTaXplID0gZnJhbWVSZWN0KCkuc2l6ZSgpOworICAgICAgICBJ
bnRTaXplIGRvY1NpemUgPSBjb250ZW50c1NpemUoKTsKKyAgICAgICAgSW50U2l6ZSBmcmFtZVNp
emUgPSBmcmFtZVJlY3QoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKGhTY3JvbGwgPT0gU2Nyb2xs
YmFyQXV0bykgewogICAgICAgICAgICAgbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGRvY1Np
emUud2lkdGgoKSA+IHZpc2libGVXaWR0aCgpOwpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fdXBkYXRlU2Ny
b2xsYmFyc1Bhc3MrKzsKICAgICAgICAgICAgIGNvbnRlbnRzUmVzaXplZCgpOwogICAgICAgICAg
ICAgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpOwotICAgICAgICAgICAgTGF5b3V0U2l6ZSBuZXdE
b2NTaXplID0gY29udGVudHNTaXplKCk7CisgICAgICAgICAgICBJbnRTaXplIG5ld0RvY1NpemUg
PSBjb250ZW50c1NpemUoKTsKICAgICAgICAgICAgIGlmIChuZXdEb2NTaXplID09IGRvY1NpemUp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbGF5b3V0IHdpdGggdGhlIG5ldyBzY3JvbGwgc3Rh
dGUgaGFkIG5vIGltcGFjdCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCdzIG92
ZXJhbGwgc2l6ZSwgc28gdXBkYXRlU2Nyb2xsYmFycyBkaWRuJ3QgZ2V0IGNhbGxlZC4KQEAgLTUz
NSwxMiArNTM1LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAK
IAogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IGNsaWVudFdp
ZHRoID0gdmlzaWJsZVdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8
TGF5b3V0VW5pdD4obWF4PExheW91dFVuaXQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92
ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwotICAgICAgICBMYXlvdXRSZWN0IG9sZFJlY3QobV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Ci0gICAgICAgIExheW91dFJlY3QgaEJh
clJlY3QgPSBMYXlvdXRSZWN0KDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudFdpZHRo
ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGgg
LSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBJbnRS
ZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgICAg
IEludFJlY3QgaEJhclJlY3QoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCkgOiAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+aGVpZ2h0KCkpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVj
dChoQmFyUmVjdCk7CiAgICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRS
ZWN0ICE9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKQEAgLTU1NiwxMiArNTU2LDEyIEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKIAogICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVp
Z2h0KCk7Ci0gICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4
PExheW91dFVuaXQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBX
aGVuUGFnaW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5Q
YWdlcygpKSwgMSk7Ci0gICAgICAgIExheW91dFJlY3Qgb2xkUmVjdChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSk7Ci0gICAgICAgIExheW91dFJlY3QgdkJhclJlY3QgPSBMYXlvdXRS
ZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAg
ICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+
KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCks
IGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7
CisgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KSk7CisgICAgICAgIEludFJlY3QgdkJhclJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxi
YXItPndpZHRoKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRGcmFtZVJlY3QodkJhclJlY3QpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHBy
ZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKICAg
ICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKQEAgLTYwMyw4ICs2
MDMsOCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnJlY3RUb0NvcHlPblNjcm9sbCgpCiB7CiAgICAg
SW50UmVjdCBzY3JvbGxWaWV3UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVj
dCgwLCAwLCB2aXNpYmxlV2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSk7CiAgICAgaWYgKGhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoID0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWhhc0xheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkgPyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMDsKLSAgICAgICAgTGF5
b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiAhaGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpID8gaG9yaXpvbnRhbFNjcm9s
bGJhcigpLT5oZWlnaHQoKSA6IDA7CisgICAgICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
ID0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSkgPyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMDsKKyAgICAgICAgaW50IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFoYXNMYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdo
dCgpIDogMDsKICAgICAgICAgCiAgICAgICAgIHNjcm9sbFZpZXdSZWN0LnNldFdpZHRoKHNjcm9s
bFZpZXdSZWN0LndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKICAgICAgICAgc2Ny
b2xsVmlld1JlY3Quc2V0SGVpZ2h0KHNjcm9sbFZpZXdSZWN0LmhlaWdodCgpIC0gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCk7CkBAIC02MzAsOSArNjMwLDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojpz
Y3JvbGxDb250ZW50cyhjb25zdCBJbgogICAgIGlmIChtX2RyYXdQYW5TY3JvbGxJY29uKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiB0aGUgcGFuIGljb24gaXMgYnJva2VuIHdoZW4gYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgaXMgb24sIHNpbmNlIGl0IHdpbGwgZHJhdyB1bmRlciB0aGUgY29tcG9zaXRp
bmcgbGF5ZXJzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDc4MzcKLSAgICAgICAgTGF5b3V0VW5pdCBwYW5JY29uRGlydHlTcXVhcmVTaXplTGVu
Z3RoID0gMiAqIChwYW5JY29uU2l6ZUxlbmd0aCArIG1heChhYnMoc2Nyb2xsRGVsdGEud2lkdGgo
KSksIGFicyhzY3JvbGxEZWx0YS5oZWlnaHQoKSkpKTsgLy8gV2Ugb25seSB3YW50IHRvIHJlcGFp
bnQgd2hhdCdzIG5lY2Vzc2FyeQotICAgICAgICBMYXlvdXRQb2ludCBwYW5JY29uRGlydHlTcXVh
cmVMb2NhdGlvbiA9IExheW91dFBvaW50KG1fcGFuU2Nyb2xsSWNvblBvaW50LngoKSAtIChwYW5J
Y29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMiksIG1fcGFuU2Nyb2xsSWNvblBvaW50LnkoKSAt
IChwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMikpOwotICAgICAgICBMYXlvdXRSZWN0
IHBhblNjcm9sbEljb25EaXJ0eVJlY3QgPSBMYXlvdXRSZWN0KHBhbkljb25EaXJ0eVNxdWFyZUxv
Y2F0aW9uICwgTGF5b3V0U2l6ZShwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoLCBwYW5JY29u
RGlydHlTcXVhcmVTaXplTGVuZ3RoKSk7CisgICAgICAgIGludCBwYW5JY29uRGlydHlTcXVhcmVT
aXplTGVuZ3RoID0gMiAqIChwYW5JY29uU2l6ZUxlbmd0aCArIG1heChhYnMoc2Nyb2xsRGVsdGEu
d2lkdGgoKSksIGFicyhzY3JvbGxEZWx0YS5oZWlnaHQoKSkpKTsgLy8gV2Ugb25seSB3YW50IHRv
IHJlcGFpbnQgd2hhdCdzIG5lY2Vzc2FyeQorICAgICAgICBJbnRQb2ludCBwYW5JY29uRGlydHlT
cXVhcmVMb2NhdGlvbiA9IEludFBvaW50KG1fcGFuU2Nyb2xsSWNvblBvaW50LngoKSAtIChwYW5J
Y29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMiksIG1fcGFuU2Nyb2xsSWNvblBvaW50LnkoKSAt
IChwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMikpOworICAgICAgICBJbnRSZWN0IHBh
blNjcm9sbEljb25EaXJ0eVJlY3QgPSBJbnRSZWN0KHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9u
LCBJbnRTaXplKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgsIHBhbkljb25EaXJ0eVNxdWFy
ZVNpemVMZW5ndGgpKTsKICAgICAgICAgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdC5pbnRlcnNlY3Qo
Y2xpcFJlY3QpOwogICAgICAgICBob3N0V2luZG93KCktPmludmFsaWRhdGVDb250ZW50c0FuZFdp
bmRvdyhwYW5TY3JvbGxJY29uRGlydHlSZWN0LCBmYWxzZSAvKmltbWVkaWF0ZSovKTsKICAgICB9
CkBAIC02NDgsOCArNjQ4LDggQEAgdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyhjb25z
dCBJbgogICAgIH0KIAogICAgIC8vIEludmFsaWRhdGUgdGhlIG92ZXJoYW5nIGFyZWFzIGlmIHRo
ZXkgYXJlIHZpc2libGUuCi0gICAgTGF5b3V0UmVjdCBob3Jpem9udGFsT3ZlcmhhbmdSZWN0Owot
ICAgIExheW91dFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CisgICAgSW50UmVjdCBob3Jpem9u
dGFsT3ZlcmhhbmdSZWN0OworICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CiAgICAg
Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKGhvcml6b250YWxPdmVyaGFuZ1JlY3Qs
IHZlcnRpY2FsT3ZlcmhhbmdSZWN0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIG92ZXJoYW5nTGF5ZXIgPSBsYXllckZvck92ZXJoYW5nQXJlYXMoKSkg
ewpAQCAtNzIyLDcgKzcyMiw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5k
b3coY28KIAogSW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFJl
Y3QmIHdpbmRvd1JlY3QpIGNvbnN0CiB7Ci0gICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAgICBJbnRSZWN0IHZpZXdSZWN0
ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1JlY3QpOwogICAgIHZpZXdSZWN0
Lm1vdmUoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIHJldHVybiB2aWV3UmVjdDsKIH0KQEAgLTc0Mywx
MiArNzQzLDEyIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVudHNUb1NjcmVlbihjb24KICAg
ICByZXR1cm4gaG9zdFdpbmRvdygpLT53aW5kb3dUb1NjcmVlbihjb250ZW50c1RvV2luZG93KHJl
Y3QpKTsKIH0KIAotTGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6c2NyZWVuVG9Db250ZW50cyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJbnRQb2ludCBTY3JvbGxWaWV3OjpzY3JlZW5Ub0Nv
bnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAocGxhdGZvcm1X
aWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhwb2ludCk7
CiAgICAgaWYgKCFob3N0V2luZG93KCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOwor
ICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKICAgICByZXR1cm4gd2luZG93VG9Db250ZW50cyho
b3N0V2luZG93KCktPnNjcmVlblRvV2luZG93KHBvaW50KSk7CiB9CiAKQEAgLTgxMiw3ICs4MTIs
NyBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQoCiAgICAgaWYgKHBs
YXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgTGF5b3V0UG9pbnQgdmll
d1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICBJ
bnRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9p
bnQpOwogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQogICAgICAgICByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYm
IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCkBA
IC04NTAsOSArODUwLDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpnZXN0dXJlRXZlbnQoY29uc3QgUGxh
dAogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IExheW91
dFJlY3QmIG5ld1JlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KQogewotICAgIExheW91dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwor
ICAgIEludFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIAogICAgIGlmIChuZXdSZWN0
ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKQEAgLTg4MywxNCArODgzLDE0IEBAIHN0YXRp
YyB2b2lkIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoR3JhcGgKICAgICBpZiAoIWdyYXBoaWNzTGF5
ZXIgfHwgIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogICAgIGdyYXBoaWNzTGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBMYXlvdXRSZWN0IHNjcm9sbGJhclJlY3QgPSBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdCA9IHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7CiAgICAgZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oc2Nyb2xsYmFy
UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoc2Nyb2xsYmFyUmVjdC5zaXplKCkgIT0gZ3JhcGhp
Y3NMYXllci0+c2l6ZSgpKQogICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKICAgICBncmFwaGljc0xheWVyLT5zZXRTaXplKHNjcm9sbGJhclJlY3Quc2l6ZSgpKTsKIH0K
IAotc3RhdGljIHZvaWQgcG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBjb3JuZXJSZWN0KQorc3RhdGljIHZvaWQg
cG9zaXRpb25TY3JvbGxDb3JuZXJMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBj
b25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIGlmICghZ3JhcGhpY3NMYXllcikKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTEyLDkgKzkxMiw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6cG9zaXRp
b25TY3JvbGxiYXJMYXllcnMKICNlbmRpZgogfQogCi12b2lkIFNjcm9sbFZpZXc6OnJlcGFpbnRD
b250ZW50UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGJvb2wgbm93KQordm9pZCBT
Y3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByZWN0LCBi
b29sIG5vdykKIHsKLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IHJlY3Q7CisgICAgSW50UmVj
dCBwYWludFJlY3QgPSByZWN0OwogICAgIGlmIChjbGlwc1JlcGFpbnRzKCkgJiYgIXBhaW50c0Vu
dGlyZUNvbnRlbnRzKCkpCiAgICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QodmlzaWJsZUNvbnRl
bnRSZWN0KCkpOwogICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQpAQCAtOTMwLDI1ICs5MzAs
MjUgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZXBhaW50Q29udGVudFJlY3RhbmdsZQogICAgICAgICBo
b3N0V2luZG93KCktPmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb250ZW50c1RvV2luZG93
KHBhaW50UmVjdCksIG5vdyAvKmltbWVkaWF0ZSovKTsKIH0KIAotTGF5b3V0UmVjdCBTY3JvbGxW
aWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK0ludFJlY3QgU2Nyb2xsVmlldzo6c2Nyb2xs
Q29ybmVyUmVjdCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0UmVjdCBjb3JuZXJSZWN0OworICAgIElu
dFJlY3QgY29ybmVyUmVjdDsKIAogICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAg
ICAgICByZXR1cm4gY29ybmVyUmVjdDsKIAogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIg
JiYgd2lkdGgoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSA+IDApIHsKLSAgICAg
ICAgY29ybmVyUmVjdC51bml0ZShMYXlvdXRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+d2lk
dGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoKCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKSk7CisgICAgICAgIGNvcm5lclJlY3QudW5pdGUoSW50UmVjdChtX2hvcml6b250YWxT
Y3JvbGxiYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln
aHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT53aWR0aCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSkpOwogICAgIH0KIAogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIGhl
aWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgIGNv
cm5lclJlY3QudW5pdGUoTGF5b3V0UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKKyAg
ICAgICAgY29ybmVyUmVjdC51bml0ZShJbnRSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gY29ybmVyUmVjdDsKQEAgLTk2OSwxNyArOTY5LDE3IEBAIHZvaWQg
U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsQ29ybmVyKCkKIHsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGNvcm5lclJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkKIHsKICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIodGhpcywgY29udGV4
dCwgY29ybmVyUmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6aW52YWxpZGF0ZVNjcm9sbENv
cm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6aW52YWxp
ZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpbnZhbGlk
YXRlUmVjdChyZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwYWludFNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQordm9pZCBTY3Jv
bGxWaWV3OjpwYWludFNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMDA3LDcgKzEwMDcsNyBAQCB2b2lkIFNjcm9s
bFZpZXc6OnBhaW50UGFuU2Nyb2xsSWNvbihHcmFwCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHBh
blNjcm9sbEljb24sIENvbG9yU3BhY2VEZXZpY2VSR0IsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGxhdGZvcm1X
aWRnZXQoKSkgewogICAgICAgICBXaWRnZXQ6OnBhaW50KGNvbnRleHQsIHJlY3QpOwpAQCAtMTAy
MiwxMyArMTAyMiwxMyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGFueSBvdmVybGF5IHNjcm9sbGJhcnMgYXMgd2UgcGFp
bnQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gdHJ1ZS4KICAgICBtX2NvbnRhaW5zU2Nyb2xsYWJsZUFy
ZWFXaXRoT3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKIAotICAgIExheW91dFJlY3QgY2xpcFJl
Y3QgPSBmcmFtZVJlY3QoKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0gZnJhbWVSZWN0KCk7CiAg
ICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3Zl
cmxheVNjcm9sbGJhcigpKQogICAgICAgICBjbGlwUmVjdC5zZXRXaWR0aChjbGlwUmVjdC53aWR0
aCgpIC0gdmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSk7CiAgICAgaWYgKGhvcml6b250YWxT
Y3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkKICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGNsaXBSZWN0LmhlaWdodCgpIC0gaG9yaXpv
bnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSk7CiAKLSAgICBMYXlvdXRSZWN0IGRvY3VtZW50RGly
dHlSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKICAg
ICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogCiAgICAgaWYgKCFkb2N1
bWVudERpcnR5UmVjdC5pc0VtcHR5KCkpIHsKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIHZvaWQgU2Ny
b2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBOb3cgcGFpbnQgdGhlIHNj
cm9sbGJhcnMuCiAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChtX2hvcml6b250
YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcikpIHsKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICAgICAgTGF5b3V0UmVj
dCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3
RGlydHlSZWN0ID0gcmVjdDsKICAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3Qo
ZnJhbWVSZWN0KCkpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwogICAg
ICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmVCeSgtbG9jYXRpb24oKSk7CkBAIC0xMDcwLDI1
ICsxMDcwLDI1IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAg
ICAgICAgcGFpbnRQYW5TY3JvbGxJY29uKGNvbnRleHQpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6
OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyhMYXlvdXRSZWN0JiBob3Jpem9udGFs
T3ZlcmhhbmdSZWN0LCBMYXlvdXRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nUmVjdCkKK3ZvaWQgU2Ny
b2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nKEludFJlY3QmIGhvcml6
b250YWxPdmVyaGFuZ1JlY3QsIEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdSZWN0KQogewotICAg
IExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigp
ICYmICF2ZXJ0aWNhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICF2ZXJ0aWNh
bFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgPyB2ZXJ0aWNhbFNj
cm9sbGJhcigpLT53aWR0aCgpIDogMDsKLSAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFy
KCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhl
aWdodCgpIDogMDsKIAotICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9z
aXRpb24oKS55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7CisgICAgaW50IHBoeXNpY2FsU2Nyb2xs
WSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOwogICAgIGlmIChw
aHlzaWNhbFNjcm9sbFkgPCAwKSB7CiAgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3QgPSBm
cmFtZVJlY3QoKTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoLXBo
eXNpY2FsU2Nyb2xsWSk7CiAgICAgfSBlbHNlIGlmIChjb250ZW50c0hlaWdodCgpICYmIHBoeXNp
Y2FsU2Nyb2xsWSA+IGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpIHsKLSAgICAg
ICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBwaHlzaWNhbFNjcm9sbFkgLSAoY29udGVudHNIZWlnaHQo
KSAtIHZpc2libGVIZWlnaHQoKSk7CisgICAgICAgIGludCBoZWlnaHQgPSBwaHlzaWNhbFNjcm9s
bFkgLSAoY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7CiAgICAgICAgIGhvcml6
b250YWxPdmVyaGFuZ1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJo
YW5nUmVjdC5zZXRZKGZyYW1lUmVjdCgpLm1heFkoKSAtIGhlaWdodCAtIGhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldEhlaWdodCho
ZWlnaHQpOwogICAgIH0KIAotICAgIExheW91dFVuaXQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xs
UG9zaXRpb24oKS54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCk7CisgICAgaW50IHBoeXNpY2FsU2Ny
b2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOwogICAgIGlm
IChwaHlzaWNhbFNjcm9sbFggPCAwKSB7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNl
dFdpZHRoKC1waHlzaWNhbFNjcm9sbFgpOwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5z
ZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0Lmhl
aWdodCgpKTsKQEAgLTEwOTgsNyArMTA5OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRl
T3ZlcmhhbmdBcmVhc0YKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdmVydGljYWxPdmVyaGFu
Z1JlY3Quc2V0WShmcmFtZVJlY3QoKS55KCkpOwogICAgIH0gZWxzZSBpZiAoY29udGVudHNXaWR0
aCgpICYmIHBoeXNpY2FsU2Nyb2xsWCA+IGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KSB7Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGggPSBwaHlzaWNhbFNjcm9sbFggLSAoY29udGVu
dHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpOworICAgICAgICBpbnQgd2lkdGggPSBwaHlzaWNh
bFNjcm9sbFggLSAoY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpOwogICAgICAgICB2
ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIHZlcnRpY2FsT3Zl
cmhhbmdSZWN0LnNldEhlaWdodChmcmFtZVJlY3QoKS5oZWlnaHQoKSAtIGhvcml6b250YWxPdmVy
aGFuZ1JlY3QuaGVpZ2h0KCkpOwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZy
YW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CkBAIC0x
MTA5LDE1ICsxMTA5LDE1IEBAIHZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVh
c0YKICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgdmVydGljYWxPdmVyaGFuZ1JlY3QsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdCwgY29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVyaGFuZ1JlY3QsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKIHsKICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRPdmVyaGFu
Z0FyZWFzKHRoaXMsIGNvbnRleHQsIGhvcml6b250YWxPdmVyaGFuZ1JlY3QsIHZlcnRpY2FsT3Zl
cmhhbmdSZWN0LCBkaXJ0eVJlY3QpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZUFu
ZFBhaW50T3ZlcmhhbmdBcmVhcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlQW5kUGFpbnRPdmVy
aGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KQogewotICAgIExheW91dFJlY3QgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdDsKLSAgICBMYXlv
dXRSZWN0IHZlcnRpY2FsT3ZlcmhhbmdSZWN0OworICAgIEludFJlY3QgaG9yaXpvbnRhbE92ZXJo
YW5nUmVjdDsKKyAgICBJbnRSZWN0IHZlcnRpY2FsT3ZlcmhhbmdSZWN0OwogICAgIGNhbGN1bGF0
ZU92ZXJoYW5nQXJlYXNGb3JQYWludGluZyhob3Jpem9udGFsT3ZlcmhhbmdSZWN0LCB2ZXJ0aWNh
bE92ZXJoYW5nUmVjdCk7CiAKICAgICBpZiAoZGlydHlSZWN0LmludGVyc2VjdHMoaG9yaXpvbnRh
bE92ZXJoYW5nUmVjdCkgfHwgZGlydHlSZWN0LmludGVyc2VjdHModmVydGljYWxPdmVyaGFuZ1Jl
Y3QpKQpAQCAtMTEyOSwxOSArMTEyOSwxOSBAQCBib29sIFNjcm9sbFZpZXc6OmlzUG9pbnRJblNj
cm9sbGJhckNvcm5lCiAgICAgaWYgKCFzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIExheW91dFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0g
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKIAogICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xs
YmFyWU1pbiA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpOwotICAgICAg
ICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJZTWF4ID0gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgp
LmhlaWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJYTWluID0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCkgKyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCk7CisgICAgICAgIGludCBob3Jpem9udGFsU2Nyb2xs
YmFyWU1pbiA9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpOworICAgICAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhcllNYXggPSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZy
YW1lUmVjdCgpLnkoKSArIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuaGVpZ2h0
KCk7CisgICAgICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFyWE1pbiA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpICsgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKS53aWR0aCgpOwogCiAgICAgICAgIHJldHVybiB2aWV3UG9pbnQueSgpID4gaG9yaXpvbnRh
bFNjcm9sbGJhcllNaW4gJiYgdmlld1BvaW50LnkoKSA8IGhvcml6b250YWxTY3JvbGxiYXJZTWF4
ICYmIHZpZXdQb2ludC54KCkgPiBob3Jpem9udGFsU2Nyb2xsYmFyWE1pbjsKICAgICB9CiAKLSAg
ICBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyWE1pbiA9IG1fdmVydGljYWxTY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLngoKTsKLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyWE1heCA9
IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSArIG1fdmVydGljYWxTY3JvbGxi
YXItPmZyYW1lUmVjdCgpLndpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJh
cllNaW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkgKyBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5oZWlnaHQoKTsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJYTWluID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpOworICAgIGludCB2
ZXJ0aWNhbFNjcm9sbGJhclhNYXggPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54
KCkgKyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0aCgpOworICAgIGludCB2
ZXJ0aWNhbFNjcm9sbGJhcllNaW4gPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55
KCkgKyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5oZWlnaHQoKTsKICAgICAKICAg
ICByZXR1cm4gdmlld1BvaW50LngoKSA+IHZlcnRpY2FsU2Nyb2xsYmFyWE1pbiAmJiB2aWV3UG9p
bnQueCgpIDwgdmVydGljYWxTY3JvbGxiYXJYTWF4ICYmIHZpZXdQb2ludC55KCkgPiB2ZXJ0aWNh
bFNjcm9sbGJhcllNaW47CiB9CkBAIC0xMTUyLDM0ICsxMTUyLDM0IEBAIGJvb2wgU2Nyb2xsVmll
dzo6c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgKICAgICAgICAgfHwgKG1fdmVydGljYWxTY3JvbGxi
YXIgJiYgaGVpZ2h0KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSA+IDApOwogfQog
Ci1MYXlvdXRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdAorSW50UmVjdCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIGxv
Y2FsUmVjdCkgY29uc3QKIHsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVk
IHdpdGhpbiB1cwotICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGxvY2FsUmVjdDsKKyAgICBJbnRS
ZWN0IG5ld1JlY3QgPSBsb2NhbFJlY3Q7CiAgICAgbmV3UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UmVjdDsKIH0KIAotTGF5b3V0UmVjdCBTY3JvbGxW
aWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CitJbnRSZWN0
IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsK
LSAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBwYXJlbnRSZWN0OworICAgIEludFJlY3QgbmV3UmVj
dCA9IHBhcmVudFJlY3Q7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3
aXRoaW4gdXMKICAgICBuZXdSZWN0Lm1vdmVCeSgtc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAg
ICByZXR1cm4gbmV3UmVjdDsKIH0KIAogLy8gRklYTUU6IHRlc3QgdGhlc2Ugb24gd2luZG93cwot
TGF5b3V0UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IGxvY2FsUG9pbnQpIGNvbnN0CiB7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zv
cm1lZCB3aXRoaW4gdXMKLSAgICBMYXlvdXRQb2ludCBuZXdQb2ludCA9IGxvY2FsUG9pbnQ7Cisg
ICAgSW50UG9pbnQgbmV3UG9pbnQgPSBsb2NhbFBvaW50OwogICAgIG5ld1BvaW50Lm1vdmVCeShz
Y3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdQb2ludDsKIH0KIAotTGF5b3V0
UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0CitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3QKIHsKLSAgICBMYXlvdXRQb2ludCBuZXdQb2ludCA9IHBhcmVudFBvaW50
OworICAgIEludFBvaW50IG5ld1BvaW50ID0gcGFyZW50UG9pbnQ7CiAgICAgLy8gU2Nyb2xsYmFy
cyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKICAgICBuZXdQb2ludC5tb3ZlQnkoLXNj
cm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1BvaW50OwpAQCAtMTI0Miw3ICsx
MjQyLDcgQEAgYm9vbCBTY3JvbGxWaWV3Ojppc09mZnNjcmVlbigpIGNvbnN0CiB9CiAKIAotdm9p
ZCBTY3JvbGxWaWV3OjphZGRQYW5TY3JvbGxJY29uKGNvbnN0IExheW91dFBvaW50JiBpY29uUG9z
aXRpb24pCit2b2lkIFNjcm9sbFZpZXc6OmFkZFBhblNjcm9sbEljb24oY29uc3QgSW50UG9pbnQm
IGljb25Qb3NpdGlvbikKIHsKICAgICBpZiAoIWhvc3RXaW5kb3coKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM0NiwxMiArMTM0NiwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29u
dGVudHNTaXplCiB7CiB9CiAKLUludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1Rv
U2NyZWVuKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CitJbnRSZWN0IFNjcm9sbFZpZXc6
OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewog
ICAgIHJldHVybiByZWN0OwogfQogCi1MYXlvdXRQb2ludCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNj
cmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UG9pbnQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcG9pbnQ7CiB9CkBAIC0xMzY1LDcgKzEzNjUsNyBAQCBib29s
IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsKFNjcm9sbERpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25z
dCBMYXlvdXRSZWN0JiwgYm9vbCAvKm5vdyovKQordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJl
cGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIC8qbm93Ki8pCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDk5NTA4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsOCArMTQ2LDggQEAgcHVibGljOgogICAgIC8vIHdoaWNoIHVzdWFsbHkgd2lsbCBo
YXBwZW4gd2hlbiBwYW5uaW5nLCBwaW5jaGluZyBhbmQgcm90YXRpb24gZW5kcywgb3Igd2hlbiBz
Y2FsZSBvciBwb3NpdGlvbiBhcmUgY2hhbmdlZCBtYW51YWxseS4KICAgICB2aXJ0dWFsIEludFJl
Y3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMgPSBmYWxzZSkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IElu
dFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0g
dmlzaWJsZUNvbnRlbnRSZWN0OyB9Ci0gICAgTGF5b3V0VW5pdCB2aXNpYmxlV2lkdGgoKSBjb25z
dCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5p
dCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVp
Z2h0KCk7IH0KKyAgICBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZUNv
bnRlbnRSZWN0KCkud2lkdGgoKTsgfQorICAgIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7IH0KIAogICAgIC8vIEZ1bmN0aW9u
cyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBzaXplIHdlYmtpdCBzaG91bGQgdXNlIHRvIGxheW91
dCB0aGUgY29udGVudHMuIEJ5IGRlZmF1bHQgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgdmlzaWJs
ZQogICAgIC8vIGNvbnRlbnQgc2l6ZS4gRXhwbGljaXRseSBzZXR0aW5nIGEgbGF5b3V0IHNpemUg
dmFsdWUgd2lsbCBjYXVzZSB3ZWJraXQgdG8gbGF5b3V0IHRoZSBjb250ZW50cyB1c2luZyB0aGlz
IHNpemUgaW5zdGVhZC4KQEAgLTI3OSw3ICsyNzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNQb2ludEluU2Nyb2xsYmFyQ29ybmVyKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmly
dHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExh
eW91dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBz
Y3JvbGxDb3JuZXJSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29y
bmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpOwogCiAgICAg
dmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNiBAQAogI2lmbmRlZiBTY3JvbGxhYmxlQXJlYV9oCiAjZGVmaW5lIFNjcm9sbGFibGVBcmVh
X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC05Miw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdCA9IDA7CiAgICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgPSAwOwogICAgIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbENvcm5lcihjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2tt
YXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KIApAQCAtMTI3LDggKzEyNiw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBJbnRQb2ludCgpOyB9CiAgICAgdmlydHVh
bCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gSW50UG9pbnQoKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxl
Q29udGVudFJlY3QoYm9vbCAvKmluY2x1ZGVTY3JvbGxiYXJzKi8gPSBmYWxzZSkgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZVdpZHRoKCkgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCB2aXNpYmxl
SGVpZ2h0KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9CiAgICAgdmlydHVhbCBJbnRT
aXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IEludFNpemUoKTsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBJbnRQb2ludCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5NywxNyArMTI5
NywxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uCiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIExheW91dFBvaW50IGN1cnJlbnRN
b3VzZVBvc2l0aW9uID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlv
bigpOworICAgIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwogICAgIAogICAgIC8vIFdlIG5lZWQgdG8g
Y2hlY2sgaWYgdGhlIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cu
IFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5j
b2hlcmVudAotICAgIHN0YXRpYyBMYXlvdXRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247Cisg
ICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKICAgICBpZiAoY3VycmVu
dE1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBjdXJyZW50TW91c2VQb3NpdGlvbi55KCkgPCAwKQog
ICAgICAgICBjdXJyZW50TW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKICAg
ICBlbHNlCiAgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGN1cnJlbnRNb3VzZVBvc2l0
aW9uOwogCi0gICAgTGF5b3V0VW5pdCB4RGVsdGEgPSBjdXJyZW50TW91c2VQb3NpdGlvbi54KCkg
LSBzb3VyY2VQb2ludC54KCk7Ci0gICAgTGF5b3V0VW5pdCB5RGVsdGEgPSBjdXJyZW50TW91c2VQ
b3NpdGlvbi55KCkgLSBzb3VyY2VQb2ludC55KCk7CisgICAgaW50IHhEZWx0YSA9IGN1cnJlbnRN
b3VzZVBvc2l0aW9uLngoKSAtIHNvdXJjZVBvaW50LngoKTsKKyAgICBpbnQgeURlbHRhID0gY3Vy
cmVudE1vdXNlUG9zaXRpb24ueSgpIC0gc291cmNlUG9pbnQueSgpOwogCiAgICAgaWYgKGFicyh4
RGVsdGEpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVy
IHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCiAgICAgICAgIHhEZWx0YSA9IDA7CkBAIC0x
MzQ1LDcgKzEzNDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KExh
CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpKSB7CiAgICAg
ICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQg
Y2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CiAgICAgICAgIC8v
IGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50
IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCktPnZpZXcoKS0+
ZnJhbWVWaWV3KCktPnNjcm9sbEJ5KExheW91dFNpemUoeERlbHRhLCB5RGVsdGEpKTsKKyAgICAg
ICAgcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZSh4RGVs
dGEsIHlEZWx0YSkpOwogICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUg
d2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJF
bGVtZW50PyAKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI4MjM3CiAgICAgfQpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsVG9PZmZzZXQoTGF5b3V0VQogICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oTGF5b3V0UG9pbnQoeCwgeSkpOwogfQogCi12b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxUbyhMYXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwogICAgIGlmICghYm94KQpAQCAtMTM4NSw3ICsxMzg1LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c2Nyb2xsVG8oTGF5b3V0VW5pdCB4LAogICAgIC8vIGNvbXBsaWNhdGVkIChzaW5jZSBp
dCB3aWxsIGludm9sdmUgdGVzdGluZyB3aGV0aGVyIG91ciBsYXllcgogICAgIC8vIGlzIGVpdGhl
ciBvY2NsdWRlZCBieSBhbm90aGVyIGxheWVyIG9yIGNsaXBwZWQgYnkgYW4gZW5jbG9zaW5nCiAg
ICAgLy8gbGF5ZXIgb3IgY29udGFpbnMgZml4ZWQgYmFja2dyb3VuZHMsIGV0Yy4pLgotICAgIExh
eW91dFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gTGF5b3V0U2l6ZSh4IC0gc2Nyb2xsT3JpZ2luKCku
eCgpLCB5IC0gc2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAgICBJbnRTaXplIG5ld1Njcm9sbE9mZnNl
dCA9IEludFNpemUoeCAtIHNjcm9sbE9yaWdpbigpLngoKSwgeSAtIHNjcm9sbE9yaWdpbigpLnko
KSk7CiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09IG5ld1Njcm9sbE9mZnNldCkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fc2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0OwpAQCAtMTUwMSw3
ICsxNTAxLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjbwogICAg
ICAgICAgICAgICAgIHhPZmZzZXQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgbWluKGZyYW1lVmlldy0+
Y29udGVudHNXaWR0aCgpLCB4T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgeU9mZnNldCA9IG1h
eDxMYXlvdXRVbml0PigwLCBtaW4oZnJhbWVWaWV3LT5jb250ZW50c0hlaWdodCgpLCB5T2Zmc2V0
KSk7CiAKLSAgICAgICAgICAgICAgICBmcmFtZVZpZXctPnNldFNjcm9sbFBvc2l0aW9uKExheW91
dFBvaW50KHhPZmZzZXQsIHlPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZVZpZXctPnNl
dFNjcm9sbFBvc2l0aW9uKEludFBvaW50KHhPZmZzZXQsIHlPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICBwYXJlbnRMYXllciA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgp
LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICAgICAgICAgIG5ld1JlY3Qu
c2V0WChyZWN0LngoKSAtIGZyYW1lVmlldy0+c2Nyb2xsWCgpICsgZnJhbWVWaWV3LT54KCkpOwog
ICAgICAgICAgICAgICAgIG5ld1JlY3Quc2V0WShyZWN0LnkoKSAtIGZyYW1lVmlldy0+c2Nyb2xs
WSgpICsgZnJhbWVWaWV3LT55KCkpOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6YXV0b3Njcm9sbCgpCiAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT51cGRhdGVTZWxl
Y3Rpb25Gb3JNb3VzZURyYWcoKTsKICNlbmRpZgogCi0gICAgTGF5b3V0UG9pbnQgY3VycmVudERv
Y3VtZW50UG9zaXRpb24gPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpKTsKKyAgICBJbnRQb2ludCBjdXJyZW50
RG9jdW1lbnRQb3NpdGlvbiA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkpOwogICAgIHNjcm9sbFJlY3RUb1Zp
c2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAx
KSksIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKIH0KIApAQCAtMTY4NywxOCArMTY4NywxOCBAQCB2b2lk
IFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFy
IDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNz
YXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAotTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgY29uc3QKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9
ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hCYXIgOiBtX3ZCYXIp
LmdldCgpOwogICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAt
IHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpz
ZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCkKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIHNjcm9s
bFRvKG9mZnNldC54KCksIG9mZnNldC55KCkpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckxheWVy
OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK2ludCBSZW5kZXJM
YXllcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAg
aWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQogICAg
ICAgICByZXR1cm4gc2Nyb2xsWE9mZnNldCgpOwpAQCAtMTcwNywxNyArMTcwNywxNyBAQCBMYXlv
dXRVbml0IFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbihTCiAgICAgcmV0dXJuIDA7CiB9CiAK
LUxheW91dFBvaW50IFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CitJbnRQb2lu
dCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBzY3Jv
bGxPcmlnaW4oKSArIG1fc2Nyb2xsT2Zmc2V0OwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJMYXll
cjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK0ludFBvaW50IFJlbmRlckxheWVyOjpt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBzY3JvbGxPcmlnaW4o
KTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0CitJbnRQb2ludCBSZW5kZXJMYXllcjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogbV9zY3JvbGxTaXplIG1heSBub3QgYmUgdXAtdG8tZGF0ZSBp
ZiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSBpcyB0cnVlLgogICAgIHJldHVybiBzY3JvbGxPcmln
aW4oKSArIG1fc2Nyb2xsU2l6ZSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5zaXplKCk7CkBA
IC0xNzM3LDEyICsxNzM3LDEyIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50
UmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCBtX2xheWVyU2l6ZS5oZWln
aHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpKSk7CiB9CiAKLUxheW91dFNpemUgUmVu
ZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om92
ZXJoYW5nQW1vdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOworICAgIHJl
dHVybiBJbnRTaXplKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZENvbXBsZXRlUnViYmVy
QmFuZChjb25zdCBMYXlvdXRTaXplJikgY29uc3QKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZENvbXBs
ZXRlUnViYmVyQmFuZChjb25zdCBJbnRTaXplJikgY29uc3QKIHsKIH0KIApAQCAtMTc1Miw3ICsx
NzUyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBw
YWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwogfQogCi1zdGF0aWMg
TGF5b3V0UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgTGF5
b3V0UmVjdCYgYm91bmRzKQorc3RhdGljIEludFJlY3QgY29ybmVyUmVjdChjb25zdCBSZW5kZXJM
YXllciogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKIHsKICAgICBpbnQgaG9yaXpvbnRh
bFRoaWNrbmVzczsKICAgICBpbnQgdmVydGljYWxUaGlja25lc3M7CkBAIC0xNzcxLDEyICsxNzcx
LDEyIEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNvcm5lclJlY3QoY29uc3QgUmVuZGUKICAgICAgICAg
aG9yaXpvbnRhbFRoaWNrbmVzcyA9IGxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgp
OwogICAgICAgICB2ZXJ0aWNhbFRoaWNrbmVzcyA9IGxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCktPmhlaWdodCgpOwogICAgIH0KLSAgICByZXR1cm4gTGF5b3V0UmVjdChib3VuZHMubWF4WCgp
IC0gaG9yaXpvbnRhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJSaWdodFdpZHRoKCksIAotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5tYXhZKCkgLSB2
ZXJ0aWNhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0
b21XaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxUaGlja25lc3MsIHZl
cnRpY2FsVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gSW50UmVjdChib3VuZHMubWF4WCgpIC0gaG9y
aXpvbnRhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdo
dFdpZHRoKCksIAorICAgICAgICAgICAgICAgICAgIGJvdW5kcy5tYXhZKCkgLSB2ZXJ0aWNhbFRo
aWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgp
LAorICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxUaGlja25lc3MsIHZlcnRpY2FsVGhpY2tu
ZXNzKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNv
bnN0CitJbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKIHsKICAg
ICAvLyBXZSBoYXZlIGEgc2Nyb2xsYmFyIGNvcm5lciB3aGVuIGEgc2Nyb2xsYmFyIGlzIHZpc2li
bGUgYW5kIG5vdCBmaWxsaW5nIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZSBib3guCiAgICAgLy8g
VGhpcyBoYXBwZW5zIHdoZW46CkBAIC0xNzg3LDIzICsxNzg3LDIzIEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QKICAgICBib29sIGhhc1Jlc2l6ZXIgPSByZW5kZXJl
cigpLT5zdHlsZSgpLT5yZXNpemUoKSAhPSBSRVNJWkVfTk9ORTsKICAgICBpZiAoKGhhc0hvcml6
b250YWxCYXIgJiYgaGFzVmVydGljYWxCYXIpIHx8IChoYXNSZXNpemVyICYmIChoYXNIb3Jpem9u
dGFsQmFyIHx8IGhhc1ZlcnRpY2FsQmFyKSkpCiAgICAgICAgIHJldHVybiBjb3JuZXJSZWN0KHRo
aXMsIHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpOwotICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAotc3RhdGljIExheW91dFJlY3QgcmVzaXpl
ckNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBi
b3VuZHMpCitzdGF0aWMgSW50UmVjdCByZXNpemVyQ29ybmVyUmVjdChjb25zdCBSZW5kZXJMYXll
ciogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKIHsKICAgICBBU1NFUlQobGF5ZXItPnJl
bmRlcmVyKCktPmlzQm94KCkpOwogICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgcmV0dXJuIGNvcm5lclJlY3QobGF5ZXIsIGJv
dW5kcyk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lckFuZFJlc2l6
ZXJSZWN0KCkgY29uc3QKK0ludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lckFuZFJlc2l6
ZXJSZWN0KCkgY29uc3QKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAg
IGlmICghYm94KQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIExheW91dFJlY3Qg
c2Nyb2xsQ29ybmVyQW5kUmVzaXplciA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lckFuZFJlc2l6ZXIgPSBzY3Jv
bGxDb3JuZXJSZWN0KCk7CiAgICAgaWYgKHNjcm9sbENvcm5lckFuZFJlc2l6ZXIuaXNFbXB0eSgp
KQogICAgICAgICBzY3JvbGxDb3JuZXJBbmRSZXNpemVyID0gcmVzaXplckNvcm5lclJlY3QodGhp
cywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOwogICAgIHJldHVybiBzY3JvbGxDb3JuZXJBbmRSZXNp
emVyOwpAQCAtMTgxNSw2MyArMTgxNSw2MyBAQCBib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENv
cm5lclZpc2libGUoCiAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOwog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIHNj
cm9sbGJhclJlY3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHJl
bmRlcmVyKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBzY3JvbGxi
YXJSZWN0OwogCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwogICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CiAKICAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9t
UmVuZGVyZXIocmVuZGVyZXIoKSwgcmVjdCk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK0ludFJlY3QgUmVu
ZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKICAg
ICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CiAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aWV3
LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7
CisgICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVy
KHJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwogICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOwogICAgIHJldHVybiByZWN0OwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJM
YXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0CitJ
bnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9p
bnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsK
ICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJQb2ludDsKIAotICAgIExh
eW91dFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgSW50UG9pbnQgcG9pbnQgPSBz
Y3JvbGxiYXJQb2ludDsKICAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKICAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIocmVu
ZGVyZXIoKSwgcG9pbnQpOwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJMYXll
cjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiBwYXJlbnRQb2ludDsKIAotICAgIExheW91dFBvaW50IHBvaW50ID0gdmlldy0+
ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsK
KyAgICBJbnRQb2ludCBwb2ludCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJl
cihyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CiAKICAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCi1MYXlvdXRTaXplIFJl
bmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAorSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29u
dGVudHNTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZShjb25zdF9jYXN0PFJl
bmRlckxheWVyKj4odGhpcyktPnNjcm9sbFdpZHRoKCksIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIq
Pih0aGlzKS0+c2Nyb2xsSGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRTaXplKGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXIqPih0aGlzKS0+c2Nyb2xsV2lkdGgoKSwgY29uc3RfY2FzdDxSZW5kZXJMYXll
cio+KHRoaXMpLT5zY3JvbGxIZWlnaHQoKSk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6
OnZpc2libGVIZWlnaHQoKSBjb25zdAoraW50IFJlbmRlckxheWVyOjp2aXNpYmxlSGVpZ2h0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllclNpemUuaGVpZ2h0KCk7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyTGF5ZXI6OnZpc2libGVXaWR0aCgpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnZp
c2libGVXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJTaXplLndpZHRoKCk7CiB9
CkBAIC0xODg5LDI2ICsxODg5LDI2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzT25BY3RpdmVQYWdl
KCkgY29uc3QKICAgICByZXR1cm4gIW1fcmVuZGVyZXItPmRvY3VtZW50KCktPmluUGFnZUNhY2hl
KCk7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckxheWVyOjpjdXJyZW50TW91c2VQb3NpdGlvbigp
IGNvbnN0CitJbnRQb2ludCBSZW5kZXJMYXllcjo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiByZW5kZXJlcigpLT5mcmFtZSgpID8gcmVuZGVyZXIoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBMYXlvdXRQb2ludCgp
OworICAgIHJldHVybiByZW5kZXJlcigpLT5mcmFtZSgpID8gcmVuZGVyZXIoKS0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2ludCgpOwogfQog
Ci1MYXlvdXRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpIGNvbnN0CitJbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQo
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKIAogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAg
ICAgICByZXR1cm4gTGF5b3V0U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkg
LSBzY3JvbGxiYXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOworICAgICAgICByZXR1cm4g
SW50U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndp
ZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOwogCiAgICAgaWYgKHNjcm9sbGJhciA9PSBtX2hCYXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRTaXplKGJveC0+Ym9yZGVyTGVmdCgpLCBib3gt
PmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwor
ICAgICAgICByZXR1cm4gSW50U2l6ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5oZWlnaHQoKSAt
IGJveC0+Ym9yZGVyQm90dG9tKCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOworICAgIHJldHVy
biBJbnRTaXplKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQordm9pZCBS
ZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CkBAIC0xOTIzLDcgKzE5MjMs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjCiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKLSAgICBMYXlvdXRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OworICAgIElu
dFJlY3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKICAgICBBU1NFUlQoYm94KTsKICAgICBpZiAoc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkK
QEAgLTE5MzMsNyArMTkzMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWMKICAgICByZW5kZXJlcigpLT5yZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3QpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlv
dXRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIo
KSkgewpAQCAtMjEwMywyMCArMjEwMywyMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92
ZXJmbG93Q29udHJvCiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0
IExheW91dFJlY3QmIGJvcmRlckJveCA9IGJveC0+Ym9yZGVyQm94UmVjdCgpOwotICAgIGNvbnN0
IExheW91dFJlY3QmIHNjcm9sbENvcm5lciA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBMYXlv
dXRSZWN0IGFic0JvdW5kcyhib3JkZXJCb3gubG9jYXRpb24oKSArIG9mZnNldEZyb21MYXllciwg
Ym9yZGVyQm94LnNpemUoKSk7CisgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBib3gtPmJv
cmRlckJveFJlY3QoKTsKKyAgICBjb25zdCBJbnRSZWN0JiBzY3JvbGxDb3JuZXIgPSBzY3JvbGxD
b3JuZXJSZWN0KCk7CisgICAgSW50UmVjdCBhYnNCb3VuZHMoYm9yZGVyQm94LmxvY2F0aW9uKCkg
KyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJveC5zaXplKCkpOwogICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KExheW91dFJlY3QoYWJzQm91bmRzLm1heFgoKSAt
IGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm94LT5ib3JkZXJUb3AoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLmhlaWdo
dCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIHNjcm9sbENv
cm5lci5oZWlnaHQoKSkpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KGFi
c0JvdW5kcy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLnkoKSArIGJveC0+
Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFy
LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5k
cy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJCb3R0b20oKSkgLSBz
Y3JvbGxDb3JuZXIuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJh
ci0+c2V0RnJhbWVSZWN0KExheW91dFJlY3QoYWJzQm91bmRzLngoKSArIGJveC0+Ym9yZGVyTGVm
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5t
YXhZKCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gt
PmJvcmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxDb3JuZXIud2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdo
dCgpKSk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRzLngo
KSArIGJveC0+Ym9yZGVyTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFic0JvdW5kcy5tYXhZKCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWln
aHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lk
dGgoKSAtIChib3gtPmJvcmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxD
b3JuZXIud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hC
YXItPmhlaWdodCgpKSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
IHsKQEAgLTIyMDcsNyArMjIwNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxE
aW1lbnNpb24KICAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgob3ZlcmZsb3dSaWdodCgpIC0gb3Zl
cmZsb3dMZWZ0KCkpOwogICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQob3ZlcmZsb3dCb3R0b20o
KSAtIG92ZXJmbG93VG9wKCkpOwogICAgIAotICAgIHNldFNjcm9sbE9yaWdpbihMYXlvdXRQb2lu
dCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgpLCAtbV9zY3JvbGxPdmVyZmxvdy5oZWlnaHQoKSkp
OworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgp
LCAtbV9zY3JvbGxPdmVyZmxvdy5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG5lZWRIQmFyKQogICAg
ICAgICAqbmVlZEhCYXIgPSBtX3Njcm9sbFNpemUud2lkdGgoKSA+IGJveC0+Y2xpZW50V2lkdGgo
KTsKQEAgLTIyNTIsOCArMjI1Miw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbElu
Zm9BZnRlckwKICAgICBpZiAoYm94LT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPTUFSUVVFRSkg
ewogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGluIGFuIGludmFsaWQgc2Ny
b2xsIHBvc2l0aW9uLiAgSW4gdGhpcyBjYXNlIHdlIG5lZWQKICAgICAgICAgLy8gdG8gcHVsbCBv
dXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhl
IG1pbikuCi0gICAgICAgIExheW91dFVuaXQgbmV3WCA9IG1heDxMYXlvdXRVbml0PigwLCBtaW4o
c2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxXaWR0aCgpIC0gYm94LT5jbGllbnRXaWR0aCgpKSk7Ci0g
ICAgICAgIExheW91dFVuaXQgbmV3WSA9IG1heDxMYXlvdXRVbml0PigwLCBtaW4oc2Nyb2xsWU9m
ZnNldCgpLCBzY3JvbGxIZWlnaHQoKSAtIGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAgICAgICAg
aW50IG5ld1ggPSBtYXgoMCwgbWluKHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsV2lkdGgoKSAtIGJv
eC0+Y2xpZW50V2lkdGgoKSkpOworICAgICAgICBpbnQgbmV3WSA9IG1heCgwLCBtaW4oc2Nyb2xs
WU9mZnNldCgpLCBzY3JvbGxIZWlnaHQoKSAtIGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKICAgICAg
ICAgaWYgKG5ld1ggIT0gc2Nyb2xsWE9mZnNldCgpIHx8IG5ld1kgIT0gc2Nyb2xsWU9mZnNldCgp
KQogICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3WCwgbmV3WSk7CiAgICAgfQpAQCAtMjUw
MiwxNCArMjUwMiwxNCBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9s
CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKICAg
ICAKLSAgICBMYXlvdXRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAgIEludFJlY3QgcmVzaXpl
Q29udHJvbFJlY3Q7CiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpICE9IFJF
U0laRV9OT05FKSB7CiAgICAgICAgIHJlc2l6ZUNvbnRyb2xSZWN0ID0gcmVzaXplckNvcm5lclJl
Y3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOwogICAgICAgICBpZiAocmVzaXplQ29udHJv
bFJlY3QuY29udGFpbnMobG9jYWxQb2ludCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBMYXlvdXRVbml0IHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4PExheW91dFVuaXQ+
KHJlc2l6ZUNvbnRyb2xSZWN0LmhlaWdodCgpLCAwKTsKKyAgICBpbnQgcmVzaXplQ29udHJvbFNp
emUgPSBtYXgocmVzaXplQ29udHJvbFJlY3QuaGVpZ2h0KCksIDApOwogCiAgICAgaWYgKG1fdkJh
cikgewogICAgICAgICBMYXlvdXRSZWN0IHZCYXJSZWN0KGJveC0+d2lkdGgoKSAtIGJveC0+Ym9y
ZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwgCkBAIC0yNTIyLDcgKzI1MjIsNyBAQCBib29s
IFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXNpemVDb250cm9sU2l6ZSA9IG1heDxMYXlvdXRVbml0PihyZXNpemVDb250cm9sUmVj
dC53aWR0aCgpLCAwKTsKKyAgICByZXNpemVDb250cm9sU2l6ZSA9IG1heChyZXNpemVDb250cm9s
UmVjdC53aWR0aCgpLCAwKTsKICAgICBpZiAobV9oQmFyKSB7CiAgICAgICAgIExheW91dFJlY3Qg
aEJhclJlY3QoYm94LT5ib3JkZXJMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym94LT5oZWlnaHQoKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXItPmhlaWdodCgpLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDk5NTA4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OSw4ICsyNTksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0OyB9CiAgICAgdm9pZCBzZXRMb2NhdGlv
bihMYXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkgeyBtX3RvcExlZnQgPSBMYXlvdXRQb2ludCh4
LCB5KTsgfQogCi0gICAgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJTaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpIHsg
bV9sYXllclNpemUgPSBzaXplOyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJTaXplOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNp
emUpIHsgbV9sYXllclNpemUgPSBzaXplOyB9CiAKICAgICBMYXlvdXRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uKCksIHNpemUoKSk7IH0KIApAQCAtMjc5LDkg
KzI3OSw5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFNpemUgc2Nyb2xsZWRDb250ZW50T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsT2Zmc2V0KCkgKyBtX3Njcm9sbE92ZXJmbG93OyB9CiAK
LSAgICBMYXlvdXRVbml0IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9m
ZnNldC53aWR0aCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzY3Jv
bGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkgKyBzY3Jv
bGxPcmlnaW4oKS55KCk7IH0KLSAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIExheW91dFNpemUoc2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpOyB9Cisg
ICAgaW50IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0
aCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpOyB9CisgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsg
fQorICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShzY3Jv
bGxYT2Zmc2V0KCksIHNjcm9sbFlPZmZzZXQoKSk7IH0KIAogICAgIHZvaWQgc2Nyb2xsVG9PZmZz
ZXQoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgPSBTY3JvbGxP
ZmZzZXRVbmNsYW1wZWQpOwogICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KExheW91dFVuaXQgeCwg
U2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgY2xhbXAgPSBTY3JvbGxPZmZzZXRVbmNsYW1wZWQpIHsgc2Ny
b2xsVG9PZmZzZXQoeCwgc2Nyb2xsWU9mZnNldCgpLCBjbGFtcCk7IH0KQEAgLTU5Miw0MiArNTky
LDQyIEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25z
dDsgCiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0Owor
ICAgIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKICAgICAKICAgICAvLyBT
Y3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBj
b252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0
UmVjdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFBvaW50Jikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsK
LSAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBMYXlvdXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIExheW91dFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OwotICAg
IHZpcnR1YWwgTGF5b3V0UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVj
dChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQg
dmlzaWJsZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNpYmxlV2lk
dGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFNpemUgY29udGVudHNTaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBMYXlvdXRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBMYXlvdXRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB2
aXNpYmxlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Q7CisgICAg
dmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc09uQWN0aXZlUGFnZSgpIGNvbnN0OwogCiAgICAgLy8gUmVjdGFuZ2xl
IGVuY29tcGFzc2luZyB0aGUgc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplciByZWN0LgotICAgIExh
eW91dFJlY3Qgc2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdDsKKyAgICBJbnRSZWN0
IHNjcm9sbENvcm5lckFuZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzY29ubmVjdEZyb21QYWdlKCkgeyBtX3Njcm9sbGFibGVBcmVhUGFnZSA9IDA7IH0KIAogICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0
U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhMYXlv
dXRVbml0LCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNjcm9sbFRvKGludCwgaW50KTsKIAotICAg
IExheW91dFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OworICAg
IEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OwogICAgIAog
ICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJv
b2wgdmVydGljYWxPdmVyZmxvdyk7CiAKQEAgLTc1NSwxNSArNzU1LDE1IEBAIHByb3RlY3RlZDoK
ICAgICBMYXlvdXRQb2ludCBtX3RvcExlZnQ7CiAKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9o
ZWlnaHQKLSAgICBMYXlvdXRTaXplIG1fbGF5ZXJTaXplOworICAgIEludFNpemUgbV9sYXllclNp
emU7CiAKICAgICAvLyBPdXIgc2Nyb2xsIG9mZnNldHMgaWYgdGhlIHZpZXcgaXMgc2Nyb2xsZWQu
Ci0gICAgTGF5b3V0U2l6ZSBtX3Njcm9sbE9mZnNldDsKKyAgICBJbnRTaXplIG1fc2Nyb2xsT2Zm
c2V0OwogCiAgICAgTGF5b3V0U2l6ZSBtX3Njcm9sbE92ZXJmbG93OwogICAgIAogICAgIC8vIFRo
ZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCi0gICAgTGF5b3V0U2l6ZSBtX3Nj
cm9sbFNpemU7CisgICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7CiAKICAgICAvLyBGb3IgbGF5ZXJz
IHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCiAgICAgUmVmUHRy
PFNjcm9sbGJhcj4gbV9oQmFyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gOTk1MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MSw3ICs1NDEsNyBAQCBp
bnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG93YXJkKGNvbnN0IEluCiAKIHZvaWQgUmVuZGVyTGlz
dEJveDo6YXV0b3Njcm9sbCgpCiB7Ci0gICAgTGF5b3V0UG9pbnQgcG9zID0gZnJhbWUoKS0+dmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91
c2VQb3NpdGlvbigpKTsKKyAgICBJbnRQb2ludCBwb3MgPSBmcmFtZSgpLT52aWV3KCktPndpbmRv
d1RvQ29udGVudHMoZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9u
KCkpOwogCiAgICAgaW50IGVuZEluZGV4ID0gc2Nyb2xsVG93YXJkKHBvcyk7CiAgICAgaWYgKGVu
ZEluZGV4ID49IDApIHsKQEAgLTcwOCw5MSArNzA4LDkxIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6
aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5pc0FjdGl2ZSgpOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQor
dm9pZCBSZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBMYXlvdXRSZWN0IHNjcm9sbFJl
Y3QgPSByZWN0OworICAgIEludFJlY3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CiAgICAgc2Nyb2xsUmVj
dC5tb3ZlKHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBib3Jk
ZXJUb3AoKSk7CiAgICAgcmVwYWludFJlY3RhbmdsZShzY3JvbGxSZWN0KTsKIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGJhclJl
Y3QpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
c2Nyb2xsYmFyUmVjdCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmll
dygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CiAKLSAg
ICBMYXlvdXRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIEludFJlY3QgcmVjdCA9IHNj
cm9sbGJhclJlY3Q7CiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0g
Ym9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IHNjcm9s
bGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAt
IGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRv
cCA9IGJvcmRlclRvcCgpOwogICAgIHJlY3QubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJU
b3ApOwogCiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVy
KHRoaXMsIHJlY3QpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgTGF5b3V0UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK0ludFJlY3QgUmVuZGVyTGlzdEJveDo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlclZp
ZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
cGFyZW50UmVjdDsKIAotICAgIExheW91dFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5j
b252ZXJ0VG9SZW5kZXJlcih0aGlzLCBwYXJlbnRSZWN0KTsKKyAgICBJbnRSZWN0IHJlY3QgPSB2
aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIodGhpcywgcGFyZW50UmVjdCk7CiAK
LSAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAt
IHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRl
clRvcCgpOworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkg
LSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgp
OwogICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRvcCk7CiAgICAgcmV0
dXJuIHJlY3Q7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
TGF5b3V0UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorSW50UG9pbnQgUmVuZGVyTGlzdEJv
eDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0CiB7CiAgICAg
UmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybiBzY3JvbGxiYXJQb2ludDsKIAotICAgIExheW91dFBvaW50IHBvaW50ID0gc2Nyb2xs
YmFyUG9pbnQ7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKIAotICAgIExh
eW91dFVuaXQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpOwotICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7
CisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9s
bGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CiAgICAg
cG9pbnQubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOwogCiAgICAgcmV0dXJuIHZp
ZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHBvaW50KTsKIH0KIAot
TGF5b3V0UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRQb2ludCYgcGFy
ZW50UG9pbnQpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhp
cy0+dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHBhcmVudFBvaW50Owog
Ci0gICAgTGF5b3V0UG9pbnQgcG9pbnQgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVu
ZGVyZXIodGhpcywgcGFyZW50UG9pbnQpOworICAgIEludFBvaW50IHBvaW50ID0gdmlldy0+ZnJh
bWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFBvaW50KTsKIAotICAgIExh
eW91dFVuaXQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpOwotICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7
CisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9s
bGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CiAgICAg
cG9pbnQubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRvcCk7CiAgICAgcmV0dXJuIHBv
aW50OwogfQogCi1MYXlvdXRTaXplIFJlbmRlckxpc3RCb3g6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0
CitJbnRTaXplIFJlbmRlckxpc3RCb3g6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIExheW91dFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworICAgIHJldHVy
biBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKIH0KIAotTGF5b3V0VW5p
dCBSZW5kZXJMaXN0Qm94Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJMaXN0Qm94
Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaGVpZ2h0KCk7CiB9CiAKLUxh
eW91dFVuaXQgUmVuZGVyTGlzdEJveDo6dmlzaWJsZVdpZHRoKCkgY29uc3QKK2ludCBSZW5kZXJM
aXN0Qm94Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiB3aWR0aCgpOwogfQog
Ci1MYXlvdXRQb2ludCBSZW5kZXJMaXN0Qm94OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0
CitJbnRQb2ludCBSZW5kZXJMaXN0Qm94OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiB7
CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCi0g
ICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOworICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsK
ICAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNp
b24gOTk1MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsMjAgKzEwMiwyMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdDsKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBMYXlv
dXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0gLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQu
IElmIHdlIGRpZCB0aGVzZSB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KLSAgICB2aXJ0dWFsIExheW91
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBMYXlvdXRS
ZWN0JikgeyB9Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7
Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgdmly
dHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIExh
eW91dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBz
Y3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0KKyAg
ICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAg
ICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
bV92QmFyLmdldCgpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRTaXplIGNvbnRlbnRzU2l6ZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBMYXlvdXRVbml0IHZpc2libGVXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5
b3V0UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNp
emUgY29udGVudHNTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNPbkFjdGl2ZVBhZ2UoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA5OTUwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMiwx
MyArNTAyLDEzIEBAIGludCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50SW5zZXRSaWdodCgpIGMKICAg
ICByZXR1cm4gMDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGlu
Z0xlZnQoKSBjb25zdAoraW50IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdM
ZWZ0KCk7CiB9CiAKIGNvbnN0IGludCBlbmRPZkxpbmVQYWRkaW5nID0gMjsKLUxheW91dFVuaXQg
UmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyTWVu
dUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkgewogICAgICAgICAvLyBGb3IgdGhlc2UgYXBwZWFyYW5jZSB2YWx1
ZXMsIHRoZSB0aGVtZSBhcHBsaWVzIHBhZGRpbmcgdG8gbGVhdmUgcm9vbSBmb3IgdGhlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNpb24gOTk1
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUG9wdXBNZW51
U3R5bGUgbWVudVN0eWxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRp
bmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwb3B1
cERpZEhpZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA5OTUwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MjgsOSArNjI4LDkgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50SQogICAgIHJldHVybiBoZWlnaHQoKSAvIDI7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0
CitpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNv
bnN0CiB7Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKKyAgICBpbnQg
cGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRv
biA9IHJlc3VsdHNCdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1Jl
bmRlcmVyID0gcmVzdWx0c0J1dHRvbiA/IHJlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkK
QEAgLTYzOSw5ICs2MzksOSBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6CiAgICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoraW50IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKIHsKLSAgICBMYXlv
dXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nUmlnaHQoKTsKKyAgICBpbnQgcGFkZGluZyA9IHBhZGRp
bmdSaWdodCgpOwogCiAgICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbiA9IGNhbmNlbEJ1dHRv
bkVsZW1lbnQoKTsKICAgICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5kZXJlciA9IGNhbmNlbEJ1
dHRvbiA/IGNhbmNlbEJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAko
cmV2aXNpb24gOTk1MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw4ICsxMDIsOCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2xp
ZW50SW5zZXRSaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRk
aW5nTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGxpc3RTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTEtMDcgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmVydCBwbGF0Zm9ybSBhbmQgc2Nyb2xsaW5nIHRvIGludHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTg1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgUmVwbGFjZSBhbGwg
dXNlcyBvZiBMYXlvdXRVbml0IGFuZCByZWxhdGVkIHR5cGVzIHdpdGggaW50cyBpbiBwbGF0Zm9y
bQorICAgICAgICBhbmQgc2Nyb2xsaW5nIGNvZGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QnVpbHRJblBE
RlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6QnVpbHRJ
blBERlZpZXc6OnZpc2libGVIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpCdWlsdEluUERGVmll
dzo6dmlzaWJsZVdpZHRoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0
SW5QREZWaWV3Lmg6CisKIDIwMTEtMTEtMDcgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ5
MApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERG
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9CdWlsdEluUERGVmlldy5jcHAJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwNiw3ICs2MDYsNyBAQCBib29sIEJ1aWx0SW5QREZWaWV3Ojppc0FjdGl2ZSgpIGNv
bnN0CiAKIHZvaWQgQnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewotICAgIExheW91dFJl
Y3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CiAgICAg
ZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIGRpcnR5UmVjdC5t
b3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CiAgICAgY29udHJvbGxlcigpLT5pbnZh
bGlkYXRlKGRpcnR5UmVjdCk7CkBAIC02NTIsMTIgKzY1MiwxMiBAQCBJbnRQb2ludCBCdWlsdElu
UERGVmlldzo6bWF4aW11bVNjcm9sbFBvCiAgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7CiB9CiAK
LUxheW91dFVuaXQgQnVpbHRJblBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAoraW50IEJ1
aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbHVn
aW5TaXplLmhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxl
V2lkdGgoKSBjb25zdAoraW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgJ
KHJldmlzaW9uIDk5NTA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9CdWlsdEluUERGVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsOCArMTI2LDggQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3JvbGxQb3Np
dGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6TGF5b3V0VW5pdCB2aXNpYmxlSGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMYXlvdXRVbml0IHZpc2libGVXaWR0
aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxi
YXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCAgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLmdldCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTA4KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0xMS0wNyAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2ZXJ0IHBsYXRmb3JtIGFuZCBzY3JvbGxpbmcgdG8gaW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1ODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIExheW91dFVu
aXQgYW5kIHJlbGF0ZWQgdHlwZXMgd2l0aCBpbnRzIGluIHBsYXRmb3JtCisgICAgICAgIGFuZCBz
Y3JvbGxpbmcgY29kZS4KKworICAgICAgICAqIHRlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3Qu
Y3BwOgorICAgICAgICAoTW9ja1Njcm9sbGFibGVBcmVhOjp2aXNpYmxlSGVpZ2h0KToKKyAgICAg
ICAgKE1vY2tTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVdpZHRoKToKKwogMjAxMS0xMS0wNyAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDkwCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAJKHJldmlzaW9u
IDk5NTA4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmltYXRvck5v
bmVUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAgICAg
TU9DS19NRVRIT0QxKHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24sIHZvaWQoY29uc3QgSW50
UG9pbnQmKSk7CiAgICAgTU9DS19DT05TVF9NRVRIT0QwKGVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
LCBTY3JvbGxhYmxlQXJlYSooKSk7CiAKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgdmlzaWJsZUhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIDc2ODsgfQotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNp
YmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiAxMDI0OyB9CisgICAgdmlydHVhbCBpbnQgdmlzaWJs
ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDc2ODsgfQorICAgIHZpcnR1YWwgaW50IHZpc2libGVX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDEwMjQ7IH0KIAogICAgIGJvb2wgc2Nyb2xsQW5pbWF0b3JF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxBbmltYXRvckVuYWJsZWQ7IH0KICAgICBi
b29sIG1fc2Nyb2xsQW5pbWF0b3JFbmFibGVkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>