<?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>61891</bug_id>
          
          <creation_ts>2011-06-01 16:22:43 -0700</creation_ts>
          <short_desc>Switch paintReplaced to use IntPoint</short_desc>
          <delta_ts>2011-06-03 10:59:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          <dependson>61562</dependson>
          <blocked>60318</blocked>
    
    <blocked>61949</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413745</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-01 16:22:43 -0700</bug_when>
    <thetext>Ongoing tx/ty removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413809</commentid>
    <comment_count>1</comment_count>
      <attachid>95696</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-01 18:24:37 -0700</bug_when>
    <thetext>Created attachment 95696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413925</commentid>
    <comment_count>2</comment_count>
      <attachid>95696</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-01 22:55:15 -0700</bug_when>
    <thetext>Comment on attachment 95696
Patch

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

&gt; Source/WebCore/rendering/RenderHTMLCanvas.cpp:60
&gt; +    rect.move(paintOffset);

So does this move to the point, or treat the point as a size?  I think IntRect::move(IntPoint) is confusing and should probably be removed.  Since I believe this does not move to the point, but rahter by the size of the point, I think rect.move(toSize(paintOffset)) might end up clearer. This again is the tx/ty being used for different things in different places coming to bite us.

&gt; Source/WebCore/rendering/RenderImage.cpp:254
&gt; +            IntSize imageOffset;

Why is this way out here if it&apos;s only used in that one place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414123</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-02 08:04:11 -0700</bug_when>
    <thetext>Maybe IntRect::moveBy(const IntPoint&amp;)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414294</commentid>
    <comment_count>4</comment_count>
      <attachid>95696</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 11:21:53 -0700</bug_when>
    <thetext>Comment on attachment 95696
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderHTMLCanvas.cpp:60
&gt;&gt; +    rect.move(paintOffset);
&gt; 
&gt; So does this move to the point, or treat the point as a size?  I think IntRect::move(IntPoint) is confusing and should probably be removed.  Since I believe this does not move to the point, but rahter by the size of the point, I think rect.move(toSize(paintOffset)) might end up clearer. This again is the tx/ty being used for different things in different places coming to bite us.

I like &quot;moveBy&quot; and that doesn&apos;t introduce an unnecessary copy. How does that sound to you, Eric?

&gt;&gt; Source/WebCore/rendering/RenderImage.cpp:254
&gt;&gt; +            IntSize imageOffset;
&gt; 
&gt; Why is this way out here if it&apos;s only used in that one place?

It&apos;s used in two places is why -- see L289 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414296</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 11:23:28 -0700</bug_when>
    <thetext>Sounds fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414303</commentid>
    <comment_count>6</comment_count>
      <attachid>95696</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 11:33:04 -0700</bug_when>
    <thetext>Comment on attachment 95696
Patch

Cool. Clearing the flag pending that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414404</commentid>
    <comment_count>7</comment_count>
      <attachid>95801</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 13:40:41 -0700</bug_when>
    <thetext>Created attachment 95801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414410</commentid>
    <comment_count>8</comment_count>
      <attachid>95801</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-02 13:57:17 -0700</bug_when>
    <thetext>Comment on attachment 95801
Patch

Attachment 95801 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8754855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414411</commentid>
    <comment_count>9</comment_count>
      <attachid>95801</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 14:01:28 -0700</bug_when>
    <thetext>Comment on attachment 95801
Patch

Looks reasonable to me.  What&apos;s up with the cr bot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414413</commentid>
    <comment_count>10</comment_count>
      <attachid>95802</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 14:02:33 -0700</bug_when>
    <thetext>Created attachment 95802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414419</commentid>
    <comment_count>11</comment_count>
      <attachid>95802</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 14:09:09 -0700</bug_when>
    <thetext>Comment on attachment 95802
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414421</commentid>
    <comment_count>12</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 14:09:47 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 95802 [details])
&gt; OK.

Thanks! I&apos;d missed a file not used in the Mac build. I&apos;ll wait for EWS to verify then land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414434</commentid>
    <comment_count>13</comment_count>
      <attachid>95809</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 14:20:50 -0700</bug_when>
    <thetext>Created attachment 95809
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414610</commentid>
    <comment_count>14</comment_count>
      <attachid>95809</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-02 19:42:42 -0700</bug_when>
    <thetext>Comment on attachment 95809
Patch for landing

Rejecting attachment 95809 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;land-a...&quot; exit_code: 1

Last 500 characters of output:
autoinstalled/mechanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 60] Operation timed out&gt;

Full output: http://queues.webkit.org/results/8759402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414882</commentid>
    <comment_count>15</comment_count>
      <attachid>95809</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-03 07:39:22 -0700</bug_when>
    <thetext>Comment on attachment 95809
Patch for landing

Clearly we need to catch these timeout exceptions and not fail patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414886</commentid>
    <comment_count>16</comment_count>
      <attachid>95809</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-03 07:41:21 -0700</bug_when>
    <thetext>Comment on attachment 95809
Patch for landing

Rejecting attachment 95809 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
g rejects to file Source/WebCore/rendering/RenderVideo.cpp.rej
patching file Source/WebCore/rendering/RenderVideo.h
Hunk #1 FAILED at 66.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/rendering/RenderVideo.h.rej
patching file Source/WebCore/rendering/RenderView.cpp
Hunk #1 FAILED at 273.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/rendering/RenderView.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8764121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414998</commentid>
    <comment_count>17</comment_count>
      <attachid>95809</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-03 10:58:04 -0700</bug_when>
    <thetext>Comment on attachment 95809
Patch for landing

Clearing flags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415001</commentid>
    <comment_count>18</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-03 10:59:47 -0700</bug_when>
    <thetext>Landed in r87989.

Eric, Adam: The timed-out commit queue actually landed this patch but didn&apos;t make note of it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95696</attachid>
            <date>2011-06-01 18:24:37 -0700</date>
            <delta_ts>2011-06-02 13:40:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61891-20110601182436.patch</filename>
            <type>text/plain</type>
            <size>12135</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDYtMDEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBwYWludFJlcGxhY2VkIHRvIHVzZSBJbnRQb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTEK
KworICAgICAgICBTd2l0Y2hpbmcgcGFpbnRSZXBsYWNlZCB0byB1c2UgSW50UG9pbnQgdG8gcmVw
cmVzZW50IHRoZSBwYWludCBvZmZzZXQgaW5zdGVhZAorICAgICAgICBvZiBhIHBhaXIgb2YgaW50
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBzaW1wbGUgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52
YXM6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpw
YWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWRlby5oOgorCiAyMDExLTA2LTAxICBBZHJpZW5uZSBXYWxrZXIgIDxl
bm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAJKHJldmlzaW9uIDg3ODY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHZv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50KFBhaW50SW4KICAgICBSZW5kZXJQYXJ0Ojpw
YWludChwYWludEluZm8sIHR4LCB0eSk7CiB9CiAKLXZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9p
ZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmICghcGx1Z2luQ3Jhc2hl
ZE9yV2FzTWlzc2luZygpKQogICAgICAgICByZXR1cm47CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9p
ZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIEZvbnQgZm9udDsKICAg
ICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwotICAgIGlmICghZ2V0UmVw
bGFjZW1lbnRUZXh0R2VvbWV0cnkodHgsIHR5LCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1l
bnRUZXh0UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQorICAgIGlmICghZ2V0UmVwbGFjZW1l
bnRUZXh0R2VvbWV0cnkocGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCksIGNvbnRlbnRS
ZWN0LCBwYXRoLCByZXBsYWNlbWVudFRleHRSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmgJKHJldmlzaW9uIDg3ODY2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyRW1iZWRkZWRPYmplY3QiOyB9CiAgICAgdmlydHVhbCBib29s
IGlzRW1iZWRkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBpbnQsIGludCk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KTsKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDg3ODY2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCwxMCArNTQsMTAgQEAgYm9vbCBSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xheWVyKCkgYwog
ICAgIHJldHVybiBjYW52YXMgJiYgY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkgJiYgY2FudmFz
LT5yZW5kZXJpbmdDb250ZXh0KCktPmlzQWNjZWxlcmF0ZWQoKTsKIH0KIAotdm9pZCBSZW5kZXJI
VE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSkKK3ZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIEludFJlY3QgcmVj
dCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgcmVjdC5t
b3ZlKHBhaW50T2Zmc2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IHN0eWxlKCkt
PmltYWdlUmVuZGVyaW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRpbWl6ZUNvbnRyYXN0OwogICAg
IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgpKS0+cGFpbnQocGFpbnRJbmZv
LmNvbnRleHQsIHJlY3QsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJldmlzaW9uIDg3ODY2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJIVE1MQ2FudmFz
IjsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25z
dCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsg
Y2FudmFzU2l6ZUNoYW5nZWQoKTsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4Nzg2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBA
QCB2b2lkIFJlbmRlckltYWdlOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSCiAjZW5kaWYKIH0KIAot
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaW50IGNXaWR0
aCA9IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBjSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwpA
QCAtMjQ4LDExICsyNDgsMTAgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWlu
dEluZgogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwog
ICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmxpZ2h0R3JheSwgc3R5
bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnQsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsg
dG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdSZWN0KEludFJlY3QocGFpbnRPZmZzZXQueCgpICsgbGVmdEJvcmRlciArIGxlZnRQ
YWQsIHBhaW50T2Zmc2V0LnkoKSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0
KSk7CiAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKLSAgICAg
ICAgICAgIGludCBpbWFnZVggPSAwOwotICAgICAgICAgICAgaW50IGltYWdlWSA9IDA7CisgICAg
ICAgICAgICBJbnRTaXplIGltYWdlT2Zmc2V0OwogICAgICAgICAgICAgLy8gV2hlbiBjYWxjdWxh
dGluZyB0aGUgdXNhYmxlIGRpbWVuc2lvbnMsIGV4Y2x1ZGUgdGhlIHBpeGVscyBvZgogICAgICAg
ICAgICAgLy8gdGhlIG91bGluZSByZWN0IHNvIHRoZSBlcnJvciBpbWFnZS9hbHQgdGV4dCBkb2Vz
bid0IGRyYXcgb24gaXQuCiAgICAgICAgICAgICBpbnQgdXNhYmxlV2lkdGggPSBjV2lkdGggLSAy
OwpAQCAtMjY4LDMwICsyNjcsMjkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQ
YWludEluZgogICAgICAgICAgICAgICAgIGludCBjZW50ZXJZID0gKHVzYWJsZUhlaWdodCAtIGlt
YWdlLT5oZWlnaHQoKSkgLyAyOwogICAgICAgICAgICAgICAgIGlmIChjZW50ZXJZIDwgMCkKICAg
ICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7Ci0gICAgICAgICAgICAgICAgaW1hZ2VYID0g
bGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKLSAgICAgICAgICAgICAgICBpbWFn
ZVkgPSB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgSW50
UG9pbnQodHggKyBpbWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAgICAgICAgICAgICAgaW1hZ2VP
ZmZzZXQgPSBJbnRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWCArIDEsIHRvcEJv
cmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRPZmZzZXQg
KyBpbWFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJlRHJhd24gPSB0cnVl
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgICAgIGludCBheCA9
IHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7Ci0gICAgICAgICAgICAgICAgaW50IGF5ID0gdHkg
KyB0b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAgICAgICAgaW50IGFzY2Vu
dCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgICAgICAgICAgICAgIEludFBvaW50IGFsdFRl
eHRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICAgICAgICAgICAgICBhbHRUZXh0T2Zmc2V0Lm1v
dmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBhZCArIGFzY2VudCk7CiAK
ICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZpdCB3
aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlmIGl0
IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgogICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4
dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0
eWxlKCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRS
dW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhl
aWdodCgpIDw9IGltYWdlWSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdU
ZXh0KGZvbnQsIHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhl
aWdodCgpIDw9IGltYWdlT2Zmc2V0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgYWx0VGV4dE9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgY0hlaWdodCA+
PSBmb250TWV0cmljcy5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJh
d1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIGFsdFRleHRPZmZz
ZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2ltYWdlUmVz
b3VyY2UtPmhhc0ltYWdlKCkgJiYgY1dpZHRoID4gMCAmJiBjSGVpZ2h0ID4gMCkgewpAQCAtMzAx
LDEyICsyOTksMTMgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgog
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0g
bnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0eCAtIHgoKSwgdHkgLSB5KCkp
LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwYWludEN1c3RvbUhp
Z2hsaWdodCh0b1BvaW50KHBhaW50T2Zmc2V0IC0gbG9jYXRpb24oKSksIHN0eWxlKCktPmhpZ2hs
aWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgICAgIEludFNpemUgY29udGVudFNpemUoY1dp
ZHRoLCBjSGVpZ2h0KTsKLSAgICAgICAgSW50UmVjdCByZWN0KEludFBvaW50KHR4ICsgbGVmdEJv
cmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgY29udGVudFNpemUpOwot
ICAgICAgICBwYWludEludG9SZWN0KGNvbnRleHQsIHJlY3QpOworICAgICAgICBJbnRQb2ludCBj
b250ZW50TG9jYXRpb24gPSBwYWludE9mZnNldDsKKyAgICAgICAgY29udGVudExvY2F0aW9uLm1v
dmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBhZCk7CisgICAgICAgIHBh
aW50SW50b1JlY3QoY29udGV4dCwgSW50UmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXpl
KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
aAkocmV2aXNpb24gODc4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4Nzg2
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQ
YWludEluZm8mIHBhCiAgICAgfQogCiAgICAgaWYgKCFjb21wbGV0ZWx5Q2xpcHBlZE91dCkgewot
ICAgICAgICBwYWludFJlcGxhY2VkKHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgcGFpbnRS
ZXBsYWNlZChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOwogCiAgICAgICAgIGlmIChzdHls
ZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
aAkocmV2aXNpb24gODc4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIGlu
dCBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVj
dFJhdGlvTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKSB7IH0KIAog
ICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gODc4NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyAr
MTg0LDcgQEAgYm9vbCBSZW5kZXJWaWRlbzo6c2hvdWxkRGlzcGxheVZpZGVvKCkgYwogICAgIHJl
dHVybiAhdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOwogfQogCi12
b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVmlkZW86OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBNZWRpYVBsYXll
ciogbWVkaWFQbGF5ZXIgPSBtZWRpYUVsZW1lbnQoKS0+cGxheWVyKCk7CiAgICAgYm9vbCBkaXNw
bGF5aW5nUG9zdGVyID0gdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgp
OwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVmlkZW86OnBhaW50UmVwbGFjZWQoUGFp
bnRJbmYKICAgICBJbnRSZWN0IHJlY3QgPSB2aWRlb0JveCgpOwogICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlY3QubW92ZSh0eCwgdHkpOworICAgIHJlY3Qu
bW92ZShwYWludE9mZnNldCk7CiAKICAgICBpZiAoZGlzcGxheWluZ1Bvc3RlcikKICAgICAgICAg
cGFpbnRJbnRvUmVjdChwYWludEluZm8uY29udGV4dCwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkocmV2aXNpb24gODc4NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95801</attachid>
            <date>2011-06-02 13:40:41 -0700</date>
            <delta_ts>2011-06-02 14:02:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61891-20110602134040.patch</filename>
            <type>text/plain</type>
            <size>36344</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDYtMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBwYWludFJlcGxhY2VkIHRvIHVzZSBJbnRQb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTEK
KworICAgICAgICBTd2l0Y2hpbmcgcGFpbnRSZXBsYWNlZCB0byB1c2UgSW50UG9pbnQgdG8gcmVw
cmVzZW50IHRoZSBwYWludCBvZmZzZXQgaW5zdGVhZAorICAgICAgICBvZiBhIHBhaXIgb2YgaW50
cy4KKworICAgICAgICBBbHNvIHJlbmFtaW5nIHRoZSBJbnRQb2ludCBmbGF2b3Igb2YgSW50UmVj
dDo6bW92ZSB0byBtb3ZlQnkgdG8gY2xlYXIgdXAgdGhlCisgICAgICAgIGZhY3QgdGhhdCB0aGUg
SW50UG9pbnQgaXMgYWRkZWQgYXMgYW4gb2Zmc2V0IGFzIG9wcG9zZWQgdG8gYmVpbmcgcmVsb2Nh
dGVkCisgICAgICAgIHRvIHRoYXQgcG9pbnQuCisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0
aGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmludmFsaWRh
dGVQYXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnRSZWN0Ojptb3ZlQnkpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRn
ZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zm
c2V0RnJvbUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVS
ZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRS
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZh
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6
cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRD
bGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRDaGlsZExheWVySW50b0NvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Ym91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEJhY2tp
bmdOZWVkc1JlcGFpbnRJblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
cmFwaGljc0xheWVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2lsbEJl
UmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhaW50Q29udGVudHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RN
YXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6
OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVmlkZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnBhaW50UmVw
bGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJl
cGFpbnRWaWV3UmVjdGFuZ2xlKToKKwogMjAxMS0wNi0wMiAgQWxvayBQcml5YWRhcnNoaSAgPGFs
b2twQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYzLDcg
KzIxNjMsNyBAQCB2b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoCiB7CiAg
ICAgLy8gQWRkIGluIG91ciBvZmZzZXQgd2l0aGluIHRoZSBGcmFtZVZpZXcuCiAgICAgSW50UmVj
dCBkaXJ0eVJlY3QgPSByZWN0OwotICAgIGRpcnR5UmVjdC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRp
b24oKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAg
IGludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CiB9CiAKQEAgLTI2MjcsNyArMjYyNyw3IEBAIElu
dFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKGMKICAgICBJbnRSZWN0IHJlY3Qg
PSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVuZGVyZXJSZWN0KSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIC8vIENvbnZlcnQgZnJvbSBwYWdlICgiYWJz
b2x1dGUiKSB0byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCi0gICAgcmVjdC5tb3ZlKC1zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICBy
ZXR1cm4gcmVjdDsKIH0KQEAgLTI2MzcsNyArMjYzNyw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpj
b252ZXJ0VG9SZW5kZXJlcihjb24KICAgICBJbnRSZWN0IHJlY3QgPSB2aWV3UmVjdDsKICAgICAK
ICAgICAvLyBDb252ZXJ0IGZyb20gRnJhbWVWaWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0
ZSIpIGNvb3JkaW5hdGVzLgotICAgIHJlY3QubW92ZShzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBy
ZWN0Lm1vdmVCeShzY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBo
YXZlIGEgd2F5IHRvIG1hcCBhbiBhYnNvbHV0ZSByZWN0IGRvd24gdG8gYSBsb2NhbCBxdWFkLCBz
byBqdXN0CiAgICAgLy8gbW92ZSB0aGUgcmVjdCBmb3Igbm93LgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsMTEgKzEw
MDgsMTEgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogCiAgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgICAgIGRvY3VtZW50RGlydHlS
ZWN0Lm1vdmUoLWxvY2F0aW9uKCkpOworICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlQnko
LWxvY2F0aW9uKCkpOwogCiAgICAgICAgIGlmICghcGFpbnRzRW50aXJlQ29udGVudHMoKSkgewog
ICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1zY3JvbGxYKCksIC1zY3JvbGxZKCkpOwot
ICAgICAgICAgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShzY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmVCeShzY3JvbGxQb3NpdGlvbigpKTsKIAog
ICAgICAgICAgICAgY29udGV4dC0+Y2xpcCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgICAg
IH0KQEAgLTEwMzMsNyArMTAzMyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiAKICAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKICAg
ICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwogICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwotICAgICAgICBzY3JvbGxWaWV3RGlydHlS
ZWN0Lm1vdmUoLWxvY2F0aW9uKCkpOworICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmVC
eSgtbG9jYXRpb24oKSk7CiAKICAgICAgICAgcGFpbnRTY3JvbGxiYXJzKGNvbnRleHQsIHNjcm9s
bFZpZXdEaXJ0eVJlY3QpOwogICAgIH0KQEAgLTExMjcsNyArMTEyNyw3IEBAIEludFJlY3QgU2Ny
b2xsVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXIKIHsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0
IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIEludFJlY3QgbmV3UmVjdCA9IGxvY2FsUmVj
dDsKLSAgICBuZXdSZWN0Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICBuZXdSZWN0
Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdSZWN0OwogfQog
CkBAIC0xMTM1LDcgKzExMzUsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluCiB7CiAgICAgSW50UmVjdCBuZXdSZWN0ID0gcGFyZW50UmVjdDsKICAgICAvLyBTY3Jv
bGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwotICAgIG5ld1JlY3QubW92ZSgt
c2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICBuZXdSZWN0Lm1vdmVCeSgtc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UmVjdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkocmV2aXNp
b24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFNjcm9sbGJh
clRoZW1lQ29tcG9zaXRlOjppbnZhbGlkYXRlCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGh1
bWJSZWN0OwogICAgICAgICB9CiAgICAgfQotICAgIHJlc3VsdC5tb3ZlKC1zY3JvbGxiYXItPmxv
Y2F0aW9uKCkpOworICAgIHJlc3VsdC5tb3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAg
ICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA4Nzk0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25z
dCB7IHJldHVybiBJbnRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAy
KTsgfQogCiAgICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiAr
PSBzaXplOyB9IAotICAgIHZvaWQgbW92ZShjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSB7IG1fbG9j
YXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQgbW92ZUJ5KGNv
bnN0IEludFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNl
dC55KCkpOyB9CiAgICAgdm9pZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fbG9jYXRpb24ubW92
ZShkeCwgZHkpOyB9IAogCiAgICAgdm9pZCBleHBhbmQoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBt
X2xvY2F0aW9uICs9IHNpemU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
aWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dp
ZGdldE1hYy5tbQkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBX
aWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwogICAgICAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0oY29udGV4dCwgLXRyYW5zZm9ybU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4u
eSgpKTsKIAogICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGRpcnR5UmVj
dC5tb3ZlKC10cmFuc2Zvcm1PcmlnaW4pOworICAgICAgICBkaXJ0eVJlY3QubW92ZUJ5KC10cmFu
c2Zvcm1PcmlnaW4pOwogICAgICAgICBpZiAoIVt2aWV3IGlzRmxpcHBlZF0pCiAgICAgICAgICAg
ICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1h
eFkoKSk7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBwLCBjCiAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEp
OwogCiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0ID0gcjsKLSAgICAgICAgZGlydHlSZWN0Lm1v
dmUoLXRyYW5zZm9ybU9yaWdpbik7CisgICAgICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zZm9y
bU9yaWdpbik7CiAgICAgICAgIGlmICghW3ZpZXcgaXNGbGlwcGVkXSkKICAgICAgICAgICAgIGRp
cnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAko
cmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw3ICs5NTEsNyBAQCB2b2lkIElubGluZUZsb3dC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFs
T3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKICAgICBvdmVyZmxvd1JlY3QuaW5m
bGF0ZShyZW5kZXJlcigpLT5tYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAg
ICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1v
dmUocGFpbnRPZmZzZXQpOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwog
ICAgIAogICAgIGlmICghcGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5OCw3ICsyNzk4LDcgQEAgSW50UmVjdCBS
ZW5kZXJCbG9jazo6bG9naWNhbFJlY3RUb1BoeXNpYwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0
ID0gSW50UmVjdChsb2dpY2FsUmVjdC55KCksIGxvZ2ljYWxSZWN0LngoKSwgbG9naWNhbFJlY3Qu
aGVpZ2h0KCksIGxvZ2ljYWxSZWN0LndpZHRoKCkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShy
ZXN1bHQpOwotICAgIHJlc3VsdC5tb3ZlKHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOworICAg
IHJlc3VsdC5tb3ZlQnkocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbik7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMjgxMSw3ICsyODExLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNl
bGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xpcCBvdXQg
b3ZlcmZsb3cgZm9yIHBvc2l0aW9uZWQgb2JqZWN0cy4gIFdlIGp1c3Qgc3RpY2sgdG8gdGhlIGJv
cmRlciBib3guCiAgICAgICAgIEludFJlY3QgZmxpcHBlZEJsb2NrUmVjdCA9IEludFJlY3Qob2Zm
c2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCB3
aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJvb3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2Rl
KGZsaXBwZWRCbG9ja1JlY3QpOwotICAgICAgICBmbGlwcGVkQmxvY2tSZWN0Lm1vdmUocm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbik7CisgICAgICAgIGZsaXBwZWRCbG9ja1JlY3QubW92ZUJ5KHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOwogICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVj
dHMocGFpbnRJbmZvLCBmbGlwcGVkQmxvY2tSZWN0LmxvY2F0aW9uKCksIG1fcG9zaXRpb25lZE9i
amVjdHMuZ2V0KCkpOwogICAgICAgICBpZiAoaXNCb2R5KCkgfHwgaXNSb290KCkpIC8vIFRoZSA8
Ym9keT4gbXVzdCBtYWtlIHN1cmUgdG8gZXhhbWluZSBpdHMgY29udGFpbmluZ0Jsb2NrJ3MgcG9z
aXRpb25lZCBvYmplY3RzLgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMwOCw3ICsxMzA4LDcgQEAgSW50U2l6ZSBSZW5kZXJCb3g6
Om9mZnNldEZyb21Db250YWluZXIoUgogICAgICAgICAgICAgICAgIEludFJlY3QgY29sdW1uUmVj
dChmcmFtZVJlY3QoKSk7CiAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+ZmxpcEZv
cldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhjb2x1bW5SZWN0KTsKICAgICAgICAgICAgICAg
ICBvZmZzZXQgKz0gSW50U2l6ZShjb2x1bW5SZWN0LmxvY2F0aW9uKCkueCgpLCBjb2x1bW5SZWN0
LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgICAgICAgICBjb2x1bW5SZWN0Lm1vdmUocG9pbnQp
OworICAgICAgICAgICAgICAgIGNvbHVtblJlY3QubW92ZUJ5KHBvaW50KTsKICAgICAgICAgICAg
ICAgICBvLT5hZGp1c3RGb3JDb2x1bW5zKG9mZnNldCwgY29sdW1uUmVjdC5sb2NhdGlvbigpKTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBsb2NhdGlvbk9m
ZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCk7CkBAIC0xNDM0LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+
cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAg
ICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7CiAKLSAgICAg
ICAgICAgIHJlY3QubW92ZShsb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZUJ5KGxv
Y2F0aW9uKCkpOwogICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zm
c2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKQEAgLTMwOTks
NyArMzA5OSw3IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAg
ICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgo
KTsKIAogICAgIC8vIE1vdmUgdG8gbG9jYWwgY29vcmRzCi0gICAgcmVjdC5tb3ZlKC1sb2NhdGlv
bigpKTsKKyAgICByZWN0Lm1vdmVCeSgtbG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAg
dm9pZCBSZW5kZXJEZXRhaWxzTWFya2VyOjpwYWludChQYWludEluZgogCiAgICAgSW50UG9pbnQg
Ym94T3JpZ2luKHR4ICsgeCgpLCB0eSArIHkoKSk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3Qo
dmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwotICAgIG92ZXJmbG93UmVjdC5tb3ZlKGJveE9yaWdpbik7
CisgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAgIG92ZXJmbG93UmVjdC5p
bmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKIAogICAgIGlmICgh
cGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lv
biA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpwYWludChQYWludEluCiAgICAgUmVuZGVyUGFydDo6cGFpbnQocGFpbnRJbmZv
LCB0eCwgdHkpOwogfQogCi12b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIXBsdWdpbkNyYXNoZWRPcldhc01pc3Npbmco
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBGb250IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4o
IiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKLSAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdl
b21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3QsIHBhdGgsIHJlcGxhY2VtZW50VGV4dFJlY3QsIGZv
bnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5
KHBhaW50T2Zmc2V0LngoKSwgcGFpbnRPZmZzZXQueSgpLCBjb250ZW50UmVjdCwgcGF0aCwgcmVw
bGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5oCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlckVtYmVkZGVkT2JqZWN0IjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VtYmVkZGVkT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiwgaW50LCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxh
Y2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhU
TUxDYW52YXMuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBA
IGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNMYXllcigpIGMKICAgICByZXR1cm4gY2Fu
dmFzICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dCgpLT5pc0FjY2VsZXJhdGVkKCk7CiB9CiAKLXZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFp
bnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJl
bmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94
UmVjdCgpOwotICAgIHJlY3QubW92ZSh0eCwgdHkpOworICAgIHJlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IHN0eWxlKCktPmltYWdlUmVuZGVy
aW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRpbWl6ZUNvbnRyYXN0OwogICAgIHN0YXRpY19jYXN0
PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgpKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJIVE1MQ2FudmFzIjsgfQotICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgY2FudmFzU2l6ZUNo
YW5nZWQoKTsgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRl
ckltYWdlOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJJ
bWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
Cit2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaW50IGNXaWR0aCA9IGNvbnRlbnRX
aWR0aCgpOwogICAgIGludCBjSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwpAQCAtMjQ4LDExICsy
NDgsMTAgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmxpZ2h0R3JheSwgc3R5bGUoKS0+Y29sb3JT
cGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnQsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3
UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsg
dG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0
KEludFJlY3QocGFpbnRPZmZzZXQueCgpICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHBhaW50T2Zm
c2V0LnkoKSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAKICAgICAg
ICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKLSAgICAgICAgICAgIGludCBp
bWFnZVggPSAwOwotICAgICAgICAgICAgaW50IGltYWdlWSA9IDA7CisgICAgICAgICAgICBJbnRT
aXplIGltYWdlT2Zmc2V0OwogICAgICAgICAgICAgLy8gV2hlbiBjYWxjdWxhdGluZyB0aGUgdXNh
YmxlIGRpbWVuc2lvbnMsIGV4Y2x1ZGUgdGhlIHBpeGVscyBvZgogICAgICAgICAgICAgLy8gdGhl
IG91bGluZSByZWN0IHNvIHRoZSBlcnJvciBpbWFnZS9hbHQgdGV4dCBkb2Vzbid0IGRyYXcgb24g
aXQuCiAgICAgICAgICAgICBpbnQgdXNhYmxlV2lkdGggPSBjV2lkdGggLSAyOwpAQCAtMjY4LDMw
ICsyNjcsMjkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAg
ICAgICAgICAgICAgIGludCBjZW50ZXJZID0gKHVzYWJsZUhlaWdodCAtIGltYWdlLT5oZWlnaHQo
KSkgLyAyOwogICAgICAgICAgICAgICAgIGlmIChjZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAg
ICAgICAgY2VudGVyWSA9IDA7Ci0gICAgICAgICAgICAgICAgaW1hZ2VYID0gbGVmdEJvcmRlciAr
IGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKLSAgICAgICAgICAgICAgICBpbWFnZVkgPSB0b3BCb3Jk
ZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgSW50UG9pbnQodHggKyBp
bWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAgICAgICAgICAgICAgaW1hZ2VPZmZzZXQgPSBJbnRT
aXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBh
ZCArIGNlbnRlclkgKyAxKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJlRHJhd24gPSB0cnVlOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5
RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHls
ZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgICAgIGludCBheCA9IHR4ICsgbGVmdEJv
cmRlciArIGxlZnRQYWQ7Ci0gICAgICAgICAgICAgICAgaW50IGF5ID0gdHkgKyB0b3BCb3JkZXIg
KyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZv
bnQoKTsKICAgICAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBm
b250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAgICAgICAgaW50IGFzY2VudCA9IGZvbnRNZXRy
aWNzLmFzY2VudCgpOworICAgICAgICAgICAgICAgIEludFBvaW50IGFsdFRleHRPZmZzZXQgPSBw
YWludE9mZnNldDsKKyAgICAgICAgICAgICAgICBhbHRUZXh0T2Zmc2V0Lm1vdmUobGVmdEJvcmRl
ciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBhZCArIGFzY2VudCk7CiAKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhlIGNv
bnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJvdmUg
dGhlIGVycm9yIGltYWdlLgogICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCkpOwogICAg
ICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAg
ICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewotICAgICAgICAgICAgICAgICAgICBp
ZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGlt
YWdlWSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRl
eHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGlt
YWdlT2Zmc2V0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJh
d1RleHQoZm9udCwgdGV4dFJ1biwgYWx0VGV4dE9mZnNldCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgY0hlaWdodCA+PSBmb250TWV0cmlj
cy5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwg
dGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIGFsdFRleHRPZmZzZXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2ltYWdlUmVzb3VyY2UtPmhhc0lt
YWdlKCkgJiYgY1dpZHRoID4gMCAmJiBjSGVpZ2h0ID4gMCkgewpAQCAtMzAxLDEyICsyOTksMTMg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYg
IXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBwYWlu
dEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0eCAtIHgoKSwgdHkgLSB5KCkpLCBzdHlsZSgpLT5o
aWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0b1Bv
aW50KHBhaW50T2Zmc2V0IC0gbG9jYXRpb24oKSksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVl
KTsKICNlbmRpZgogCiAgICAgICAgIEludFNpemUgY29udGVudFNpemUoY1dpZHRoLCBjSGVpZ2h0
KTsKLSAgICAgICAgSW50UmVjdCByZWN0KEludFBvaW50KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQ
YWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgY29udGVudFNpemUpOwotICAgICAgICBwYWlu
dEludG9SZWN0KGNvbnRleHQsIHJlY3QpOworICAgICAgICBJbnRQb2ludCBjb250ZW50TG9jYXRp
b24gPSBwYWludE9mZnNldDsKKyAgICAgICAgY29udGVudExvY2F0aW9uLm1vdmUobGVmdEJvcmRl
ciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBhZCk7CisgICAgICAgIHBhaW50SW50b1JlY3Qo
Y29udGV4dCwgSW50UmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRlbnRTaXplKSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24g
ODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lt
YWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklt
YWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGlu
dCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OSwx
MCArODk5LDEwIEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWwKICAg
ICAgICAgICAgIGlmICghY3VyckJveC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxS
ZWN0ID0gY3VyckJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHN0
eWxlKCkpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbG9naWNhbFJlY3QubW92ZShjdXJyQm94LT5sb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZUJ5KGN1cnJCb3gtPmxvY2F0aW9uKCkpOwogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8obG9naWNhbFJlY3QpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1v
dmUoY3VyckJveC0+bG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0
Lm1vdmVCeShjdXJyQm94LT5sb2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0LnRyYW5zcG9zZWRSZWN0KCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsNyArOTAwLDcgQEAgc3Rh
dGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50cwogICAgICAgICBsLT5jb252ZXJ0
VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAgY2xpcFJlY3QubW92ZSgt
ZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKICAgICAgICAgY2xpcFJlY3QudW5pdGUobC0+cmVuZGVy
Qm94KCktPnJlZmxlY3RlZFJlY3QoY2xpcFJlY3QpKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZShk
ZWx0YSk7CisgICAgICAgIGNsaXBSZWN0Lm1vdmVCeShkZWx0YSk7CiAgICAgfQogfQogCkBAIC0y
MzI1LDcgKzIzMjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFw
CiAgICAgQVNTRVJUKGJveCk7CiAKICAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJS
ZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlKHBhaW50T2Zmc2V0KTsKKyAgICBhYnNSZWN0Lm1vdmVC
eShwYWludE9mZnNldCk7CiAgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjM1NCw3ICsyMzU0LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogICAgIEFTU0VSVChib3gpOwogCiAgICAgSW50UmVj
dCBhYnNSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkp
OwotICAgIGFic1JlY3QubW92ZShwYWludE9mZnNldCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwogICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI3NzIsNyArMjc3Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50Q2hpbGRMYXllckludG9Db2wKICAgICAgICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlz
SG9yaXpvbnRhbCA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0gY29sdW1uQmxvY2stPmxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwogICAgICAgICBJbnRTaXplIG9mZnNldCA9IGlz
SG9yaXpvbnRhbCA/IEludFNpemUobG9naWNhbExlZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9wT2Zm
c2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsK
IAotICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJPZmZzZXQpOworICAgICAgICBjb2xSZWN0Lm1v
dmVCeShsYXllck9mZnNldCk7CiAKICAgICAgICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChwYWlu
dERpcnR5UmVjdCk7CiAgICAgICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2VjdChjb2xSZWN0KTsK
QEAgLTMyNTYsNyArMzI1Niw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENo
aWxkTGEKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0IC09IGJsb2NrRGVsdGE7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0ICs9IGJsb2NrRGVs
dGE7Ci0gICAgICAgIGNvbFJlY3QubW92ZShsYXllck9mZnNldCk7CisgICAgICAgIGNvbFJlY3Qu
bW92ZUJ5KGxheWVyT2Zmc2V0KTsKIAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0
VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAg
LTM1OTcsNyArMzU5Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0
IFIKICAgICAgICAgcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5n
TW9kZShyZXN1bHQpOwogICAgIEludFBvaW50IGRlbHRhOwogICAgIGNvbnZlcnRUb0xheWVyQ29v
cmRzKGFuY2VzdG9yTGF5ZXIsIGRlbHRhKTsKLSAgICByZXN1bHQubW92ZShkZWx0YSk7CisgICAg
cmVzdWx0Lm1vdmVCeShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkzNCw3
ICszOTM0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogICAg
ICAgICBJbnRSZWN0IGFic1JlY3Qocik7CiAgICAgICAgIEludFBvaW50IGRlbHRhOwogICAgICAg
ICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIGRlbHRhKTsKLSAgICAgICAgYWJzUmVjdC5t
b3ZlKGRlbHRhKTsKKyAgICAgICAgYWJzUmVjdC5tb3ZlQnkoZGVsdGEpOwogCiAgICAgICAgIFJl
bmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgSW50UmVjdCByZWxhdGl2ZUNv
bXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOwogICAgIEludFBvaW50IGRl
bHRhOwogICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3Rv
ciwgZGVsdGEpOwotICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZShkZWx0YSk7Cisg
ICAgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5tb3ZlQnkoZGVsdGEpOwogCiAgICAgSW50UG9p
bnQgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uOwogICAgIGlmIChjb21wQW5jZXN0b3IgJiYg
Y29tcEFuY2VzdG9yLT5iYWNraW5nKCktPmhhc0NsaXBwaW5nTGF5ZXIoKSkgewpAQCAtMTE5Nyw3
ICsxMTk3LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzYwogICAg
IGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwog
ICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJhclJlY3Qu
eSgpKTsKICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgdHJhbnNmb3Jt
ZWRDbGlwLm1vdmUoc2Nyb2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKKyAgICB0cmFuc2Zvcm1lZENs
aXAubW92ZUJ5KHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CiAgICAgc2Nyb2xsYmFyLT5wYWlu
dCgmY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0K
QEAgLTEyMzEsNyArMTIzMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRl
bnRzKGMKICAgICAgICAgY29udGV4dC5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KC1zY3JvbGxDb3JuZXJBbmRSZXNpemVyLngoKSwgLXNjcm9sbENvcm5lckFuZFJlc2l6ZXIueSgp
KTsKICAgICAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwotICAgICAgICB0cmFu
c2Zvcm1lZENsaXAubW92ZShzY3JvbGxDb3JuZXJBbmRSZXNpemVyLmxvY2F0aW9uKCkpOworICAg
ICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbENvcm5lckFuZFJlc2l6ZXIubG9jYXRp
b24oKSk7CiAgICAgICAgIG1fb3duaW5nTGF5ZXItPnBhaW50U2Nyb2xsQ29ybmVyKCZjb250ZXh0
LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwogICAgICAgICBtX293bmluZ0xheWVyLT5w
YWludFJlc2l6ZXIoJmNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1MSw3ICs0NTEsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y2FsY3VsYXRlCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8
fCBsYXllci0+cmVuZGVyZXIoKS0+aGFzTWFzaygpKSB7CiAgICAgICAgIEludFBvaW50IGFuY2Vz
dG9yUmVsT2Zmc2V0OwogICAgICAgICBsYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0
b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwotICAgICAgICBib3VuZGluZ0JveFJlY3QubW92
ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAgICAgIGJvdW5kaW5nQm94UmVjdC5tb3ZlQnkoYW5j
ZXN0b3JSZWxPZmZzZXQpOwogICAgICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0OwogICAgIH0K
IApAQCAtNTA1LDcgKzUwNSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxj
dWxhdGUKIAogICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgIGxheWVyLT5jb252
ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7Ci0gICAg
dW5pb25Cb3VuZHMubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAgdW5pb25Cb3VuZHMubW92
ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsKIAogICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KQEAg
LTUyOSw3ICs1MjksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVS
CiAKICAgICAgICAgSW50UG9pbnQgb2Zmc2V0OwogICAgICAgICBjaGlsZC0+Y29udmVydFRvTGF5
ZXJDb29yZHMoY29tcExheWVyLCBvZmZzZXQpOwotICAgICAgICBjb21wQm91bmRzLm1vdmUob2Zm
c2V0KTsKKyAgICAgICAgY29tcEJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKIAogICAgICAgICBjb21w
TGF5ZXItPnNldEJhY2tpbmdOZWVkc1JlcGFpbnRJblJlY3QoY29tcEJvdW5kcyk7CiAKQEAgLTE0
MzYsNyArMTQzNiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2MK
ICAgICBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyUmVjdC54KCksIC1zY3JvbGxiYXJS
ZWN0LnkoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwotICAgIHRyYW5z
Zm9ybWVkQ2xpcC5tb3ZlKHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CisgICAgdHJhbnNmb3Jt
ZWRDbGlwLm1vdmVCeShzY3JvbGxiYXJSZWN0LmxvY2F0aW9uKCkpOwogICAgIHNjcm9sbGJhci0+
cGFpbnQoJmNvbnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7
CiB9CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFp
bnRDb250ZW50CiAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwogICAgICAgICBjb250ZXh0LnRyYW5z
bGF0ZSgtc2Nyb2xsQ29ybmVyLngoKSwgLXNjcm9sbENvcm5lci55KCkpOwogICAgICAgICBJbnRS
ZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3Zl
KHNjcm9sbENvcm5lci5sb2NhdGlvbigpKTsKKyAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVC
eShzY3JvbGxDb3JuZXIubG9jYXRpb24oKSk7CiAgICAgICAgIG1fcmVuZGVyVmlldy0+ZnJhbWVW
aWV3KCktPnBhaW50U2Nyb2xsQ29ybmVyKCZjb250ZXh0LCB0cmFuc2Zvcm1lZENsaXApOwogICAg
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDcg
KzY5MCw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIEludFJl
Y3QgUmVuZGVyTGlzdEJveDo6Y29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0KSBjb25zdAogewogICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94UmVj
dCgpOwotICAgIGNsaXBSZWN0Lm1vdmUoYWRkaXRpb25hbE9mZnNldCk7CisgICAgY2xpcFJlY3Qu
bW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lv
biA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpw
b3NpdGlvbkxpc3RNYXJrZXIoCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dE92
ZXJmbG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZpc3VhbE92ZXJmbG93ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1vLT5sb2NhdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmVCeSgtby0+bG9jYXRpb24oKSk7CiAgICAgICAg
ICAgICB9IHdoaWxlIChvICE9IHRoaXMgJiYgcHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cgJiYgcHJv
cGFnYXRlTGF5b3V0T3ZlcmZsb3cpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gODc5NDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQoUGFpbnRJbmZvJiAKIAogICAgIEludFBvaW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5
KCkpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKLSAg
ICBvdmVyZmxvd1JlY3QubW92ZShib3hPcmlnaW4pOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnko
Ym94T3JpZ2luKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUo
cGFpbnRJbmZvLnBoYXNlKSk7CiAKICAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMo
b3ZlcmZsb3dSZWN0KSkKQEAgLTExMjAsNyArMTEyMCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJbnRSZWN0IGJveChib3hPcmlnaW4sIEludFNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpKTsKICAgICAKICAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0
aXZlTWFya2VyUmVjdCgpOwotICAgIG1hcmtlci5tb3ZlKGJveE9yaWdpbik7CisgICAgbWFya2Vy
Lm1vdmVCeShib3hPcmlnaW4pOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQ7CiAKQEAgLTExMzIsNyArMTEzMiw3IEBAIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1h
Z2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCksIG1hcmtlcik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5v
bmUpIHsKICAgICAgICAgICAgIEludFJlY3Qgc2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgp
OwotICAgICAgICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAgICAgICBzZWxS
ZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2Vs
UmVjdCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewogICAgICAgICBJbnRSZWN0IHNlbFJlY3QgPSBsb2Nh
bFNlbGVjdGlvblJlY3QoKTsKLSAgICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAg
ICAgIHNlbFJlY3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KHNlbFJlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgIH0KIApAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2Vy
OjpwYWludChQYWludEluZm8mIAogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIG1hcmtlci5tb3ZlKC1ib3hPcmlnaW4pOworICAgICAg
ICBtYXJrZXIubW92ZUJ5KC1ib3hPcmlnaW4pOwogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJh
bnNwb3NlZFJlY3QoKTsKICAgICAgICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxv
Z2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4Nzk0MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgfQogCiAgICAgaWYgKCFjb21wbGV0ZWx5Q2xpcHBlZE91dCkgewotICAg
ICAgICBwYWludFJlcGxhY2VkKHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgcGFpbnRSZXBs
YWNlZChwYWludEluZm8sIEludFBvaW50KHR4LCB0eSkpOwogCiAgICAgICAgIGlmIChzdHlsZSgp
LT5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAko
cmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIGludCBj
YWxjQXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVjdFJh
dGlvTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFj
ZWQoUGFpbnRJbmZvJiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKSB7IH0KIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTQsNyArMjk0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVw
YQogICAgIHIuc2V0WShyLnkoKSk7CiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBp
ZiAoKCF2IHx8ICF2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSB8fCByZXBhaW50Q29udGFpbmVyKSAm
JiBwYXJlbnQoKSkKLSAgICAgICAgci5tb3ZlKC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8v
IFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVp
ciBvZmZzZXQgaW4uCisgICAgICAgIHIubW92ZUJ5KC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7
IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0
aGVpciBvZmZzZXQgaW4uCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyLCByLCBmaXhlZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgSW50
UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbgogICAgIEFTU0VSVChoYXNDb250
cm9sQ2xpcCgpKTsKIAogICAgIEludFJlY3QgY2xpcFJlY3QgPSBJbnRSZWN0KGlubmVyQmxvY2tF
bGVtZW50KCktPnJlbmRlckJveCgpLT5mcmFtZVJlY3QoKSk7Ci0gICAgY2xpcFJlY3QubW92ZShh
ZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICBjbGlwUmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7
CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBA
IGJvb2wgUmVuZGVyVmlkZW86OnNob3VsZERpc3BsYXlWaWRlbygpIGMKICAgICByZXR1cm4gIXZp
ZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKIH0KIAotdm9pZCBSZW5k
ZXJWaWRlbzo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCit2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlh
UGxheWVyID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGJvb2wgZGlzcGxheWluZ1Bv
c3RlciA9IHZpZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKQEAgLTE5
OCw3ICsxOTgsNyBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAg
ICAgSW50UmVjdCByZWN0ID0gdmlkZW9Cb3goKTsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICByZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CiAKICAgICBpZiAoZGlzcGxheWluZ1Bvc3RlcikKICAgICAgICAgcGFpbnRJ
bnRvUmVjdChwYWludEluZm8uY29udGV4dCwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlkZW8uaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzMsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwog
ICAgICAgICAKICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IHRoZSBjb250ZW50c1ggYW5kIGNvbnRl
bnRzWSBvZmZzZXRzIHRvIGdldCBvdXIgY29vcmRzIHdpdGhpbiB0aGUgdmlld2luZwogICAgICAg
ICAvLyByZWN0YW5nbGUuCi0gICAgICAgIHIubW92ZSgtdnIubG9jYXRpb24oKSk7CisgICAgICAg
IHIubW92ZUJ5KC12ci5sb2NhdGlvbigpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBI
YXJkY29kZWQgb2Zmc2V0cyBoZXJlIGFyZSBub3QgZ29vZC4KICAgICAgICAgci5tb3ZlKG9iai0+
Ym9yZGVyTGVmdCgpICsgb2JqLT5wYWRkaW5nTGVmdCgpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95802</attachid>
            <date>2011-06-02 14:02:33 -0700</date>
            <delta_ts>2011-06-02 14:20:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61891-20110602140232.patch</filename>
            <type>text/plain</type>
            <size>37058</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDYtMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBwYWludFJlcGxhY2VkIHRvIHVzZSBJbnRQb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTEK
KworICAgICAgICBTd2l0Y2hpbmcgcGFpbnRSZXBsYWNlZCB0byB1c2UgSW50UG9pbnQgdG8gcmVw
cmVzZW50IHRoZSBwYWludCBvZmZzZXQgaW5zdGVhZAorICAgICAgICBvZiBhIHBhaXIgb2YgaW50
cy4KKworICAgICAgICBBbHNvIHJlbmFtaW5nIHRoZSBJbnRQb2ludCBmbGF2b3Igb2YgSW50UmVj
dDo6bW92ZSB0byBtb3ZlQnkgdG8gY2xlYXIgdXAgdGhlCisgICAgICAgIGZhY3QgdGhhdCB0aGUg
SW50UG9pbnQgaXMgYWRkZWQgYXMgYW4gb2Zmc2V0IGFzIG9wcG9zZWQgdG8gYmVpbmcgcmVsb2Nh
dGVkCisgICAgICAgIHRvIHRoYXQgcG9pbnQuCisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0
aGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmludmFsaWRh
dGVQYXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJlY3QpCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6bW92ZUJ5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckRldGFpbHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWls
c01hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBs
YWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckhUTUxDYW52YXMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1
YWxPdmVyZmxvd0JvdW5kaW5nQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJl
ZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29y
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50SW5SZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFy
a2VyOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6
cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xD
bGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlkZW8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZSk6CisKIDIw
MTEtMDYtMDIgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2Myw3ICsyMTYzLDcgQEAgdm9pZCBGcmFtZVZpZXc6
OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KAogewogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0IHdp
dGhpbiB0aGUgRnJhbWVWaWV3LgogICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBk
aXJ0eVJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIGRpcnR5UmVjdC5tb3Zl
Qnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3Qp
OwogfQogCkBAIC0yNjI3LDcgKzI2MjcsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydEZy
b21SZW5kZXJlcihjCiAgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRSZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAK
ICAgICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikgdG8gRnJhbWVWaWV3IGNvb3Jk
aW5hdGVzLgotICAgIHJlY3QubW92ZSgtc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgcmVjdC5tb3Zl
QnkoLXNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0yNjM3LDcg
KzI2MzcsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIoY29uCiAgICAg
SW50UmVjdCByZWN0ID0gdmlld1JlY3Q7CiAgICAgCiAgICAgLy8gQ29udmVydCBmcm9tIEZyYW1l
VmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUiKSBjb29yZGluYXRlcy4KLSAgICByZWN0
Lm1vdmUoc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgcmVjdC5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24o
KSk7CiAKICAgICAvLyBGSVhNRTogd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBtYXAgYW4gYWJzb2x1
dGUgcmVjdCBkb3duIHRvIGEgbG9jYWwgcXVhZCwgc28ganVzdAogICAgIC8vIG1vdmUgdGhlIHJl
Y3QgZm9yIG5vdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShy
ZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDExICsxMDA4LDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKIAogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgp
LCB5KCkpOwotICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAg
ICAgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZUJ5KC1sb2NhdGlvbigpKTsKIAogICAgICAgICBp
ZiAoIXBhaW50c0VudGlyZUNvbnRlbnRzKCkpIHsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50RGlydHlS
ZWN0Lm1vdmUoc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICBkb2N1bWVudERpcnR5UmVj
dC5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAo
dmlzaWJsZUNvbnRlbnRSZWN0KCkpOwogICAgICAgICB9CkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIEludFJlY3Qg
c2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3Qu
aW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwg
eSgpKTsKLSAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAg
ICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlQnkoLWxvY2F0aW9uKCkpOwogCiAgICAgICAg
IHBhaW50U2Nyb2xsYmFycyhjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKICAgICB9CkBA
IC0xMTI3LDcgKzExMjcsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xs
YmFyCiB7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMK
ICAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2NhbFJlY3Q7Ci0gICAgbmV3UmVjdC5tb3ZlKHNjcm9s
bGJhci0+bG9jYXRpb24oKSk7CisgICAgbmV3UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlv
bigpKTsKICAgICByZXR1cm4gbmV3UmVjdDsKIH0KIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAgSW50
UmVjdCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogewogICAgIEludFJlY3QgbmV3
UmVjdCA9IHBhcmVudFJlY3Q7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1l
ZCB3aXRoaW4gdXMKLSAgICBuZXdSZWN0Lm1vdmUoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7Cisg
ICAgbmV3UmVjdC5tb3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5l
d1JlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzQsNyArMjM0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aW52YWxpZGF0
ZQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRodW1iUmVjdDsKICAgICAgICAgfQogICAgIH0K
LSAgICByZXN1bHQubW92ZSgtc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICByZXN1bHQubW92
ZUJ5KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJl
Y3QocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJs
aWM6CiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQoeCgpICsg
d2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KIAogICAgIHZvaWQgbW92ZShjb25z
dCBJbnRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2b2lkIG1vdmUo
Y29uc3QgSW50UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zm
c2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSB7IG1f
bG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQogICAgIHZvaWQgbW92ZShp
bnQgZHgsIGludCBkeSkgeyBtX2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKIAogICAgIHZvaWQg
ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3Bw
CShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgVGV4
dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAgICAgICAgdXBkYXRlUmVjdEludGVy
c2VjdGVkLmludGVyc2VjdCh0aWxlQm91bmRzV2l0aEJvcmRlcik7CiAKICAgICAgICAgSW50UmVj
dCBkc3RSZWN0ID0gdXBkYXRlUmVjdEludGVyc2VjdGVkOwotICAgICAgICBkc3RSZWN0Lm1vdmUo
LXRpbGVCb3VuZHNXaXRoQm9yZGVyLmxvY2F0aW9uKCkpOworICAgICAgICBkc3RSZWN0Lm1vdmVC
eSgtdGlsZUJvdW5kc1dpdGhCb3JkZXIubG9jYXRpb24oKSk7CiAKICAgICAgICAgaWYgKHVwZGF0
ZVJlY3RJbnRlcnNlY3RlZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNpb24gODc5NDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogcCwgYwogICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLXRyYW5zZm9y
bU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKIAogICAgICAgICBJbnRSZWN0IGRp
cnR5UmVjdCA9IHI7Ci0gICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFuc2Zvcm1PcmlnaW4pOwor
ICAgICAgICBkaXJ0eVJlY3QubW92ZUJ5KC10cmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBpZiAo
IVt2aWV3IGlzRmxpcHBlZF0pCiAgICAgICAgICAgICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3Vu
ZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7CiAKQEAgLTI5Miw3ICsyOTIsNyBA
QCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjCiAgICAgICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwogCiAgICAgICAgIEludFJlY3QgZGlydHlS
ZWN0ID0gcjsKLSAgICAgICAgZGlydHlSZWN0Lm1vdmUoLXRyYW5zZm9ybU9yaWdpbik7CisgICAg
ICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zZm9ybU9yaWdpbik7CiAgICAgICAgIGlmICghW3Zp
ZXcgaXNGbGlwcGVkXSkKICAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10u
c2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
MSw3ICs5NTEsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAg
ICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVC
b3R0b20pKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShyZW5kZXJlcigpLT5tYXhpbWFsT3V0
bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUocGFpbnRPZmZzZXQpOworICAgIG92ZXJm
bG93UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogICAgIAogICAgIGlmICghcGFpbnRJbmZvLnJl
Y3QuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc5OCw3ICsyNzk4LDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJlY3RUb1Bo
eXNpYwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChsb2dpY2FsUmVjdC55KCks
IGxvZ2ljYWxSZWN0LngoKSwgbG9naWNhbFJlY3QuaGVpZ2h0KCksIGxvZ2ljYWxSZWN0LndpZHRo
KCkpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZXN1bHQpOwotICAgIHJlc3VsdC5tb3ZlKHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOworICAgIHJlc3VsdC5tb3ZlQnkocm9vdEJsb2NrUGh5
c2ljYWxQb3NpdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjgxMSw3ICsyODEx
LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAv
LyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xpcCBvdXQgb3ZlcmZsb3cgZm9yIHBvc2l0aW9uZWQgb2Jq
ZWN0cy4gIFdlIGp1c3Qgc3RpY2sgdG8gdGhlIGJvcmRlciBib3guCiAgICAgICAgIEludFJlY3Qg
ZmxpcHBlZEJsb2NrUmVjdCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBv
ZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAg
IHJvb3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRCbG9ja1JlY3QpOwotICAgICAg
ICBmbGlwcGVkQmxvY2tSZWN0Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbik7CisgICAg
ICAgIGZsaXBwZWRCbG9ja1JlY3QubW92ZUJ5KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOwog
ICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBmbGlwcGVkQmxvY2tS
ZWN0LmxvY2F0aW9uKCksIG1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkpOwogICAgICAgICBpZiAo
aXNCb2R5KCkgfHwgaXNSb290KCkpIC8vIFRoZSA8Ym9keT4gbXVzdCBtYWtlIHN1cmUgdG8gZXhh
bWluZSBpdHMgY29udGFpbmluZ0Jsb2NrJ3MgcG9zaXRpb25lZCBvYmplY3RzLgogICAgICAgICAg
ICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOCw3
ICsxMzA4LDcgQEAgSW50U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUgogICAg
ICAgICAgICAgICAgIEludFJlY3QgY29sdW1uUmVjdChmcmFtZVJlY3QoKSk7CiAgICAgICAgICAg
ICAgICAgdG9SZW5kZXJCbG9jayhvKS0+ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1u
cyhjb2x1bW5SZWN0KTsKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gSW50U2l6ZShjb2x1bW5S
ZWN0LmxvY2F0aW9uKCkueCgpLCBjb2x1bW5SZWN0LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAg
ICAgICAgICBjb2x1bW5SZWN0Lm1vdmUocG9pbnQpOworICAgICAgICAgICAgICAgIGNvbHVtblJl
Y3QubW92ZUJ5KHBvaW50KTsKICAgICAgICAgICAgICAgICBvLT5hZGp1c3RGb3JDb2x1bW5zKG9m
ZnNldCwgY29sdW1uUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIG9mZnNldCArPSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCk7CkBA
IC0xNDM0LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50
KFJlCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0
aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0
aXZlUG9zaXRpb25PZmZzZXQoKSk7CiAKLSAgICAgICAgICAgIHJlY3QubW92ZShsb2NhdGlvbigp
KTsKKyAgICAgICAgICAgIHJlY3QubW92ZUJ5KGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgcmVj
dC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlv
dXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91
dFN0YXRlLT5tX2NsaXBSZWN0KTsKQEAgLTMwOTksNyArMzA5OSw3IEBAIEludFJlY3QgUmVuZGVy
Qm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgoKTsKIAogICAgIC8vIE1vdmUgdG8gbG9jYWwg
Y29vcmRzCi0gICAgcmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICByZWN0Lm1vdmVCeSgtbG9j
YXRpb24oKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlzaW9uIDg3OTQyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBSZW5kZXJEZXRhaWxzTWFya2VyOjpw
YWludChQYWludEluZgogCiAgICAgSW50UG9pbnQgYm94T3JpZ2luKHR4ICsgeCgpLCB0eSArIHko
KSk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwotICAg
IG92ZXJmbG93UmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShi
b3hPcmlnaW4pOwogICAgIG92ZXJmbG93UmVjdC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShw
YWludEluZm8ucGhhc2UpKTsKIAogICAgIGlmICghcGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhv
dmVyZmxvd1JlY3QpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSw3ICsxNDUsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludChQYWludEluCiAg
ICAgUmVuZGVyUGFydDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCi12b2lkIFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBp
ZiAoIXBsdWdpbkNyYXNoZWRPcldhc01pc3NpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYz
LDcgKzE2Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAg
ICBGb250IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsK
LSAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3Qs
IHBhdGgsIHJlcGxhY2VtZW50VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICBp
ZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KHBhaW50T2Zmc2V0LngoKSwgcGFpbnRPZmZz
ZXQueSgpLCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVu
LCB0ZXh0V2lkdGgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCShyZXZpc2lvbiA4Nzk0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckVtYmVkZGVkT2JqZWN0IjsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0VtYmVkZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50LCBpbnQp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQs
IGludCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiA4Nzk0
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVx
dWlyZXNMYXllcigpIGMKICAgICByZXR1cm4gY2FudmFzICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dCgpICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkKCk7CiB9
CiAKLXZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsK
ICAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIHJlY3QubW92ZSh0eCwg
dHkpOworICAgIHJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSA9IHN0eWxlKCktPmltYWdlUmVuZGVyaW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRp
bWl6ZUNvbnRyYXN0OwogICAgIHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgp
KS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJl
dmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52
YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJIVE1MQ2FudmFzIjsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBh
aW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNl
ZChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5z
aWNTaXplQ2hhbmdlZCgpIHsgY2FudmFzU2l6ZUNoYW5nZWQoKTsgfQogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpub3RpZnlGaW5pc2hlZChDYWNo
ZWRSCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckltYWdlOjpwYWludFJl
cGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQp
CiB7CiAgICAgaW50IGNXaWR0aCA9IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBjSGVpZ2h0ID0g
Y29udGVudEhlaWdodCgpOwpAQCAtMjQ4LDExICsyNDgsMTAgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5
bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29s
b3I6OmxpZ2h0R3JheSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRl
ciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KEludFJlY3QocGFpbnRPZmZzZXQueCgpICsg
bGVmdEJvcmRlciArIGxlZnRQYWQsIHBhaW50T2Zmc2V0LnkoKSArIHRvcEJvcmRlciArIHRvcFBh
ZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJh
d24gPSBmYWxzZTsKLSAgICAgICAgICAgIGludCBpbWFnZVggPSAwOwotICAgICAgICAgICAgaW50
IGltYWdlWSA9IDA7CisgICAgICAgICAgICBJbnRTaXplIGltYWdlT2Zmc2V0OwogICAgICAgICAg
ICAgLy8gV2hlbiBjYWxjdWxhdGluZyB0aGUgdXNhYmxlIGRpbWVuc2lvbnMsIGV4Y2x1ZGUgdGhl
IHBpeGVscyBvZgogICAgICAgICAgICAgLy8gdGhlIG91bGluZSByZWN0IHNvIHRoZSBlcnJvciBp
bWFnZS9hbHQgdGV4dCBkb2Vzbid0IGRyYXcgb24gaXQuCiAgICAgICAgICAgICBpbnQgdXNhYmxl
V2lkdGggPSBjV2lkdGggLSAyOwpAQCAtMjY4LDMwICsyNjcsMjkgQEAgdm9pZCBSZW5kZXJJbWFn
ZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgICAgIGludCBjZW50ZXJZID0g
KHVzYWJsZUhlaWdodCAtIGltYWdlLT5oZWlnaHQoKSkgLyAyOwogICAgICAgICAgICAgICAgIGlm
IChjZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7Ci0gICAgICAg
ICAgICAgICAgaW1hZ2VYID0gbGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKLSAg
ICAgICAgICAgICAgICBpbWFnZVkgPSB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgSW50UG9pbnQodHggKyBpbWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAg
ICAgICAgICAgICAgaW1hZ2VPZmZzZXQgPSBJbnRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsg
Y2VudGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgcGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgZXJyb3JQ
aWN0dXJlRHJhd24gPSB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIW1f
YWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3Vt
ZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAg
ICAgICAgICAgIGludCBheCA9IHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7Ci0gICAgICAgICAg
ICAgICAgaW50IGF5ID0gdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgICAgICBjb25z
dCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAg
ICAgICAgICAgaW50IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgICAgICAgICAg
ICAgIEludFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICAgICAgICAgICAg
ICBhbHRUZXh0T2Zmc2V0Lm1vdmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRv
cFBhZCArIGFzY2VudCk7CiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0
ZXh0IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAg
IC8vIGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgogICAgICAgICAg
ICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRo
aXMsIGZvbnQsIHRleHQsIHN0eWxlKCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGgg
PSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVE
cmF3bikgewotICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRo
ICYmIGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlWSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFz
Y2VudCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRo
ICYmIGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlT2Zmc2V0LmhlaWdodCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgYWx0VGV4
dE9mZnNldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0
V2lkdGggJiYgY0hlaWdodCA+PSBmb250TWV0cmljcy5oZWlnaHQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsg
YXNjZW50KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRl
eHRSdW4sIGFsdFRleHRPZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgJiYgY1dpZHRoID4gMCAmJiBjSGVp
Z2h0ID4gMCkgewpAQCAtMzAxLDEyICsyOTksMTMgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRS
ZXBsYWNlZChQYWludEluZgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUo
KS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0
eCAtIHgoKSwgdHkgLSB5KCkpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0b1BvaW50KHBhaW50T2Zmc2V0IC0gbG9jYXRpb24o
KSksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgICAgIEludFNp
emUgY29udGVudFNpemUoY1dpZHRoLCBjSGVpZ2h0KTsKLSAgICAgICAgSW50UmVjdCByZWN0KElu
dFBvaW50KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFk
KSwgY29udGVudFNpemUpOwotICAgICAgICBwYWludEludG9SZWN0KGNvbnRleHQsIHJlY3QpOwor
ICAgICAgICBJbnRQb2ludCBjb250ZW50TG9jYXRpb24gPSBwYWludE9mZnNldDsKKyAgICAgICAg
Y29udGVudExvY2F0aW9uLm1vdmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRv
cFBhZCk7CisgICAgICAgIHBhaW50SW50b1JlY3QoY29udGV4dCwgSW50UmVjdChjb250ZW50TG9j
YXRpb24sIGNvbnRlbnRTaXplKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBj
b25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OSwxMCArODk5LDEwIEBAIEludFJlY3QgUmVuZGVy
SW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWwKICAgICAgICAgICAgIGlmICghY3VyckJveC0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gY3VyckJveC0+bG9naWNhbFZpc3Vh
bE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHN0eWxlKCkpOwogICAgICAgICAgICAgICAgIGlm
IChpc0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZShj
dXJyQm94LT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92
ZUJ5KGN1cnJCb3gtPmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5p
dGVJZk5vblplcm8obG9naWNhbFJlY3QpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoY3VyckJveC0+bG9jYXRpb24oKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVCeShjdXJyQm94LT5sb2NhdGlvbigp
KTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0
LnRyYW5zcG9zZWRSZWN0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gODc5
NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MDAsNyArOTAwLDcgQEAgc3RhdGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JE
ZXNjZW5kYW50cwogICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRl
bHRhKTsKICAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKICAg
ICAgICAgY2xpcFJlY3QudW5pdGUobC0+cmVuZGVyQm94KCktPnJlZmxlY3RlZFJlY3QoY2xpcFJl
Y3QpKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7CisgICAgICAgIGNsaXBSZWN0Lm1v
dmVCeShkZWx0YSk7CiAgICAgfQogfQogCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwCiAgICAgQVNTRVJUKGJveCk7CiAKICAgICBJ
bnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlKHBh
aW50T2Zmc2V0KTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgaWYgKCFh
YnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM1
NCw3ICsyMzU0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwog
ICAgIEFTU0VSVChib3gpOwogCiAgICAgSW50UmVjdCBhYnNSZWN0ID0gcmVzaXplckNvcm5lclJl
Y3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGFic1JlY3QubW92ZShwYWludE9m
ZnNldCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogICAgIGlmICghYWJzUmVj
dC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3NzIsNyAr
Mjc3Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAg
ICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbCA/IGNvbFJlY3QueCgpIDog
Y29sUmVjdC55KCkpIC0gY29sdW1uQmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OwogICAgICAgICBJbnRTaXplIG9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IEludFNpemUobG9naWNh
bExlZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9wT2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxU
b3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKIAotICAgICAgICBjb2xSZWN0Lm1vdmUobGF5
ZXJPZmZzZXQpOworICAgICAgICBjb2xSZWN0Lm1vdmVCeShsYXllck9mZnNldCk7CiAKICAgICAg
ICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChwYWludERpcnR5UmVjdCk7CiAgICAgICAgIGxvY2Fs
RGlydHlSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTMyNTYsNyArMzI1Niw3IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICAgICAgICAgIGN1cnJMb2dp
Y2FsVG9wT2Zmc2V0IC09IGJsb2NrRGVsdGE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGN1
cnJMb2dpY2FsVG9wT2Zmc2V0ICs9IGJsb2NrRGVsdGE7Ci0gICAgICAgIGNvbFJlY3QubW92ZShs
YXllck9mZnNldCk7CisgICAgICAgIGNvbFJlY3QubW92ZUJ5KGxheWVyT2Zmc2V0KTsKIAogICAg
ICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENs
aXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTM1OTcsNyArMzU5Nyw3IEBAIEludFJlY3Qg
UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAgcmVuZGVyZXIoKS0+Y29u
dGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXN1bHQpOwogICAgIEludFBvaW50
IGRlbHRhOwogICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGRlbHRhKTsK
LSAgICByZXN1bHQubW92ZShkZWx0YSk7CisgICAgcmVzdWx0Lm1vdmVCeShkZWx0YSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkzNCw3ICszOTM0LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogICAgICAgICBJbnRSZWN0IGFic1JlY3Qocik7CiAg
ICAgICAgIEludFBvaW50IGRlbHRhOwogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290
KCksIGRlbHRhKTsKLSAgICAgICAgYWJzUmVjdC5tb3ZlKGRlbHRhKTsKKyAgICAgICAgYWJzUmVj
dC5tb3ZlQnkoZGVsdGEpOwogCiAgICAgICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigp
LT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3Jh
cGhpY3NMCiAgICAgSW50UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9z
aXRpbmdCb3VuZHMpOwogICAgIEludFBvaW50IGRlbHRhOwogICAgIG1fb3duaW5nTGF5ZXItPmNv
bnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOwotICAgIHJlbGF0aXZlQ29t
cG9zaXRpbmdCb3VuZHMubW92ZShkZWx0YSk7CisgICAgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5k
cy5tb3ZlQnkoZGVsdGEpOwogCiAgICAgSW50UG9pbnQgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0
aW9uOwogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFuY2VzdG9yLT5iYWNraW5nKCktPmhh
c0NsaXBwaW5nTGF5ZXIoKSkgewpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgc3RhdGljIHZvaWQgcGFp
bnRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzYwogICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJl
Y3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3Jv
bGxiYXJSZWN0LngoKSwgLXNjcm9sbGJhclJlY3QueSgpKTsKICAgICBJbnRSZWN0IHRyYW5zZm9y
bWVkQ2xpcCA9IGNsaXA7Ci0gICAgdHJhbnNmb3JtZWRDbGlwLm1vdmUoc2Nyb2xsYmFyUmVjdC5s
b2NhdGlvbigpKTsKKyAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbGJhclJlY3QubG9j
YXRpb24oKSk7CiAgICAgc2Nyb2xsYmFyLT5wYWludCgmY29udGV4dCwgdHJhbnNmb3JtZWRDbGlw
KTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KQEAgLTEyMzEsNyArMTIzMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGMKICAgICAgICAgY29udGV4dC5zYXZl
KCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxDb3JuZXJBbmRSZXNpemVyLngo
KSwgLXNjcm9sbENvcm5lckFuZFJlc2l6ZXIueSgpKTsKICAgICAgICAgSW50UmVjdCB0cmFuc2Zv
cm1lZENsaXAgPSBjbGlwOwotICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZShzY3JvbGxDb3Ju
ZXJBbmRSZXNpemVyLmxvY2F0aW9uKCkpOworICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5
KHNjcm9sbENvcm5lckFuZFJlc2l6ZXIubG9jYXRpb24oKSk7CiAgICAgICAgIG1fb3duaW5nTGF5
ZXItPnBhaW50U2Nyb2xsQ29ybmVyKCZjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENs
aXApOwogICAgICAgICBtX293bmluZ0xheWVyLT5wYWludFJlc2l6ZXIoJmNvbnRleHQsIEludFBv
aW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw3ICs0NTEsNyBAQCBJ
bnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlCiAgICAgaWYgKGxheWVyLT5y
ZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCBsYXllci0+cmVuZGVyZXIoKS0+aGFzTWFz
aygpKSB7CiAgICAgICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgICAgICBsYXll
ci0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQp
OwotICAgICAgICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAg
ICAgIGJvdW5kaW5nQm94UmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gYm91bmRpbmdCb3hSZWN0OwogICAgIH0KIApAQCAtNTA1LDcgKzUwNSw3IEBAIEludFJl
Y3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGUKIAogICAgIEludFBvaW50IGFuY2Vz
dG9yUmVsT2Zmc2V0OwogICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rvckxh
eWVyLCBhbmNlc3RvclJlbE9mZnNldCk7Ci0gICAgdW5pb25Cb3VuZHMubW92ZShhbmNlc3RvclJl
bE9mZnNldCk7CisgICAgdW5pb25Cb3VuZHMubW92ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsKIAog
ICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSCiAKICAgICAgICAgSW50UG9pbnQgb2Zmc2V0
OwogICAgICAgICBjaGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcExheWVyLCBvZmZzZXQp
OwotICAgICAgICBjb21wQm91bmRzLm1vdmUob2Zmc2V0KTsKKyAgICAgICAgY29tcEJvdW5kcy5t
b3ZlQnkob2Zmc2V0KTsKIAogICAgICAgICBjb21wTGF5ZXItPnNldEJhY2tpbmdOZWVkc1JlcGFp
bnRJblJlY3QoY29tcEJvdW5kcyk7CiAKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHN0YXRpYyB2b2lk
IHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2MKICAgICBjb25zdCBJbnRSZWN0JiBzY3JvbGxi
YXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgt
c2Nyb2xsYmFyUmVjdC54KCksIC1zY3JvbGxiYXJSZWN0LnkoKSk7CiAgICAgSW50UmVjdCB0cmFu
c2Zvcm1lZENsaXAgPSBjbGlwOwotICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlKHNjcm9sbGJhclJl
Y3QubG9jYXRpb24oKSk7CisgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVCeShzY3JvbGxiYXJSZWN0
LmxvY2F0aW9uKCkpOwogICAgIHNjcm9sbGJhci0+cGFpbnQoJmNvbnRleHQsIHRyYW5zZm9ybWVk
Q2xpcCk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFpbnRDb250ZW50CiAgICAgICAgIGNvbnRleHQu
c2F2ZSgpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVyLngoKSwgLXNj
cm9sbENvcm5lci55KCkpOwogICAgICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7
Ci0gICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlKHNjcm9sbENvcm5lci5sb2NhdGlvbigpKTsK
KyAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVCeShzY3JvbGxDb3JuZXIubG9jYXRpb24oKSk7
CiAgICAgICAgIG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnBhaW50U2Nyb2xsQ29ybmVyKCZj
b250ZXh0LCB0cmFuc2Zvcm1lZENsaXApOwogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDcgKzY5MCw3IEBAIGJvb2wgUmVuZGVyTGlzdEJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIEludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udHJvbENs
aXBSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAogewogICAgIElu
dFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIGNsaXBSZWN0Lm1vdmUoYWRk
aXRpb25hbE9mZnNldCk7CisgICAgY2xpcFJlY3QubW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwog
ICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAgICAgICAg
ICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dE92ZXJmbG93ID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgaWYgKG8tPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgICAg
IHByb3BhZ2F0ZVZpc3VhbE92ZXJmbG93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbWFya2Vy
UmVjdC5tb3ZlKC1vLT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1v
dmVCeSgtby0+bG9jYXRpb24oKSk7CiAgICAgICAgICAgICB9IHdoaWxlIChvICE9IHRoaXMgJiYg
cHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cgJiYgcHJvcGFnYXRlTGF5b3V0T3ZlcmZsb3cpOwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTEsNyArMTExMSw3
IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKIAogICAgIEludFBv
aW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5KCkpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dS
ZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKLSAgICBvdmVyZmxvd1JlY3QubW92ZShib3hPcmln
aW4pOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYm94T3JpZ2luKTsKICAgICBvdmVyZmxvd1Jl
Y3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAKICAgICBp
ZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMob3ZlcmZsb3dSZWN0KSkKQEAgLTExMjAsNyAr
MTEyMCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJ
bnRSZWN0IGJveChib3hPcmlnaW4sIEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsKICAgICAK
ICAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwotICAgIG1hcmtl
ci5tb3ZlKGJveE9yaWdpbik7CisgICAgbWFya2VyLm1vdmVCeShib3hPcmlnaW4pOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAKQEAgLTExMzIs
NyArMTEzMiw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAg
ICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXpl
KCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1hcmtlcik7CiAgICAgICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAgIEludFJlY3Qg
c2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwotICAgICAgICAgICAgc2VsUmVjdC5tb3Zl
KGJveE9yaWdpbik7CisgICAgICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsUmVjdCwgc2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWlu
dEluZm8mIAogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewog
ICAgICAgICBJbnRSZWN0IHNlbFJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKLSAgICAgICAg
c2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAgIHNlbFJlY3QubW92ZUJ5KGJveE9yaWdp
bik7CiAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbFJlY3QsIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIH0KIApAQCAtMTI1Nyw3ICsx
MjU3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CiAg
ICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIG1h
cmtlci5tb3ZlKC1ib3hPcmlnaW4pOworICAgICAgICBtYXJrZXIubW92ZUJ5KC1ib3hPcmlnaW4p
OwogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJhbnNwb3NlZFJlY3QoKTsKICAgICAgICAgbWFy
a2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIHN0
YXRlU2F2ZXIuc2F2ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2
b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgfQogCiAgICAgaWYg
KCFjb21wbGV0ZWx5Q2xpcHBlZE91dCkgewotICAgICAgICBwYWludFJlcGxhY2VkKHBhaW50SW5m
bywgdHgsIHR5KTsKKyAgICAgICAgcGFpbnRSZXBsYWNlZChwYWludEluZm8sIEludFBvaW50KHR4
LCB0eSkpOwogCiAgICAgICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCBwcml2YXRlOgogICAgIGludCBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgo
KSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlvTG9naWNhbEhlaWdodCgpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IC8qdHgqLywg
aW50IC8qdHkqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKSB7IH0KIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYQogICAgIHIuc2V0WShyLnkoKSk7CiAgICAg
UmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBpZiAoKCF2IHx8ICF2LT5sYXlvdXRTdGF0ZUVu
YWJsZWQoKSB8fCByZXBhaW50Q29udGFpbmVyKSAmJiBwYXJlbnQoKSkKLSAgICAgICAgci5tb3Zl
KC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3Jk
aW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCisgICAgICAgIHIubW92
ZUJ5KC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNv
b3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgUmVuZGVy
QmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByLCBmaXhlZCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNvbgogICAgIEFTU0VSVChoYXNDb250cm9sQ2xpcCgpKTsKIAogICAgIEludFJlY3Qg
Y2xpcFJlY3QgPSBJbnRSZWN0KGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpLT5mcmFt
ZVJlY3QoKSk7Ci0gICAgY2xpcFJlY3QubW92ZShhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICBjbGlw
UmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9u
IDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgUmVuZGVyVmlkZW86OnNob3VsZERp
c3BsYXlWaWRlbygpIGMKICAgICByZXR1cm4gIXZpZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5
UG9zdGVySW1hZ2UoKTsKIH0KIAotdm9pZCBSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclZpZGVvOjpwYWlu
dFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7CiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gbWVkaWFFbGVtZW50KCktPnBs
YXllcigpOwogICAgIGJvb2wgZGlzcGxheWluZ1Bvc3RlciA9IHZpZGVvRWxlbWVudCgpLT5zaG91
bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFJlbmRlclZp
ZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgSW50UmVjdCByZWN0ID0gdmlkZW9Cb3go
KTsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICByZWN0Lm1v
dmUodHgsIHR5KTsKKyAgICByZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAKICAgICBpZiAoZGlz
cGxheWluZ1Bvc3RlcikKICAgICAgICAgcGFpbnRJbnRvUmVjdChwYWludEluZm8uY29udGV4dCwg
cmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkocmV2aXNp
b24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJW
aWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwogICAgICAgICAKICAgICAgICAgLy8gU3VidHJh
Y3Qgb3V0IHRoZSBjb250ZW50c1ggYW5kIGNvbnRlbnRzWSBvZmZzZXRzIHRvIGdldCBvdXIgY29v
cmRzIHdpdGhpbiB0aGUgdmlld2luZwogICAgICAgICAvLyByZWN0YW5nbGUuCi0gICAgICAgIHIu
bW92ZSgtdnIubG9jYXRpb24oKSk7CisgICAgICAgIHIubW92ZUJ5KC12ci5sb2NhdGlvbigpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBIYXJkY29kZWQgb2Zmc2V0cyBoZXJlIGFyZSBu
b3QgZ29vZC4KICAgICAgICAgci5tb3ZlKG9iai0+Ym9yZGVyTGVmdCgpICsgb2JqLT5wYWRkaW5n
TGVmdCgpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95809</attachid>
            <date>2011-06-02 14:20:50 -0700</date>
            <delta_ts>2011-06-03 10:58:04 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-61891-20110602142049.patch</filename>
            <type>text/plain</type>
            <size>37817</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDYtMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgorCisgICAgICAgIFN3aXRjaCBwYWludFJlcGxhY2VkIHRvIHVzZSBJbnRQb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTEKKwor
ICAgICAgICBTd2l0Y2hpbmcgcGFpbnRSZXBsYWNlZCB0byB1c2UgSW50UG9pbnQgdG8gcmVwcmVz
ZW50IHRoZSBwYWludCBvZmZzZXQgaW5zdGVhZAorICAgICAgICBvZiBhIHBhaXIgb2YgaW50cy4K
KworICAgICAgICBBbHNvIHJlbmFtaW5nIHRoZSBJbnRQb2ludCBmbGF2b3Igb2YgSW50UmVjdDo6
bW92ZSB0byBtb3ZlQnkgdG8gY2xlYXIgdXAgdGhlCisgICAgICAgIGZhY3QgdGhhdCB0aGUgSW50
UG9pbnQgaXMgYWRkZWQgYXMgYW4gb2Zmc2V0IGFzIG9wcG9zZWQgdG8gYmVpbmcgcmVsb2NhdGVk
CisgICAgICAgIHRvIHRoYXQgcG9pbnQuCisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0aGlz
IGlzIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hl
ZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmludmFsaWRhdGVQ
YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJlY3QpCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6bW92ZUJ5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbFJlY3RUb1BoeXNpY2FsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckRldGFpbHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01h
cmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckhUTUxDYW52YXMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50SW5SZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2Vy
OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFp
bnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xDbGlw
UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVmlkZW8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZSk6CisKIDIwMTEt
MDYtMDIgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE2Myw3ICsyMTYzLDcgQEAgdm9pZCBGcmFtZVZpZXc6Omlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KAogewogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0IHdpdGhp
biB0aGUgRnJhbWVWaWV3LgogICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0
eVJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIGRpcnR5UmVjdC5tb3ZlQnko
c2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwog
fQogCkBAIC0yNjI3LDcgKzI2MjcsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydEZyb21S
ZW5kZXJlcihjCiAgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAKICAg
ICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikgdG8gRnJhbWVWaWV3IGNvb3JkaW5h
dGVzLgotICAgIHJlY3QubW92ZSgtc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgcmVjdC5tb3ZlQnko
LXNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0yNjM3LDcgKzI2
MzcsNyBAQCBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIoY29uCiAgICAgSW50
UmVjdCByZWN0ID0gdmlld1JlY3Q7CiAgICAgCiAgICAgLy8gQ29udmVydCBmcm9tIEZyYW1lVmll
dyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUiKSBjb29yZGluYXRlcy4KLSAgICByZWN0Lm1v
dmUoc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgcmVjdC5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24oKSk7
CiAKICAgICAvLyBGSVhNRTogd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBtYXAgYW4gYWJzb2x1dGUg
cmVjdCBkb3duIHRvIGEgbG9jYWwgcXVhZCwgc28ganVzdAogICAgIC8vIG1vdmUgdGhlIHJlY3Qg
Zm9yIG5vdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDA4LDExICsxMDA4LDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKIAogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5
KCkpOwotICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICAg
ICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZUJ5KC1sb2NhdGlvbigpKTsKIAogICAgICAgICBpZiAo
IXBhaW50c0VudGlyZUNvbnRlbnRzKCkpIHsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50RGlydHlSZWN0
Lm1vdmUoc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5t
b3ZlQnkoc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAodmlz
aWJsZUNvbnRlbnRSZWN0KCkpOwogICAgICAgICB9CkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIEludFJlY3Qgc2Ny
b2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50
ZXJzZWN0KGZyYW1lUmVjdCgpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgp
KTsKLSAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICAg
ICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlQnkoLWxvY2F0aW9uKCkpOwogCiAgICAgICAgIHBh
aW50U2Nyb2xsYmFycyhjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKICAgICB9CkBAIC0x
MTI3LDcgKzExMjcsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFy
CiB7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKICAg
ICBJbnRSZWN0IG5ld1JlY3QgPSBsb2NhbFJlY3Q7Ci0gICAgbmV3UmVjdC5tb3ZlKHNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7CisgICAgbmV3UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigp
KTsKICAgICByZXR1cm4gbmV3UmVjdDsKIH0KIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAgSW50UmVj
dCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogewogICAgIEludFJlY3QgbmV3UmVj
dCA9IHBhcmVudFJlY3Q7CiAgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3
aXRoaW4gdXMKLSAgICBuZXdSZWN0Lm1vdmUoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAg
bmV3UmVjdC5tb3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1Jl
Y3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29t
cG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQsNyArMjM0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aW52YWxpZGF0ZQog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRodW1iUmVjdDsKICAgICAgICAgfQogICAgIH0KLSAg
ICByZXN1bHQubW92ZSgtc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICByZXN1bHQubW92ZUJ5
KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3Qo
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6
CiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQoeCgpICsgd2lk
dGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KIAogICAgIHZvaWQgbW92ZShjb25zdCBJ
bnRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2b2lkIG1vdmUoY29u
c3QgSW50UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0
LnkoKSk7IH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSB7IG1fbG9j
YXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQogICAgIHZvaWQgbW92ZShpbnQg
ZHgsIGludCBkeSkgeyBtX2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKIAogICAgIHZvaWQgZXhw
YW5kKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShy
ZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
ZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgVGV4dHVy
ZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAgICAgICAgdXBkYXRlUmVjdEludGVyc2Vj
dGVkLmludGVyc2VjdCh0aWxlQm91bmRzV2l0aEJvcmRlcik7CiAKICAgICAgICAgSW50UmVjdCBk
c3RSZWN0ID0gdXBkYXRlUmVjdEludGVyc2VjdGVkOwotICAgICAgICBkc3RSZWN0Lm1vdmUoLXRp
bGVCb3VuZHNXaXRoQm9yZGVyLmxvY2F0aW9uKCkpOworICAgICAgICBkc3RSZWN0Lm1vdmVCeSgt
dGlsZUJvdW5kc1dpdGhCb3JkZXIubG9jYXRpb24oKSk7CiAKICAgICAgICAgaWYgKHVwZGF0ZVJl
Y3RJbnRlcnNlY3RlZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNpb24gODc5NDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
cCwgYwogICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLXRyYW5zZm9ybU9y
aWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKIAogICAgICAgICBJbnRSZWN0IGRpcnR5
UmVjdCA9IHI7Ci0gICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFuc2Zvcm1PcmlnaW4pOworICAg
ICAgICBkaXJ0eVJlY3QubW92ZUJ5KC10cmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBpZiAoIVt2
aWV3IGlzRmxpcHBlZF0pCiAgICAgICAgICAgICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3VuZHNd
LnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQCB2
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjCiAgICAgICAgIENHQ29udGV4
dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwogCiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0
ID0gcjsKLSAgICAgICAgZGlydHlSZWN0Lm1vdmUoLXRyYW5zZm9ybU9yaWdpbik7CisgICAgICAg
IGRpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zZm9ybU9yaWdpbik7CiAgICAgICAgIGlmICghW3ZpZXcg
aXNGbGlwcGVkXSkKICAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6
ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw3
ICs5NTEsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAg
SW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0
b20pKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShyZW5kZXJlcigpLT5tYXhpbWFsT3V0bGlu
ZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUocGFpbnRPZmZzZXQpOworICAgIG92ZXJmbG93
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogICAgIAogICAgIGlmICghcGFpbnRJbmZvLnJlY3Qu
aW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc5OCw3ICsyNzk4LDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJlY3RUb1BoeXNp
YwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChsb2dpY2FsUmVjdC55KCksIGxv
Z2ljYWxSZWN0LngoKSwgbG9naWNhbFJlY3QuaGVpZ2h0KCksIGxvZ2ljYWxSZWN0LndpZHRoKCkp
OwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZXN1bHQpOwotICAgIHJlc3VsdC5tb3ZlKHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24pOworICAgIHJlc3VsdC5tb3ZlQnkocm9vdEJsb2NrUGh5c2lj
YWxQb3NpdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjgxMSw3ICsyODExLDcg
QEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAvLyBO
b3RlIHRoYXQgd2UgZG9uJ3QgY2xpcCBvdXQgb3ZlcmZsb3cgZm9yIHBvc2l0aW9uZWQgb2JqZWN0
cy4gIFdlIGp1c3Qgc3RpY2sgdG8gdGhlIGJvcmRlciBib3guCiAgICAgICAgIEludFJlY3QgZmxp
cHBlZEJsb2NrUmVjdCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZz
ZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJv
b3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRCbG9ja1JlY3QpOwotICAgICAgICBm
bGlwcGVkQmxvY2tSZWN0Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbik7CisgICAgICAg
IGZsaXBwZWRCbG9ja1JlY3QubW92ZUJ5KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24pOwogICAg
ICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBmbGlwcGVkQmxvY2tSZWN0
LmxvY2F0aW9uKCksIG1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkpOwogICAgICAgICBpZiAoaXNC
b2R5KCkgfHwgaXNSb290KCkpIC8vIFRoZSA8Ym9keT4gbXVzdCBtYWtlIHN1cmUgdG8gZXhhbWlu
ZSBpdHMgY29udGFpbmluZ0Jsb2NrJ3MgcG9zaXRpb25lZCBvYmplY3RzLgogICAgICAgICAgICAg
Zm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1Jl
bmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOCw3ICsx
MzA4LDcgQEAgSW50U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUgogICAgICAg
ICAgICAgICAgIEludFJlY3QgY29sdW1uUmVjdChmcmFtZVJlY3QoKSk7CiAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJCbG9jayhvKS0+ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhj
b2x1bW5SZWN0KTsKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gSW50U2l6ZShjb2x1bW5SZWN0
LmxvY2F0aW9uKCkueCgpLCBjb2x1bW5SZWN0LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgICAg
ICAgICBjb2x1bW5SZWN0Lm1vdmUocG9pbnQpOworICAgICAgICAgICAgICAgIGNvbHVtblJlY3Qu
bW92ZUJ5KHBvaW50KTsKICAgICAgICAgICAgICAgICBvLT5hZGp1c3RGb3JDb2x1bW5zKG9mZnNl
dCwgY29sdW1uUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIG9mZnNldCArPSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCk7CkBAIC0x
NDM0LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJl
CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9u
ICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZl
UG9zaXRpb25PZmZzZXQoKSk7CiAKLSAgICAgICAgICAgIHJlY3QubW92ZShsb2NhdGlvbigpKTsK
KyAgICAgICAgICAgIHJlY3QubW92ZUJ5KGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgcmVjdC5t
b3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRT
dGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0
YXRlLT5tX2NsaXBSZWN0KTsKQEAgLTMwOTksNyArMzA5OSw3IEBAIEludFJlY3QgUmVuZGVyQm94
Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgoKTsKIAogICAgIC8vIE1vdmUgdG8gbG9jYWwgY29v
cmRzCi0gICAgcmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICByZWN0Lm1vdmVCeSgtbG9jYXRp
b24oKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBSZW5kZXJEZXRhaWxzTWFya2VyOjpwYWlu
dChQYWludEluZgogCiAgICAgSW50UG9pbnQgYm94T3JpZ2luKHR4ICsgeCgpLCB0eSArIHkoKSk7
CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwotICAgIG92
ZXJmbG93UmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShib3hP
cmlnaW4pOwogICAgIG92ZXJmbG93UmVjdC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShwYWlu
dEluZm8ucGhhc2UpKTsKIAogICAgIGlmICghcGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhvdmVy
Zmxvd1JlY3QpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3
ICsxNDUsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludChQYWludEluCiAgICAg
UmVuZGVyUGFydDo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCi12b2lkIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKK3ZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAo
IXBsdWdpbkNyYXNoZWRPcldhc01pc3NpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYzLDcg
KzE2Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBG
b250IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKLSAg
ICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3QsIHBh
dGgsIHJlcGxhY2VtZW50VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICBpZiAo
IWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KHBhaW50T2Zmc2V0LngoKSwgcGFpbnRPZmZzZXQu
eSgpLCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVuLCB0
ZXh0V2lkdGgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCShyZXZpc2lvbiA4Nzk0MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckVtYmVkZGVkT2JqZWN0IjsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0VtYmVkZGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50LCBpbnQpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGlu
dCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiA4Nzk0MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWly
ZXNMYXllcigpIGMKICAgICByZXR1cm4gY2FudmFzICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4
dCgpICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkKCk7CiB9CiAK
LXZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIHJlY3QubW92ZSh0eCwgdHkp
OworICAgIHJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IHN0eWxlKCktPmltYWdlUmVuZGVyaW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRpbWl6
ZUNvbnRyYXN0OwogICAgIHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSgpKS0+
cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJldmlz
aW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJIVE1MQ2FudmFzIjsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNT
aXplQ2hhbmdlZCgpIHsgY2FudmFzU2l6ZUNoYW5nZWQoKTsgfQogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpub3RpZnlGaW5pc2hlZChDYWNoZWRS
CiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxh
Y2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgaW50IGNXaWR0aCA9IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBjSGVpZ2h0ID0gY29u
dGVudEhlaWdodCgpOwpAQCAtMjQ4LDExICsyNDgsMTAgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFp
bnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUo
U29saWRTdHJva2UpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6
OmxpZ2h0R3JheSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciAr
IGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KEludFJlY3QocGFpbnRPZmZzZXQueCgpICsgbGVm
dEJvcmRlciArIGxlZnRQYWQsIHBhaW50T2Zmc2V0LnkoKSArIHRvcEJvcmRlciArIHRvcFBhZCwg
Y1dpZHRoLCBjSGVpZ2h0KSk7CiAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24g
PSBmYWxzZTsKLSAgICAgICAgICAgIGludCBpbWFnZVggPSAwOwotICAgICAgICAgICAgaW50IGlt
YWdlWSA9IDA7CisgICAgICAgICAgICBJbnRTaXplIGltYWdlT2Zmc2V0OwogICAgICAgICAgICAg
Ly8gV2hlbiBjYWxjdWxhdGluZyB0aGUgdXNhYmxlIGRpbWVuc2lvbnMsIGV4Y2x1ZGUgdGhlIHBp
eGVscyBvZgogICAgICAgICAgICAgLy8gdGhlIG91bGluZSByZWN0IHNvIHRoZSBlcnJvciBpbWFn
ZS9hbHQgdGV4dCBkb2Vzbid0IGRyYXcgb24gaXQuCiAgICAgICAgICAgICBpbnQgdXNhYmxlV2lk
dGggPSBjV2lkdGggLSAyOwpAQCAtMjY4LDMwICsyNjcsMjkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgICAgIGludCBjZW50ZXJZID0gKHVz
YWJsZUhlaWdodCAtIGltYWdlLT5oZWlnaHQoKSkgLyAyOwogICAgICAgICAgICAgICAgIGlmIChj
ZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7Ci0gICAgICAgICAg
ICAgICAgaW1hZ2VYID0gbGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKLSAgICAg
ICAgICAgICAgICBpbWFnZVkgPSB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgSW50UG9pbnQodHggKyBpbWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAgICAg
ICAgICAgICAgaW1hZ2VPZmZzZXQgPSBJbnRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2Vu
dGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSwgcGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0
dXJlRHJhd24gPSB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fYWx0
VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50
KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAg
ICAgICAgIGludCBheCA9IHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7Ci0gICAgICAgICAgICAg
ICAgaW50IGF5ID0gdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAgICAgICAgY29u
c3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgICAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAg
ICAgICAgaW50IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgICAgICAgICAgICAg
IEludFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICAgICAgICAgICAgICBh
bHRUZXh0T2Zmc2V0Lm1vdmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBh
ZCArIGFzY2VudCk7CiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0
IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8v
IGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgogICAgICAgICAgICAg
ICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMs
IGZvbnQsIHRleHQsIHN0eWxlKCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBm
b250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3
bikgewotICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYm
IGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlWSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2Vu
dCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYm
IGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlT2Zmc2V0LmhlaWdodCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgYWx0VGV4dE9m
ZnNldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lk
dGggJiYgY0hlaWdodCA+PSBmb250TWV0cmljcy5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNj
ZW50KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRS
dW4sIGFsdFRleHRPZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgJiYgY1dpZHRoID4gMCAmJiBjSGVpZ2h0
ID4gMCkgewpAQCAtMzAxLDEyICsyOTksMTMgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBs
YWNlZChQYWludEluZgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+
aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChJbnRQb2ludCh0eCAt
IHgoKSwgdHkgLSB5KCkpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgICAgICAg
ICBwYWludEN1c3RvbUhpZ2hsaWdodCh0b1BvaW50KHBhaW50T2Zmc2V0IC0gbG9jYXRpb24oKSks
IHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgICAgIEludFNpemUg
Y29udGVudFNpemUoY1dpZHRoLCBjSGVpZ2h0KTsKLSAgICAgICAgSW50UmVjdCByZWN0KEludFBv
aW50KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwg
Y29udGVudFNpemUpOwotICAgICAgICBwYWludEludG9SZWN0KGNvbnRleHQsIHJlY3QpOworICAg
ICAgICBJbnRQb2ludCBjb250ZW50TG9jYXRpb24gPSBwYWludE9mZnNldDsKKyAgICAgICAgY29u
dGVudExvY2F0aW9uLm1vdmUobGVmdEJvcmRlciArIGxlZnRQYWQsIHRvcEJvcmRlciArIHRvcFBh
ZCk7CisgICAgICAgIHBhaW50SW50b1JlY3QoY29udGV4dCwgSW50UmVjdChjb250ZW50TG9jYXRp
b24sIGNvbnRlbnRTaXplKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQg
dHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5OSwxMCArODk5LDEwIEBAIEludFJlY3QgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVWaXN1YWwKICAgICAgICAgICAgIGlmICghY3VyckJveC0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAg
ICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gY3VyckJveC0+bG9naWNhbFZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHN0eWxlKCkpOwogICAgICAgICAgICAgICAgIGlmIChp
c0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZShjdXJy
Qm94LT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZUJ5
KGN1cnJCb3gtPmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJ
Zk5vblplcm8obG9naWNhbFJlY3QpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoY3VyckJveC0+bG9jYXRpb24oKSk7CisgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVCeShjdXJyQm94LT5sb2NhdGlvbigpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0LnRy
YW5zcG9zZWRSZWN0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcAkocmV2
aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVl
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgUmVuZGVySW5wdXRT
cGVlY2g6OnBhaW50SW5wdXRGaWVsZFMKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJl
bmRlcmVyJ3MgY29vcmRzLgogICAgIGJ1dHRvblJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5k
ZXJlcik7CiAgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgotICAg
IGJ1dHRvblJlY3QubW92ZShyZWN0LmxvY2F0aW9uKCkpOworICAgIGJ1dHRvblJlY3QubW92ZUJ5
KHJlY3QubG9jYXRpb24oKSk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFn
ZT4sIGltYWdlU3RhdGVOb3JtYWwsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImlucHV0
U3BlZWNoIikpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGltYWdl
U3RhdGVSZWNvcmRpbmcsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImlucHV0U3BlZWNo
UmVjb3JkaW5nIikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsNyArOTAwLDcgQEAgc3RhdGljIHZvaWQg
ZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50cwogICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGEueCgp
LCAtZGVsdGEueSgpKTsKICAgICAgICAgY2xpcFJlY3QudW5pdGUobC0+cmVuZGVyQm94KCktPnJl
ZmxlY3RlZFJlY3QoY2xpcFJlY3QpKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7Cisg
ICAgICAgIGNsaXBSZWN0Lm1vdmVCeShkZWx0YSk7CiAgICAgfQogfQogCkBAIC0yMzI1LDcgKzIz
MjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwCiAgICAgQVNT
RVJUKGJveCk7CiAKICAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0g
ICAgYWJzUmVjdC5tb3ZlKHBhaW50T2Zmc2V0KTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9m
ZnNldCk7CiAgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjM1NCw3ICsyMzU0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQwogICAgIEFTU0VSVChib3gpOwogCiAgICAgSW50UmVjdCBhYnNSZWN0
ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGFi
c1JlY3QubW92ZShwYWludE9mZnNldCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQp
OwogICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTI3NzIsNyArMjc3Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRM
YXllckludG9Db2wKICAgICAgICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRh
bCA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0gY29sdW1uQmxvY2stPmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yQ29udGVudCgpOwogICAgICAgICBJbnRTaXplIG9mZnNldCA9IGlzSG9yaXpvbnRh
bCA/IEludFNpemUobG9naWNhbExlZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9wT2Zmc2V0KSA6IElu
dFNpemUoY3VyckxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKIAotICAgICAg
ICBjb2xSZWN0Lm1vdmUobGF5ZXJPZmZzZXQpOworICAgICAgICBjb2xSZWN0Lm1vdmVCeShsYXll
ck9mZnNldCk7CiAKICAgICAgICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChwYWludERpcnR5UmVj
dCk7CiAgICAgICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTMyNTYs
NyArMzI1Niw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAg
ICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0IC09IGJsb2NrRGVsdGE7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0ICs9IGJsb2NrRGVsdGE7Ci0gICAg
ICAgIGNvbFJlY3QubW92ZShsYXllck9mZnNldCk7CisgICAgICAgIGNvbFJlY3QubW92ZUJ5KGxh
eWVyT2Zmc2V0KTsKIAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3Qp
OwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTM1OTcsNyAr
MzU5Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAg
ICAgcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXN1
bHQpOwogICAgIEludFBvaW50IGRlbHRhOwogICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2Vz
dG9yTGF5ZXIsIGRlbHRhKTsKLSAgICByZXN1bHQubW92ZShkZWx0YSk7CisgICAgcmVzdWx0Lm1v
dmVCeShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkzNCw3ICszOTM0LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogICAgICAgICBJbnRS
ZWN0IGFic1JlY3Qocik7CiAgICAgICAgIEludFBvaW50IGRlbHRhOwogICAgICAgICBjb252ZXJ0
VG9MYXllckNvb3Jkcyhyb290KCksIGRlbHRhKTsKLSAgICAgICAgYWJzUmVjdC5tb3ZlKGRlbHRh
KTsKKyAgICAgICAgYWJzUmVjdC5tb3ZlQnkoZGVsdGEpOwogCiAgICAgICAgIFJlbmRlclZpZXcq
IHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlz
aW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgSW50UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5n
Qm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOwogICAgIEludFBvaW50IGRlbHRhOwogICAg
IG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEp
OwotICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZShkZWx0YSk7CisgICAgcmVsYXRp
dmVDb21wb3NpdGluZ0JvdW5kcy5tb3ZlQnkoZGVsdGEpOwogCiAgICAgSW50UG9pbnQgZ3JhcGhp
Y3NMYXllclBhcmVudExvY2F0aW9uOwogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFuY2Vz
dG9yLT5iYWNraW5nKCktPmhhc0NsaXBwaW5nTGF5ZXIoKSkgewpAQCAtMTE5Nyw3ICsxMTk3LDcg
QEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzYwogICAgIGNvbnN0IElu
dFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwogICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJhclJlY3QueSgpKTsKICAg
ICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgdHJhbnNmb3JtZWRDbGlwLm1v
dmUoc2Nyb2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKKyAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5
KHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CiAgICAgc2Nyb2xsYmFyLT5wYWludCgmY29udGV4
dCwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KQEAgLTEyMzEs
NyArMTIzMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGMKICAg
ICAgICAgY29udGV4dC5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxD
b3JuZXJBbmRSZXNpemVyLngoKSwgLXNjcm9sbENvcm5lckFuZFJlc2l6ZXIueSgpKTsKICAgICAg
ICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwotICAgICAgICB0cmFuc2Zvcm1lZENs
aXAubW92ZShzY3JvbGxDb3JuZXJBbmRSZXNpemVyLmxvY2F0aW9uKCkpOworICAgICAgICB0cmFu
c2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbENvcm5lckFuZFJlc2l6ZXIubG9jYXRpb24oKSk7CiAg
ICAgICAgIG1fb3duaW5nTGF5ZXItPnBhaW50U2Nyb2xsQ29ybmVyKCZjb250ZXh0LCBJbnRQb2lu
dCgpLCB0cmFuc2Zvcm1lZENsaXApOwogICAgICAgICBtX293bmluZ0xheWVyLT5wYWludFJlc2l6
ZXIoJmNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgICAgIGNvbnRl
eHQucmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1MSw3ICs0NTEsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRl
CiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCBsYXllci0+
cmVuZGVyZXIoKS0+aGFzTWFzaygpKSB7CiAgICAgICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zm
c2V0OwogICAgICAgICBsYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwg
YW5jZXN0b3JSZWxPZmZzZXQpOwotICAgICAgICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3Rv
clJlbE9mZnNldCk7CisgICAgICAgIGJvdW5kaW5nQm94UmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxP
ZmZzZXQpOwogICAgICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0OwogICAgIH0KIApAQCAtNTA1
LDcgKzUwNSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGUKIAog
ICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgIGxheWVyLT5jb252ZXJ0VG9MYXll
ckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7Ci0gICAgdW5pb25Cb3Vu
ZHMubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAgdW5pb25Cb3VuZHMubW92ZUJ5KGFuY2Vz
dG9yUmVsT2Zmc2V0KTsKIAogICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KQEAgLTUyOSw3ICs1
MjksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSCiAKICAgICAg
ICAgSW50UG9pbnQgb2Zmc2V0OwogICAgICAgICBjaGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMo
Y29tcExheWVyLCBvZmZzZXQpOwotICAgICAgICBjb21wQm91bmRzLm1vdmUob2Zmc2V0KTsKKyAg
ICAgICAgY29tcEJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKIAogICAgICAgICBjb21wTGF5ZXItPnNl
dEJhY2tpbmdOZWVkc1JlcGFpbnRJblJlY3QoY29tcEJvdW5kcyk7CiAKQEAgLTE0MzYsNyArMTQz
Niw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2MKICAgICBjb25z
dCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKICAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyUmVjdC54KCksIC1zY3JvbGxiYXJSZWN0LnkoKSk7
CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBjbGlwOwotICAgIHRyYW5zZm9ybWVkQ2xp
cC5tb3ZlKHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CisgICAgdHJhbnNmb3JtZWRDbGlwLm1v
dmVCeShzY3JvbGxiYXJSZWN0LmxvY2F0aW9uKCkpOwogICAgIHNjcm9sbGJhci0+cGFpbnQoJmNv
bnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CkBAIC0x
NDUyLDcgKzE0NTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFpbnRDb250ZW50
CiAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc2Ny
b2xsQ29ybmVyLngoKSwgLXNjcm9sbENvcm5lci55KCkpOwogICAgICAgICBJbnRSZWN0IHRyYW5z
Zm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlKHNjcm9sbENv
cm5lci5sb2NhdGlvbigpKTsKKyAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVCeShzY3JvbGxD
b3JuZXIubG9jYXRpb24oKSk7CiAgICAgICAgIG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnBh
aW50U2Nyb2xsQ29ybmVyKCZjb250ZXh0LCB0cmFuc2Zvcm1lZENsaXApOwogICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDcgKzY5MCw3IEBA
IGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIEludFJlY3QgUmVuZGVy
TGlzdEJveDo6Y29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0
KSBjb25zdAogewogICAgIEludFJlY3QgY2xpcFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAg
IGNsaXBSZWN0Lm1vdmUoYWRkaXRpb25hbE9mZnNldCk7CisgICAgY2xpcFJlY3QubW92ZUJ5KGFk
ZGl0aW9uYWxPZmZzZXQpOwogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA4Nzk0MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxp
c3RNYXJrZXIoCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dE92ZXJmbG93ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZpc3VhbE92ZXJmbG93ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1vLT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICBtYXJrZXJSZWN0Lm1vdmVCeSgtby0+bG9jYXRpb24oKSk7CiAgICAgICAgICAgICB9IHdo
aWxlIChvICE9IHRoaXMgJiYgcHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cgJiYgcHJvcGFnYXRlTGF5
b3V0T3ZlcmZsb3cpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gODc5NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJ
bmZvJiAKIAogICAgIEludFBvaW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5KCkpOwogICAg
IEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKLSAgICBvdmVyZmxv
d1JlY3QubW92ZShib3hPcmlnaW4pOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYm94T3JpZ2lu
KTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZv
LnBoYXNlKSk7CiAKICAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMob3ZlcmZsb3dS
ZWN0KSkKQEAgLTExMjAsNyArMTEyMCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQo
UGFpbnRJbmZvJiAKICAgICBJbnRSZWN0IGJveChib3hPcmlnaW4sIEludFNpemUod2lkdGgoKSwg
aGVpZ2h0KCkpKTsKICAgICAKICAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZlTWFya2Vy
UmVjdCgpOwotICAgIG1hcmtlci5tb3ZlKGJveE9yaWdpbik7CisgICAgbWFya2VyLm1vdmVCeShi
b3hPcmlnaW4pOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQ7CiAKQEAgLTExMzIsNyArMTEzMiw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQoUGFpbnRJbmZvJiAKICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UtPmltYWdl
KHRoaXMsIG1hcmtlci5zaXplKCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1hcmtl
cik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAg
ICAgICAgICAgIEludFJlY3Qgc2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwotICAgICAg
ICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAgICAgICBzZWxSZWN0Lm1vdmVC
eShib3hPcmlnaW4pOwogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsUmVjdCwgc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0g
U2VsZWN0aW9uTm9uZSkgewogICAgICAgICBJbnRSZWN0IHNlbFJlY3QgPSBsb2NhbFNlbGVjdGlv
blJlY3QoKTsKLSAgICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAgIHNlbFJl
Y3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbFJlY3Qs
IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAg
IH0KIApAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIAogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpj
b250ZXh0LCBmYWxzZSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7Ci0gICAgICAgIG1hcmtlci5tb3ZlKC1ib3hPcmlnaW4pOworICAgICAgICBtYXJrZXIu
bW92ZUJ5KC1ib3hPcmlnaW4pOwogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJhbnNwb3NlZFJl
Y3QoKTsKICAgICAgICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxvZ2ljYWxIZWln
aHQoKSk7CiAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw3ICsxNDEsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBh
CiAgICAgfQogCiAgICAgaWYgKCFjb21wbGV0ZWx5Q2xpcHBlZE91dCkgewotICAgICAgICBwYWlu
dFJlcGxhY2VkKHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgcGFpbnRSZXBsYWNlZChwYWlu
dEluZm8sIEludFBvaW50KHR4LCB0eSkpOwogCiAgICAgICAgIGlmIChzdHlsZSgpLT5oYXNCb3Jk
ZXJSYWRpdXMoKSkKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24g
ODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIGludCBjYWxjQXNwZWN0
UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlvTG9naWNh
bEhlaWdodCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJ
bmZvJiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKSB7IH0KIAogICAgIHZpcnR1YWwg
SW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA4Nzk0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyAr
Mjk0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYQogICAgIHIu
c2V0WShyLnkoKSk7CiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBpZiAoKCF2IHx8
ICF2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSB8fCByZXBhaW50Q29udGFpbmVyKSAmJiBwYXJlbnQo
KSkKLSAgICAgICAgci5tb3ZlKC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8vIFJvd3MgYXJl
IGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQg
aW4uCisgICAgICAgIHIubW92ZUJ5KC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8vIFJvd3Mg
YXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZz
ZXQgaW4uCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29u
dGFpbmVyLCByLCBmaXhlZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA4
Nzk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgSW50UmVjdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbgogICAgIEFTU0VSVChoYXNDb250cm9sQ2xpcCgp
KTsKIAogICAgIEludFJlY3QgY2xpcFJlY3QgPSBJbnRSZWN0KGlubmVyQmxvY2tFbGVtZW50KCkt
PnJlbmRlckJveCgpLT5mcmFtZVJlY3QoKSk7Ci0gICAgY2xpcFJlY3QubW92ZShhZGRpdGlvbmFs
T2Zmc2V0KTsKKyAgICBjbGlwUmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7CiAgICAgcmV0
dXJuIGNsaXBSZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWRlby5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgUmVu
ZGVyVmlkZW86OnNob3VsZERpc3BsYXlWaWRlbygpIGMKICAgICByZXR1cm4gIXZpZGVvRWxlbWVu
dCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKIH0KIAotdm9pZCBSZW5kZXJWaWRlbzo6
cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit2b2lk
IFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0g
bWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGJvb2wgZGlzcGxheWluZ1Bvc3RlciA9IHZp
ZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKQEAgLTE5OCw3ICsxOTgs
NyBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgSW50UmVj
dCByZWN0ID0gdmlkZW9Cb3goKTsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICByZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZWN0Lm1vdmVCeShwYWludE9mZnNl
dCk7CiAKICAgICBpZiAoZGlzcGxheWluZ1Bvc3RlcikKICAgICAgICAgcGFpbnRJbnRvUmVjdChw
YWludEluZm8uY29udGV4dCwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlkZW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlkZW8uaAkocmV2aXNpb24gODc5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlkZW8uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDg3OTQyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjbwogICAgICAgICAK
ICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IHRoZSBjb250ZW50c1ggYW5kIGNvbnRlbnRzWSBvZmZz
ZXRzIHRvIGdldCBvdXIgY29vcmRzIHdpdGhpbiB0aGUgdmlld2luZwogICAgICAgICAvLyByZWN0
YW5nbGUuCi0gICAgICAgIHIubW92ZSgtdnIubG9jYXRpb24oKSk7CisgICAgICAgIHIubW92ZUJ5
KC12ci5sb2NhdGlvbigpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBIYXJkY29kZWQg
b2Zmc2V0cyBoZXJlIGFyZSBub3QgZ29vZC4KICAgICAgICAgci5tb3ZlKG9iai0+Ym9yZGVyTGVm
dCgpICsgb2JqLT5wYWRkaW5nTGVmdCgpLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>